CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
93 lines
4.3 KiB
CMake
93 lines
4.3 KiB
CMake
#//===----------------------------------------------------------------------===//
|
|
#//
|
|
#// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
#// See https://llvm.org/LICENSE.txt for license information.
|
|
#// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
#//
|
|
#//===----------------------------------------------------------------------===//
|
|
|
|
include(LibompCheckFortranFlag)
|
|
|
|
set(LIBOMP_FFLAGS "" CACHE STRING
|
|
"Appended user specified Fortran compiler flags. These are only used if LIBOMP_FORTRAN_MODULES==TRUE.")
|
|
|
|
# Enabling Fortran if it is needed
|
|
if (LIBOMP_FORTRAN_MODULES)
|
|
enable_language(Fortran)
|
|
|
|
libomp_check_fortran_flag(-m32 LIBOMP_HAVE_M32_FORTRAN_FLAG)
|
|
endif ()
|
|
|
|
# Building the Fortran module files
|
|
# One compilation step creates both omp_lib.mod and omp_lib_kinds.mod
|
|
configure_file(omp_lib.F90.var omp_lib.F90 @ONLY)
|
|
configure_file(omp_lib.h.var "${CMAKE_CURRENT_BINARY_DIR}/../runtime/src/omp_lib.h" @ONLY)
|
|
|
|
set(BUILD_FORTRAN_MODULES False)
|
|
if (LIBOMP_FORTRAN_MODULES_COMPILER)
|
|
# If libomp is built as an LLVM runtime and the flang compiler is available,
|
|
# compile the Fortran module files.
|
|
message(STATUS "configuring openmp to build Fortran module files using '${LIBOMP_FORTRAN_MODULES_COMPILER}'")
|
|
set(LIBOMP_FORTRAN_SOURCE_FILE omp_lib.F90)
|
|
# omp_lib_kinds uses iso_c_binding, which depends on these intrinsic modules.
|
|
# List them so omp_lib.mod is regenerated when intrinsic modules change; otherwise
|
|
# stale omp_lib.mod can reference an incompatible iso_c_binding.mod (see flang
|
|
# tests that load omp_lib.mod with -J).
|
|
set(_libomp_flang_intrinsic_mod_deps "")
|
|
if(LLVM_BINARY_DIR)
|
|
set(_flang_intrinsic_mod_dir "${LLVM_BINARY_DIR}/include/flang")
|
|
list(APPEND _libomp_flang_intrinsic_mod_deps
|
|
"${_flang_intrinsic_mod_dir}/__fortran_builtins.mod"
|
|
"${_flang_intrinsic_mod_dir}/__fortran_type_info.mod"
|
|
"${_flang_intrinsic_mod_dir}/iso_c_binding.mod"
|
|
)
|
|
endif()
|
|
add_custom_target(libomp-mod ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/../runtime/src/omp_lib.mod" "${CMAKE_CURRENT_BINARY_DIR}/../runtime/src/omp_lib_kinds.mod")
|
|
add_custom_command(
|
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/../runtime/src/omp_lib.mod" "${CMAKE_CURRENT_BINARY_DIR}/../runtime/src/omp_lib_kinds.mod"
|
|
COMMAND ${LIBOMP_FORTRAN_MODULES_COMPILER} -cpp -fsyntax-only ${LIBOMP_FORTRAN_SOURCE_FILE} "-J${CMAKE_CURRENT_BINARY_DIR}/../runtime/src"
|
|
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${LIBOMP_FORTRAN_SOURCE_FILE}" ${_libomp_flang_intrinsic_mod_deps}
|
|
)
|
|
set(BUILD_FORTRAN_MODULES True)
|
|
elseif (LIBOMP_FORTRAN_MODULES)
|
|
# The following requests explicit building of the Fortran module files
|
|
# Workaround for gfortran to build modules with the
|
|
# omp_sched_monotonic integer parameter
|
|
if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU")
|
|
set(ADDITIONAL_Fortran_FLAGS "-fno-range-check")
|
|
endif ()
|
|
add_custom_target(libomp-mod ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/../runtime/src/omp_lib.mod" "${CMAKE_CURRENT_BINARY_DIR}/../runtime/src/omp_lib_kinds.mod")
|
|
set_target_properties(libomp-mod PROPERTIES FOLDER "OpenMP/Misc")
|
|
libomp_get_fflags(LIBOMP_CONFIGURED_FFLAGS)
|
|
if (CMAKE_Fortran_COMPILER_SUPPORTS_F90)
|
|
set(LIBOMP_FORTRAN_SOURCE_FILE omp_lib.F90)
|
|
else ()
|
|
message(FATAL_ERROR "Fortran module build requires Fortran 90 compiler")
|
|
endif ()
|
|
add_custom_command(
|
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/../runtime/src/omp_lib.mod" "${CMAKE_CURRENT_BINARY_DIR}/../runtime/src/omp_lib_kinds.mod"
|
|
COMMAND ${CMAKE_Fortran_COMPILER} -c ${ADDITIONAL_Fortran_FLAGS}
|
|
${LIBOMP_CONFIGURED_FFLAGS} ${LIBOMP_FORTRAN_SOURCE_FILE} "-J${CMAKE_CURRENT_BINARY_DIR}/../runtime/src"
|
|
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${LIBOMP_FORTRAN_SOURCE_FILE}"
|
|
)
|
|
set_property(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../runtime/src" PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "omp_lib${CMAKE_C_OUTPUT_EXTENSION}")
|
|
set(BUILD_FORTRAN_MODULES True)
|
|
endif ()
|
|
|
|
|
|
if (BUILD_FORTRAN_MODULES)
|
|
set(destination "${LIBOMP_HEADERS_INSTALL_PATH}")
|
|
if (LIBOMP_MODULES_INSTALL_PATH)
|
|
set(destination "${LIBOMP_MODULES_INSTALL_PATH}")
|
|
endif ()
|
|
install(FILES
|
|
"${CMAKE_CURRENT_BINARY_DIR}/../runtime/src/omp_lib.mod"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/../runtime/src/omp_lib_kinds.mod"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/../runtime/src/omp_lib.h"
|
|
DESTINATION ${destination}
|
|
COMPONENT openmp
|
|
)
|
|
endif ()
|
|
|
|
openmp_register_meta_dep(libomp-mod)
|