1 { lib, stdenvNoLibs, buildPackages
6 stdenvNoLibs.mkDerivation rec {
7 name = "libgcc-${version}";
8 inherit (gcc.cc) src version;
10 outputs = [ "out" "dev" ];
13 depsBuildBuild = [ buildPackages.stdenv.cc ];
14 nativeBuildInputs = [ libiberty ];
18 buildRoot=$(readlink -e "./build")
22 sourceRoot=$(readlink -e "./libgcc")
29 # Drop in libiberty, as external builds are not expected
32 mkdir -p build-${stdenvNoLibs.buildPlatform.config}/libiberty/
33 cd build-${stdenvNoLibs.buildPlatform.config}/libiberty/
34 ln -s ${buildPackages.libiberty}/lib/libiberty.a ./
37 # A few misc bits of gcc need to be built.
39 # - We "shift" the tools over to fake platforms perspective from the previous
42 # - We define GENERATOR_FILE so nothing bothers looking for GNU GMP.
44 # - We remove the `libgcc.mvar` deps so that the bootstrap xgcc isn't built.
46 mkdir -p "$buildRoot/gcc"
49 export AS_FOR_BUILD=${buildPackages.stdenv.cc}/bin/$AS_FOR_BUILD
50 export CC_FOR_BUILD=${buildPackages.stdenv.cc}/bin/$CC_FOR_BUILD
51 export CPP_FOR_BUILD=${buildPackages.stdenv.cc}/bin/$CPP_FOR_BUILD
52 export CXX_FOR_BUILD=${buildPackages.stdenv.cc}/bin/$CXX_FOR_BUILD
53 export LD_FOR_BUILD=${buildPackages.stdenv.cc.bintools}/bin/$LD_FOR_BUILD
55 export AS=$AS_FOR_BUILD
56 export CC=$CC_FOR_BUILD
57 export CPP=$CPP_FOR_BUILD
58 export CXX=$CXX_FOR_BUILD
59 export LD=$LD_FOR_BUILD
61 export AS_FOR_TARGET=${stdenvNoLibs.cc}/bin/$AS
62 export CC_FOR_TARGET=${stdenvNoLibs.cc}/bin/$CC
63 export CPP_FOR_TARGET=${stdenvNoLibs.cc}/bin/$CPP
64 export LD_FOR_TARGET=${stdenvNoLibs.cc.bintools}/bin/$LD
66 export NIX_CFLAGS_COMPILE_FOR_BUILD+=' -DGENERATOR_FILE=1'
68 "$sourceRoot/../gcc/configure" $gccConfigureFlags
70 sed -e 's,libgcc.mvars:.*$,libgcc.mvars:,' -i Makefile
82 mkdir -p "$buildRoot/gcc/include"
84 # Preparing to configure + build libgcc itself
86 mkdir -p "$buildRoot/gcc/${stdenvNoLibs.hostPlatform.config}/libgcc"
87 cd "$buildRoot/gcc/${stdenvNoLibs.hostPlatform.config}/libgcc"
88 configureScript=$sourceRoot/configure
89 chmod +x "$configureScript"
91 export AS_FOR_BUILD=${buildPackages.stdenv.cc}/bin/$AS_FOR_BUILD
92 export CC_FOR_BUILD=${buildPackages.stdenv.cc}/bin/$CC_FOR_BUILD
93 export CPP_FOR_BUILD=${buildPackages.stdenv.cc}/bin/$CPP_FOR_BUILD
94 export CXX_FOR_BUILD=${buildPackages.stdenv.cc}/bin/$CXX_FOR_BUILD
95 export LD_FOR_BUILD=${buildPackages.stdenv.cc.bintools}/bin/$LD_FOR_BUILD
97 export AS=${stdenvNoLibs.cc}/bin/$AS
98 export CC=${stdenvNoLibs.cc}/bin/$CC
99 export CPP=${stdenvNoLibs.cc}/bin/$CPP
100 export CXX=${stdenvNoLibs.cc}/bin/$CXX
101 export LD=${stdenvNoLibs.cc.bintools}/bin/$LD
103 export AS_FOR_TARGET=${stdenvNoLibs.cc}/bin/$AS_FOR_TARGET
104 export CC_FOR_TARGET=${stdenvNoLibs.cc}/bin/$CC_FOR_TARGET
105 export CPP_FOR_TARGET=${stdenvNoLibs.cc}/bin/$CPP_FOR_TARGET
106 export LD_FOR_TARGET=${stdenvNoLibs.cc.bintools}/bin/$LD_FOR_TARGET
109 gccConfigureFlags = [
110 "--build=${stdenvNoLibs.buildPlatform.config}"
111 "--host=${stdenvNoLibs.buildPlatform.config}"
112 "--target=${stdenvNoLibs.hostPlatform.config}"
114 "--disable-bootstrap"
115 "--disable-multilib" "--with-multilib-list="
116 "--enable-languages=c"
118 "--disable-fixincludes"
121 "--disable-libatomic"
122 "--disable-libbacktrace"
125 "--disable-libquadmath"
128 "--disable-vtable-verify"
131 ] ++ lib.optional (stdenvNoLibs.hostPlatform.libc == "glibc")
132 "--with-glibc-version=${glibc.version}";
134 configurePlatforms = [ "build" "host" ];
136 "--disable-dependency-tracking"
137 # $CC cannot link binaries, let alone run then
138 "cross_compiling=true"
139 # Do not have dynamic linker without libc
144 makeFlags = [ "MULTIBUILDTOP:=../" ];
147 moveToOutput "lib/gcc/${stdenvNoLibs.hostPlatform.config}/${version}/include" "$dev"
148 mkdir -p "$out/lib" "$dev/include"
149 ln -s "$out/lib/gcc/${stdenvNoLibs.hostPlatform.config}/${version}"/* "$out/lib"
150 ln -s "$dev/lib/gcc/${stdenvNoLibs.hostPlatform.config}/${version}/include"/* "$dev/include/"