[Openmp-commits] [openmp] [OpenMP] Add libomp unit test infrastructure (PR #168063)

Robert Imschweiler via Openmp-commits openmp-commits at lists.llvm.org
Wed Dec 17 08:26:18 PST 2025


================
@@ -0,0 +1,63 @@
+add_custom_target(OpenMPUnitTests)
+set_target_properties(OpenMPUnitTests PROPERTIES FOLDER "OpenMP/Tests")
+
+if(WIN32 OR STUBS_LIBRARY)
+  message(WARNING "OpenMP unittests disabled due to stub library or Windows")
+  return()
+endif()
+
+# Build a testing version of libomp that exports all symbols for unit tests.
+# This library uses the same compiled objects as libomp, but with all symbols
+# exported to allow testing internal functions.
+
+libomp_get_ldflags(LIBOMP_TEST_LDFLAGS FOR_UNITTESTS)
+libomp_get_libflags(LIBOMP_TEST_LIBFLAGS)
+
+# Create the testing library from the same objects as libomp.
+add_library(omp_testing SHARED $<TARGET_OBJECTS:obj.omp>)
+set_property(TARGET omp_testing PROPERTY FOLDER "OpenMP/Libraries")
+target_link_libraries(omp_testing PUBLIC default_gtest)
+target_link_libraries(omp_testing PUBLIC ${LIBOMP_TEST_LIBFLAGS} ${LIBOMP_DL_LIBS})
+set_target_properties(omp_testing PROPERTIES
+  PREFIX "" SUFFIX "" OUTPUT_NAME "libomp_testing${LIBOMP_LIBRARY_SUFFIX}"
+  LINK_FLAGS "${LIBOMP_TEST_LDFLAGS}"
+  LINKER_LANGUAGE ${LIBOMP_LINKER_LANGUAGE}
+  EXCLUDE_FROM_ALL TRUE  # Don't build by default, only when tests need it
+)
+target_include_directories(omp_testing PUBLIC
+  ${LIBOMP_INCLUDE_DIR}
+  ${LIBOMP_SRC_DIR}
+)
+
+# Make the targets default_gtest and default_gtest_main available.
+build_gtest()
+
+function(add_openmp_unittest test_name)
+  add_unittest(OpenMPUnitTests ${test_name} ${ARGN})
+
+  # Link against the testing library which exports all symbols.
+  target_link_libraries(${test_name} PRIVATE omp_testing)
+
+  if(TARGET default_gtest)
+    target_link_libraries(${test_name} PRIVATE default_gtest_main default_gtest)
+  else ()
+    target_link_libraries(${test_name} PRIVATE llvm_gtest_main llvm_gtest)
+  endif ()
----------------
ro-i wrote:

I used what you used in your PR you linked previously: https://github.com/llvm/llvm-project/pull/164794/changes#diff-f60dae8e82f67fa5e534e9ea566430d5b79f36119020865dc37b95d9a3635c5e

https://github.com/llvm/llvm-project/pull/168063


More information about the Openmp-commits mailing list