CMake: Added logic to link openmp library given through OpenMP_libomp_LIBRARY cmake variable on linux.

Enabled command line option to link libiomp5.so or libomp.so or libgomp.so libraries using cmake.
Eg:- -DOpenMP_libomp_LIBRARY=<path to openmp library including library name>.
If we not set above variable, by default openmp library will be libomp.so for clang and libgomp.so for gcc compiler.

Change-Id: I5bffa10ff8351f5d10f0d543cbdf55aa16c84c90
This commit is contained in:
Chandrashekara K R
2024-05-16 17:59:04 +05:30
committed by Chandrashekara KR
parent 91bdf9a3eb
commit fa75ce725e
5 changed files with 32 additions and 6 deletions

View File

@@ -155,6 +155,8 @@ if(WIN32)
option(ENABLE_UPPERCASE_API "Export APIs with uppercase." OFF)
# Setting path to OpenMP runtime.
set(OpenMP_libomp_LIBRARY "C:/Program Files/LLVM/lib/libomp.lib" CACHE STRING "openmp library path")
else(WIN32)
set(OpenMP_libomp_LIBRARY "" CACHE STRING "openmp library path")
endif()
# Debug & Release flags option setting is only available for Linux. On Windows the default flags are used.
if(NOT MSVC)
@@ -1166,7 +1168,11 @@ if(BUILD_SHARED_LIBS)
set_target_properties(libblis-shared PROPERTIES LINKER_LANGUAGE C VERSION ${VERSION} SOVERSION ${SO_VERSION_MAJOR})
set_target_properties(libblis-shared PROPERTIES POSITION_INDEPENDENT_CODE ON)
if(THREADING_MODEL STREQUAL "openmp")
target_link_libraries(libblis-shared PRIVATE OpenMP::OpenMP_C)
if((NOT ${OpenMP_libomp_LIBRARY} STREQUAL "") AND (NOT WIN32))
target_link_libraries(libblis-shared PRIVATE ${OpenMP_libomp_LIBRARY})
else()
target_link_libraries(libblis-shared PRIVATE OpenMP::OpenMP_C)
endif()
endif()
add_dependencies(libblis-shared flat-header)
if(ENABLE_CBLAS)

View File

@@ -136,7 +136,11 @@ function(benchexe extn)
)
target_link_libraries(${exec_name}.x PRIVATE ${BLAS_LIBS} ${LIBBLIS} ${LDFLAGS})
if(THREADING_MODEL STREQUAL "openmp")
target_link_libraries(${exec_name}.x PRIVATE OpenMP::OpenMP_C)
if((NOT ${OpenMP_libomp_LIBRARY} STREQUAL "") AND (NOT WIN32))
target_link_libraries(${exec_name}.x PRIVATE ${OpenMP_libomp_LIBRARY})
else()
target_link_libraries(${exec_name}.x PRIVATE OpenMP::OpenMP_C)
endif()
endif()
list(APPEND temp_executables ${exec_name}.x)
endforeach()

View File

@@ -49,7 +49,11 @@ target_include_directories(f2c
)
target_link_libraries(f2c PRIVATE ${LDFLAGS})
if(THREADING_MODEL STREQUAL "openmp")
target_link_libraries(f2c PRIVATE OpenMP::OpenMP_C)
if((NOT ${OpenMP_libomp_LIBRARY} STREQUAL "") AND (NOT WIN32))
target_link_libraries(f2c PRIVATE ${OpenMP_libomp_LIBRARY})
else()
target_link_libraries(f2c PRIVATE OpenMP::OpenMP_C)
endif()
endif()
# Put all those targets under blastest-targets-targets folder name so that they appear all together in IDE.
set_target_properties(f2c PROPERTIES FOLDER blastest-targets)
@@ -93,7 +97,11 @@ foreach(source ${blastest_sources})
)
target_link_libraries(${exec_name}.x PRIVATE f2c ${libblis_link} ${LDFLAGS})
if(THREADING_MODEL STREQUAL "openmp")
target_link_libraries(${exec_name}.x PRIVATE OpenMP::OpenMP_C)
if((NOT ${OpenMP_libomp_LIBRARY} STREQUAL "") AND (NOT WIN32))
target_link_libraries(${exec_name}.x PRIVATE ${OpenMP_libomp_LIBRARY})
else()
target_link_libraries(${exec_name}.x PRIVATE OpenMP::OpenMP_C)
endif()
endif()
set_target_properties(${exec_name}.x PROPERTIES CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
# Put all those targets under blastest-targets-targets folder name so that they appear all together in IDE.

View File

@@ -70,7 +70,11 @@ target_include_directories(test_libblis.x
)
target_link_libraries(test_libblis.x PRIVATE ${libblis_link} ${LDFLAGS})
if(THREADING_MODEL STREQUAL "openmp")
target_link_libraries(test_libblis.x PRIVATE OpenMP::OpenMP_C)
if((NOT ${OpenMP_libomp_LIBRARY} STREQUAL "") AND (NOT WIN32))
target_link_libraries(test_libblis.x PRIVATE ${OpenMP_libomp_LIBRARY})
else()
target_link_libraries(test_libblis.x PRIVATE OpenMP::OpenMP_C)
endif()
endif()
# -- Test run/check rules --

View File

@@ -53,7 +53,11 @@ foreach(source ${testcpp_sources})
)
target_link_libraries(${exec_name} PRIVATE ${LDFLAGS} ${libblis_link})
if(THREADING_MODEL STREQUAL "openmp")
target_link_libraries(${exec_name} PRIVATE OpenMP::OpenMP_C)
if((NOT ${OpenMP_libomp_LIBRARY} STREQUAL "") AND (NOT WIN32))
target_link_libraries(${exec_name} PRIVATE ${OpenMP_libomp_LIBRARY})
else()
target_link_libraries(${exec_name} PRIVATE OpenMP::OpenMP_C)
endif()
endif()
set_target_properties(${exec_name} PROPERTIES CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
# Put all those targets under vendor-testcpp-targets folder name so that they appear all together in IDE.