Skip to content

Commit e82f077

Browse files
committed
[Offload] Support standalone build for OpenMP and Offload
Moved some of the common functionality in a top-level common cmake module and fixed path and inclusion issues. Depends on #75125
1 parent 4291503 commit e82f077

File tree

6 files changed

+121
-47
lines changed

6 files changed

+121
-47
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# Check if OMPT support is available
2+
# Currently, __builtin_frame_address() is required for OMPT
3+
# Weak attribute is required for Unices (except Darwin), LIBPSAPI is used for Windows
4+
if(NOT LIBOMP_ARCH)
5+
include(LibompGetArchitecture)
6+
libomp_get_architecture(LIBOMP_DETECTED_ARCH)
7+
set(LIBOMP_ARCH ${LIBOMP_DETECTED_ARCH})
8+
endif()
9+
10+
check_c_source_compiles("int main(int argc, char** argv) {
11+
void* p = __builtin_frame_address(0);
12+
return 0;}" LIBOMP_HAVE___BUILTIN_FRAME_ADDRESS)
13+
check_c_source_compiles("__attribute__ ((weak)) int foo(int a) { return a*a; }
14+
int main(int argc, char** argv) {
15+
return foo(argc);}" LIBOMP_HAVE_WEAK_ATTRIBUTE)
16+
set(CMAKE_REQUIRED_LIBRARIES psapi)
17+
check_c_source_compiles("#include <windows.h>
18+
#include <psapi.h>
19+
int main(int artc, char** argv) {
20+
return EnumProcessModules(NULL, NULL, 0, NULL);
21+
}" LIBOMP_HAVE_PSAPI)
22+
set(CMAKE_REQUIRED_LIBRARIES)
23+
if(NOT LIBOMP_HAVE___BUILTIN_FRAME_ADDRESS)
24+
set(LIBOMP_HAVE_OMPT_SUPPORT FALSE)
25+
else()
26+
if( # hardware architecture supported?
27+
((LIBOMP_ARCH STREQUAL x86_64) OR
28+
(LIBOMP_ARCH STREQUAL i386) OR
29+
# (LIBOMP_ARCH STREQUAL arm) OR
30+
(LIBOMP_ARCH STREQUAL aarch64) OR
31+
(LIBOMP_ARCH STREQUAL aarch64_32) OR
32+
(LIBOMP_ARCH STREQUAL aarch64_a64fx) OR
33+
(LIBOMP_ARCH STREQUAL ppc64le) OR
34+
(LIBOMP_ARCH STREQUAL ppc64) OR
35+
(LIBOMP_ARCH STREQUAL riscv64) OR
36+
(LIBOMP_ARCH STREQUAL loongarch64) OR
37+
(LIBOMP_ARCH STREQUAL s390x))
38+
AND # OS supported?
39+
((WIN32 AND LIBOMP_HAVE_PSAPI) OR APPLE OR
40+
(NOT (WIN32 OR ${CMAKE_SYSTEM_NAME} MATCHES "AIX") AND LIBOMP_HAVE_WEAK_ATTRIBUTE)))
41+
set(LIBOMP_HAVE_OMPT_SUPPORT TRUE)
42+
else()
43+
set(LIBOMP_HAVE_OMPT_SUPPORT FALSE)
44+
endif()
45+
endif()
46+
47+
# OMPT-support defaults to ON for OpenMP 5.0+ and if the requirements in
48+
# cmake/config-ix.cmake are fulfilled.
49+
set(OMPT_DEFAULT FALSE)
50+
if ((LIBOMP_HAVE_OMPT_SUPPORT) AND (NOT WIN32))
51+
set(OMPT_DEFAULT TRUE)
52+
endif()
53+
set(LIBOMP_OMPT_SUPPORT ${OMPT_DEFAULT} CACHE BOOL
54+
"OMPT-support?")
55+
56+
# Check LIBOMP_HAVE_VERSION_SCRIPT_FLAG
57+
include(LLVMCheckCompilerLinkerFlag)
58+
if(NOT APPLE)
59+
llvm_check_compiler_linker_flag(C "-Wl,--version-script=${CMAKE_CURRENT_LIST_DIR}/../../openmp/runtime/src/exports_test_so.txt" LIBOMP_HAVE_VERSION_SCRIPT_FLAG)
60+
endif()
61+
62+
macro(pythonize_bool var)
63+
if (${var})
64+
set(${var} True)
65+
else()
66+
set(${var} False)
67+
endif()
68+
endmacro()

offload/CMakeLists.txt

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@
1010
#
1111
##===----------------------------------------------------------------------===##
1212

13+
cmake_minimum_required(VERSION 3.20.0)
14+
15+
if (OPENMP_STANDALONE_BUILD OR "${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
16+
set(OPENMP_STANDALONE_BUILD TRUE)
17+
project(omptarget C CXX ASM)
18+
endif()
19+
1320
set(ENABLE_LIBOMPTARGET ON)
1421
# Currently libomptarget cannot be compiled on Windows or MacOS X.
1522
# Since the device plugins are only supported on Linux anyway,
@@ -35,11 +42,12 @@ endif()
3542
# TODO: Leftover from the move, could probably be just LLVM_LIBDIR_SUFFIX everywhere.
3643
set(OFFLOAD_INSTALL_LIBDIR "lib${LLVM_LIBDIR_SUFFIX}")
3744

38-
set(LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
45+
set(LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR}/../cmake)
3946

4047
# Add path for custom modules
4148
list(INSERT CMAKE_MODULE_PATH 0
4249
"${CMAKE_CURRENT_SOURCE_DIR}/cmake"
50+
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules"
4351
"${LLVM_COMMON_CMAKE_UTILS}/Modules"
4452
)
4553

@@ -190,6 +198,10 @@ if (LIBOMPTARGET_USE_LTO)
190198
list(APPEND offload_link_flags ${CMAKE_CXX_COMPILE_OPTIONS_IPO})
191199
endif()
192200

201+
# Set LIBOMP_HAVE_OMPT_SUPPORT and LIBOMP_HAVE_VERSION_SCRIPT_FLAG using common offload/openmp cmake module.
202+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../openmp/runtime/cmake")
203+
include(OffloadOpenmpCommon)
204+
193205
# OMPT support for libomptarget
194206
# Follow host OMPT support and check if host support has been requested.
195207
# LIBOMP_HAVE_OMPT_SUPPORT indicates whether host OMPT support has been implemented.
@@ -214,6 +226,31 @@ set(LIBOMPTARGET_GPU_LIBC_SUPPORT ${LLVM_LIBC_GPU_BUILD} CACHE BOOL
214226
"Libomptarget support for the GPU libc")
215227
pythonize_bool(LIBOMPTARGET_GPU_LIBC_SUPPORT)
216228

229+
if(OPENMP_STANDALONE_BUILD)
230+
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
231+
find_package(LLVM HINTS ${CMAKE_INSTALL_PREFIX})
232+
endif()
233+
find_path (
234+
LIBOMP_OMP_TOOLS_INCLUDE_DIR
235+
NAMES
236+
omp-tools.h
237+
HINTS
238+
${LLVM_INCLUDE_DIRS}
239+
${LLVM_INCLUDE_DIRS}/../lib/clang/${LLVM_VERSION_MAJOR}/include
240+
${CMAKE_INSTALL_PREFIX}/include
241+
REQUIRED
242+
)
243+
find_library (
244+
LIBOMP_STANDALONE
245+
NAMES
246+
omp
247+
HINTS
248+
${LLVM_LIBRARY_DIRS}
249+
${CMAKE_INSTALL_PREFIX}/lib
250+
REQUIRED
251+
)
252+
endif()
253+
217254
set(LIBOMPTARGET_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
218255
message(STATUS "OpenMP tools dir in libomptarget: ${LIBOMP_OMP_TOOLS_INCLUDE_DIR}")
219256
include_directories(${LIBOMP_OMP_TOOLS_INCLUDE_DIR})

offload/plugins-nextgen/host/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ endif()
3333

3434
# Install plugin under the lib destination folder.
3535
install(TARGETS omptarget.rtl.${machine}
36-
LIBRARY DESTINATION "${OPENMP_INSTALL_LIBDIR}")
36+
LIBRARY DESTINATION "${OFFLOAD_INSTALL_LIBDIR}")
3737
set_target_properties(omptarget.rtl.${machine} PROPERTIES
3838
INSTALL_RPATH "$ORIGIN" BUILD_RPATH "$ORIGIN:${CMAKE_CURRENT_BINARY_DIR}/.."
3939
POSITION_INDEPENDENT_CODE ON

offload/src/CMakeLists.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@
1212

1313
libomptarget_say("Building offloading runtime library libomptarget.")
1414

15+
if(LIBOMP_STANDALONE)
16+
set(LIBOMP ${LIBOMP_STANDALONE})
17+
else()
18+
set(LIBOMP omp)
19+
endif()
20+
1521
add_llvm_library(omptarget
1622
SHARED
1723

@@ -38,7 +44,7 @@ add_llvm_library(omptarget
3844

3945
LINK_LIBS
4046
PUBLIC
41-
omp
47+
${LIBOMP}
4248

4349
NO_INSTALL_RPATH
4450
BUILDTREE_ONLY

openmp/CMakeLists.txt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,12 @@ option(OPENMP_ENABLE_LIBOMP_PROFILING "Enable time profiling for libomp." OFF)
113113

114114
# Header install location
115115
if(${OPENMP_STANDALONE_BUILD})
116-
set(LIBOMP_HEADERS_INSTALL_PATH "${CMAKE_INSTALL_INCLUDEDIR}")
116+
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
117+
find_package(LLVM HINTS ${CMAKE_INSTALL_PREFIX} REQUIRED)
118+
set(LIBOMP_HEADERS_INSTALL_PATH "${LLVM_INCLUDE_DIRS}/../lib/clang/${LLVM_VERSION_MAJOR}/include")
119+
else()
120+
set(LIBOMP_HEADERS_INSTALL_PATH "${CMAKE_INSTALL_INCLUDEDIR}")
121+
endif()
117122
else()
118123
include(GetClangResourceDir)
119124
get_clang_resource_dir(LIBOMP_HEADERS_INSTALL_PATH SUBDIR include)

openmp/runtime/cmake/config-ix.cmake

Lines changed: 1 addition & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ include(CheckIncludeFiles)
1818
include(CheckSymbolExists)
1919
include(LibompCheckFortranFlag)
2020
include(LLVMCheckCompilerLinkerFlag)
21+
include(OffloadOpenmpCommon)
2122

2223
# Check for versioned symbols
2324
function(libomp_check_version_symbols retval)
@@ -132,7 +133,6 @@ if(WIN32)
132133
elseif(NOT APPLE)
133134
llvm_check_compiler_linker_flag(C -Wl,-x LIBOMP_HAVE_X_FLAG)
134135
llvm_check_compiler_linker_flag(C -Wl,--as-needed LIBOMP_HAVE_AS_NEEDED_FLAG)
135-
llvm_check_compiler_linker_flag(C "-Wl,--version-script=${LIBOMP_SRC_DIR}/exports_test_so.txt" LIBOMP_HAVE_VERSION_SCRIPT_FLAG)
136136
llvm_check_compiler_linker_flag(C -static-libgcc LIBOMP_HAVE_STATIC_LIBGCC_FLAG)
137137
llvm_check_compiler_linker_flag(C -Wl,-z,noexecstack LIBOMP_HAVE_Z_NOEXECSTACK_FLAG)
138138
endif()
@@ -302,48 +302,6 @@ if(${LIBOMP_STATS})
302302
endif()
303303
endif()
304304

305-
# Check if OMPT support is available
306-
# Currently, __builtin_frame_address() is required for OMPT
307-
# Weak attribute is required for Unices (except Darwin), LIBPSAPI is used for Windows
308-
check_c_source_compiles("int main(int argc, char** argv) {
309-
void* p = __builtin_frame_address(0);
310-
return 0;}" LIBOMP_HAVE___BUILTIN_FRAME_ADDRESS)
311-
check_c_source_compiles("__attribute__ ((weak)) int foo(int a) { return a*a; }
312-
int main(int argc, char** argv) {
313-
return foo(argc);}" LIBOMP_HAVE_WEAK_ATTRIBUTE)
314-
set(CMAKE_REQUIRED_LIBRARIES psapi)
315-
check_c_source_compiles("#include <windows.h>
316-
#include <psapi.h>
317-
int main(int artc, char** argv) {
318-
return EnumProcessModules(NULL, NULL, 0, NULL);
319-
}" LIBOMP_HAVE_PSAPI)
320-
set(CMAKE_REQUIRED_LIBRARIES)
321-
if(NOT LIBOMP_HAVE___BUILTIN_FRAME_ADDRESS)
322-
set(LIBOMP_HAVE_OMPT_SUPPORT FALSE)
323-
else()
324-
if( # hardware architecture supported?
325-
((LIBOMP_ARCH STREQUAL x86_64) OR
326-
(LIBOMP_ARCH STREQUAL i386) OR
327-
# (LIBOMP_ARCH STREQUAL arm) OR
328-
(LIBOMP_ARCH STREQUAL aarch64) OR
329-
(LIBOMP_ARCH STREQUAL aarch64_32) OR
330-
(LIBOMP_ARCH STREQUAL aarch64_a64fx) OR
331-
(LIBOMP_ARCH STREQUAL ppc64le) OR
332-
(LIBOMP_ARCH STREQUAL ppc64) OR
333-
(LIBOMP_ARCH STREQUAL riscv64) OR
334-
(LIBOMP_ARCH STREQUAL loongarch64) OR
335-
(LIBOMP_ARCH STREQUAL s390x))
336-
AND # OS supported?
337-
((WIN32 AND LIBOMP_HAVE_PSAPI) OR APPLE OR
338-
(NOT (WIN32 OR ${CMAKE_SYSTEM_NAME} MATCHES "AIX") AND LIBOMP_HAVE_WEAK_ATTRIBUTE)))
339-
set(LIBOMP_HAVE_OMPT_SUPPORT TRUE)
340-
else()
341-
set(LIBOMP_HAVE_OMPT_SUPPORT FALSE)
342-
endif()
343-
endif()
344-
345-
set(LIBOMP_HAVE_OMPT_SUPPORT ${LIBOMP_HAVE_OMPT_SUPPORT} PARENT_SCOPE)
346-
347305
# Check if HWLOC support is available
348306
if(${LIBOMP_USE_HWLOC})
349307
find_path(LIBOMP_HWLOC_INCLUDE_DIR NAMES hwloc.h HINTS ${LIBOMP_HWLOC_INSTALL_DIR} PATH_SUFFIXES include)

0 commit comments

Comments
 (0)