xref: /llvm-project/openmp/runtime/CMakeLists.txt (revision 561b6ab96e9d5b38a5d2672e6cc6823389b75a3f)
1#
2#//===----------------------------------------------------------------------===//
3#//
4#// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5#// See https://llvm.org/LICENSE.txt for license information.
6#// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7#//
8#//===----------------------------------------------------------------------===//
9#
10
11if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
12  message(FATAL_ERROR "Direct configuration not supported, please use parent directory!")
13endif()
14
15# Add cmake directory to search for custom cmake functions
16set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
17
18# Set libomp version
19set(LIBOMP_VERSION_MAJOR 5)
20set(LIBOMP_VERSION_MINOR 0)
21
22# These include files are in the cmake/ subdirectory
23include(LibompUtils)
24include(LibompGetArchitecture)
25include(LibompHandleFlags)
26include(LibompDefinitions)
27
28# Determine the target architecture
29if(${OPENMP_STANDALONE_BUILD})
30  # If adding a new architecture, take a look at cmake/LibompGetArchitecture.cmake
31  libomp_get_architecture(LIBOMP_DETECTED_ARCH)
32  set(LIBOMP_ARCH ${LIBOMP_DETECTED_ARCH} CACHE STRING
33    "The architecture to build for (x86_64/i386/arm/ppc/ppc64/ppc64le/aarch64/aarch64_32/mic/mips/mips64/riscv64/loongarch64/ve/s390x/wasm32).")
34  # Should assertions be enabled?  They are on by default.
35  set(LIBOMP_ENABLE_ASSERTIONS TRUE CACHE BOOL
36    "enable assertions?")
37  string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE)
38else() # Part of LLVM build
39  # Determine the native architecture from LLVM.
40  string(TOLOWER "${LLVM_TARGET_ARCH}" LIBOMP_NATIVE_ARCH)
41  if( LIBOMP_NATIVE_ARCH STREQUAL "host" )
42    string(REGEX MATCH "^[^-]*" LIBOMP_NATIVE_ARCH ${LLVM_HOST_TRIPLE})
43  endif ()
44  if(LIBOMP_NATIVE_ARCH MATCHES "i[2-6]86")
45    set(LIBOMP_ARCH i386)
46  elseif(LIBOMP_NATIVE_ARCH STREQUAL "x86")
47    set(LIBOMP_ARCH i386)
48  elseif(LIBOMP_NATIVE_ARCH STREQUAL "amd64")
49    set(LIBOMP_ARCH x86_64)
50  elseif(LIBOMP_NATIVE_ARCH STREQUAL "x86_64")
51    set(LIBOMP_ARCH x86_64)
52  elseif(LIBOMP_NATIVE_ARCH MATCHES "powerpc64le")
53    set(LIBOMP_ARCH ppc64le)
54  elseif(LIBOMP_NATIVE_ARCH MATCHES "powerpc64")
55    set(LIBOMP_ARCH ppc64)
56  elseif(LIBOMP_NATIVE_ARCH MATCHES "powerpc")
57    set(LIBOMP_ARCH ppc)
58  elseif(LIBOMP_NATIVE_ARCH MATCHES "aarch64_32")
59    set(LIBOMP_ARCH aarch64_32)
60  elseif(LIBOMP_NATIVE_ARCH MATCHES "aarch64")
61    set(LIBOMP_ARCH aarch64)
62  elseif(LIBOMP_NATIVE_ARCH MATCHES "arm64")
63    set(LIBOMP_ARCH aarch64)
64  elseif(LIBOMP_NATIVE_ARCH MATCHES "arm")
65    set(LIBOMP_ARCH arm)
66  elseif(LIBOMP_NATIVE_ARCH MATCHES "riscv64")
67    set(LIBOMP_ARCH riscv64)
68  elseif(LIBOMP_NATIVE_ARCH MATCHES "loongarch64")
69    set(LIBOMP_ARCH loongarch64)
70  elseif(LIBOMP_NATIVE_ARCH MATCHES "ve")
71    set(LIBOMP_ARCH ve)
72  elseif(LIBOMP_NATIVE_ARCH MATCHES "s390x")
73    set(LIBOMP_ARCH s390x)
74  elseif(LIBOMP_NATIVE_ARCH MATCHES "wasm")
75    set(LIBOMP_ARCH wasm32)
76  else()
77    # last ditch effort
78    libomp_get_architecture(LIBOMP_ARCH)
79  endif ()
80  set(LIBOMP_ENABLE_ASSERTIONS ${LLVM_ENABLE_ASSERTIONS})
81endif()
82
83# Time profiling support
84set(LIBOMP_PROFILING_SUPPORT ${OPENMP_ENABLE_LIBOMP_PROFILING})
85
86# FUJITSU A64FX is a special processor because its cache line size is 256.
87# We need to pass this information into kmp_config.h.
88if(LIBOMP_ARCH STREQUAL "aarch64")
89  libomp_is_aarch64_a64fx(LIBOMP_DETECT_AARCH64_A64FX)
90  if (LIBOMP_DETECT_AARCH64_A64FX)
91    set(LIBOMP_ARCH "aarch64_a64fx")
92    set(LIBOMP_ARCH_AARCH64_A64FX TRUE)
93  endif()
94endif()
95
96libomp_check_variable(LIBOMP_ARCH 32e x86_64 32 i386 arm ppc ppc64 ppc64le aarch64 aarch64_32 aarch64_a64fx mic mips mips64 riscv64 loongarch64 ve s390x wasm32)
97
98set(LIBOMP_LIB_TYPE normal CACHE STRING
99  "Performance,Profiling,Stubs library (normal/profile/stubs)")
100libomp_check_variable(LIBOMP_LIB_TYPE normal profile stubs)
101# Set the OpenMP Year and Month associated with version
102set(LIBOMP_OMP_YEAR_MONTH 201611)
103set(LIBOMP_MIC_ARCH knc CACHE STRING
104  "Intel(R) Many Integrated Core Architecture (Intel(R) MIC Architecture) (knf/knc).  Ignored if not Intel(R) MIC Architecture build.")
105if("${LIBOMP_ARCH}" STREQUAL "mic")
106  libomp_check_variable(LIBOMP_MIC_ARCH knf knc)
107endif()
108set(LIBOMP_FORTRAN_MODULES FALSE CACHE BOOL
109  "Create Fortran module files? (requires fortran compiler)")
110
111# - Support for universal fat binary builds on Mac
112# - Having this extra variable allows people to build this library as a universal library
113#   without forcing a universal build of the llvm/clang compiler.
114set(LIBOMP_OSX_ARCHITECTURES "${CMAKE_OSX_ARCHITECTURES}" CACHE STRING
115  "For Mac builds, semicolon separated list of architectures to build for universal fat binary.")
116set(CMAKE_OSX_ARCHITECTURES ${LIBOMP_OSX_ARCHITECTURES})
117
118# Should @rpath be used for dynamic libraries on Mac?
119# The if(NOT DEFINED) is there to guard a cached value of the variable if one
120# exists so there is no interference with what the user wants.  Also, no cache entry
121# is created so there are no inadvertant effects on other parts of LLVM.
122if(NOT DEFINED CMAKE_MACOSX_RPATH)
123  set(CMAKE_MACOSX_RPATH TRUE)
124endif()
125
126# User specified flags.  These are appended to the configured flags.
127set(LIBOMP_CXXFLAGS "" CACHE STRING
128  "Appended user specified C++ compiler flags.")
129set(LIBOMP_CPPFLAGS "" CACHE STRING
130  "Appended user specified C preprocessor flags.")
131set(LIBOMP_ASMFLAGS "" CACHE STRING
132  "Appended user specified assembler flags.")
133set(LIBOMP_LDFLAGS "" CACHE STRING
134  "Appended user specified linker flags.")
135if(${CMAKE_SYSTEM_NAME} MATCHES "AIX")
136  set(LIBOMP_LIBFLAGS "-lperfstat" CACHE STRING
137    "Appended user specified linked libs flags. (e.g., -lm)")
138  if("${LIBOMP_ARCH}" STREQUAL "ppc")
139    # PPC (32-bit) on AIX needs libatomic for __atomic_load_8, etc.
140    set(LIBOMP_LIBFLAGS "${LIBOMP_LIBFLAGS} -latomic")
141  endif()
142else()
143  set(LIBOMP_LIBFLAGS "" CACHE STRING
144    "Appended user specified linked libs flags. (e.g., -lm)")
145endif()
146set(LIBOMP_FFLAGS "" CACHE STRING
147  "Appended user specified Fortran compiler flags.  These are only used if LIBOMP_FORTRAN_MODULES==TRUE.")
148
149# Should the libomp library and generated headers be copied into the original source exports/ directory
150# Turning this to FALSE aids parallel builds to not interfere with each other.
151# Currently, the testsuite module expects the just built OpenMP library to be located inside the exports/
152# directory.  TODO: have testsuite run under llvm-lit directly.  We can then get rid of copying to exports/
153set(LIBOMP_COPY_EXPORTS FALSE CACHE STRING
154  "Should exports be copied into source exports/ directory?")
155
156# HWLOC-support
157set(LIBOMP_USE_HWLOC FALSE CACHE BOOL
158  "Use Hwloc (http://www.open-mpi.org/projects/hwloc/) library for affinity?")
159set(LIBOMP_HWLOC_INSTALL_DIR /usr/local CACHE PATH
160  "Install path for hwloc library")
161
162# Get the build number from kmp_version.cpp
163libomp_get_build_number("${CMAKE_CURRENT_SOURCE_DIR}" LIBOMP_VERSION_BUILD)
164math(EXPR LIBOMP_VERSION_BUILD_YEAR "${LIBOMP_VERSION_BUILD}/10000")
165math(EXPR LIBOMP_VERSION_BUILD_MONTH_DAY "${LIBOMP_VERSION_BUILD}%10000")
166
167# Currently don't record any timestamps
168set(LIBOMP_BUILD_DATE "No_Timestamp")
169
170# Architecture
171set(IA32 FALSE)
172set(INTEL64 FALSE)
173set(ARM FALSE)
174set(AARCH64 FALSE)
175set(AARCH64_32 FALSE)
176set(AARCH64_A64FX FALSE)
177set(PPC64BE FALSE)
178set(PPC64LE FALSE)
179set(PPC64 FALSE)
180set(MIC FALSE)
181set(MIPS64 FALSE)
182set(MIPS FALSE)
183set(RISCV64 FALSE)
184set(LOONGARCH64 FALSE)
185set(VE FALSE)
186set(S390X FALSE)
187set(WASM FALSE)
188set(PPC FALSE)
189if("${LIBOMP_ARCH}" STREQUAL "i386" OR "${LIBOMP_ARCH}" STREQUAL "32")    # IA-32 architecture
190  set(IA32 TRUE)
191elseif("${LIBOMP_ARCH}" STREQUAL "x86_64" OR "${LIBOMP_ARCH}" STREQUAL "32e") # Intel(R) 64 architecture
192  set(INTEL64 TRUE)
193elseif("${LIBOMP_ARCH}" STREQUAL "arm") # ARM architecture
194  set(ARM TRUE)
195elseif("${LIBOMP_ARCH}" STREQUAL "ppc") # PPC32 architecture
196  set(PPC TRUE)
197elseif("${LIBOMP_ARCH}" STREQUAL "ppc64") # PPC64BE architecture
198  set(PPC64BE TRUE)
199  set(PPC64 TRUE)
200elseif("${LIBOMP_ARCH}" STREQUAL "ppc64le") # PPC64LE architecture
201  set(PPC64LE TRUE)
202  set(PPC64 TRUE)
203elseif("${LIBOMP_ARCH}" STREQUAL "aarch64") # AARCH64 architecture
204  set(AARCH64 TRUE)
205elseif("${LIBOMP_ARCH}" STREQUAL "aarch64_32") # AARCH64_32 architecture
206  set(AARCH64_32 TRUE)
207elseif("${LIBOMP_ARCH}" STREQUAL "aarch64_a64fx") # AARCH64_A64FX architecture
208  set(AARCH64_A64FX TRUE)
209elseif("${LIBOMP_ARCH}" STREQUAL "mic") # Intel(R) Many Integrated Core Architecture
210  set(MIC TRUE)
211elseif("${LIBOMP_ARCH}" STREQUAL "mips") # MIPS architecture
212    set(MIPS TRUE)
213elseif("${LIBOMP_ARCH}" STREQUAL "mips64") # MIPS64 architecture
214    set(MIPS64 TRUE)
215elseif("${LIBOMP_ARCH}" STREQUAL "riscv64") # RISCV64 architecture
216    set(RISCV64 TRUE)
217elseif("${LIBOMP_ARCH}" STREQUAL "loongarch64") # LoongArch64 architecture
218    set(LOONGARCH64 TRUE)
219elseif("${LIBOMP_ARCH}" STREQUAL "ve") # VE architecture
220    set(VE TRUE)
221elseif("${LIBOMP_ARCH}" STREQUAL "s390x") # S390x (Z) architecture
222    set(S390X TRUE)
223elseif("${LIBOMP_ARCH}" STREQUAL "wasm32") # WebAssembly architecture
224    set(WASM TRUE)
225endif()
226
227# Set some flags based on build_type
228set(RELEASE_BUILD FALSE)
229set(DEBUG_BUILD FALSE)
230set(RELWITHDEBINFO_BUILD FALSE)
231set(MINSIZEREL_BUILD FALSE)
232if("${uppercase_CMAKE_BUILD_TYPE}" STREQUAL "RELEASE")
233  set(RELEASE_BUILD TRUE)
234elseif("${uppercase_CMAKE_BUILD_TYPE}" STREQUAL "DEBUG")
235  set(DEBUG_BUILD TRUE)
236elseif("${uppercase_CMAKE_BUILD_TYPE}" STREQUAL "RELWITHDEBINFO")
237  set(RELWITHDEBINFO_BUILD TRUE)
238elseif("${uppercase_CMAKE_BUILD_TYPE}" STREQUAL "MINSIZEREL")
239  set(MINSIZEREL_BUILD TRUE)
240endif()
241
242# Include itt notify interface?
243set(LIBOMP_USE_ITT_NOTIFY TRUE CACHE BOOL
244  "Enable ITT notify?")
245
246# normal, profile, stubs library.
247set(NORMAL_LIBRARY FALSE)
248set(STUBS_LIBRARY FALSE)
249set(PROFILE_LIBRARY FALSE)
250if("${LIBOMP_LIB_TYPE}" STREQUAL "normal")
251  set(NORMAL_LIBRARY TRUE)
252elseif("${LIBOMP_LIB_TYPE}" STREQUAL "profile")
253  set(PROFILE_LIBRARY TRUE)
254elseif("${LIBOMP_LIB_TYPE}" STREQUAL "stubs")
255  set(STUBS_LIBRARY TRUE)
256endif()
257
258# Setting directory names
259set(LIBOMP_BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
260set(LIBOMP_SRC_DIR ${LIBOMP_BASE_DIR}/src)
261set(LIBOMP_TOOLS_DIR ${LIBOMP_BASE_DIR}/tools)
262set(LIBOMP_INC_DIR ${LIBOMP_SRC_DIR}/include)
263set(LIBOMP_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
264
265# Enabling Fortran if it is needed
266if(${LIBOMP_FORTRAN_MODULES})
267  enable_language(Fortran)
268endif()
269# Enable MASM Compiler if it is needed (Windows only)
270if(WIN32)
271  enable_language(ASM_MASM)
272endif()
273
274# Getting legal type/arch
275libomp_get_legal_type(LIBOMP_LEGAL_TYPE)
276libomp_get_legal_arch(LIBOMP_LEGAL_ARCH)
277
278# Compiler flag checks, library checks, threading check, etc.
279include(config-ix)
280
281# Is there a quad precision data type available?
282# TODO: Make this a real feature check
283set(LIBOMP_USE_QUAD_PRECISION "${LIBOMP_HAVE_QUAD_PRECISION}" CACHE BOOL
284  "Should 128-bit precision entry points be built?")
285if(LIBOMP_USE_QUAD_PRECISION AND (NOT LIBOMP_HAVE_QUAD_PRECISION))
286  libomp_error_say("128-bit quad precision functionality requested but not available")
287endif()
288
289# libgomp drop-in compatibility requires versioned symbols
290set(LIBOMP_USE_VERSION_SYMBOLS "${LIBOMP_HAVE_VERSION_SYMBOLS}" CACHE BOOL
291  "Should version symbols be used? These provide binary compatibility with libgomp.")
292if(LIBOMP_USE_VERSION_SYMBOLS AND (NOT LIBOMP_HAVE_VERSION_SYMBOLS))
293  libomp_error_say("Version symbols functionality requested but not available")
294endif()
295
296# On multinode systems, larger alignment is desired to avoid false sharing
297set(LIBOMP_USE_INTERNODE_ALIGNMENT FALSE CACHE BOOL
298  "Should larger alignment (4096 bytes) be used for some locks and data structures?")
299
300# Build code that allows the OpenMP library to conveniently interface with debuggers
301set(LIBOMP_USE_DEBUGGER FALSE CACHE BOOL
302  "Enable debugger interface code?")
303
304# Should we link to C++ library?
305set(LIBOMP_USE_STDCPPLIB FALSE CACHE BOOL
306  "Should we link to C++ library?")
307
308# Intel(R) Transactional Synchronization Extensions (Intel(R) TSX) based locks have
309# __asm code which can be troublesome for some compilers.  This feature is also x86 specific.
310# TODO: Make this a real feature check
311set(LIBOMP_USE_ADAPTIVE_LOCKS "${LIBOMP_HAVE_ADAPTIVE_LOCKS}" CACHE BOOL
312  "Should Intel(R) TSX lock be compiled (adaptive lock in kmp_lock.cpp).  These are x86 specific.")
313if(LIBOMP_USE_ADAPTIVE_LOCKS AND (NOT LIBOMP_HAVE_ADAPTIVE_LOCKS))
314  libomp_error_say("Adaptive locks (Intel(R) TSX) functionality is only supported on x86 Architecture")
315endif()
316
317# - stats-gathering enables OpenMP stats where things like the number of
318# parallel regions, clock ticks spent in particular openmp regions are recorded.
319set(LIBOMP_STATS FALSE CACHE BOOL
320  "Stats-Gathering functionality?")
321if(LIBOMP_STATS AND (NOT LIBOMP_HAVE_STATS))
322  libomp_error_say("Stats-gathering functionality requested but not available")
323endif()
324# The stats functionality requires the std c++ library
325if(LIBOMP_STATS)
326  set(LIBOMP_USE_STDCPPLIB TRUE)
327endif()
328
329# Shared library can be switched to a static library
330set(LIBOMP_ENABLE_SHARED TRUE CACHE BOOL
331  "Shared library instead of static library?")
332
333if(WASM)
334  libomp_warning_say("The WebAssembly build currently only supports static libraries; forcing LIBOMP_ENABLE_SHARED to false")
335  set(LIBOMP_ENABLE_SHARED FALSE)
336endif()
337
338if(WIN32 AND NOT LIBOMP_ENABLE_SHARED)
339  libomp_error_say("Static libraries requested but not available on Windows")
340endif()
341
342if(LIBOMP_USE_ITT_NOTIFY AND NOT LIBOMP_ENABLE_SHARED)
343  message(STATUS "ITT Notify not supported for static libraries - forcing ITT Notify off")
344  set(LIBOMP_USE_ITT_NOTIFY FALSE)
345endif()
346
347if(LIBOMP_USE_VERSION_SYMBOLS AND (NOT LIBOMP_ENABLE_SHARED) )
348  message(STATUS "Version symbols not supported for static libraries - forcing Version symbols functionality off")
349  set (LIBOMP_USE_VERSION_SYMBOLS FALSE)
350endif()
351
352# OMPT-support defaults to ON for OpenMP 5.0+ and if the requirements in
353# cmake/config-ix.cmake are fulfilled.
354set(OMPT_DEFAULT FALSE)
355if ((LIBOMP_HAVE_OMPT_SUPPORT) AND (NOT WIN32))
356  set(OMPT_DEFAULT TRUE)
357endif()
358set(LIBOMP_OMPT_SUPPORT ${OMPT_DEFAULT} CACHE BOOL
359  "OMPT-support?")
360
361set(LIBOMP_OMPT_DEBUG FALSE CACHE BOOL
362  "Trace OMPT initialization?")
363set(LIBOMP_OMPT_OPTIONAL TRUE CACHE BOOL
364  "OMPT-optional?")
365if(LIBOMP_OMPT_SUPPORT AND (NOT LIBOMP_HAVE_OMPT_SUPPORT))
366  libomp_error_say("OpenMP Tools Interface requested but not available in this implementation")
367endif()
368
369# OMPD-support
370# Enable if OMPT SUPPORT is ON
371set(OMPD_DEFAULT FALSE)
372if (LIBOMP_HAVE_OMPT_SUPPORT AND ("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux"))
373  set(OMPD_DEFAULT TRUE)
374endif()
375
376set(LIBOMP_OMPD_SUPPORT ${OMPD_DEFAULT} CACHE BOOL
377  "OMPD-support?")
378
379if(LIBOMP_OMPD_SUPPORT AND ((NOT LIBOMP_OMPT_SUPPORT) OR (NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")))
380  libomp_warning_say("OpenMP Debug Interface(OMPD) requested but not available in this implementation")
381  set(LIBOMP_OMPD_SUPPORT FALSE)
382endif()
383
384# OMPX Taskgraph support
385# Whether to build with OMPX Taskgraph (e.g. task record & replay)
386set(LIBOMP_OMPX_TASKGRAPH FALSE CACHE BOOL "OMPX-taskgraph (task record & replay)?")
387
388# Error check hwloc support after config-ix has run
389if(LIBOMP_USE_HWLOC AND (NOT LIBOMP_HAVE_HWLOC))
390  libomp_error_say("Hwloc requested but not available")
391endif()
392
393# Hierarchical scheduling support
394set(LIBOMP_USE_HIER_SCHED FALSE CACHE BOOL
395  "Hierarchical scheduling support?")
396
397# Setting final library name
398set(LIBOMP_DEFAULT_LIB_NAME libomp)
399if(${PROFILE_LIBRARY})
400  set(LIBOMP_DEFAULT_LIB_NAME ${LIBOMP_DEFAULT_LIB_NAME}prof)
401endif()
402if(${STUBS_LIBRARY})
403  set(LIBOMP_DEFAULT_LIB_NAME ${LIBOMP_DEFAULT_LIB_NAME}stubs)
404endif()
405set(LIBOMP_LIB_NAME ${LIBOMP_DEFAULT_LIB_NAME} CACHE STRING "Base OMP library name")
406if (OPENMP_MSVC_NAME_SCHEME)
407  # MSVC_TOOLS_VERSION corresponds to the version of the VC++ toolset.
408  set(MSVC_TOOLS_VERSION 140)
409  set(LIBOMP_LIB_NAME ${LIBOMP_LIB_NAME}${MSVC_TOOLS_VERSION}.${LIBOMP_ARCH})
410endif()
411
412if(${LIBOMP_ENABLE_SHARED})
413  set(LIBOMP_LIBRARY_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
414  set(LIBOMP_LIBRARY_KIND SHARED)
415  set(LIBOMP_INSTALL_KIND LIBRARY)
416else()
417  set(LIBOMP_LIBRARY_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX})
418  set(LIBOMP_LIBRARY_KIND STATIC)
419  set(LIBOMP_INSTALL_KIND ARCHIVE)
420endif()
421
422set(LIBOMP_LIB_FILE ${LIBOMP_LIB_NAME}${LIBOMP_LIBRARY_SUFFIX})
423
424# Optional backwards compatibility aliases.
425set(LIBOMP_INSTALL_ALIASES TRUE CACHE BOOL
426  "Install libgomp and libiomp5 library aliases for backwards compatibility")
427
428# Print configuration after all variables are set.
429if(${OPENMP_STANDALONE_BUILD})
430  libomp_say("Operating System     -- ${CMAKE_SYSTEM_NAME}")
431  libomp_say("Target Architecture  -- ${LIBOMP_ARCH}")
432  if(${MIC})
433    libomp_say("Intel(R) MIC Architecture    -- ${LIBOMP_MIC_ARCH}")
434  endif()
435  libomp_say("Build Type           -- ${CMAKE_BUILD_TYPE}")
436  libomp_say("Library Kind         -- ${LIBOMP_LIBRARY_KIND}")
437  libomp_say("Library Type         -- ${LIBOMP_LIB_TYPE}")
438  libomp_say("Fortran Modules      -- ${LIBOMP_FORTRAN_MODULES}")
439  # will say development if all zeros
440  if(${LIBOMP_VERSION_BUILD} STREQUAL 00000000)
441    set(LIBOMP_BUILD Development)
442  else()
443    set(LIBOMP_BUILD ${LIBOMP_VERSION_BUILD})
444  endif()
445  libomp_say("Build                -- ${LIBOMP_BUILD}")
446  libomp_say("Use Stats-gathering  -- ${LIBOMP_STATS}")
447  libomp_say("Use Debugger-support -- ${LIBOMP_USE_DEBUGGER}")
448  libomp_say("Use ITT notify       -- ${LIBOMP_USE_ITT_NOTIFY}")
449  libomp_say("Use OMPT-support     -- ${LIBOMP_OMPT_SUPPORT}")
450  if(${LIBOMP_OMPT_SUPPORT})
451    libomp_say("Use OMPT-optional  -- ${LIBOMP_OMPT_OPTIONAL}")
452  endif()
453  libomp_say("Use OMPD-support     -- ${LIBOMP_OMPD_SUPPORT}")
454  libomp_say("Use Adaptive locks   -- ${LIBOMP_USE_ADAPTIVE_LOCKS}")
455  libomp_say("Use quad precision   -- ${LIBOMP_USE_QUAD_PRECISION}")
456  libomp_say("Use Hwloc library    -- ${LIBOMP_USE_HWLOC}")
457  libomp_say("Use OMPX-taskgraph   -- ${LIBOMP_OMPX_TASKGRAPH}")
458endif()
459
460add_subdirectory(src)
461add_subdirectory(test)
462
463# make these variables available for tools:
464set(LIBOMP_LIBRARY_DIR ${LIBOMP_LIBRARY_DIR} PARENT_SCOPE)
465set(LIBOMP_INCLUDE_DIR ${LIBOMP_INCLUDE_DIR} PARENT_SCOPE)
466set(LIBOMP_OMP_TOOLS_INCLUDE_DIR ${LIBOMP_OMP_TOOLS_INCLUDE_DIR} PARENT_SCOPE)
467# make these variables available for tools/libompd:
468set(LIBOMP_SRC_DIR ${LIBOMP_SRC_DIR} PARENT_SCOPE)
469set(LIBOMP_OMPD_SUPPORT ${LIBOMP_OMPD_SUPPORT} PARENT_SCOPE)
470