xref: /llvm-project/openmp/runtime/cmake/LibompExports.cmake (revision 88dae3d5d0230747f3cbabdde9ac5ae9e5dc3f8d)
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
11# LibompExports.cmake
12#   Copy library and header files into the exports/ subdirectory after library build
13
14# Create the suffix for the export directory
15# - Only add to suffix when not a default value
16# - Example suffix: .deb.s1
17#   final export directory: exports/lin_32e.deb.s1/lib
18# - These suffixes imply the build is a Debug, Stats-Gathering version of the library
19set(libomp_suffix)
20libomp_append(libomp_suffix .deb DEBUG_BUILD)
21libomp_append(libomp_suffix .dia RELWITHDEBINFO_BUILD)
22libomp_append(libomp_suffix .min MINSIZEREL_BUILD)
23libomp_append(libomp_suffix .s1 LIBOMP_STATS)
24libomp_append(libomp_suffix .ompt LIBOMP_OMPT_SUPPORT)
25if(${LIBOMP_OMPT_SUPPORT})
26  libomp_append(libomp_suffix .optional LIBOMP_OMPT_OPTIONAL)
27endif()
28string(REPLACE ";" "" libomp_suffix "${libomp_suffix}")
29
30# Set exports locations
31if(WIN32)
32  set(LIBOMP_SHORT_OS win)
33elseif(APPLE)
34  set(LIBOMP_SHORT_OS mac)
35else()
36  set(LIBOMP_SHORT_OS lin)
37endif()
38if(${MIC})
39  set(libomp_platform "${LIBOMP_SHORT_OS}_${LIBOMP_MIC_ARCH}") # e.g., lin_knf, lin_knc
40else()
41  if(${IA32})
42    set(libomp_platform "${LIBOMP_SHORT_OS}_32")
43  elseif(${INTEL64})
44    set(libomp_platform "${LIBOMP_SHORT_OS}_32e")
45  else()
46    set(libomp_platform "${LIBOMP_SHORT_OS}_${LIBOMP_ARCH}") # e.g., lin_arm, lin_ppc64
47  endif()
48endif()
49set(LIBOMP_EXPORTS_DIR "${LIBOMP_BASE_DIR}/exports")
50set(LIBOMP_EXPORTS_PLATFORM_DIR "${LIBOMP_EXPORTS_DIR}/${libomp_platform}${libomp_suffix}")
51set(LIBOMP_EXPORTS_CMN_DIR "${LIBOMP_EXPORTS_DIR}/common${libomp_suffix}/include")
52set(LIBOMP_EXPORTS_INC_DIR "${LIBOMP_EXPORTS_PLATFORM_DIR}/include")
53set(LIBOMP_EXPORTS_MOD_DIR "${LIBOMP_EXPORTS_PLATFORM_DIR}/include_compat")
54set(LIBOMP_EXPORTS_LIB_DIR "${LIBOMP_EXPORTS_DIR}/${libomp_platform}${libomp_suffix}/lib")
55
56# Put headers in exports/ directory post build
57add_custom_command(TARGET omp POST_BUILD
58  COMMAND ${CMAKE_COMMAND} -E make_directory ${LIBOMP_EXPORTS_CMN_DIR}
59  COMMAND ${CMAKE_COMMAND} -E copy omp.h ${LIBOMP_EXPORTS_CMN_DIR}
60  COMMAND ${CMAKE_COMMAND} -E copy ompx.h ${LIBOMP_EXPORTS_CMN_DIR}
61)
62if(${LIBOMP_OMPT_SUPPORT})
63  add_custom_command(TARGET omp POST_BUILD
64    COMMAND ${CMAKE_COMMAND} -E copy omp-tools.h ${LIBOMP_EXPORTS_CMN_DIR}
65  )
66endif()
67if(${LIBOMP_FORTRAN_MODULES})
68  add_custom_command(TARGET libomp-mod POST_BUILD
69    COMMAND ${CMAKE_COMMAND} -E make_directory ${LIBOMP_EXPORTS_MOD_DIR}
70    COMMAND ${CMAKE_COMMAND} -E copy omp_lib.mod ${LIBOMP_EXPORTS_MOD_DIR}
71    COMMAND ${CMAKE_COMMAND} -E copy omp_lib_kinds.mod ${LIBOMP_EXPORTS_MOD_DIR}
72  )
73  add_custom_command(TARGET omp POST_BUILD
74    COMMAND ${CMAKE_COMMAND} -E copy omp_lib.h ${LIBOMP_EXPORTS_CMN_DIR}
75  )
76endif()
77
78# Copy OpenMP library into exports/ directory post build
79if(WIN32)
80  get_target_property(LIBOMP_OUTPUT_DIRECTORY omp RUNTIME_OUTPUT_DIRECTORY)
81else()
82  get_target_property(LIBOMP_OUTPUT_DIRECTORY omp LIBRARY_OUTPUT_DIRECTORY)
83endif()
84if(NOT LIBOMP_OUTPUT_DIRECTORY)
85  set(LIBOMP_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
86endif()
87add_custom_command(TARGET omp POST_BUILD
88  COMMAND ${CMAKE_COMMAND} -E make_directory ${LIBOMP_EXPORTS_LIB_DIR}
89  COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:omp> ${LIBOMP_EXPORTS_LIB_DIR}
90)
91
92# Copy Windows import library into exports/ directory post build
93if(WIN32)
94  get_target_property(LIBOMPIMP_OUTPUT_DIRECTORY ${LIBOMP_IMP_LIB_TARGET} ARCHIVE_OUTPUT_DIRECTORY)
95  if(NOT LIBOMPIMP_OUTPUT_DIRECTORY)
96    set(LIBOMPIMP_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
97  endif()
98  add_custom_command(TARGET ${LIBOMP_IMP_LIB_TARGET} POST_BUILD
99    COMMAND ${CMAKE_COMMAND} -E make_directory ${LIBOMP_EXPORTS_LIB_DIR}
100    COMMAND ${CMAKE_COMMAND} -E copy ${LIBOMPIMP_OUTPUT_DIRECTORY}/${LIBOMP_IMP_LIB_FILE} ${LIBOMP_EXPORTS_LIB_DIR}
101  )
102endif()
103