diff --git a/cmake/utils/FindLLVM.cmake b/cmake/utils/FindLLVM.cmake index e46f08a776ad..2c70a3ae4adf 100644 --- a/cmake/utils/FindLLVM.cmake +++ b/cmake/utils/FindLLVM.cmake @@ -110,6 +110,7 @@ macro(find_llvm use_llvm) if(NOT "${__llvm_exit_code}" STREQUAL "0") message(FATAL_ERROR "Fatal error executing: ${LLVM_CONFIG} --libdir") endif() + message(STATUS "LLVM libdir: ${__llvm_libdir}") # map prefix => $ # to handle the case when the prefix contains space. string(REPLACE ${__llvm_prefix} "$" __llvm_cxxflags ${__llvm_cxxflags_space}) @@ -144,14 +145,33 @@ macro(find_llvm use_llvm) endforeach() separate_arguments(__llvm_system_libs) foreach(__flag IN ITEMS ${__llvm_system_libs}) - # If the library file ends in .lib try to - # also search the llvm_libdir - if(__flag MATCHES ".lib$") - if(EXISTS "${__llvm_libdir}/${__flag}") - set(__flag "${__llvm_libdir}/${__flag}") + if("${__flag}" STREQUAL "-lm") + message(STATUS "LLVM links against math") + list(APPEND LLVM_LIBS "m") + elseif(("${__flag}" STREQUAL "-lz") OR ("${__flag}" STREQUAL "z.lib")) + message(STATUS "LLVM links against zlib") + find_package(ZLIB REQUIRED) + list(APPEND LLVM_LIBS "ZLIB::ZLIB") + elseif("${__flag}" STREQUAL "-lzstd" OR ("${__flag}" STREQUAL "zstd.dll.lib")) + find_package(zstd REQUIRED) + if (TARGET "zstd::libzstd_static") + message(STATUS "LLVM links against static zstd") + list(APPEND LLVM_LIBS "zstd::libzstd_static") + else() + message(STATUS "LLVM links against shared zstd") + list(APPEND LLVM_LIBS "zstd::libzstd_shared") endif() + elseif("${__flag}" STREQUAL "-lxml2") + message(STATUS "LLVM links against xml2") + list(APPEND LLVM_LIBS "-lxml2") + elseif((__flag MATCHES ".lib$") AND (EXISTS "${__llvm_libdir}/${__flag}")) + # If the library file ends in .lib try to also search the llvm_libdir + message(STATUS "LLVM linker flag under LLVM libdir: ${__llvm_libdir}/${__flag}") + list(APPEND LLVM_LIBS "${__llvm_libdir}/${__flag}") + else() + message(STATUS "LLVM linker flag: ${__flag}") + list(APPEND LLVM_LIBS "${__flag}") endif() - list(APPEND LLVM_LIBS "${__flag}") endforeach() endif() message(STATUS "Found LLVM_INCLUDE_DIRS=" "${LLVM_INCLUDE_DIRS}") diff --git a/tests/scripts/task_config_build_minimal_cross_isa.sh b/tests/scripts/task_config_build_minimal_cross_isa.sh index eb757de1ef2a..7fba9deee6a1 100755 --- a/tests/scripts/task_config_build_minimal_cross_isa.sh +++ b/tests/scripts/task_config_build_minimal_cross_isa.sh @@ -44,6 +44,7 @@ if [ "$architecture_type" != "aarch64" ]; then echo set\(CMAKE_FIND_ROOT_PATH /usr/aarch64-linux-gnu\) >> config.cmake echo set\(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER\) >> config.cmake echo set\(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY\) >> config.cmake + echo set\(ZLIB_LIBRARY /lib/aarch64-linux-gnu/libz.a\) >> config.cmake else # This usually runs in the ci_arm docker image. echo -e 'find_program(LLVM_CONFIG "llvm-config")\nif (LLVM_CONFIG) \n\tset(USE_LLVM llvm-config) \nelse() \n\tset(USE_LLVM llvm-config-15)\nendif()' >> config.cmake