diff --git a/UTM.xcodeproj/project.pbxproj b/UTM.xcodeproj/project.pbxproj index 1a37efbb..a7884bf6 100644 --- a/UTM.xcodeproj/project.pbxproj +++ b/UTM.xcodeproj/project.pbxproj @@ -4925,13 +4925,13 @@ "$(PROJECT_DIR)/$(QUOTED_SYSROOT_DIR)/include/spice-1", "$(PROJECT_DIR)/$(QUOTED_SYSROOT_DIR)/include/libusb-1.0", ); - IPHONEOS_DEPLOYMENT_TARGET = 14.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; LIBRARY_SEARCH_PATHS = ( "$(PROJECT_DIR)/$(QUOTED_SYSROOT_DIR)/lib", "$(PROJECT_DIR)/$(QUOTED_SYSROOT_DIR)/lib/gstreamer-1.0", "$(PROJECT_DIR)/$(QUOTED_SYSROOT_DIR)/lib", ); - MACOSX_DEPLOYMENT_TARGET = 11.3; + MACOSX_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -5008,13 +5008,13 @@ "$(PROJECT_DIR)/$(QUOTED_SYSROOT_DIR)/include/spice-1", "$(PROJECT_DIR)/$(QUOTED_SYSROOT_DIR)/include/libusb-1.0", ); - IPHONEOS_DEPLOYMENT_TARGET = 14.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; LIBRARY_SEARCH_PATHS = ( "$(PROJECT_DIR)/$(QUOTED_SYSROOT_DIR)/lib", "$(PROJECT_DIR)/$(QUOTED_SYSROOT_DIR)/lib/gstreamer-1.0", "$(PROJECT_DIR)/$(QUOTED_SYSROOT_DIR)/lib", ); - MACOSX_DEPLOYMENT_TARGET = 11.3; + MACOSX_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; QUOTED_SYSROOT_DIR = "\"$(SYSROOT_DIR)\""; diff --git a/patches/sources b/patches/sources index ac0876d4..e7b46267 100644 --- a/patches/sources +++ b/patches/sources @@ -42,15 +42,20 @@ WEBKIT_REPO="https://github.com/utmapp/WebKit.git" WEBKIT_COMMIT="ed78ab6e1a37f4f11583a0bd038f22ec91f3ff10" WEBKIT_SUBDIRS="Source/ThirdParty/ANGLE Configurations Tools/ccache" EPOXY_REPO="https://github.com/utmapp/libepoxy.git" -EPOXY_COMMIT="5014658f79e4d6872a1ad6754da9098ccd9d4fc5" +EPOXY_COMMIT="bf98587477fe68d07b93319ece7b40a7d0e2eabe" VULKAN_LOADER_REPO="https://github.com/osy/Vulkan-Loader.git" VULKAN_LOADER_COMMIT="6df86907be582927507637f3f6003ea58bc34517" VIRGLRENDERER_REPO="https://github.com/utmapp/virglrenderer.git" -VIRGLRENDERER_COMMIT="d48a2d0d9a722fffd3f92c83e71d9426a4892a66" +VIRGLRENDERER_COMMIT="9499d3e53edbf356fb3e8f5ab68b27e208003022" MESA_REPO="https://gitlab.freedesktop.org/osy/mesa.git" MESA_COMMIT="79bc850d884a1307356ff61c017e58901b90c7e2" MOLTENVK_REPO="https://github.com/utmapp/MoltenVK.git" -MOLTENVK_COMMIT="111c14f3abf5c00118fc7a5b00c92d7abbf40f62" +MOLTENVK_COMMIT="ef1c5461774f5fbd224ddcfd91fd2c0ea23f0384" +LLVM15_SRC="https://github.com/llvm/llvm-project/releases/download/llvmorg-15.0.7/llvm-project-15.0.7.src.tar.xz" +DXMT_REPO="https://github.com/utmapp/dxmt.git" +DXMT_COMMIT="be80e14c07613cd558036a576b82dc6d78acdfce" +D3DMETAL_REPO="https://github.com/utmapp/d3dmetal-native.git" +D3DMETAL_COMMIT="edd2e386c25a2039eca0f6ce8f794b3b165841eb" # Decompiled Hypervisor for iOS HYPERVISOR_REPO="https://github.com/utmapp/Hypervisor.git" diff --git a/scripts/build_dependencies.sh b/scripts/build_dependencies.sh index ff291778..21760ae0 100755 --- a/scripts/build_dependencies.sh +++ b/scripts/build_dependencies.sh @@ -21,8 +21,8 @@ RED='\033[0;31m' NC='\033[0m' # Knobs -IOS_SDKMINVER="14.0" -MAC_SDKMINVER="11.0" +IOS_SDKMINVER="16.0" +MAC_SDKMINVER="13.0" VISIONOS_SDKMINVER="1.0" # Build environment @@ -139,6 +139,7 @@ clone () { fi fi git -C "$DIR" checkout "$COMMIT" + git -C "$DIR" submodule update --init --recursive --filter=tree:0 } download_all () { @@ -182,6 +183,9 @@ download_all () { clone $LIBUCONTEXT_REPO $LIBUCONTEXT_COMMIT clone $MESA_REPO $MESA_COMMIT clone $MOLTENVK_REPO $MOLTENVK_COMMIT + download $LLVM15_SRC + clone $DXMT_REPO $DXMT_COMMIT + clone $D3DMETAL_REPO $D3DMETAL_COMMIT } copy_private_headers() { @@ -225,13 +229,16 @@ generate_meson_cross() { echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross echo "objc_args = [${OBJCFLAGS:+$(meson_quote $OBJCFLAGS)}]" >> $cross + echo "objcpp_args = [${OBJCFLAGS:+$(meson_quote $OBJCFLAGS)}]" >> $cross echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross echo "objc_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross + echo "objcpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross echo "[binaries]" >> $cross echo "c = [$(meson_quote $CC)]" >> $cross echo "cpp = [$(meson_quote $CXX)]" >> $cross echo "objc = [$(meson_quote $OBJCC)]" >> $cross + echo "objcpp = [$(meson_quote $OBJCC)]" >> $cross echo "ar = [$(meson_quote $AR)]" >> $cross echo "nm = [$(meson_quote $NM)]" >> $cross echo "pkgconfig = ['$PREFIX/host/bin/pkg-config']" >> $cross @@ -293,19 +300,19 @@ generate_cmake_toolchain() { case $PLATFORM in ios_simulator* ) echo "set(CMAKE_SYSTEM_NAME iOS)" >> "$toolchain" - echo "set(CMAKE_OSX_SYSROOT iphonesimulator)" >> "$toolchain" + echo "set(CMAKE_OSX_SYSROOT iphonesimulator CACHE STRING \"\" FORCE)" >> "$toolchain" ;; ios* ) echo "set(CMAKE_SYSTEM_NAME iOS)" >> "$toolchain" - echo "set(CMAKE_OSX_SYSROOT iphoneos)" >> "$toolchain" + echo "set(CMAKE_OSX_SYSROOT iphoneos CACHE STRING \"\" FORCE)" >> "$toolchain" ;; visionos_simulator* ) echo "set(CMAKE_SYSTEM_NAME visionOS)" >> "$toolchain" - echo "set(CMAKE_OSX_SYSROOT xrsimulator)" >> "$toolchain" + echo "set(CMAKE_OSX_SYSROOT xrsimulator CACHE STRING \"\" FORCE)" >> "$toolchain" ;; visionos* ) echo "set(CMAKE_SYSTEM_NAME visionOS)" >> "$toolchain" - echo "set(CMAKE_OSX_SYSROOT xros)" >> "$toolchain" + echo "set(CMAKE_OSX_SYSROOT xros CACHE STRING \"\" FORCE)" >> "$toolchain" ;; macos ) echo "set(CMAKE_SYSTEM_NAME Darwin)" >> "$toolchain" @@ -317,7 +324,7 @@ generate_cmake_toolchain() { # Architecture # echo "set(CMAKE_SYSTEM_PROCESSOR \"$ARCH\")" >> "$toolchain" - echo "set(CMAKE_OSX_ARCHITECTURES \"$ARCH\")" >> "$toolchain" + echo "set(CMAKE_OSX_ARCHITECTURES \"$ARCH\" CACHE STRING \"\" FORCE)" >> "$toolchain" echo "set(CMAKE_MACOSX_BUNDLE OFF CACHE BOOL \"\")" >> "$toolchain" echo "" >> "$toolchain" @@ -343,6 +350,7 @@ generate_cmake_toolchain() { echo "set(CMAKE_C_COMPILER \"$CC_BIN\")" >> "$toolchain" echo "set(CMAKE_CXX_COMPILER \"$CXX_BIN\")" >> "$toolchain" echo "set(CMAKE_OBJC_COMPILER \"$OBJC_BIN\")" >> "$toolchain" + echo "set(CMAKE_ASM_COMPILER \"$CC_BIN\")" >> "$toolchain" echo "" >> "$toolchain" # @@ -359,6 +367,7 @@ generate_cmake_toolchain() { # if [ -n "$CFLAGS" ]; then echo "set(CMAKE_C_FLAGS \"$CFLAGS\" CACHE STRING \"\" FORCE)" >> "$toolchain" + echo "set(CMAKE_ASM_FLAGS \"$CFLAGS\" CACHE STRING \"\" FORCE)" >> "$toolchain" fi if [ -n "$OBJCFLAGS" ]; then @@ -695,7 +704,12 @@ build_qemu_dependencies () { # strip the minor versions VULKAN_DYLIB="$PREFIX/lib/libvulkan.1.dylib" mv "$(dirname $VULKAN_DYLIB)/$(readlink $VULKAN_DYLIB)" "$VULKAN_DYLIB" - meson_darwin_build $VIRGLRENDERER_REPO -Dtests=false -Dcheck-gl-errors=false -Dvenus=true -Dvulkan-dload=false -Drender-server-worker=thread + if [ "$PLATFORM" == "macos" ]; then + VIRGL_RENDER_SERVER_MODE="process" + else + VIRGL_RENDER_SERVER_MODE="thread" + fi + meson_darwin_build $VIRGLRENDERER_REPO -Dtests=false -Dcheck-gl-errors=false -Dvenus=true -Dneptune=true -Dvulkan-dload=false -Drender-server-mode="$VIRGL_RENDER_SERVER_MODE" # Hypervisor for iOS if [ "$PLATFORM" == "ios" ] || [ "$PLATFORM" == "ios_simulator" ]; then build_hypervisor @@ -785,7 +799,39 @@ build_vulkan_drivers () { patch_vulkan_icd "$PREFIX/share/vulkan/icd.d/MoltenVK_icd.json" } -fixup () { +build_d3d_drivers () { + LLVM15_NAME=$(basename "${LLVM15_SRC%.tar.*}") + cmake_build "$BUILD_DIR/$LLVM15_NAME/llvm" -DLLVM_ENABLE_ZSTD=Off -DLLVM_TARGETS_TO_BUILD="" -DLLVM_BUILD_TOOLS=Off -DLLVM_VERSION_PRINTER_SHOW_HOST_TARGET_INFO=Off + meson_build $DXMT_REPO -Dnative_llvm_path="$PREFIX" + if [ "$ARCH" == "x86_64" ]; then + meson_build $D3DMETAL_REPO -Dtests=disabled + else + # empty placeholder file + $CC -dynamiclib -x c /dev/null -o "$PREFIX/lib/libd3dmetal-native.dylib" + fi +} + +fixup_imports() { + _file=$1 + _list=$(otool -L "$_file" | tail -n +2 | cut -d ' ' -f 1 | awk '{$1=$1};1') + for g in $_list + do + base=$(basename "$g") + basefilename=${base%.*} + libname=${basefilename#lib*} + dir=$(dirname "$g") + if [ "$dir" == "$PREFIX/lib" ] || [ "$dir" == "@rpath" ]; then + if [ "$PLATFORM" == "macos" ]; then + newname="@rpath/$libname.framework/Versions/A/$libname" + else + newname="@rpath/$libname.framework/$libname" + fi + install_name_tool -change "$g" "$newname" "$_file" + fi + done +} + +fixup_dylib () { FILE=$1 BASE=$(basename "$FILE") BASEFILENAME=${BASE%.*} @@ -801,18 +847,16 @@ fixup () { INFOPATH="$FRAMEWORKPATH" fi NEWFILE="$FRAMEWORKPATH/$LIBNAME" - LIST=$(otool -L "$FILE" | tail -n +2 | cut -d ' ' -f 1 | awk '{$1=$1};1') OLDIFS=$IFS IFS=$'\n' - echo "${GREEN}Fixing up $FILE...${NC}" mkdir -p "$FRAMEWORKPATH" mkdir -p "$INFOPATH" cp -a "$FILE" "$NEWFILE" - /usr/libexec/PlistBuddy -c "Add :CFBundleExecutable string $LIBNAME" "$INFOPATH/Info.plist" - /usr/libexec/PlistBuddy -c "Add :CFBundleIdentifier string $BUNDLE_ID" "$INFOPATH/Info.plist" - /usr/libexec/PlistBuddy -c "Add :MinimumOSVersion string $SDKMINVER" "$INFOPATH/Info.plist" - /usr/libexec/PlistBuddy -c "Add :CFBundleVersion string 1" "$INFOPATH/Info.plist" - /usr/libexec/PlistBuddy -c "Add :CFBundleShortVersionString string 1.0" "$INFOPATH/Info.plist" + /usr/libexec/PlistBuddy -c "Add :CFBundleExecutable string $LIBNAME" "$INFOPATH/Info.plist" || true + /usr/libexec/PlistBuddy -c "Add :CFBundleIdentifier string $BUNDLE_ID" "$INFOPATH/Info.plist" || true + /usr/libexec/PlistBuddy -c "Add :MinimumOSVersion string $SDKMINVER" "$INFOPATH/Info.plist" || true + /usr/libexec/PlistBuddy -c "Add :CFBundleVersion string 1" "$INFOPATH/Info.plist" || true + /usr/libexec/PlistBuddy -c "Add :CFBundleShortVersionString string 1.0" "$INFOPATH/Info.plist" || true if [ "$PLATFORM" == "macos" ]; then ln -sf "A" "$BASEFRAMEWORKPATH/Versions/Current" ln -sf "Versions/Current/Resources" "$BASEFRAMEWORKPATH/Resources" @@ -820,21 +864,7 @@ fixup () { fi newname="@rpath/$FRAMEWORKNAME/$LIBNAME" install_name_tool -id "$newname" "$NEWFILE" - for g in $LIST - do - base=$(basename "$g") - basefilename=${base%.*} - libname=${basefilename#lib*} - dir=$(dirname "$g") - if [ "$dir" == "$PREFIX/lib" ] || [ "$dir" == "@rpath" ]; then - if [ "$PLATFORM" == "macos" ]; then - newname="@rpath/$libname.framework/Versions/A/$libname" - else - newname="@rpath/$libname.framework/$libname" - fi - install_name_tool -change "$g" "$newname" "$NEWFILE" - fi - done + fixup_imports "$NEWFILE" IFS=$OLDIFS } @@ -844,7 +874,14 @@ fixup_all () { FILES=$(find "$SYSROOT_DIR/lib" -type f -maxdepth 1 -name "*.dylib") for f in $FILES do - fixup $f + echo "${GREEN}Fixing up $f...${NC}" + fixup_dylib $f + done + FILES=$(find "$SYSROOT_DIR/libexec" -type f -maxdepth 1 -perm +111) + for f in $FILES + do + echo "${GREEN}Fixing up $f...${NC}" + fixup_imports $f done IFS=$OLDIFS } @@ -1089,7 +1126,7 @@ fi echo "${GREEN}Deleting old sysroot!${NC}" rm -rf "$PREFIX/"* rm -f "$BUILD_DIR/BUILD_SUCCESS" -rm -f "$BUILD_DIR/meson*.cross" +rm -f "$BUILD_DIR"/meson*.cross rm -f "$BUILD_DIR/cross.cmake" mkdir -p "$PREFIX/Frameworks" copy_private_headers @@ -1098,6 +1135,9 @@ build_qemu_dependencies build $QEMU_DIR --cross-prefix="" $QEMU_PLATFORM_BUILD_FLAGS $QEMU_DEBUG_FLAGS build_spice_client build_vulkan_drivers +if [ "$PLATFORM" == "macos" ]; then + build_d3d_drivers +fi fixup_all remove_shared_gst_plugins # another hack... echo "${GREEN}All done!${NC}" diff --git a/scripts/pack_dependencies.sh b/scripts/pack_dependencies.sh index 550040a8..135d0e35 100755 --- a/scripts/pack_dependencies.sh +++ b/scripts/pack_dependencies.sh @@ -72,6 +72,7 @@ pack_dir() { cp -a "$SRC/$DIR" "$TGT/$DIR" } +pack_all_objs "$BASEDIR" "*/libexec/virgl_render_server" pack_all_objs "$BASEDIR" "*/bin/qemu-*" pack_all_objs "$BASEDIR" "*/lib/*.dylib" pack_all_objs "$BASEDIR" "*/lib/*.a"