Closed ghost closed 6 months ago
When testing a build for aarch64 I noticed that the paths seem to be hardcoded, so toolchains can't be moved to a directory other than where they were built at. As you can see, aarch64-linux-musl-gcc works when invoked at mussel's default path:
aarch64-linux-musl-gcc
mussel
andy:~/code/mussel/toolchain/bin$ ./aarch64-linux-musl-gcc test.c -o test -s -static -v Using built-in specs. COLLECT_GCC=./aarch64-linux-musl-gcc COLLECT_LTO_WRAPPER=/home/andy/code/mussel/toolchain/libexec/gcc/aarch64-linux-musl/13.2.0/lto-wrapper Target: aarch64-linux-musl Configured with: /home/andy/code/mussel/sources/gcc/gcc-13.2.0/configure --prefix=/home/andy/code/mussel/toolchain --target=aarch64-linux-musl --with-sysroot=/home/andy/code/mussel/sysroot --enable-languages=c,c++ --disable-multilib --disable-bootstrap --disable-libsanitizer --disable-werror --enable-initfini-array --with-arch=armv8-a --with-abi=lp64 --enable-fix-cortex-a53-835769 --enable-fix-cortex-a53-843419 Thread model: posix Supported LTO compression algorithms: zlib gcc version 13.2.0 (GCC) COLLECT_GCC_OPTIONS='-o' 'test' '-s' '-static' '-v' '-march=armv8-a' '-mlittle-endian' '-mabi=lp64' /home/andy/code/mussel/toolchain/libexec/gcc/aarch64-linux-musl/13.2.0/cc1 -quiet -v test.c -quiet -dumpbase test.c -dumpbase-ext .c -march=armv8-a -mlittle-endian -mabi=lp64 -version -o /tmp/cc9VhAz8.s GNU C17 (GCC) version 13.2.0 (aarch64-linux-musl) compiled by GNU C version 13.2.0, GMP version 6.3.0, MPFR version 4.2.1, MPC version 1.3.1, isl version isl-0.26-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 ignoring nonexistent directory "/home/andy/code/mussel/sysroot/usr/local/include" #include "..." search starts here: #include <...> search starts here: /home/andy/code/mussel/toolchain/lib/gcc/aarch64-linux-musl/13.2.0/../../../../aarch64-linux-musl/include /home/andy/code/mussel/sysroot/usr/include /home/andy/code/mussel/toolchain/lib/gcc/aarch64-linux-musl/13.2.0/include End of search list. Compiler executable checksum: c3f9714356a1cc7be1615938ff7e0062 COLLECT_GCC_OPTIONS='-o' 'test' '-s' '-static' '-v' '-march=armv8-a' '-mlittle-endian' '-mabi=lp64' /home/andy/code/mussel/toolchain/lib/gcc/aarch64-linux-musl/13.2.0/../../../../aarch64-linux-musl/bin/as -v -EL -march=armv8-a -mabi=lp64 -o /tmp/ccft0xy7.o /tmp/cc9VhAz8.s GNU assembler version 2.42 (aarch64-linux-musl) using BFD version (GNU Binutils) 2.42 COMPILER_PATH=/home/andy/code/mussel/toolchain/libexec/gcc/aarch64-linux-musl/13.2.0/:/home/andy/code/mussel/toolchain/libexec/gcc/aarch64-linux-musl/13.2.0/:/home/andy/code/mussel/toolchain/libexec/gcc/aarch64-linux-musl/:/home/andy/code/mussel/toolchain/lib/gcc/aarch64-linux-musl/13.2.0/:/home/andy/code/mussel/toolchain/lib/gcc/aarch64-linux-musl/:/home/andy/code/mussel/toolchain/lib/gcc/aarch64-linux-musl/13.2.0/../../../../aarch64-linux-musl/bin/ LIBRARY_PATH=/home/andy/code/mussel/toolchain/lib/gcc/aarch64-linux-musl/13.2.0/:/home/andy/code/mussel/toolchain/lib/gcc/aarch64-linux-musl/13.2.0/../../../../aarch64-linux-musl/lib/../lib/:/home/andy/code/mussel/sysroot/lib/../lib/:/home/andy/code/mussel/sysroot/usr/lib/../lib/:/home/andy/code/mussel/toolchain/lib/gcc/aarch64-linux-musl/13.2.0/../../../../aarch64-linux-musl/lib/:/home/andy/code/mussel/sysroot/lib/:/home/andy/code/mussel/sysroot/usr/lib/ COLLECT_GCC_OPTIONS='-o' 'test' '-s' '-static' '-v' '-march=armv8-a' '-mlittle-endian' '-mabi=lp64' '-dumpdir' 'test.' /home/andy/code/mussel/toolchain/libexec/gcc/aarch64-linux-musl/13.2.0/collect2 -plugin /home/andy/code/mussel/toolchain/libexec/gcc/aarch64-linux-musl/13.2.0/liblto_plugin.so -plugin-opt=/home/andy/code/mussel/toolchain/libexec/gcc/aarch64-linux-musl/13.2.0/lto-wrapper -plugin-opt=-fresolution=/tmp/ccrj2Upo.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lc --sysroot=/home/andy/code/mussel/sysroot -Bstatic -X -EL -maarch64linux --fix-cortex-a53-835769 --fix-cortex-a53-843419 -o test -s /home/andy/code/mussel/sysroot/usr/lib/../lib/crt1.o /home/andy/code/mussel/sysroot/usr/lib/../lib/crti.o /home/andy/code/mussel/toolchain/lib/gcc/aarch64-linux-musl/13.2.0/crtbeginT.o -L/home/andy/code/mussel/toolchain/lib/gcc/aarch64-linux-musl/13.2.0 -L/home/andy/code/mussel/toolchain/lib/gcc/aarch64-linux-musl/13.2.0/../../../../aarch64-linux-musl/lib/../lib -L/home/andy/code/mussel/sysroot/lib/../lib -L/home/andy/code/mussel/sysroot/usr/lib/../lib -L/home/andy/code/mussel/toolchain/lib/gcc/aarch64-linux-musl/13.2.0/../../../../aarch64-linux-musl/lib -L/home/andy/code/mussel/sysroot/lib -L/home/andy/code/mussel/sysroot/usr/lib /tmp/ccft0xy7.o --start-group -lgcc -lgcc_eh -lc --end-group /home/andy/code/mussel/toolchain/lib/gcc/aarch64-linux-musl/13.2.0/crtend.o /home/andy/code/mussel/sysroot/usr/lib/../lib/crtn.o COLLECT_GCC_OPTIONS='-o' 'test' '-s' '-static' '-v' '-march=armv8-a' '-mlittle-endian' '-mabi=lp64' '-dumpdir' 'test.' andy:~/code/mussel/toolchain/bin$ echo $? 0
Now let's try compiling test.c after moving the toolchain into a new directory.
test.c
andy:~/code/mussel/toolchain/bin$ cd ../.. andy:~/code/mussel$ mkdir -p test_dir mkdir: created directory 'test_dir' andy:~/code/mussel$ mv sysroot toolchain test_dir/ renamed 'sysroot' -> 'test_dir/sysroot' renamed 'toolchain' -> 'test_dir/toolchain' andy:~/code/mussel$ cd test_dir/toolchain/bin andy:~/code/mussel/test_dir/toolchain/bin$ ./aarch64-linux-musl-gcc test.c -o test -s -static -v
Since toolchain and sysroot were moved, gcc can no longer find the headers and thus fails.
toolchain
sysroot
Using built-in specs. COLLECT_GCC=./aarch64-linux-musl-gcc COLLECT_LTO_WRAPPER=/home/andy/code/mussel/test_dir/toolchain/bin/../libexec/gcc/aarch64-linux-musl/13.2.0/lto-wrapper Target: aarch64-linux-musl Configured with: /home/andy/code/mussel/sources/gcc/gcc-13.2.0/configure --prefix=/home/andy/code/mussel/toolchain --target=aarch64-linux-musl --with-sysroot=/home/andy/code/mussel/sysroot --enable-languages=c,c++ --disable-multilib --disable-bootstrap --disable-libsanitizer --disable-werror --enable-initfini-array --with-arch=armv8-a --with-abi=lp64 --enable-fix-cortex-a53-835769 --enable-fix-cortex-a53-843419 Thread model: posix Supported LTO compression algorithms: zlib gcc version 13.2.0 (GCC) COLLECT_GCC_OPTIONS='-o' 'test' '-s' '-static' '-v' '-march=armv8-a' '-mlittle-endian' '-mabi=lp64' /home/andy/code/mussel/test_dir/toolchain/bin/../libexec/gcc/aarch64-linux-musl/13.2.0/cc1 -quiet -v -iprefix /home/andy/code/mussel/test_dir/toolchain/bin/../lib/gcc/aarch64-linux-musl/13.2.0/ test.c -quiet -dumpbase test.c -dumpbase-ext .c -march=armv8-a -mlittle-endian -mabi=lp64 -version -o /tmp/ccHA1H0P.s GNU C17 (GCC) version 13.2.0 (aarch64-linux-musl) compiled by GNU C version 13.2.0, GMP version 6.3.0, MPFR version 4.2.1, MPC version 1.3.1, isl version isl-0.26-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 ignoring nonexistent directory "/home/andy/code/mussel/sysroot/usr/local/include" ignoring duplicate directory "/home/andy/code/mussel/test_dir/toolchain/bin/../lib/gcc/../../lib/gcc/aarch64-linux-musl/13.2.0/../../../../aarch64-linux-musl/include" ignoring nonexistent directory "/home/andy/code/mussel/sysroot/usr/include" ignoring duplicate directory "/home/andy/code/mussel/test_dir/toolchain/bin/../lib/gcc/../../lib/gcc/aarch64-linux-musl/13.2.0/include" #include "..." search starts here: #include <...> search starts here: /home/andy/code/mussel/test_dir/toolchain/bin/../lib/gcc/aarch64-linux-musl/13.2.0/../../../../aarch64-linux-musl/include /home/andy/code/mussel/test_dir/toolchain/bin/../lib/gcc/aarch64-linux-musl/13.2.0/include End of search list. Compiler executable checksum: c3f9714356a1cc7be1615938ff7e0062 test.c:1:10: fatal error: stdio.h: No such file or directory 1 | #include <stdio.h> | ^~~~~~~~~ compilation terminated. andy:~/code/mussel/test_dir/toolchain/bin$ echo $? 1
I'll submit another PR when I get around to it as I believe I found a fix, but I figured I'd file this issue so it's accounted for.
When testing a build for aarch64 I noticed that the paths seem to be hardcoded, so toolchains can't be moved to a directory other than where they were built at. As you can see,
aarch64-linux-musl-gcc
works when invoked atmussel
's default path:Now let's try compiling
test.c
after moving the toolchain into a new directory.Since
toolchain
andsysroot
were moved, gcc can no longer find the headers and thus fails.I'll submit another PR when I get around to it as I believe I found a fix, but I figured I'd file this issue so it's accounted for.