aboutsummaryrefslogtreecommitdiff
path: root/final/runtime/cmake/LibompMicroTests.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'final/runtime/cmake/LibompMicroTests.cmake')
-rw-r--r--final/runtime/cmake/LibompMicroTests.cmake228
1 files changed, 228 insertions, 0 deletions
diff --git a/final/runtime/cmake/LibompMicroTests.cmake b/final/runtime/cmake/LibompMicroTests.cmake
new file mode 100644
index 0000000..0918fdd
--- /dev/null
+++ b/final/runtime/cmake/LibompMicroTests.cmake
@@ -0,0 +1,228 @@
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+
+# 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 exectuable.
+# - Program dependencies: perl, readelf
+# - Available for Unix dynamic library builds. Not available otherwise.
+# (4) test-instr (Intel(R) MIC Architecutre only)
+# - Tests Intel(R) MIC Architecture libraries for valid instruction set
+# - Fails if finds invalid instruction for Intel(R) MIC Architecture (wasn't compiled with correct flags)
+# - Program dependencies: perl, objdump
+# - Available for Intel(R) MIC Architecture and i386 builds. Not available otherwise.
+# (5) test-deps
+# - Tests newly created libomp for library dependencies
+# - Fails if sees a dependence not listed in td_exp variable below
+# - Program dependencies: perl, (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 ompimp 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})
+ set(libomp_test_touch_obj ${test_touch_dir}/test-touch${CMAKE_C_OUTPUT_EXTENSION})
+ 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} -Fo${libomp_test_touch_obj})
+ 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} ${libomp_test_touch_obj}
+ 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})
+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)
+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)
+add_custom_command(
+ OUTPUT test-execstack/.success
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/test-execstack
+ COMMAND ${PERL_EXECUTABLE} ${LIBOMP_TOOLS_DIR}/check-execstack.pl
+ --arch=${LIBOMP_PERL_SCRIPT_ARCH} ${LIBOMP_OUTPUT_DIRECTORY}/${LIBOMP_LIB_FILE}
+ COMMAND ${CMAKE_COMMAND} -E touch test-execstack/.success
+ DEPENDS omp
+)
+
+# test-instr
+add_custom_target(libomp-test-instr DEPENDS test-instr/.success)
+add_custom_command(
+ OUTPUT test-instr/.success
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/test-instr
+ COMMAND ${PERL_EXECUTABLE} ${LIBOMP_TOOLS_DIR}/check-instruction-set.pl --os=${LIBOMP_PERL_SCRIPT_OS}
+ --arch=${LIBOMP_PERL_SCRIPT_ARCH} --show --mic-arch=${LIBOMP_MIC_ARCH} ${LIBOMP_OUTPUT_DIRECTORY}/${LIBOMP_LIB_FILE}
+ COMMAND ${CMAKE_COMMAND} -E touch test-instr/.success
+ DEPENDS omp ${LIBOMP_TOOLS_DIR}/check-instruction-set.pl
+)
+
+# test-deps
+add_custom_target(libomp-test-deps DEPENDS test-deps/.success)
+set(libomp_expected_library_deps)
+if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
+ set(libomp_expected_library_deps libc.so.7 libthr.so.3)
+ 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(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 psapi.dll LIBOMP_OMPT_SUPPORT)
+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)
+ elseif(${INTEL64})
+ libomp_append(libomp_expected_library_deps libc.so.6)
+ libomp_append(libomp_expected_library_deps ld-linux-x86-64.so.2)
+ 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)
+ 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()
+# Perl 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 ${PERL_EXECUTABLE} ${LIBOMP_TOOLS_DIR}/check-depends.pl --os=${LIBOMP_PERL_SCRIPT_OS}
+ --arch=${LIBOMP_PERL_SCRIPT_ARCH} --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.pl
+)