linux_xanmod: 5.11.14 -> 5.11.15
[NixPkgs.git] / pkgs / development / libraries / gcc / libgcc / default.nix
blobab62fdf3fa202959cd340ebb79304c05accf3b7a
1 { lib, stdenvNoLibs, buildPackages
2 , gcc, glibc
3 , libiberty
4 }:
6 stdenvNoLibs.mkDerivation rec {
7   name = "libgcc-${version}";
8   inherit (gcc.cc) src version;
10   outputs = [ "out" "dev" ];
12   strictDeps = true;
13   depsBuildBuild = [ buildPackages.stdenv.cc ];
14   nativeBuildInputs = [ libiberty ];
16   postUnpack = ''
17     mkdir -p ./build
18     buildRoot=$(readlink -e "./build")
19   '';
21   postPatch = ''
22     sourceRoot=$(readlink -e "./libgcc")
23   '';
25   preConfigure = ''
26     cd "$buildRoot"
27   ''
29   # Drop in libiberty, as external builds are not expected
30   + ''
31     (
32       mkdir -p build-${stdenvNoLibs.buildPlatform.config}/libiberty/
33       cd build-${stdenvNoLibs.buildPlatform.config}/libiberty/
34       ln -s ${buildPackages.libiberty}/lib/libiberty.a ./
35     )
36   ''
37   # A few misc bits of gcc need to be built.
38   #
39   #  - We "shift" the tools over to fake platforms perspective from the previous
40   #    stage.
41   #
42   #  - We define GENERATOR_FILE so nothing bothers looking for GNU GMP.
43   #
44   #  - We remove the `libgcc.mvar` deps so that the bootstrap xgcc isn't built.
45   + ''
46     mkdir -p "$buildRoot/gcc"
47     cd "$buildRoot/gcc"
48     (
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
72       make \
73         config.h \
74         libgcc.mvars \
75         tconfig.h \
76         tm.h \
77         options.h \
78         insn-constants.h \
79         insn-modes.h \
80         gcov-iov.h
81     )
82     mkdir -p "$buildRoot/gcc/include"
83   ''
84   # Preparing to configure + build libgcc itself
85   + ''
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
107   '';
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"
119     "--disable-intl"
120     "--disable-lto"
121     "--disable-libatomic"
122     "--disable-libbacktrace"
123     "--disable-libcpp"
124     "--disable-libssp"
125     "--disable-libquadmath"
126     "--disable-libgomp"
127     "--disable-libvtv"
128     "--disable-vtable-verify"
130     "--with-system-zlib"
131   ] ++ lib.optional (stdenvNoLibs.hostPlatform.libc == "glibc")
132        "--with-glibc-version=${glibc.version}";
134   configurePlatforms = [ "build" "host" ];
135   configureFlags = [
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
140     "--enable-static"
141     "--disable-shared"
142   ];
144   makeFlags = [ "MULTIBUILDTOP:=../" ];
146   postInstall = ''
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/"
151   '';