dslm4515 / CMLFS

Clang-Built Musl Linux From Scratch
MIT License
99 stars 18 forks source link

cgnutools/08-clang: symbol not found #50

Closed takusuman closed 1 year ago

takusuman commented 2 years ago

2021-09-24-124658_719x292_scrot I got this.

This is the command line i used to configure cmake. In fact, it's the same from the documentation.

LDFLAGS="-Wl,-rpath,/cgnutools/lib" CFLAGS= -g -g1 CXXFLAGS=$CFLAGS CONFIG_TOOLS="-DCMAKE_C_COMPILER=${COPA_TARGET}-gcc " CONFIG_TOOLS+="-DCMAKE_CXX_COMPILER=${COPA_TARGET}-g++ " CONFIG_TOOLS+="-DCMAKE_EXE_LINKER_FLAGS=-Wl,-dynamic-linker /cgnutools/lib/ld-musl-x86_64.so.1 " CONFIG_TOOLS+="-DCMAKE_SHARED_LINKER_FLAGS=-Wl,-dynamic-linker /cgnutools/lib/ld-musl-x86_64.so.1 " CONFIG_TOOLS+="-DCLANG_DEFAULT_LINKER=/cgnutools/bin/ld.lld " CONFIG_TRUPLES="-DLLVM_DEFAULT_TARGET_TRIPLE=x86_64-pc-linux-musl " CONFIG_TRUPLES+="-DLLVM_HOST_TRIPLE=x86_64-pc-linux-musl " CONFIG_TRUPLES+="-DCOMPILER_RT_DEFAULT_TARGET_TRIPLE=x86_64-pc-linux-musl " CONFIG_CRT="-DCOMPILER_RT_USE_BUILTINS_LIBRARY=ON " CONFIG_CRT+="-DCOMPILER_RT_BUILD_SANITIZERS=OFF" CONFIG_CRT+="-DCOMPILER_RT_BUILD_XRAY=OFF " CONFIG_CRT+="-DCOMPILER_RT_BUILD_PROFILE=OFF " CONFIG_CRT+="-DCOMPILER_RT_BUILD_LIBFUZZER=OFF " CONFIG_CRT+="-DCOMPILER_RT_CAN_EXECUTE_TESTS=OFF " CONFIG_CRT+="-DCOMPILER_RT_HWASAN_WITH_INTERCEPTORS=OFF " CONFIG_CLANG="-DCLANG_DEFAULT_CXX_STDLIB=libc++ " CONFIG_CLANG+="-DCLANG_DEFAULT_UNWINDLIB=libunwind " CONFIG_CLANG+="-DCLANG_DEFAULT_RTLIB=compiler-rt " CONFIG_CLANG+="-DCLANG_ENABLE_STATIC_ANALYZER=OFF " CONFIG_CLANG+="-DCLANG_ENABLE_ARCMT=OFF " CONFIG_LIBUNWIND="-DLIBUNWIND_ENABLE_STATIC=OFF " CONFIG_LIBCXXABI="-DLIBCXXABI_ENABLE_STATIC=OFF " CONFIG_LIBCXX="-DLIBCXX_ENABLE_STATIC=OFF " CONFIG_PATHS="-DICONV_LIBRARY_PATH=/cgnutools/lib/libc.so " BUILD_OFF="-DLLVM_BUILD_TESTS=OFF " BUILD_OFF+="-DLLVM_INCLUDE_GO_TESTS=OFF " BUILD_OFF+="-DLLVM_INCLUDE_TESTS=OFF " BUILD_OFF+="-DLLVM_INCLUDE_DOCS=OFF " BUILD_OFF+="-DLLVM_INCLUDE_EXAMPLES=OFF " BUILD_OFF+="-DLLVM_INCLUDE_BENCHMARKS=OFF " BUILD_OFF+="-DLLVM_ENABLE_OCAMLDOC=OFF " BUILD_OFF+="-DLLVM_ENABLE_BACKTRACES=OFF " BUILD_OFF+="-DLLVM_ENABLE_LIBEDIT=OFF " BUILD_OFF+="-DLLVM_ENABLE_LIBXML2=OFF " BUILD_OFF+="-DLLVM_ENABLE_LIBPFM=OFF " BUILD_OFF+="-DLLVM_ENABLE_TERMINFO=OFF " BUILD_OFF+="-DLLVM_ENABLE_ZLIB=OFF " BUILD_OFF+="-DLLVM_ENABLE_Z3_SOLVER=OFF " BUILD_OFF+="-DLLVM_APPEND_VC_REV=OFF " BUILD_OFF+="-DLLVM_ENABLE_CRASH_OVERRIDES=OFF " BUILD_OFF+="-DLIBCXX_INCLUDE_BENCHMARKS=OFF " BUILD_OFF+="-DLIBCXX_ENABLE_DEBUG_MODE_SUPPORT=OFF " cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="/cgnutools" -DBUILD_SHARED_LIBS=ON -DLLVM_ENABLE_LIBCXX=ON -DLLVM_TARGET_ARCH="X86" -DLLVM_TARGETS_TO_BUILD="X86" -DLIBCXX_HAS_MUSL_LIBC=ON -DDEFAULT_SYSROOT="/cgnutools" ${CONFIG_TOOLS} ${CONFIG_TRUPLES} ${CONFIG_CRT} ${CONFIG_CLANG} ${CONFIG_LIBUNWIND} ${CONFIG_LIBCXXABI} ${CONFIG_LIBCXX} ${CONFIG_PATHS} ${BUILD_OFF} && make -C build

My .bashrc:

# Directories
 COPA='/dsk/0v'
 GNUC_TOOLS='/cgnutools'
 LLVM_TOOLS='/llvmtools'
 LFS="${COPA}"
 LLVM_SRC=/usr/tmp/llvm

 # PATH
 PATH="${GNUC_TOOLS}/bin:${LLVM_TOOLS}/bin:/bin:/usr/bin"

 # Target
 COPA_TARGET="`uname -m`-pindoramaCOPACABANA-linux-musl"
 CMLFS_TARGET="${COPA_TARGET}"
 TARGET_TRUPLE="x86_64-pc-linux-musl"

 # Host
 COPA_HOST="$(echo ${MACHTYPE} | sed "s/$(echo $MACHTYPE | cut -d- -f2)/crossCOPACABANA/")"
 CMLFS_HOST="${COPA_HOST}"

 # CPU information
 ARCH='x86'
 CPU='x86-64'

# C COMPILER
CC="${COPA_TARGET}-gcc"
CXX="${COPA_TARGET}-g++"
AR="${COPA_TARGET}-ar"
AS="${COPA_TARGET}-as"
RANLIB="${COPA_TARGET}-ranlib"
LD="${COPA_TARGET}-ld"
STRIP="${COPA_TARGET}-strip"
export COPA GNUC_TOOLS LLVM_TOOLS LFS CMLFS PATH COPA_TARGET LFS_TARGET CMLFS_TARGET TARGET_TRUPLE COPA_HOST LFS_HOST ARCH CPU 

# Export C COMPILER 
export CC CXX AR AS RANLIB LD STRIP
owl4ce commented 2 years ago

TBH, I still don't understand why in your builds invokes host's libraries rather than /cgnutools. :thinking:

takusuman commented 2 years ago

TBH, I still don't understand why in your builds invokes host's libraries rather than /cgnutools. thinking

I quickly remembered /etc/ld.so.conf, but i didn't touched it since i installed Arch.

takusuman commented 2 years ago

Geez, what am i doing wrong? May if i change my host it will compile?

owl4ce commented 2 years ago

I quickly remembered /etc/ld.so.conf, but i didn't touched it since i installed Arch.

No, since we have adjust the GCC specs. ${COPA_TARGET}-gcc invokes ld-musl-x86_64.so.1, and it's invokes the library paths in the ld-musl-x86_64.path sequentially.

owl4ce commented 2 years ago

Geez, what am i doing wrong? May if i change my host it will compile?

Can you set -DCMAKE_PREFIX_PATH to /cgnutools? Looks like it fixes this issue 🤔 Ref: https://cmake.org/cmake/help/v3.0/variable/CMAKE_PREFIX_PATH.html

takusuman commented 2 years ago

I quickly remembered /etc/ld.so.conf, but i didn't touched it since i installed Arch.

No, since we have adjust the GCC specs. ${COPA_TARGET}-gcc invokes ld-musl-x86_64.so.1, and it's invokes the library paths in the ld-musl-x86_64.path sequentially.

Yeah, i know; in fact i just checked it to cleanse my conscience.

takusuman commented 2 years ago

Geez, what am i doing wrong? May if i change my host it will compile?

Can you set -DCMAKE_PREFIX_PATH to /cgnutools? Looks like it fixes this issue thinking Ref: https://cmake.org/cmake/help/v3.0/variable/CMAKE_PREFIX_PATH.html

Sure! I'll try this.

takusuman commented 2 years ago

Same error at 4%... Damn.

If i get any progress here, i'll post here.

iamthenoname commented 2 years ago

Do you think it has anything to do with ICONV_LIBRARY_PATH?

When I run cmake to configure, it prints this warning:

CMake Warning:
  Manually-specified variables were not used by the project:

    ICONV_LIBRARY_PATH
owl4ce commented 2 years ago

Do you think it has anything to do with ICONV_LIBRARY_PATH?

For me, nothing happens. Ask @dslm4515.

Related issue: https://reviews.llvm.org/D38875

dslm4515 commented 2 years ago

I successfully built cgnutools and llvmtools with that warning shown.

iamthenoname commented 2 years ago

I know a fix for this:

Remember this part

cat > /cgnutools/etc/ld-musl-$(uname -m).path << "EOF"
/cgnutools/lib
/cgnutools/${CMLFS_TARGET}/lib
/usr/lib64
/lib64
/usr/lib
/lib
EOF

After compiling gcc-11.2.0 (5-GCC-final), I discovered that it actually installs the libraries in /cgnutools/x86_64-cmlfs-linux-musl/lib instead of /cgnutools/lib

I simply copied over everything in /cgnutools/x86_64-cmlfs-linux-musl/lib into /cgnutools/lib, and I managed to compile more than what I was able to (I didn't finish it yet)

You can probably fix this by changing /cgnutools/${CMLFS_TARGET}/lib into /cgnutools/x86_64-cmlfs-linux-musl/lib in /cgnutools/etc/ld-musl-x86_64.path.

owl4ce commented 2 years ago

I simply copied over everything in /cgnutools/x86_64-cmlfs-linux-musl/lib into /cgnutools/lib, and I managed to compile more than what I was able to (I didn't finish it yet)

Probably better to create symlinks for them if not conflicts.

iamthenoname commented 2 years ago

You can fix this by running:

sed -i "s/\${CMLFS_TARGET}/x86_64-cmlfs-linux-musl/g" /cgnutools/etc/ld-musl-x86_64.path
dslm4515 commented 1 year ago

I upgraded cgnutools with LLVM-15.0.5 via commit 71676d1336ff57f4c0982c8a28cdf77267c58bd0

I used a new approach for building LLVM+Clang for cgnutools... used the monorepo llvm-project-x.x.x.src.tar.xz not llvm-x.x.x.src.tar.xz . Using the old method used llvm-x.x.x.src.tar.xz which caused too many configure & compile errors. For example, there were missing CMake modules that are now not in that source tarball anymore. Has to be downloaded and unpacked.

Built on a glibc host. I got a 6-core, 12-thread CPU, so now the LLVM builds are SO FAST, that I can experiment faster. My previous system had a 2-core, 4-thread CPU. Builds on it took hours. New system? Longest build time was ... 20mins!