blob: 7b56b0624d975634d2a9d11aa30ad40f92ece4de [file] [log] [blame]
#
# Copyright (C) 2005-2023 Intel Corporation
#
# SPDX-License-Identifier: GPL-2.0-only OR BSD-3-Clause
#
cmake_minimum_required(VERSION 3.5)
if(POLICY CMP0048)
# The `project()` command manages `VERSION` variables
cmake_policy(SET CMP0048 NEW)
endif()
get_property(ITT_GENERATOR_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(CMAKE_GENERATOR STREQUAL "Ninja Multi-Config")
# 'Ninja Multi-Config' specific, see:
# https://cmake.org/cmake/help/latest/variable/CMAKE_DEFAULT_BUILD_TYPE.html
set(CMAKE_DEFAULT_BUILD_TYPE "Release" CACHE STRING "CMake default build type")
elseif(NOT ITT_GENERATOR_MULTI_CONFIG)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "CMake build type")
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Release;Debug;RelWithDebInfo;MinSizeRel")
endif()
project(ittapi)
option(FORCE_32 "Force a 32-bit compile on 64-bit" OFF)
option(ITT_API_IPT_SUPPORT "ptmarks support" OFF)
option(ITT_API_FORTRAN_SUPPORT "fortran support" OFF)
if(FORCE_32 AND UNIX)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32")
endif()
if(CMAKE_SIZEOF_VOID_P MATCHES "8" AND NOT(FORCE_32))
set(ARCH_64 ON)
endif()
if(FORCE_32 AND ITT_API_FORTRAN_SUPPORT)
# ifx dropped 32-bit support
message(WARNING "Fortran support for 32-bit has been discontinued")
set(ITT_API_FORTRAN_SUPPORT OFF)
endif()
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "^(Apple)?Clang$")
# override default -O3
string(REPLACE "-O3" "-O2" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
string(REPLACE "-O3" "-O2" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
endif()
if(NOT DEFINED CMAKE_POSITION_INDEPENDENT_CODE)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
endif()
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${LIBRARY_OUTPUT_PATH})
endforeach()
set(ITT_PUBLIC_HDRS
include/ittnotify.h
include/jitprofiling.h
include/libittnotify.h
)
file(GLOB ITT_SRCS "src/ittnotify/*.c" "src/ittnotify/*.h")
if(ITT_API_IPT_SUPPORT)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DITT_API_IPT_SUPPORT")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DITT_API_IPT_SUPPORT")
if(NOT WIN32)
enable_language(ASM)
if(ARCH_64)
set(ITT_PT src/ittnotify/ittptmark64.S)
else()
set(ASM_OPTIONS "-m32")
set(ITT_PT src/ittnotify/ittptmark32.S)
endif()
set(CMAKE_ASM_FLAGS "${CFLAGS} ${ASM_OPTIONS}")
else()
enable_language(ASM_MASM)
if(ARCH_64)
set(ITT_PT src/ittnotify/ittptmark64.asm)
else()
set(ITT_PT src/ittnotify/ittptmark32.asm)
endif()
endif()
endif()
if(NOT WIN32)
set(PLATFORM_PATH "posix")
set(PLATFORM_EXT "o")
else()
set(PLATFORM_PATH "win32")
set(PLATFORM_EXT "obj")
endif()
if(ITT_API_FORTRAN_SUPPORT)
enable_language(Fortran)
set(FORTRAN_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/fortran)
file(MAKE_DIRECTORY ${FORTRAN_BINARY_DIR})
set(ITT_FORTRAN_SRC ${CMAKE_CURRENT_SOURCE_DIR}/include/fortran/${PLATFORM_PATH}/ittnotify.f90)
set(ADVISOR_ANNOTATION_SRC ${CMAKE_CURRENT_SOURCE_DIR}/include/fortran/advisor_annotate.f90)
set(ITT_FORTRAN ${FORTRAN_BINARY_DIR}/ittfortran.${PLATFORM_EXT})
set(ADVISOR_ANNOTATION ${FORTRAN_BINARY_DIR}/advisor_annotate.${PLATFORM_EXT})
if(WIN32)
set(FORTRAN_BUILD_CMD ${CMAKE_Fortran_COMPILER} /Z7 /nologo /libdir:noauto /c /O2 /module:${FORTRAN_BINARY_DIR})
set(ITT_FORTRAN_BUILD_CMD ${FORTRAN_BUILD_CMD} /object:${ITT_FORTRAN} ${ITT_FORTRAN_SRC})
set(ADVISOR_ANNOTATION_BUILD_CMD ${FORTRAN_BUILD_CMD} /object:${ADVISOR_ANNOTATION} ${ADVISOR_ANNOTATION_SRC})
else()
set(FORTRAN_BUILD_CMD ${CMAKE_Fortran_COMPILER} -g -c -fPIC -O2 -module ${FORTRAN_BINARY_DIR})
set(ITT_FORTRAN_BUILD_CMD ${FORTRAN_BUILD_CMD} -o ${ITT_FORTRAN} ${ITT_FORTRAN_SRC})
set(ADVISOR_ANNOTATION_BUILD_CMD ${FORTRAN_BUILD_CMD} -o ${ADVISOR_ANNOTATION} ${ADVISOR_ANNOTATION_SRC})
endif()
add_custom_command(OUTPUT ${ITT_FORTRAN}
COMMAND ${ITT_FORTRAN_BUILD_CMD}
DEPENDS ${ITT_FORTRAN_SRC}
COMMENT "Building ITT Fortran")
add_custom_command(OUTPUT ${ADVISOR_ANNOTATION}
COMMAND ${ADVISOR_ANNOTATION_BUILD_CMD}
DEPENDS ${ADVISOR_ANNOTATION_SRC}
COMMENT "Building Advisor Annotation")
add_library(ittnotify STATIC ${ITT_SRCS} ${ITT_PUBLIC_HDRS} ${ITT_PT} ${ITT_FORTRAN})
add_library(advisor STATIC ${ADVISOR_ANNOTATION})
else()
add_library(ittnotify STATIC ${ITT_SRCS} ${ITT_PUBLIC_HDRS} ${ITT_PT})
endif()
set(JITPROFILING_SRC "src/ittnotify/jitprofiling.c")
add_library(jitprofiling STATIC ${JITPROFILING_SRC})
if(WIN32)
set_target_properties(ittnotify PROPERTIES OUTPUT_NAME libittnotify)
set_target_properties(jitprofiling PROPERTIES OUTPUT_NAME libjitprofiling)
if(ITT_API_FORTRAN_SUPPORT)
set_target_properties(advisor PROPERTIES OUTPUT_NAME libadvisor)
endif()
else()
set_target_properties(ittnotify PROPERTIES OUTPUT_NAME ittnotify)
set_target_properties(jitprofiling PROPERTIES OUTPUT_NAME jitprofiling)
if(ITT_API_FORTRAN_SUPPORT)
set_target_properties(advisor PROPERTIES OUTPUT_NAME advisor)
endif()
endif()
target_link_libraries(ittnotify PRIVATE ${CMAKE_DL_LIBS})
set_target_properties(ittnotify PROPERTIES LINKER_LANGUAGE C)
if(ITT_API_FORTRAN_SUPPORT)
set_target_properties(advisor PROPERTIES LINKER_LANGUAGE C)
endif()
target_include_directories(ittnotify
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
PRIVATE src/ittnotify
)
target_include_directories(jitprofiling
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
PRIVATE src/ittnotify
)
# install
include(CMakePackageConfigHelpers)
include(GNUInstallDirs)
install(TARGETS ittnotify EXPORT ittapi-targets INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(EXPORT ittapi-targets NAMESPACE ittapi:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ittapi)
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
FILES_MATCHING PATTERN "*.h"
PATTERN "fortran" EXCLUDE)
configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/ittapiConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/share/ittapiConfig.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ittapi
NO_SET_AND_CHECK_MACRO)
file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/include/ittnotify.h" ITT_VERSION_PARTS REGEX "#define ITT_[A-Z]+[ ]+" )
string(REGEX REPLACE ".+ITT_MAJOR[ ]+([0-9]+).*" "\\1" ITT_MAJOR "${ITT_VERSION_PARTS}")
string(REGEX REPLACE ".+ITT_MINOR[ ]+([0-9]+).*" "\\1" ITT_MINOR "${ITT_VERSION_PARTS}")
write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/share/ittapiConfigVersion.cmake
VERSION ${ITT_MAJOR}.${ITT_MINOR}.0
COMPATIBILITY SameMajorVersion)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/share/ittapiConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/share/ittapiConfigVersion.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ittapi)