CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
238 lines
11 KiB
CMake
238 lines
11 KiB
CMake
#
|
|
#//===----------------------------------------------------------------------===//
|
|
#//
|
|
#// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
#// See https://llvm.org/LICENSE.txt for license information.
|
|
#// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
#//
|
|
#//===----------------------------------------------------------------------===//
|
|
#
|
|
|
|
# The following micro-tests are small tests to perform on the library just created.
|
|
# There are currently five micro-tests:
|
|
# (1) test-touch
|
|
# - Compile and run a small program using newly created libomp library
|
|
# - Fails if test-touch.c does not compile or if test-touch.c does not run after compilation
|
|
# - Program dependencies: gcc or g++, grep, bourne shell
|
|
# - Available for all Unix,Mac,Windows builds. Not available on Intel(R) MIC Architecture builds.
|
|
# (2) test-relo
|
|
# - Tests dynamic libraries for position-dependent code (can not have any position dependent code)
|
|
# - Fails if TEXTREL is in output of readelf -d libomp.so command
|
|
# - Program dependencies: readelf, grep, bourne shell
|
|
# - Available for Unix, Intel(R) MIC Architecture dynamic library builds. Not available otherwise.
|
|
# (3) test-execstack
|
|
# - Tests if stack is executable
|
|
# - Fails if stack is executable. Should only be readable and writable. Not executable.
|
|
# - Program dependencies: readelf
|
|
# - Available for Unix dynamic library builds. Not available otherwise.
|
|
# (4) test-deps
|
|
# - Tests newly created libomp for library dependencies
|
|
# - Fails if sees a dependence not listed in td_exp variable below
|
|
# - Program dependencies: (unix)readelf, (mac)otool[64], (windows)link.exe
|
|
# - Available for Unix,Mac,Windows, Intel(R) MIC Architecture dynamic builds and Windows
|
|
# static builds. Not available otherwise.
|
|
|
|
# get library location
|
|
if(WIN32)
|
|
get_target_property(LIBOMP_OUTPUT_DIRECTORY omp RUNTIME_OUTPUT_DIRECTORY)
|
|
get_target_property(LIBOMPIMP_OUTPUT_DIRECTORY ${LIBOMP_IMP_LIB_TARGET} ARCHIVE_OUTPUT_DIRECTORY)
|
|
if(NOT LIBOMPIMP_OUTPUT_DIRECTORY)
|
|
set(LIBOMPIMP_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
|
endif()
|
|
else()
|
|
get_target_property(LIBOMP_OUTPUT_DIRECTORY omp LIBRARY_OUTPUT_DIRECTORY)
|
|
endif()
|
|
if(NOT LIBOMP_OUTPUT_DIRECTORY)
|
|
set(LIBOMP_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
|
endif()
|
|
|
|
# test-touch
|
|
find_program(LIBOMP_SHELL sh)
|
|
if(WIN32)
|
|
if(LIBOMP_SHELL)
|
|
set(libomp_test_touch_targets test-touch-md/.success test-touch-mt/.success)
|
|
endif()
|
|
# pick test-touch compiler
|
|
set(libomp_test_touch_compiler ${CMAKE_C_COMPILER})
|
|
# test-touch compilation flags
|
|
libomp_append(libomp_test_touch_cflags /nologo)
|
|
libomp_append(libomp_test_touch_libs ${LIBOMPIMP_OUTPUT_DIRECTORY}/${LIBOMP_IMP_LIB_FILE})
|
|
if(IA32)
|
|
libomp_append(libomp_test_touch_ldflags /safeseh)
|
|
endif()
|
|
else() # (Unix based systems, Intel(R) MIC Architecture, and Mac)
|
|
if(LIBOMP_SHELL)
|
|
set(libomp_test_touch_targets test-touch-rt/.success)
|
|
endif()
|
|
# pick test-touch compiler
|
|
if(LIBOMP_USE_STDCPPLIB)
|
|
set(libomp_test_touch_compiler ${CMAKE_CXX_COMPILER})
|
|
else()
|
|
set(libomp_test_touch_compiler ${CMAKE_C_COMPILER})
|
|
endif()
|
|
# test-touch compilation flags
|
|
libomp_append(libomp_test_touch_libs "${CMAKE_THREAD_LIBS_INIT}")
|
|
if(IA32)
|
|
libomp_append(libomp_test_touch_cflags -m32 LIBOMP_HAVE_M32_FLAG)
|
|
endif()
|
|
libomp_append(libomp_test_touch_libs ${LIBOMP_OUTPUT_DIRECTORY}/${LIBOMP_LIB_FILE})
|
|
libomp_append(libomp_test_touch_libs "${LIBOMP_HWLOC_LIBRARY}" LIBOMP_USE_HWLOC)
|
|
if(APPLE)
|
|
set(libomp_test_touch_env "DYLD_LIBRARY_PATH=.:${LIBOMP_OUTPUT_DIRECTORY}:$ENV{DYLD_LIBRARY_PATH}")
|
|
libomp_append(libomp_test_touch_ldflags "-Wl,-rpath,${LIBOMP_HWLOC_LIBRARY_DIR}" LIBOMP_USE_HWLOC)
|
|
else()
|
|
set(libomp_test_touch_env "LD_LIBRARY_PATH=.:${LIBOMP_OUTPUT_DIRECTORY}:$ENV{LD_LIBRARY_PATH}")
|
|
libomp_append(libomp_test_touch_ldflags "-Wl,-rpath=${LIBOMP_HWLOC_LIBRARY_DIR}" LIBOMP_USE_HWLOC)
|
|
endif()
|
|
endif()
|
|
macro(libomp_test_touch_recipe test_touch_dir)
|
|
set(libomp_test_touch_dependencies ${LIBOMP_SRC_DIR}/test-touch.c omp)
|
|
set(libomp_test_touch_exe ${test_touch_dir}/test-touch${CMAKE_EXECUTABLE_SUFFIX})
|
|
if(WIN32)
|
|
if(RELEASE_BUILD OR RELWITHDEBINFO_BUILD)
|
|
if(test_touch_dir MATCHES "test-touch-mt")
|
|
libomp_append(libomp_test_touch_cflags /MT)
|
|
else()
|
|
libomp_append(libomp_test_touch_cflags /MD)
|
|
endif()
|
|
else()
|
|
if(test_touch_dir MATCHES "test-touch-mt")
|
|
libomp_append(libomp_test_touch_cflags /MTd)
|
|
else()
|
|
libomp_append(libomp_test_touch_cflags /MDd)
|
|
endif()
|
|
endif()
|
|
set(libomp_test_touch_out_flags -Fe${libomp_test_touch_exe})
|
|
list(APPEND libomp_test_touch_dependencies ompimp)
|
|
else()
|
|
set(libomp_test_touch_out_flags -o ${libomp_test_touch_exe})
|
|
endif()
|
|
add_custom_command(
|
|
OUTPUT ${test_touch_dir}/.success ${libomp_test_touch_exe}
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/${test_touch_dir}
|
|
COMMAND ${CMAKE_COMMAND} -E remove -f ${test_touch_dir}/*
|
|
COMMAND ${libomp_test_touch_compiler} ${libomp_test_touch_out_flags} ${libomp_test_touch_cflags}
|
|
${LIBOMP_SRC_DIR}/test-touch.c ${libomp_test_touch_ldflags} ${libomp_test_touch_libs}
|
|
COMMAND ${LIBOMP_SHELL} -c \"${libomp_test_touch_env} ${libomp_test_touch_exe}\"
|
|
COMMAND ${CMAKE_COMMAND} -E touch ${test_touch_dir}/.success
|
|
DEPENDS ${libomp_test_touch_dependencies}
|
|
)
|
|
endmacro()
|
|
libomp_append(libomp_test_touch_env "KMP_VERSION=1")
|
|
add_custom_target(libomp-test-touch DEPENDS ${libomp_test_touch_targets})
|
|
set_target_properties(libomp-test-touch PROPERTIES FOLDER "OpenMP/Tests")
|
|
if(WIN32)
|
|
libomp_test_touch_recipe(test-touch-mt)
|
|
libomp_test_touch_recipe(test-touch-md)
|
|
else()
|
|
libomp_test_touch_recipe(test-touch-rt)
|
|
endif()
|
|
|
|
# test-relo
|
|
add_custom_target(libomp-test-relo DEPENDS test-relo/.success)
|
|
set_target_properties(libomp-test-relo PROPERTIES FOLDER "OpenMP/Tests")
|
|
add_custom_command(
|
|
OUTPUT test-relo/.success test-relo/readelf.log
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/test-relo
|
|
COMMAND readelf -d ${LIBOMP_OUTPUT_DIRECTORY}/${LIBOMP_LIB_FILE} > test-relo/readelf.log
|
|
COMMAND grep -e TEXTREL test-relo/readelf.log \; test $$? -eq 1
|
|
COMMAND ${CMAKE_COMMAND} -E touch test-relo/.success
|
|
DEPENDS omp
|
|
)
|
|
|
|
# test-execstack
|
|
add_custom_target(libomp-test-execstack DEPENDS test-execstack/.success)
|
|
set_target_properties(libomp-test-execstack PROPERTIES FOLDER "OpenMP/Tests")
|
|
add_custom_command(
|
|
OUTPUT test-execstack/.success
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/test-execstack
|
|
COMMAND ${Python3_EXECUTABLE} ${LIBOMP_TOOLS_DIR}/check-execstack.py
|
|
${LIBOMP_OUTPUT_DIRECTORY}/${LIBOMP_LIB_FILE}
|
|
COMMAND ${CMAKE_COMMAND} -E touch test-execstack/.success
|
|
DEPENDS omp ${LIBOMP_TOOLS_DIR}/check-execstack.py
|
|
)
|
|
|
|
# test-deps
|
|
add_custom_target(libomp-test-deps DEPENDS test-deps/.success)
|
|
set_target_properties(libomp-test-deps PROPERTIES FOLDER "OpenMP/Tests")
|
|
set(libomp_expected_library_deps)
|
|
if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
|
|
set(libomp_expected_library_deps libc.so.7 libthr.so.3 libm.so.5)
|
|
libomp_append(libomp_expected_library_deps libhwloc.so.5 LIBOMP_USE_HWLOC)
|
|
elseif(CMAKE_SYSTEM_NAME MATCHES "NetBSD")
|
|
set(libomp_expected_library_deps libc.so.12 libpthread.so.1 libm.so.0)
|
|
libomp_append(libomp_expected_library_deps libhwloc.so.5 LIBOMP_USE_HWLOC)
|
|
elseif(CMAKE_SYSTEM_NAME MATCHES "DragonFly")
|
|
set(libomp_expected_library_deps libc.so.8 libpthread.so.0 libm.so.4)
|
|
libomp_append(libomp_expected_library_deps libhwloc.so.5 LIBOMP_USE_HWLOC)
|
|
elseif(APPLE)
|
|
set(libomp_expected_library_deps /usr/lib/libSystem.B.dylib)
|
|
elseif(WIN32)
|
|
set(libomp_expected_library_deps kernel32.dll)
|
|
libomp_append(libomp_expected_library_deps api-ms-win-crt-convert-l1-1-0.dll)
|
|
libomp_append(libomp_expected_library_deps api-ms-win-crt-environment-l1-1-0.dll)
|
|
libomp_append(libomp_expected_library_deps api-ms-win-crt-heap-l1-1-0.dll)
|
|
libomp_append(libomp_expected_library_deps api-ms-win-crt-runtime-l1-1-0.dll)
|
|
libomp_append(libomp_expected_library_deps api-ms-win-crt-stdio-l1-1-0.dll)
|
|
libomp_append(libomp_expected_library_deps api-ms-win-crt-string-l1-1-0.dll)
|
|
libomp_append(libomp_expected_library_deps api-ms-win-crt-utility-l1-1-0.dll)
|
|
libomp_append(libomp_expected_library_deps vcruntime140.dll)
|
|
libomp_append(libomp_expected_library_deps psapi.dll)
|
|
else()
|
|
if(MIC)
|
|
set(libomp_expected_library_deps libc.so.6 libpthread.so.0 libdl.so.2)
|
|
if("${LIBOMP_MIC_ARCH}" STREQUAL "knf")
|
|
libomp_append(libomp_expected_library_deps ld-linux-l1om.so.2)
|
|
libomp_append(libomp_expected_library_deps libgcc_s.so.1)
|
|
elseif("${LIBOMP_MIC_ARCH}" STREQUAL "knc")
|
|
libomp_append(libomp_expected_library_deps ld-linux-k1om.so.2)
|
|
endif()
|
|
else()
|
|
set(libomp_expected_library_deps libdl.so.2 libgcc_s.so.1)
|
|
if(IA32)
|
|
libomp_append(libomp_expected_library_deps libc.so.6)
|
|
libomp_append(libomp_expected_library_deps ld-linux.so.2)
|
|
libomp_append(libomp_expected_library_deps librt.so.1)
|
|
elseif(INTEL64)
|
|
libomp_append(libomp_expected_library_deps libc.so.6)
|
|
libomp_append(libomp_expected_library_deps ld-linux-x86-64.so.2)
|
|
libomp_append(libomp_expected_library_deps librt.so.1)
|
|
elseif(ARM)
|
|
libomp_append(libomp_expected_library_deps libc.so.6)
|
|
libomp_append(libomp_expected_library_deps libffi.so.6)
|
|
libomp_append(libomp_expected_library_deps libffi.so.5)
|
|
libomp_append(libomp_expected_library_deps ld-linux-armhf.so.3)
|
|
elseif(PPC64)
|
|
libomp_append(libomp_expected_library_deps libc.so.6)
|
|
libomp_append(libomp_expected_library_deps ld64.so.1)
|
|
elseif(MIPS OR MIPS64)
|
|
libomp_append(libomp_expected_library_deps libc.so.6)
|
|
libomp_append(libomp_expected_library_deps ld.so.1)
|
|
elseif(RISCV64)
|
|
libomp_append(libomp_expected_library_deps libc.so.6)
|
|
libomp_append(libomp_expected_library_deps ld.so.1)
|
|
elseif(LOONGARCH64)
|
|
libomp_append(libomp_expected_library_deps libc.so.6)
|
|
libomp_append(libomp_expected_library_deps ld.so.1)
|
|
elseif(S390X)
|
|
libomp_append(libomp_expected_library_deps libc.so.6)
|
|
libomp_append(libomp_expected_library_deps ld.so.1)
|
|
endif()
|
|
libomp_append(libomp_expected_library_deps libpthread.so.0 IF_FALSE STUBS_LIBRARY)
|
|
libomp_append(libomp_expected_library_deps libhwloc.so.5 LIBOMP_USE_HWLOC)
|
|
endif()
|
|
libomp_append(libomp_expected_library_deps libstdc++.so.6 LIBOMP_USE_STDCPPLIB)
|
|
libomp_append(libomp_expected_library_deps libm.so.6 LIBOMP_STATS)
|
|
endif()
|
|
# Check depends script expects comma separated list
|
|
string(REPLACE ";" "," libomp_expected_library_deps "${libomp_expected_library_deps}")
|
|
add_custom_command(
|
|
OUTPUT test-deps/.success
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/test-deps
|
|
COMMAND ${Python3_EXECUTABLE} ${LIBOMP_TOOLS_DIR}/check-depends.py
|
|
--expected="${libomp_expected_library_deps}"
|
|
${LIBOMP_OUTPUT_DIRECTORY}/${LIBOMP_LIB_FILE}
|
|
COMMAND ${CMAKE_COMMAND} -E touch test-deps/.success
|
|
DEPENDS omp ${LIBOMP_TOOLS_DIR}/check-depends.py
|
|
)
|