diff options
Diffstat (limited to 'pkgs/os-specific/darwin/moltenvk/default.nix')
-rw-r--r-- | pkgs/os-specific/darwin/moltenvk/default.nix | 179 |
1 files changed, 86 insertions, 93 deletions
diff --git a/pkgs/os-specific/darwin/moltenvk/default.nix b/pkgs/os-specific/darwin/moltenvk/default.nix index 0b3946a3f4b..1d8f89deff1 100644 --- a/pkgs/os-specific/darwin/moltenvk/default.nix +++ b/pkgs/os-specific/darwin/moltenvk/default.nix @@ -1,42 +1,34 @@ { lib +, overrideCC , stdenv -, stdenvNoCC , fetchurl , fetchFromGitHub , cctools , sigtool , cereal +, libcxx , glslang , spirv-cross , spirv-headers , spirv-tools , vulkan-headers +, xcbuild , AppKit , Foundation +, Libsystem +, MacOSX-SDK , Metal , QuartzCore }: -# Even though the derivation is currently impure, it is written to build successfully using -# `xcbuild`. Once the SDK on x86_64-darwin is updated, it should be possible to switch from being -# an impure derivation. -# -# The `sandboxProfile` was copied from the iTerm2 derivation. In order to build you at least need -# the `sandbox` option set to `relaxed` or `false`. Xcode should be available in the default -# location. -let - libcxx.dev = "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr"; -in -stdenvNoCC.mkDerivation (finalAttrs: { +stdenv.mkDerivation (finalAttrs: { pname = "MoltenVK"; - version = "1.1.9"; + version = "1.1.10"; - buildInputs = [ - AppKit - Foundation - Metal - QuartzCore - ]; + buildInputs = [ AppKit Foundation Metal QuartzCore cereal ] + ++ lib.attrValues finalAttrs.passthru; + + nativeBuildInputs = [ cctools sigtool xcbuild ]; outputs = [ "out" "bin" "dev" ]; @@ -47,47 +39,42 @@ stdenvNoCC.mkDerivation (finalAttrs: { src = fetchFromGitHub { owner = "KhronosGroup"; repo = "glslang"; - rev = "9bb8cfffb0eed010e07132282c41d73064a7a609"; - hash = "sha256-YLn/Mxuk6mXPGtBBgfwky5Nl1TCAW6i2g+AZLzqVz+A="; + rev = "adbf0d3106b26daa237b10b9bf72b1af7c31092d"; + hash = "sha256-sjidkiPtRADhyOEKDb2cHCBXnFjLwk2F5Lppv5/fwNQ="; }; - })).override { - inherit (finalAttrs.passthru) spirv-headers spirv-tools; - }; + })).override { inherit (finalAttrs.passthru) spirv-headers spirv-tools; }; spirv-cross = spirv-cross.overrideAttrs (old: { - cmakeFlags = (old.cmakeFlags or [ ]) ++ [ - "-DSPIRV_CROSS_NAMESPACE_OVERRIDE=MVK_spirv_cross" - ]; + cmakeFlags = (old.cmakeFlags or [ ]) + ++ [ "-DSPIRV_CROSS_NAMESPACE_OVERRIDE=MVK_spirv_cross" ]; src = fetchFromGitHub { owner = "KhronosGroup"; repo = "SPIRV-Cross"; - rev = "0d4ce028bf8b8a94d325dc1e1c20446153ba19c4"; - hash = "sha256-OluTxOEfDIGMdrXhvIifjpMgZBvyh9ofLKxKt0dX5ZU="; + rev = "50b4d5389b6a06f86fb63a2848e1a7da6d9755ca"; + hash = "sha256-SsupPHJ3VHxJhEAUl3EeQwN4texYhdDjxTnGD+bkNAw="; }; }); spirv-headers = spirv-headers.overrideAttrs (_: { src = fetchFromGitHub { owner = "KhronosGroup"; repo = "spirv-headers"; - rev = "4995a2f2723c401eb0ea3e10c81298906bf1422b"; - hash = "sha256-LkIrTFWYvZffLVJJW3152um5LTEsMJEDEsIhBAdhBlk="; + rev = "5a121866927a16ab9d49bed4788b532c7fcea766"; + hash = "sha256-X4GuFesX015mrzutguhZLrIGlllCgAZ+DUBGSADt8xU="; }; }); spirv-tools = (spirv-tools.overrideAttrs (old: { src = fetchFromGitHub { owner = "KhronosGroup"; repo = "spirv-tools"; - rev = "eed5c76a57bb965f2e1b56d1dc40b50910b5ec1d"; - hash = "sha256-2Mr3HbhRslLpRfwHascl7e/UoPijhrij9Bjg3aCiqBM="; + rev = "b930e734ea198b7aabbbf04ee1562cf6f57962f0"; + hash = "sha256-NWpFSRoxtYWi+hLUt9gpw0YScM3shcUwv9yUmbivRb0="; }; - })).override { - inherit (finalAttrs.passthru) spirv-headers; - }; + })).override { inherit (finalAttrs.passthru) spirv-headers; }; vulkan-headers = vulkan-headers.overrideAttrs (old: { src = fetchFromGitHub { owner = "KhronosGroup"; repo = "Vulkan-Headers"; - rev = "76f00ef6cbb1886eb1162d1fa39bee8b51e22ee8"; - hash = "sha256-FqrcFHsUS8e4ZgZpxVc8nNZWdNltniFmMjyyWVoNc7w="; + rev = "3ef4c97fd6ea001d75a8e9da408ee473c180e456"; + hash = "sha256-jHzW3m9smuzEGbZrSyBI74K9rFozxiG3M5Xql/WOw7U="; }; }); }; @@ -96,92 +83,99 @@ stdenvNoCC.mkDerivation (finalAttrs: { owner = "KhronosGroup"; repo = "MoltenVK"; rev = "v${finalAttrs.version}"; - hash = "sha256-5ie1IGzZqaYbciFnrBJ1/9V0LEuz7JsEOFXXkG3hJzg="; + hash = "sha256-LZvCCP2yelTaWcNt+WvG+RZnVLHRgMDTlNWwRIey7ZM="; }; patches = [ - # Specify the libraries to link directly since XCFrameworks are not being used. - ./createDylib.patch - # Move `mvkGitRevDerived.h` to a stable location - ./gitRevHeaderStability.patch # Fix the Xcode projects to play nicely with `xcbuild`. ./MoltenVKShaderConverter.xcodeproj.patch ./MoltenVK.xcodeproj.patch ]; postPatch = '' - substituteInPlace MoltenVKShaderConverter/MoltenVKShaderConverter.xcodeproj/project.pbxproj \ - --replace @@sourceRoot@@ $(pwd) \ - --replace @@libcxx@@ "${libcxx.dev}" \ - --replace @@glslang@@ "${finalAttrs.passthru.glslang}" \ - --replace @@spirv-cross@@ "${finalAttrs.passthru.spirv-cross}" \ - --replace @@spirv-tools@@ "${finalAttrs.passthru.glslang.spirv-tools}" \ - --replace @@spirv-headers@@ "${finalAttrs.passthru.glslang.spirv-headers}" - substituteInPlace MoltenVK/MoltenVK.xcodeproj/project.pbxproj \ - --replace @@sourceRoot@@ $(pwd) \ - --replace @@libcxx@@ "${libcxx.dev}" \ - --replace @@cereal@@ "${cereal}" \ - --replace @@spirv-cross@@ "${finalAttrs.passthru.spirv-cross}" \ - --replace @@vulkan-headers@@ "${finalAttrs.passthru.vulkan-headers}" - substituteInPlace Scripts/create_dylib.sh \ - --replace @@sourceRoot@@ $(pwd) \ - --replace @@glslang@@ "${finalAttrs.passthru.glslang}" \ - --replace @@spirv-tools@@ "${finalAttrs.passthru.glslang.spirv-tools}" \ - --replace @@spirv-cross@@ "${finalAttrs.passthru.spirv-cross}" + # Move `mvkGitRevDerived.h` to a stable location substituteInPlace Scripts/gen_moltenvk_rev_hdr.sh \ - --replace @@sourceRoot@@ $(pwd) \ + --replace '$'''{BUILT_PRODUCTS_DIR}' "$NIX_BUILD_TOP/$sourceRoot/build/include" \ --replace '$(git rev-parse HEAD)' ${finalAttrs.src.rev} + # Adding all of `usr/include` from the SDK results in header conflicts with `libcxx.dev`. + # Work around it by symlinking just the SIMD stuff needed by MoltenVK. + mkdir -p build/include + ln -s "${MacOSX-SDK}/usr/include/simd" "build/include" ''; dontConfigure = true; + NIX_CFLAGS_COMPILE = [ + "-isystem ${lib.getDev libcxx}/include/c++/v1" + "-I${finalAttrs.passthru.spirv-cross}/include/spirv_cross" + "-I${finalAttrs.passthru.spirv-headers}/include/spirv/unified1/" + ]; + buildPhase = '' + NIX_CFLAGS_COMPILE+=" \ + -I$NIX_BUILD_TOP/$sourceRoot/build/include \ + -I$NIX_BUILD_TOP/$sourceRoot/Common" + NIX_LDFLAGS+=" -L$NIX_BUILD_TOP/$sourceRoot/build/lib" + # Build each project on its own because `xcbuild` fails to build `MoltenVKPackaging.xcodeproj`. - derived_data_path=$(pwd)/DerivedData + build=$NIX_BUILD_TOP/$sourceRoot/build + mkdir -p "$build/bin" "$build/lib" + + NIX_LDFLAGS+=" \ + -lMachineIndependent \ + -lGenericCodeGen \ + -lOGLCompiler \ + -lglslang \ + -lOSDependent \ + -lSPIRV \ + -lSPIRV-Tools \ + -lSPIRV-Tools-opt \ + -lspirv-cross-msl \ + -lspirv-cross-core \ + -lspirv-cross-glsl" + pushd MoltenVKShaderConverter - /usr/bin/xcodebuild build \ - -jobs $NIX_BUILD_CORES \ - -derivedDataPath "$derived_data_path" \ - -configuration Release \ - -project MoltenVKShaderConverter.xcodeproj \ - -scheme MoltenVKShaderConverter \ - -arch ${stdenv.targetPlatform.darwinArch} - popd - mkdir -p outputs/bin outputs/lib - declare -A outputs=( [MoltenVKShaderConverter]=bin [libMoltenVKShaderConverter.a]=lib ) - for output in "''${!outputs[@]}"; do - cp DerivedData/Build/Products/Release/$output "outputs/''${outputs[$output]}/$output" + xcodebuild build \ + -jobs $NIX_BUILD_CORES \ + -configuration Release \ + -project MoltenVKShaderConverter.xcodeproj \ + -scheme MoltenVKShaderConverter \ + -arch ${stdenv.targetPlatform.darwinArch} + declare -A products=( [MoltenVKShaderConverter]=bin [libMoltenVKShaderConverter.a]=lib ) + for product in "''${!products[@]}"; do + cp MoltenVKShaderConverter-*/Build/Products/Release/$product "$build/''${products[$product]}/$product" done + popd + + NIX_LDFLAGS+=" \ + -lobjc \ + -lMoltenVKShaderConverter \ + -lspirv-cross-reflect" pushd MoltenVK - /usr/bin/xcodebuild build \ - -jobs $NIX_BUILD_CORES \ - -derivedDataPath "$derived_data_path" \ - -configuration Release \ - -project MoltenVK.xcodeproj \ - -scheme MoltenVK-macOS \ - -arch ${stdenv.targetPlatform.darwinArch} + xcodebuild build \ + -jobs $NIX_BUILD_CORES \ + -configuration Release \ + -project MoltenVK.xcodeproj \ + -scheme MoltenVK-macOS \ + -arch ${stdenv.targetPlatform.darwinArch} + cp MoltenVK-*/Build/Products/Release/dynamic/libMoltenVK.dylib "$build/lib/libMoltenVK.dylib" popd - cp DerivedData/Build/Products/Release/dynamic/libMoltenVK.dylib outputs/lib/libMoltenVK.dylib ''; installPhase = '' mkdir -p "$out/lib" "$out/share/vulkan/icd.d" "$bin/bin" "$dev/include/MoltenVK" - cp outputs/bin/MoltenVKShaderConverter "$bin/bin/" - cp outputs/lib/libMoltenVK.dylib "$out/lib/" + cp build/bin/MoltenVKShaderConverter "$bin/bin/" + cp build/lib/libMoltenVK.dylib "$out/lib/" cp MoltenVK/MoltenVK/API/* "$dev/include/MoltenVK" - ${cctools}/bin/install_name_tool -id "$out/lib/libMoltenVK.dylib" "$out/lib/libMoltenVK.dylib" - # FIXME: https://github.com/NixOS/nixpkgs/issues/148189 - /usr/bin/codesign -s - -f "$out/lib/libMoltenVK.dylib" install -m644 MoltenVK/icd/MoltenVK_icd.json "$out/share/vulkan/icd.d/MoltenVK_icd.json" substituteInPlace $out/share/vulkan/icd.d/MoltenVK_icd.json \ --replace ./libMoltenVK.dylib "$out/lib/libMoltenVK.dylib" ''; - sandboxProfile = '' - (allow file-read* file-write* process-exec mach-lookup) - ; block homebrew dependencies - (deny file-read* file-write* process-exec mach-lookup (subpath "/usr/local") (with no-log)) + postFixup = '' + install_name_tool -id "$out/lib/libMoltenVK.dylib" "$out/lib/libMoltenVK.dylib" + codesign -s - -f "$out/lib/libMoltenVK.dylib" ''; meta = { @@ -189,7 +183,6 @@ stdenvNoCC.mkDerivation (finalAttrs: { homepage = "https://github.com/KhronosGroup/MoltenVK"; changelog = "https://github.com/KhronosGroup/MoltenVK/releases"; maintainers = [ lib.maintainers.reckenrode ]; - hydraPlatforms = [ ]; # Prevent building on Hydra until MoltenVK no longer requires Xcode. license = lib.licenses.asl20; platforms = lib.platforms.darwin; }; |