{ stdenv, gn, ninja, llvmPackages_21, gclient2nix, pkg-config, glib, python3, symlinkJoin, lib, xorg, wayland, pciutils, libGL, apple-sdk_15, xcbuild, }: let llvmPackages = llvmPackages_21; llvmMajorVersion = lib.versions.major llvmPackages.llvm.version; arch = stdenv.hostPlatform.parsed.cpu.name; triplet = lib.getAttr arch { "x86_64" = "x86_64-unknown-linux-gnu"; "aarch64" = "aarch64-unknown-linux-gnu"; }; clang = symlinkJoin { name = "angle-clang-llvm-join"; paths = [ llvmPackages.llvm llvmPackages.clang ]; postBuild = if stdenv.isDarwin then '' mkdir -p $out/lib/clang/${llvmMajorVersion}/lib/darwin ln -s $out/resource-root/lib/darwin/libclang_rt.osx.a \ $out/lib/clang/${llvmMajorVersion}/lib/darwin/libclang_rt.osx.a ln -s $out/resource-root/lib/darwin/libclang_rt.osx.a \ $out/lib/clang/${llvmMajorVersion}/lib/darwin/libclang_rt.osx-${arch}.a '' else '' mkdir -p $out/lib/clang/${llvmMajorVersion}/lib/ ln -s $out/resource-root/lib/linux \ $out/lib/clang/${llvmMajorVersion}/lib/${triplet} ''; }; in stdenv.mkDerivation (finalAttrs: { pname = "angle"; version = "7258"; gclientDeps = gclient2nix.importGclientDeps ./info.json; sourceRoot = "src"; strictDeps = true; nativeBuildInputs = [ gn ninja gclient2nix.gclientUnpackHook pkg-config python3 llvmPackages.bintools ] ++ lib.optionals stdenv.isDarwin [ xcbuild ]; buildInputs = lib.optionals stdenv.isLinux [ glib xorg.libxcb.dev xorg.libX11.dev xorg.libXext.dev xorg.libXi wayland.dev pciutils libGL ] ++ lib.optionals stdenv.isDarwin [ apple-sdk_15 ]; gnFlags = [ "is_debug=false" "use_sysroot=false" "clang_base_path=\"${clang}\"" "angle_build_tests=false" "concurrent_links=1" "use_custom_libcxx=true" "angle_enable_swiftshader=false" "angle_enable_wgpu=false" # On darwin during linking: # clang++: error: argument unused during compilation: '-stdlib=libc++' "treat_warnings_as_errors=false" ]; patches = [ # https://issues.chromium.org/issues/432275627 # https://chromium-review.googlesource.com/c/chromium/src/+/6761936/2/build/config/compiler/BUILD.gn ./fix-uninitialized-const-pointer-error-001.patch ]; postPatch = '' substituteInPlace build/config/clang/BUILD.gn \ --replace-fail \ "_dir = \"${triplet}\"" \ "_dir = \"${triplet}\" _suffix = \"-${arch}\"" # Don't precompile Metal shaders, because the compiler is non-free. substituteInPlace src/libANGLE/renderer/metal/metal_backend.gni \ --replace-fail \ "metal_internal_shader_compilation_supported =" \ "metal_internal_shader_compilation_supported = false &&" cat > build/config/gclient_args.gni < $out/lib/pkgconfig/angle.pc <