From 0fabc58f716ad53e9c32f82b894aab5d0fcad37a Mon Sep 17 00:00:00 2001 From: Andrew Childs Date: Thu, 15 Oct 2020 17:23:57 +0900 Subject: [PATCH 1/2] llvmPackages_10: cross-compilation support --- .../compilers/llvm/10/clang/default.nix | 14 +++++++++++--- pkgs/development/compilers/llvm/10/default.nix | 1 - pkgs/development/compilers/llvm/10/lld.nix | 6 ++++++ pkgs/development/compilers/llvm/10/llvm.nix | 17 +++++++++++++++++ pkgs/top-level/all-packages.nix | 2 +- 5 files changed, 35 insertions(+), 5 deletions(-) diff --git a/pkgs/development/compilers/llvm/10/clang/default.nix b/pkgs/development/compilers/llvm/10/clang/default.nix index fef7720d726dcb..d6820f7af0280a 100644 --- a/pkgs/development/compilers/llvm/10/clang/default.nix +++ b/pkgs/development/compilers/llvm/10/clang/default.nix @@ -1,4 +1,5 @@ -{ stdenv, fetch, cmake, libxml2, llvm, version, clang-tools-extra_src, python3, lld +{ stdenv, fetch, cmake, libxml2, llvm, version, clang-tools-extra_src, python3 +, buildPackages , fixDarwinDylibNames , enableManpages ? false }: @@ -18,7 +19,7 @@ let mv clang-tools-extra-* $sourceRoot/tools/extra ''; - nativeBuildInputs = [ cmake python3 lld ] + nativeBuildInputs = [ cmake python3 ] ++ stdenv.lib.optional enableManpages python3.pkgs.sphinx ++ stdenv.lib.optional stdenv.hostPlatform.isDarwin fixDarwinDylibNames; @@ -34,6 +35,10 @@ let "-DSPHINX_OUTPUT_MAN=ON" "-DSPHINX_OUTPUT_HTML=OFF" "-DSPHINX_WARNINGS_AS_ERRORS=OFF" + ] ++ stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ + "-DLLVM_CONFIG_PATH=${llvm}/bin/llvm-config-native" + "-DLLVM_TABLEGEN_EXE=${buildPackages.llvm_10}/bin/llvm-tblgen" + "-DCLANG_TABLEGEN=${buildPackages.llvmPackages_10.clang-unwrapped.tablegen}/bin/clang-tblgen" ]; patches = [ @@ -56,7 +61,7 @@ let --replace "NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB" FALSE ''; - outputs = [ "out" "lib" "python" ]; + outputs = [ "out" "lib" "python" "tablegen" ]; # Clang expects to find LLVMgold in its own prefix postInstall = '' @@ -80,6 +85,9 @@ let fi mv $out/share/clang/*.py $python/share/clang rm $out/bin/c-index-test + + mkdir -p $tablegen/bin + cp bin/clang-tblgen $tablegen/bin ''; enableParallelBuilding = true; diff --git a/pkgs/development/compilers/llvm/10/default.nix b/pkgs/development/compilers/llvm/10/default.nix index 3d2cb3544b9ffa..d473ea893f7888 100644 --- a/pkgs/development/compilers/llvm/10/default.nix +++ b/pkgs/development/compilers/llvm/10/default.nix @@ -34,7 +34,6 @@ let llvm = callPackage ./llvm.nix { }; clang-unwrapped = callPackage ./clang { - inherit (tools) lld; inherit clang-tools-extra_src; }; diff --git a/pkgs/development/compilers/llvm/10/lld.nix b/pkgs/development/compilers/llvm/10/lld.nix index 5d513462820e70..dfe2785fea24fe 100644 --- a/pkgs/development/compilers/llvm/10/lld.nix +++ b/pkgs/development/compilers/llvm/10/lld.nix @@ -1,4 +1,5 @@ { stdenv +, buildPackages , fetch , cmake , libxml2 @@ -15,6 +16,11 @@ stdenv.mkDerivation rec { nativeBuildInputs = [ cmake ]; buildInputs = [ llvm libxml2 ]; + cmakeFlags = stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ + "-DLLVM_TABLEGEN_EXE=${buildPackages.llvm_10}/bin/llvm-tblgen" + "-DLLVM_CONFIG_PATH=${llvm}/bin/llvm-config-native" + ]; + outputs = [ "out" "dev" ]; enableParallelBuilding = true; diff --git a/pkgs/development/compilers/llvm/10/llvm.nix b/pkgs/development/compilers/llvm/10/llvm.nix index 7394d4033d21ec..0967d9c74cb114 100644 --- a/pkgs/development/compilers/llvm/10/llvm.nix +++ b/pkgs/development/compilers/llvm/10/llvm.nix @@ -19,6 +19,7 @@ || stdenv.isAarch32 # broken for the armv7l builder ) , enablePolly ? true +, pkgsBuildBuild }: let @@ -121,6 +122,19 @@ in stdenv.mkDerivation (rec { ] ++ optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ "-DCMAKE_CROSSCOMPILING=True" "-DLLVM_TABLEGEN=${buildPackages.llvm_10}/bin/llvm-tblgen" + ( + let + nativeCC = pkgsBuildBuild.stdenv.cc; + nativeBintools = nativeCC.bintools.bintools; + nativeToolchainFlags = [ + "-DCMAKE_C_COMPILER=${nativeCC}/bin/${nativeCC.targetPrefix}cc" + "-DCMAKE_CXX_COMPILER=${nativeCC}/bin/${nativeCC.targetPrefix}c++" + "-DCMAKE_AR=${nativeBintools}/bin/${nativeBintools.targetPrefix}ar" + "-DCMAKE_STRIP=${nativeBintools}/bin/${nativeBintools.targetPrefix}strip" + "-DCMAKE_RANLIB=${nativeBintools}/bin/${nativeBintools.targetPrefix}ranlib" + ]; + in "-DCROSS_TOOLCHAIN_FLAGS_NATIVE:list=${lib.concatStringsSep ";" nativeToolchainFlags}" + ) ]; postBuild = '' @@ -148,6 +162,9 @@ in stdenv.mkDerivation (rec { --replace "\''${_IMPORT_PREFIX}/lib/libLLVM.dylib" "$lib/lib/libLLVM.dylib" ln -s $lib/lib/libLLVM.dylib $lib/lib/libLLVM-${shortVersion}.dylib ln -s $lib/lib/libLLVM.dylib $lib/lib/libLLVM-${release_version}.dylib + '' + + optionalString (stdenv.buildPlatform != stdenv.hostPlatform) '' + cp NATIVE/bin/llvm-config $out/bin/llvm-config-native ''; doCheck = stdenv.isLinux && (!stdenv.isx86_32); diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 816a4657a252b1..193a22b0d535bc 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -9808,7 +9808,7 @@ in llvmPackages_10 = callPackage ../development/compilers/llvm/10 { inherit (stdenvAdapters) overrideCC; buildLlvmTools = buildPackages.llvmPackages_10.tools; - targetLlvmLibraries = targetPackages.llvmPackages_10.libraries; + targetLlvmLibraries = targetPackages.llvmPackages_10.libraries or llvmPackages_10.libraries; }; llvmPackages_11 = callPackage ../development/compilers/llvm/11 ({ From a9f3aa88d7f7c26b5462dec4db320f61c2f6f97d Mon Sep 17 00:00:00 2001 From: John Ericson Date: Sun, 31 Jan 2021 10:44:47 -0500 Subject: [PATCH 2/2] llvm-10: Fix definition of nativeCC `stdenv` takes tools from the previous stage, so: 1. `pkgsBuildBuild`: `(?1, x, x)` 2. `pkgsBuildBuild.stdenv.cc`: `(?0, ?1, x)` while: 1. `pkgsBuildBuild`: `(?1, x, x)` 2. `pkgsBuildBuild.targetPackages`: `(x, x, ?2)` 3. `pkgsBuildBuild.targetPackages.stdenv.cc`: `(?1, x, x)` --- pkgs/development/compilers/llvm/10/llvm.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/compilers/llvm/10/llvm.nix b/pkgs/development/compilers/llvm/10/llvm.nix index 0967d9c74cb114..833f78f0ac2edb 100644 --- a/pkgs/development/compilers/llvm/10/llvm.nix +++ b/pkgs/development/compilers/llvm/10/llvm.nix @@ -124,7 +124,7 @@ in stdenv.mkDerivation (rec { "-DLLVM_TABLEGEN=${buildPackages.llvm_10}/bin/llvm-tblgen" ( let - nativeCC = pkgsBuildBuild.stdenv.cc; + nativeCC = pkgsBuildBuild.targetPackages.stdenv.cc; nativeBintools = nativeCC.bintools.bintools; nativeToolchainFlags = [ "-DCMAKE_C_COMPILER=${nativeCC}/bin/${nativeCC.targetPrefix}cc"