nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at python-updates 98 lines 3.3 kB view raw
1{ 2 lib, 3 stdenv, 4 version, 5 buildPlatform, 6 hostPlatform, 7 targetPlatform, 8 gnat-bootstrap ? null, 9 langAda ? false, 10 langFortran, 11 langJit ? false, 12 langGo, 13 withoutTargetLibc, 14 enableShared, 15 enableMultilib, 16 pkgsBuildTarget, 17}: 18 19assert langAda -> gnat-bootstrap != null; 20 21lib.optionalString (hostPlatform.isSunOS && hostPlatform.is64bit) '' 22 export NIX_LDFLAGS=`echo $NIX_LDFLAGS | sed -e s~$prefix/lib~$prefix/lib/amd64~g` 23 export LDFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $LDFLAGS_FOR_TARGET" 24 export CXXFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $CXXFLAGS_FOR_TARGET" 25 export CFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $CFLAGS_FOR_TARGET" 26'' 27+ lib.optionalString langAda '' 28 export PATH=${gnat-bootstrap}/bin:$PATH 29'' 30 31# For a cross-built native compiler, i.e. build!=(host==target), the 32# bundled libgfortran needs a gfortran which can run on the 33# buildPlatform and emit code for the targetPlatform. The compiler 34# which is built alongside gfortran in this configuration doesn't 35# meet that need: it runs on the hostPlatform. 36+ 37 lib.optionalString 38 ( 39 langFortran 40 && ( 41 42 (!lib.systems.equals buildPlatform hostPlatform) && (lib.systems.equals hostPlatform targetPlatform) 43 ) 44 ) 45 '' 46 export GFORTRAN_FOR_TARGET=${pkgsBuildTarget.gfortran}/bin/${stdenv.targetPlatform.config}-gfortran 47 '' 48 49# In order to properly install libgccjit on macOS Catalina, strip(1) 50# upon installation must not remove external symbols, otherwise the 51# install step errors with "symbols referenced by indirect symbol 52# table entries that can't be stripped". 53+ lib.optionalString (hostPlatform.isDarwin && langJit) '' 54 export STRIP='strip -x' 55'' 56 57# HACK: if host and target config are the same, but the platforms are 58# actually different we need to convince the configure script that it 59# is in fact building a cross compiler although it doesn't believe it. 60+ 61 lib.optionalString 62 (targetPlatform.config == hostPlatform.config && (!lib.systems.equals targetPlatform hostPlatform)) 63 '' 64 substituteInPlace configure --replace is_cross_compiler=no is_cross_compiler=yes 65 '' 66 67# Normally (for host != target case) --without-headers automatically 68# enables 'inhibit_libc=true' in gcc's gcc/configure.ac. But case of 69# gcc->clang or dynamic->static "cross"-compilation manages to evade it: there 70# ! lib.systems.equals hostPlatform targetPlatform, hostPlatform.config == targetPlatform.config. 71# We explicitly inhibit libc headers use in this case as well. 72+ 73 lib.optionalString 74 ( 75 (!lib.systems.equals targetPlatform hostPlatform) 76 && withoutTargetLibc 77 && targetPlatform.config == hostPlatform.config 78 ) 79 '' 80 export inhibit_libc=true 81 '' 82 83# We need to reconfigure the build system in case it has been patched. Since 84# gcc is patched quite often, reconfiguring it unconditionally makes sense. 85# This is also good practice for a couple other reasons. 86# See <https://wiki.debian.org/Autoreconf>. 87+ '' 88 for i in */configure.ac; do 89 pushd "$(dirname "$i")" 90 echo "Running autoreconf in $PWD" 91 autoconf -f 92 popd 93 done 94'' 95 96+ lib.optionalString ( 97 (!lib.systems.equals targetPlatform hostPlatform) && withoutTargetLibc && enableShared 98) (import ./libgcc-buildstuff.nix { inherit lib stdenv; })