firasuke / mussel

The shortest and fastest script to build working cross compilers targeting musl libc
ISC License
92 stars 12 forks source link

Toolchains can't be moved, as some paths appear to be hardcoded #29

Closed ghost closed 6 months ago

ghost commented 7 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:

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.

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.

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.