llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
28.48k stars 11.77k forks source link

apple build 18.1.4 for arm64 error #90568

Closed calvin2021y closed 4 months ago

calvin2021y commented 5 months ago
llvm/utils/release/test-release.sh \
  -release 18.1.4\
  -final \
  -triple arm64-apple-darwin22 \
  -j 4 \
  -use-ninja \
  -configure-flags  "-DLLVM_USE_STATIC_ZSTD=ON" \
  -lldb 
: && /opt/projects/llvm-project/final/Phase2/Release/llvmCore-18.1.4-final.install/usr/local/bin/clang -fPIC -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wc++98-compat-extra-semi -Wimplicit-fallthrough -Wcovered-switch-default -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -Wall -fcolor-diagnostics -Wcast-qual -Wformat-pedantic -Wimplicit-fallthrough -Wsign-compare -Wno-enum-constexpr-conversion -Wno-extra -Wno-pedantic -fno-semantic-interposition -fdata-sections -O3 -DNDEBUG -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk -mmacosx-version-min=13.6 -dynamiclib -Wl,-headerpad_max_install_names -current_version 5.0 -compatibility_version 5.0 -o lib/libomp.dylib -install_name @rpath/libomp.dylib projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_alloc.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_atomic.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_csupport.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_debug.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_itt.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_environment.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_error.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_global.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_i18n.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_io.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_runtime.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_settings.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_str.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_tasking.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_threadprivate.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_utility.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_barrier.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_wait_release.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_affinity.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_dispatch.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_lock.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_sched.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_collapse.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/z_Linux_util.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_gsupport.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/thirdparty/ittnotify/ittnotify_static.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_taskdeps.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_cancel.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_ftn_cdecl.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_ftn_extra.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_version.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/ompt-general.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/z_Linux_asm.S.o   && cd /opt/projects/llvm-project/final/Phase3/Release/llvmCore-18.1.4-final.obj/lib && /Applications/CMake.app/Contents/bin/cmake -E create_symlink libomp.dylib libgomp.dylib && /Applications/CMake.app/Contents/bin/cmake -E create_symlink libomp.dylib libiomp5.dylib
ld: Undefined symbols:
  ___divdc3, referenced from:
      ___kmpc_atomic_cmplx8_div in kmp_atomic.cpp.o
      ___kmpc_atomic_cmplx8_div in kmp_atomic.cpp.o
      ___kmpc_atomic_cmplx4_div_cmplx8 in kmp_atomic.cpp.o
      ___kmpc_atomic_cmplx4_div_cmplx8 in kmp_atomic.cpp.o
      ___kmpc_atomic_cmplx8_div_cpt in kmp_atomic.cpp.o
      ___kmpc_atomic_cmplx8_div_cpt in kmp_atomic.cpp.o
      ___kmpc_atomic_cmplx10_div_cpt in kmp_atomic.cpp.o
      ___kmpc_atomic_cmplx10_div_cpt in kmp_atomic.cpp.o
      ...
  ___divsc3, referenced from:
      ___kmpc_atomic_cmplx4_div in kmp_atomic.cpp.o
      ___kmpc_atomic_cmplx4_div in kmp_atomic.cpp.o
      ___kmpc_atomic_cmplx4_div in kmp_atomic.cpp.o
      ___kmpc_atomic_cmplx4_div_cpt in kmp_atomic.cpp.o
      ___kmpc_atomic_cmplx4_div_cpt in kmp_atomic.cpp.o
      ___kmpc_atomic_cmplx4_div_cpt in kmp_atomic.cpp.o
      ___kmpc_atomic_cmplx4_div_cpt in kmp_atomic.cpp.o
      ...
clang: error: linker command failed with exit code 1 (use -v to see invocation)
llvmbot commented 5 months ago

@llvm/issue-subscribers-openmp

Author: None (calvin2021y)

```sh llvm/utils/release/test-release.sh \ -release 18.1.4\ -final \ -triple arm64-apple-darwin22 \ -j 4 \ -use-ninja \ -configure-flags "-DLLVM_USE_STATIC_ZSTD=ON" \ -lldb ``` ```sh : && /opt/projects/llvm-project/final/Phase2/Release/llvmCore-18.1.4-final.install/usr/local/bin/clang -fPIC -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wc++98-compat-extra-semi -Wimplicit-fallthrough -Wcovered-switch-default -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -Wall -fcolor-diagnostics -Wcast-qual -Wformat-pedantic -Wimplicit-fallthrough -Wsign-compare -Wno-enum-constexpr-conversion -Wno-extra -Wno-pedantic -fno-semantic-interposition -fdata-sections -O3 -DNDEBUG -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk -mmacosx-version-min=13.6 -dynamiclib -Wl,-headerpad_max_install_names -current_version 5.0 -compatibility_version 5.0 -o lib/libomp.dylib -install_name @rpath/libomp.dylib projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_alloc.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_atomic.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_csupport.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_debug.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_itt.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_environment.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_error.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_global.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_i18n.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_io.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_runtime.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_settings.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_str.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_tasking.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_threadprivate.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_utility.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_barrier.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_wait_release.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_affinity.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_dispatch.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_lock.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_sched.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_collapse.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/z_Linux_util.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_gsupport.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/thirdparty/ittnotify/ittnotify_static.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_taskdeps.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_cancel.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_ftn_cdecl.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_ftn_extra.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_version.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/ompt-general.cpp.o projects/openmp/runtime/src/CMakeFiles/omp.dir/z_Linux_asm.S.o && cd /opt/projects/llvm-project/final/Phase3/Release/llvmCore-18.1.4-final.obj/lib && /Applications/CMake.app/Contents/bin/cmake -E create_symlink libomp.dylib libgomp.dylib && /Applications/CMake.app/Contents/bin/cmake -E create_symlink libomp.dylib libiomp5.dylib ld: Undefined symbols: ___divdc3, referenced from: ___kmpc_atomic_cmplx8_div in kmp_atomic.cpp.o ___kmpc_atomic_cmplx8_div in kmp_atomic.cpp.o ___kmpc_atomic_cmplx4_div_cmplx8 in kmp_atomic.cpp.o ___kmpc_atomic_cmplx4_div_cmplx8 in kmp_atomic.cpp.o ___kmpc_atomic_cmplx8_div_cpt in kmp_atomic.cpp.o ___kmpc_atomic_cmplx8_div_cpt in kmp_atomic.cpp.o ___kmpc_atomic_cmplx10_div_cpt in kmp_atomic.cpp.o ___kmpc_atomic_cmplx10_div_cpt in kmp_atomic.cpp.o ... ___divsc3, referenced from: ___kmpc_atomic_cmplx4_div in kmp_atomic.cpp.o ___kmpc_atomic_cmplx4_div in kmp_atomic.cpp.o ___kmpc_atomic_cmplx4_div in kmp_atomic.cpp.o ___kmpc_atomic_cmplx4_div_cpt in kmp_atomic.cpp.o ___kmpc_atomic_cmplx4_div_cpt in kmp_atomic.cpp.o ___kmpc_atomic_cmplx4_div_cpt in kmp_atomic.cpp.o ___kmpc_atomic_cmplx4_div_cpt in kmp_atomic.cpp.o ... clang: error: linker command failed with exit code 1 (use -v to see invocation) ```
soloth commented 5 months ago

Looks like you have to add openmp runtime to build.

Not sure about exact parameter in your case, but I was able to build LLVM using next command (with latest source version from GH):

cmake -S llvm -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_PROJECTS="clang;lld" \
-DCMAKE_INSTALL_PREFIX=/Users/user/devel/llvm/llvm-rel/ \
-DLLVM_TARGETS_TO_BUILD='AArch64' \
-DLLVM_DEFAULT_TARGET_TRIPLE='aarch64-apple-darwin23.4.0' \
-DLLVM_ENABLE_RUNTIMES="compiler-rt;libcxx;libcxxabi;libunwind;openmp" \
-DLLVM_CREATE_XCODE_TOOLCHAIN=OFF \
-DDEFAULT_SYSROOT="$(xcrun --show-sdk-path)" \
-DLLVM_ENABLE_LIBCXX=ON \
-DLIBCXX_PSTL_CPU_BACKEND=libdispatch

Pay attention to LLVM_ENABLE_RUNTIMES line. I had same errors as yours, by rebuilding LLVM they're gone.

shiltian commented 5 months ago

On macOS compiler-rt is needed to build openmp.

calvin2021y commented 5 months ago

Looks like you have to add openmp runtime to build.

Not sure about exact parameter in your case, but I was able to build LLVM using next command (with latest source version from GH):

cmake -S llvm -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_PROJECTS="clang;lld" \
-DCMAKE_INSTALL_PREFIX=/Users/user/devel/llvm/llvm-rel/ \
-DLLVM_TARGETS_TO_BUILD='AArch64' \
-DLLVM_DEFAULT_TARGET_TRIPLE='aarch64-apple-darwin23.4.0' \
-DLLVM_ENABLE_RUNTIMES="compiler-rt;libcxx;libcxxabi;libunwind;openmp" \
-DLLVM_CREATE_XCODE_TOOLCHAIN=OFF \
-DDEFAULT_SYSROOT="$(xcrun --show-sdk-path)" \
-DLLVM_ENABLE_LIBCXX=ON \
-DLIBCXX_PSTL_CPU_BACKEND=libdispatch

Pay attention to LLVM_ENABLE_RUNTIMES line. I had same errors as yours, by rebuilding LLVM they're gone.

Thanks for the tips, it works for me.

Not sure the llvm/utils/release/test-release.sh need to be fixed or not.

calvin2021y commented 5 months ago

hi @soloth

With your tips the target only for macOS desktop, there is no libclang_rt.asan_ios_dynamic.dylib for IOS and IOS-Simulator library generated.

The llvm/utils/release/test-release.sh scripts will generate ios and IOS-Simulator library files. (but it not work with llvm18 because bugs)

If I need to build macOS and ios/OS-Simulator toolchain at once, what need to be changed to make it work?

soloth commented 5 months ago

If I need to build macOS and ios/OS-Simulator toolchain at once, what need to be changed to make it work?

I have nothing to say about iOS, sorry.

calvin2021y commented 4 months ago

Looks like you have to add openmp runtime to build.

Not sure about exact parameter in your case, but I was able to build LLVM using next command (with latest source version from GH):

cmake -S llvm -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_PROJECTS="clang;lld" \
-DCMAKE_INSTALL_PREFIX=/Users/user/devel/llvm/llvm-rel/ \
-DLLVM_TARGETS_TO_BUILD='AArch64' \
-DLLVM_DEFAULT_TARGET_TRIPLE='aarch64-apple-darwin23.4.0' \
-DLLVM_ENABLE_RUNTIMES="compiler-rt;libcxx;libcxxabi;libunwind;openmp" \
-DLLVM_CREATE_XCODE_TOOLCHAIN=OFF \
-DDEFAULT_SYSROOT="$(xcrun --show-sdk-path)" \
-DLLVM_ENABLE_LIBCXX=ON \
-DLIBCXX_PSTL_CPU_BACKEND=libdispatch

Pay attention to LLVM_ENABLE_RUNTIMES line. I had same errors as yours, by rebuilding LLVM they're gone.

this method with 18.1.6 after install get errors:

dyld[18669]: weak-def symbol not found '__ZnwmSt19__type_descriptor_t'weak-def symbol not found '__ZnamSt19__type_descriptor_t'
mizvekov commented 4 months ago

I am getting the same issue. A bunch of google-test based unit tests are failing:

lvm-lit: /Users/mizvekov/Repos/llvm/1/llvm/utils/lit/lit/formats/googletest.py:38: warning: unable to discover google-tests in '/Users/mizvekov/Repos/llvm/1/build/rwd/llvm/tools/clang/unittests/Sema/./SemaTests': Command '['/Users/mizvekov/Repos/llvm/1/build/rwd/llvm/tools/clang/unittests/Sema/./SemaTests', '--gtest_list_tests', '--gtest_filter=-*DISABLED_*']' died with <Signals.SIGABRT: 6>.. Process output: b''
dyld[86022]: weak-def symbol not found '__ZnwmSt19__type_descriptor_t'weak-def symbol not found '__ZnamSt19__type_descriptor_t'

Failed Tests (31):
    Clang-Unit :: Sema/./SemaTests/failed_to_discover_tests_from_gtest

It seems these tests are getting linked with the just built libcxx, instead of system libcxx.

shiltian commented 4 months ago

Does compiler-rt support iOS? There are certain functions used in libomp that are part of compiler-rt. It is not a macOS thing actually. On Linux, those functions are provided in GCC's compiler-rt. If a platform doesn't support compiler-rt, then that would be another issue.

I did once try to implement those functions in libomp successfully, as shown in https://github.com/llvm/llvm-project/pull/83767. Later I realized I should not do that. That being said, probably the workaround here is to take that PR and see if libomp still builds.

shiltian commented 4 months ago

I'll close this issue for now since I don't think there is anything wrong on the OpenMP side.