82 lines
3.0 KiB
Nix
82 lines
3.0 KiB
Nix
{
|
|
fetchurl,
|
|
lib,
|
|
gnutar,
|
|
xz,
|
|
bash-build,
|
|
gnused,
|
|
targetPlatform,
|
|
libc,
|
|
libgcc,
|
|
libstdcxx,
|
|
gcc-unwrapped,
|
|
binutils,
|
|
bash,
|
|
}:
|
|
let
|
|
pname = "gcc-wrapper";
|
|
extraFlags = "-static-libgcc ";
|
|
# only supports musl for now
|
|
dynamicLinkerGlob = "${libc}/lib/libc.so";
|
|
in
|
|
bash-build.runCommand "${pname}-${gcc-unwrapped.version}"
|
|
{
|
|
inherit pname;
|
|
version = gcc-unwrapped.version;
|
|
meta = gcc-unwrapped.meta;
|
|
nativeBuildInputs = [ gnused ];
|
|
passthru.unwrapped = gcc-unwrapped;
|
|
}
|
|
''
|
|
if [[ -z '${dynamicLinkerGlob}' ]]; then
|
|
echo "Don't know the name of the dynamic linker for platform '${targetPlatform.config}', so guessing instead."
|
|
dynamicLinker="${libc}/lib/ld*.so.?"
|
|
else
|
|
dynamicLinker='${dynamicLinkerGlob}'
|
|
fi
|
|
dynamicLinker=($dynamicLinker)
|
|
case ''${#dynamicLinker[@]} in
|
|
0) echo "No dynamic linker found for platform '${targetPlatform.config}'.";;
|
|
1) echo "Using dynamic linker: '$dynamicLinker'";;
|
|
*) echo "Multiple dynamic linkers found for platform '${targetPlatform.config}'.";;
|
|
esac
|
|
|
|
mkdir -p "$out/bin"
|
|
for orig in ${gcc-unwrapped}/bin/*gcc ${gcc-unwrapped}/bin/*gcc-${gcc-unwrapped.version}; do
|
|
sed \
|
|
-e 's,@bash@,${lib.getExe bash},' \
|
|
-e "s,@gcc@,$orig," \
|
|
-e "s,@origname@,$(basename "$orig")," \
|
|
-e "s,@origdir@,${gcc-unwrapped}/libexec/gcc," \
|
|
-e "s,@dynlinker@,$dynamicLinker," \
|
|
-e 's,@libgcc@,${libgcc}/lib/gcc/${targetPlatform.config}/${libgcc.version},' \
|
|
-e 's,@libc@,${libc}/lib,' \
|
|
-e 's,@gccinc@,${gcc-unwrapped}/lib/gcc/${targetPlatform.config}/${libgcc.version}/include,' \
|
|
-e 's,@binutils@,${binutils}/bin,' \
|
|
-e 's,@extraflags@,${extraFlags},' \
|
|
'${./wrapper.sh}' > "$out/bin/$(basename "$orig")"
|
|
chmod +x "$out/bin/$(basename "$orig")"
|
|
done
|
|
for orig in ${gcc-unwrapped}/bin/*++; do
|
|
sed \
|
|
-e 's,@bash@,${lib.getExe bash},' \
|
|
-e "s,@gcc@,$orig," \
|
|
-e "s,@origname@,$(basename "$orig")," \
|
|
-e "s,@origdir@,${gcc-unwrapped}/libexec/gcc," \
|
|
-e "s,@dynlinker@,$dynamicLinker," \
|
|
-e 's,@libgcc@,${libgcc}/lib/gcc/${targetPlatform.config}/${libgcc.version},' \
|
|
-e 's,@libc@,${libc}/lib,' \
|
|
-e 's,@libstdcxx@,${libstdcxx}/lib,' \
|
|
-e 's,@libstdcxxinc@,${libstdcxx}/include/c++/${libstdcxx.version},' \
|
|
-e 's,@libstdcxxarchinc@,${libstdcxx}/include/c++/${libstdcxx.version}/${targetPlatform.config},' \
|
|
-e 's,@gccinc@,${gcc-unwrapped}/lib/gcc/${targetPlatform.config}/${libgcc.version}/include,' \
|
|
-e 's,@binutils@,${binutils}/bin,' \
|
|
-e 's,@extraflags@,${extraFlags},' \
|
|
'${./wrappercxx.sh}' > "$out/bin/$(basename "$orig")"
|
|
chmod +x "$out/bin/$(basename "$orig")"
|
|
done
|
|
for orig in ${gcc-unwrapped}/bin/*cpp ${gcc-unwrapped}/bin/*-ar ${gcc-unwrapped}/bin/*-nm ${gcc-unwrapped}/bin/*-ranlib; do
|
|
ln -s "$orig" "$out/bin/$(basename "$orig")"
|
|
done
|
|
''
|