Open hoyhoy opened 5 months ago
@llvm/issue-subscribers-libc
Author: None (hoyhoy)
can you share the cmake command you used?
#!/usr/local/bin/bash
BUILD_DIR=build
SOURCE_DIR=${HOME}/llvm-project-18.1.0.src
cd ${SOURCE_DIR}
rm -Rf ${BUILD_DIR}
mkdir ${BUILD_DIR}
LLVM_TRIPLE=x86_64-apple-darwin
XCODE15_BIN=/usr/bin
MACOS_MAJOR_VERSION="14.3"
MACOS_REVISION="1"
MACOS_FULL_VERSION="${MACOS_MAJOR_VERSION}.${MACOS_REVISION}"
CLANG_ROOT="/opt/llvm17"
CLANG_LIB="${CLANG_ROOT}/lib"
CLANG_BIN="${CLANG_ROOT}/bin"
export CCACHE_COMPILER="${CLANG_BIN}/clang-17"
export CCACHE_BIN="${CLANG_BIN}"
export CCACHE_HASHDIR="yes"
export CCACHE_CPP2="yes"
CLANG_BINARY_PREFIX=clang
export CC=${CLANG_BIN}/${CLANG_BINARY_PREFIX}
export CXX=${CLANG_BIN}/${CLANG_BINARY_PREFIX}++
export LD=${CLANG_BIN}/lld
export AS=${CLANG_BIN}/llvm-as
export AR=${CLANG_BIN}/llvm-ar
export NM=${CLANG_BIN}/llvm-nm
export RANLIB=${CLANG_BIN}/llvm-ranlib
export LINKER=${CLANG_BIN}/lld
export LLVM_DIR=${CLANG_ROOT}
export LLVM_PATH=${CLANG_BIN}
export FIPSLD_CC=${CC}
export FIPSLD_CXX=${CXX}
unset ASAN_OPTIONS
unset LD_LIBRARY_PATH
unset LIBPATH
unset LDFLAGS
unset LIBPATH
unset MSAN_OPTIONS
unset CPLUS_INCLUDE_PATH
export LD_LIBRARY_PATH="${CLANG_LIB}:${CLANG_LIB}/clang/17/lib/darwin"
export LDPATH="${LD_LIBRARY_PATH}"
export LIBRARY_PATH="${LD_LIBRARY_PATH}"
export LIBPATH="${LD_LIBRARY_PATH}"
export CPATH="${CLANG_ROOT}/include"
MAKE=${CLANG_BIN}/make
OBJCOPY=${CLANG_BIN}/llvm-objcopy
OBJDUMP=${CLANG_BIN}/llvm-objdump
READELF=${CLANG_BIN}/llvm-readelf
LIPO=${CLANG_BIN}/llvm-lipo
STRIP=${CLANG_BIN}/llvm-strip
LINKER=${CLANG_BIN}/lld
unset ASAN_OPTIONS
unset MSAN_OPTIONS
unset CPLUS_INCLUDE_PATH
export TERMCAP_LIB=libncurses.6
export LD_LIBRARY_PATH="${CLANG_LIB}:${CLANG_LIB}/darwin"
export LIBRARY_PATH=$LD_LIBRARY_PATH
export LIBPATH=$LD_LIBRARY_PATH
export CPATH="${CLANG_ROOT}/include"
export LDFLAGS="-L${CLANG_LIB} -fuse-ld=lld -Wl,-rpath,${CLANG_LIB}"
export LIBPATH=$LD_LIBRARY_PATH
export CFLAGS="-O3 -march=native -funroll-loops -finline-functions -mtune=native"
export CXXFLAGS="-O3 -march=native -funroll-loops -finline-functions -mtune=native"
export PATH="${HOME}/Library/Python/3.9/bin:/usr/local/bin:${HOME}/bin:${HOME}/.cargo/bin:/usr/local/go/bin:/usr/bin:/bin:/usr/sbin:/sbin"
INSTALL_PATH="/opt/llvm18"
CCACHE=/usr/local/bin/ccache
unset NINJA_STATUS
cmake_args=(
-DCMAKE_BUILD_TYPE=Release
-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lldb;lld"
-DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libc;compiler-rt;libunwind"
# -DCOMPILER_RT_DEFAULT_TARGET_TRIPLE=x86_64-apple-macosx14.3.0
# -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libc;compiler-rt"
# -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libc"
-DCLANG_CONFIG_FILE_SYSTEM_DIR="${INSTALL_PATH}/etc"
-DLLVM_LOCAL_RPATH="${INSTALL_PATH}/lib;${INSTALL_PATH}/darwin"
-DCLANG_CONFIG_FILE_SYSTEM_DIR="${INSTALL_PATH}/etc"
-DCMAKE_INSTALL_PREFIX="${INSTALL_PATH}"
-DCMAKE_INSTALL_RPATH="${INSTALL_PATH}/lib;${INSTALL_PATH}/lib/darwin"
-DCMAKE_C_COMPILER_LAUNCHER="${CCACHE}"
-DCMAKE_CXX_COMPILER_LAUNCHER="${CCACHE}"
-DCMAKE_C_COMPILER="${CC}"
-DCMAKE_CXX_COMPILER="${CXX}"
-DCLANG_INCLUDE_TESTS:BOOL=OFF
-DLLVM_INCLUDE_TESTS:BOOL=OFF
-DLLDB_ENABLE_SWIG:BOOL=ON
-DLLDB_ENABLE_LIBEDIT:BOOL=ON
-DLLDB_ENABLE_CURSES:BOOL=ON
-DDEFAULT_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
-DLLVM_BUILD_TOOLS:BOOL=ON
-DLLVM_ENABLE_LIBCXX:BOOL=ON
-DLLVM_CCACHE_BUILD:BOOL=ON
-DLLVM_ENABLE_TERMINFO:BOOL=ON
-DHAVE_CXX_ATOMICS64_WITHOUT_LIB=True
-DHAVE_CXX_ATOMICS_WITHOUT_LIB=True
-DSWIG_EXECUTABLE=${HOME}/Library/Python/3.9/bin/swig
-DLLDB_USE_SYSTEM_DEBUGSERVER:BOOL=ON
-DLLVM_PARALLEL_COMPILE_JOBS=8
-DLLVM_PARALLEL_LINK_JOBS=2
-DLLVM_ENABLE_LLD:BOOL=ON
-DLLVM_ENABLE_LIBCXX:BOOL=ON
-DCMAKE_C_FLAGS="${CFLAGS}"
-DCMAKE_CXX_FLAGS="${CXXFLAGS}"
-DCMAKE_EXE_LINKER_FLAGS="${LDFLAGS}"
-DCMAKE_SHARED_LINKER_FLAGS="${LDFLAGS}"
-DCMAKE_MODULE_LINKER_FLAGS="${LDFLAGS}"
-DCMAKE_NM="${NM}"
-DCMAKE_AR="${AR}"
-DCMAKE_AR="${LD}"
-DCMAKE_LIPO="${LIPO}"
-DCMAKE_RANLIB="${RANLIB}"
-DCMAKE_OBJCOPY="${OBJCOPY}"
-DCMAKE_OBJDUMP="${OBJDUMP}"
-DCMAKE_STRIP="${STRIP}"
-DCMAKE_READELF="${READELF}"
-DCMAKE_LINKER="${LD}"
-DDEFAULT_SANITIZER_MIN_OSX_VERSION="${MACOS_MAJOR_VERSION}"
-DLLVM_RUNTIME_TARGETS="${LLVM_TRIPLE}"
-DCMAKE_C_COMPILER_TARGET="${LLVM_TRIPLE}"
-DCMAKE_CXX_COMPILER_TARGET="${LLVM_TRIPLE}"
-DLIBCXX_USE_COMPILER_RT:BOOL=ON
-DLIBCXX_CXX_ABI=libcxxrt
-DLIBCXXABI_USE_LLVM_UNWINDER:BOOL=ON
-DLIBCXXABI_USE_COMPILER_RT=ON
-DLIBUNWIND_ENABLE_SHARED:BOOL=OFF
-DBUILD_SHARED_LIBS=OFF
-DSANITIZER_IOS=0
-DCOMPILER_RT_BUILD_BUILTINS:BOOL=ON
-DCOMPILER_RT_ENABLE_IOS:BOOL=OFF
-DCOMPILER_RT_ENABLE_WATCHOS:BOOL=OFF
-DCOMPILER_RT_ENABLE_TVOS:BOOL=OFF
-DCOMPILER_RT_ENABLE_MACCATALYST:BOOL=OFF
-DCOMPILER_RT_BUILD_LIBFUZZER:BOOL=ON
-DCOMPILER_RT_BUILD_MEMPROF:BOOL=ON
-DCOMPILER_RT_BUILD_PROFILE:BOOL=ON
-DCOMPILER_RT_BUILD_SANITIZERS:BOOL=ON
-DCOMPILER_RT_BUILD_XRAY:BOOL=ON
-DLLVM_TARGETS_TO_BUILD=X86
-DCOMPILER_RT_DEFAULT_TARGET_ARCH=x86_64
-DCOMPILER_RT_DEFAULT_TARGET_ONLY:BOOL=ON
-DRUNTIMES_BUILD_ALLOW_DARWIN:BOOL=ON
)
# echo "cmake ${cmake_args[@]} -S llvm ${BUILD_DIR} -G Ninja"
cmake "${cmake_args[@]}" -S llvm "${BUILD_DIR}" -G Ninja
ninja -C "${BUILD_DIR}"
cat /opt/llvm17/etc/x86_64-apple-darwin23.3.0-clang.cfg
-fuse-ld=lld -L/opt/llvm17/lib -L/opt/llvm17/lib/darwin -Wl,-rpath,/opt/llvm17/lib
Maybe unset the LDFLAGS since it's in a clang.cfg file now. Why doesn't clang set the rpath by default on macOS?
That actually doesn't work either. llvm-min-tblgen
doesn't use the cfg...
FAILED: include/llvm/IR/IntrinsicsPowerPC.h /llvm-project-18.1.0.src/build/include/llvm/IR/IntrinsicsPowerPC.h
cd /llvm-project-18.1.0.src/build && /llvm-project-18.1.0.src/build/bin/llvm-min-tblgen -gen-intrinsic-enums -intrinsic-prefix=ppc -I /llvm-project-18.1.0.src/llvm/include/llvm/IR -I/llvm-project-18.1.0.src/build/include -I/llvm-project-18.1.0.src/llvm/include /llvm-project-18.1.0.src/llvm/include/llvm/IR/Intrinsics.td --write-if-changed -o include/llvm/IR/IntrinsicsPowerPC.h -d include/llvm/IR/IntrinsicsPowerPC.h.d
dyld[75224]: Library not loaded: @rpath/libc++.1.dylib
Referenced from: <4C4C4468-5555-3144-A177-D2B732114C04> /llvm-project-18.1.0.src/build/bin/llvm-min-tblgen
Reason: no LC_RPATH's found
if you just need cmake to work, then I'd recommend either removing libc from the list of runtimes or adding the following to line 19 of libc/config/darwin/x86_64/entrypoints.txt
.
# errno.h entrypoints
libc.src.errno.errno
If you actually want to build the library, then you need to add these to your cmake options: -DLIBC_COMPILE_OPTIONS_DEFAULT="-DLIBC_COPT_USE_C_ASSERT" -DLIBC_WNO_ERROR=ON
We're not actively supporting x86_64 darwin for libc right now which is why the build is broken. Are you intending to actually use LLVM-libc on x86_64 darwin?
Are you intending to actually use LLVM-libc on x86_64 darwin?
No. Can I just disable that? I'm only using libcxx. I (wrongly) thought libc was used automatically for clang C.
yes you can just disable that. It's not used for anything inside LLVM at the moment. Hopefully it will be in the future though :)
OK, that worked, but now I'm seeing this...
llvm-lipo: error: /var/folders/sg/by4ymb_1491658nz5rdt1k940000gn/T/sanitizer_allocator-b4cc3b/sanitizer_allocator-x86_64.out and /var/folders/sg/by4ymb_1491658nz5rdt1k940000gn/T/sanitizer_allocator-2e2c5c/sanitizer_allocator-x86_64h.out have the same architecture x86_64 and therefore cannot be in the same universal binary
clang++: error: lipo command failed with exit code 1 (use -v to see invocation)
[1537/1748] /llvm-project-18.1.0.src/build/./bin/clang++ --target=x86_64-apple-darwin -DCOMPILER_RT_SHARED_LIB -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Dclang_rt_lsan_osx_dynamic_EXPORTS -I/llvm-project-18.1.0.src/compiler-rt/lib/lsan/.. -O3 -march=native -funroll-loops -finline-functions -mtune=native -fPIC -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -Wall -Wno-unused-parameter -O3 -DNDEBUG -std=c++17 -arch x86_64 -arch x8
The only way I could fix this with llvm 16 and 17 is by hand-editing out the x86_64h from build-config-ix.config
... Is there a magic switch to disable "x86_64h"? I tried specifically saying, "ONLY BUILD THE x86_64" target with the various target settings.
# build-config-ix.config
if(APPLE)
set(ARM64 arm64 arm64e)
set(ARM32 armv7 armv7k armv7s)
set(X86_64 x86_64 x86_64h)
endif()
Probably need to remove x86_64h
if COMPILER_RT_DEFAULT_TARGET_ONLY == ON
The other weird issue is that ninja (or cmake) install only deploys the runtimes to ${PREFIX}/lib/clang/18/lib/darwin
, but clang itself looks for libraries in ${PREFIX}/lib/darwin
. So, I have to symlink ln -s ${PREFIX}/clang/17/lib/darwin ${PREFIX}/darwin
after every installation.
this has gotten beyond libc, so I can't really help you now. It might be worthwhile to remove the libc label to see if someone else can help, or possibly posting on https://discourse.llvm.org/
I got past those, but then got to
ld64.lld: error: undefined symbol: __gxx_personality_v0
>>> referenced by /var/folders/sg/by4ymb_1491658nz5rdt1k940000gn/T/cmake_bootstrap-749374.o:(symbol EH_Frame+0x13)
>>> referenced by /var/folders/sg/by4ymb_1491658nz5rdt1k940000gn/T/cmake_bootstrap-749374.o:(__compact_unwind+0x50)
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
Which I encountered once before, but I don't recall how I fixed it. Attempting to compile with XCode 15 with minimal overrides at -O2
now. That usually works.
#!/usr/local/bin/bash
CLANG_ROOT="/usr"
CLANG_BIN="${CLANG_ROOT}/bin"
export CC=${CLANG_BIN}/clang
export CXX=${CLANG_BIN}/clang++
export LD=${CLANG_BIN}/ld
export AS=${CLANG_BIN}/as
export AR=${CLANG_BIN}/ar
export NM=${CLANG_BIN}/nm
export RANLIB=${CLANG_BIN}/ranlib
export LINKER=${CLANG_BIN}/ld
export LLVM_DIR=${CLANG_ROOT}
export LLVM_PATH=${CLANG_BIN}
export LLVM_ROOT=${CLANG_ROOT}
unset LD_LIBRARY_PATH
unset LIBPATH
unset CXXFLAGS
unset CFLAGS
unset LDFLAGS
unset LIBPATH
unset MSAN_OPTIONS
unset CPLUS_INCLUDE_PATH
unset LD_LIBRARY_PATH
unset LIBRARY_PATH
unset LIBPATH
unset LDFLAGS
BUILD_DIR=build
SOURCE_DIR=${HOME}/llvm-project-18.1.0.src
cd ${SOURCE_DIR}
rm -Rf ${BUILD_DIR}
mkdir ${BUILD_DIR}
unset ASAN_OPTIONS
unset MSAN_OPTIONS
unset CPLUS_INCLUDE_PATH
export PATH="${HOME}/Library/Python/3.9/bin:/usr/bin:/usr/local/bin:${HOME}/bin:${HOME}/.cargo/bin:/usr/local/go/bin:/bin:/usr/sbin:/sbin"
INSTALL_PATH="/opt/llvm18"
CCACHE=/usr/local/bin/ccache
unset NINJA_STATUS
export CFLAGS="-O2"
export CXXFLAGS="-O2"
cmake_args=(
-DCMAKE_BUILD_TYPE=Release
-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lldb;lld"
-DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;compiler-rt"
-DCLANG_CONFIG_FILE_SYSTEM_DIR="${INSTALL_PATH}/etc"
-DLLVM_LOCAL_RPATH="${INSTALL_PATH}/lib;${INSTALL_PATH}/darwin"
-DCLANG_CONFIG_FILE_SYSTEM_DIR="${INSTALL_PATH}/etc"
-DCMAKE_INSTALL_PREFIX="${INSTALL_PATH}"
-DCMAKE_INSTALL_RPATH="${INSTALL_PATH}/lib;${INSTALL_PATH}/lib/darwin"
-DCMAKE_C_COMPILER_LAUNCHER="${CCACHE}"
-DCMAKE_CXX_COMPILER_LAUNCHER="${CCACHE}"
-DCLANG_INCLUDE_TESTS:BOOL=OFF
-DLLVM_INCLUDE_TESTS:BOOL=OFF
-DLLDB_ENABLE_LIBEDIT:BOOL=ON
-DLLDB_ENABLE_CURSES:BOOL=ON
-DDEFAULT_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
-DLLVM_BUILD_TOOLS:BOOL=ON
-DLLVM_ENABLE_LIBCXX:BOOL=ON
-DLLVM_CCACHE_BUILD:BOOL=ON
-DLLVM_ENABLE_TERMINFO:BOOL=ON
-DHAVE_CXX_ATOMICS64_WITHOUT_LIB=True
-DHAVE_CXX_ATOMICS_WITHOUT_LIB=True
-DLLDB_USE_SYSTEM_DEBUGSERVER:BOOL=ON
-DLLVM_PARALLEL_COMPILE_JOBS=8
-DLLVM_PARALLEL_LINK_JOBS=2
-DLLVM_ENABLE_LLD:BOOL=ON
-DLLVM_ENABLE_LIBCXX:BOOL=ON
-DLIBCXXABI_USE_COMPILER_RT=ON
-DCOMPILER_RT_BUILD_BUILTINS:BOOL=ON
-DCOMPILER_RT_ENABLE_IOS:BOOL=OFF
-DCOMPILER_RT_ENABLE_WATCHOS:BOOL=OFF
-DCOMPILER_RT_ENABLE_TVOS:BOOL=OFF
-DCOMPILER_RT_ENABLE_MACCATALYST:BOOL=OFF
-DCOMPILER_RT_BUILD_LIBFUZZER:BOOL=ON
-DCOMPILER_RT_BUILD_MEMPROF:BOOL=ON
-DCOMPILER_RT_BUILD_PROFILE:BOOL=ON
-DCOMPILER_RT_BUILD_SANITIZERS:BOOL=ON
-DCOMPILER_RT_BUILD_XRAY:BOOL=ON
-DRUNTIMES_BUILD_ALLOW_DARWIN:BOOL=ON
)
# echo "cmake ${cmake_args[@]} -S llvm ${BUILD_DIR} -G Ninja"
/usr/local/bin/cmake "${cmake_args[@]}" -S llvm "${BUILD_DIR}" -G Ninja
ninja -C "${BUILD_DIR}"
I haven't seen this before... llvm 15, 16, and 17 all compiled for me.