xref: /aosp_15_r20/external/intel-media-driver/cmrtlib/linux/cmrt_utils.cmake (revision ba62d9d3abf0e404f2022b4cd7a85e107f48596f)
1*ba62d9d3SAndroid Build Coastguard Worker# Copyright (c) 2017, Intel Corporation
2*ba62d9d3SAndroid Build Coastguard Worker#
3*ba62d9d3SAndroid Build Coastguard Worker# Permission is hereby granted, free of charge, to any person obtaining a
4*ba62d9d3SAndroid Build Coastguard Worker# copy of this software and associated documentation files (the "Software"),
5*ba62d9d3SAndroid Build Coastguard Worker# to deal in the Software without restriction, including without limitation
6*ba62d9d3SAndroid Build Coastguard Worker# the rights to use, copy, modify, merge, publish, distribute, sublicense,
7*ba62d9d3SAndroid Build Coastguard Worker# and/or sell copies of the Software, and to permit persons to whom the
8*ba62d9d3SAndroid Build Coastguard Worker# Software is furnished to do so, subject to the following conditions:
9*ba62d9d3SAndroid Build Coastguard Worker#
10*ba62d9d3SAndroid Build Coastguard Worker# The above copyright notice and this permission notice shall be included
11*ba62d9d3SAndroid Build Coastguard Worker# in all copies or substantial portions of the Software.
12*ba62d9d3SAndroid Build Coastguard Worker#
13*ba62d9d3SAndroid Build Coastguard Worker# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
14*ba62d9d3SAndroid Build Coastguard Worker# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15*ba62d9d3SAndroid Build Coastguard Worker# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
16*ba62d9d3SAndroid Build Coastguard Worker# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
17*ba62d9d3SAndroid Build Coastguard Worker# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
18*ba62d9d3SAndroid Build Coastguard Worker# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
19*ba62d9d3SAndroid Build Coastguard Worker# OTHER DEALINGS IN THE SOFTWARE.
20*ba62d9d3SAndroid Build Coastguard Worker
21*ba62d9d3SAndroid Build Coastguard Worker# Idempotent include implementation
22*ba62d9d3SAndroid Build Coastguard Workerset_property( GLOBAL PROPERTY USE_FOLDERS ON)
23*ba62d9d3SAndroid Build Coastguard Workerset(BUILD_FUNCTIONS_INC ON)
24*ba62d9d3SAndroid Build Coastguard Worker
25*ba62d9d3SAndroid Build Coastguard Worker# Functions to add custom build configurations: release, release internal, debug
26*ba62d9d3SAndroid Build Coastguard Worker# Assumption is that there is only one of these per target (otherwise the custom target breaks)
27*ba62d9d3SAndroid Build Coastguard Workerfunction(custom_build_add configName copyConfigName)
28*ba62d9d3SAndroid Build Coastguard Worker  string(TOUPPER "${configName}" _configName)
29*ba62d9d3SAndroid Build Coastguard Worker  string(TOUPPER "${copyConfigName}" _copyConfigName)
30*ba62d9d3SAndroid Build Coastguard Worker
31*ba62d9d3SAndroid Build Coastguard Worker  set("CMAKE_CXX_FLAGS_${_configName}"           "${CMAKE_CXX_FLAGS_${_copyConfigName}}"           CACHE STRING "C++ compilder flags used during \"${configName}\" builds.")
32*ba62d9d3SAndroid Build Coastguard Worker  set("CMAKE_C_FLAGS_${_configName}"             "${CMAKE_C_FLAGS_${_copyConfigName}}"             CACHE STRING "Flags used during \"${configName}\" builds.")
33*ba62d9d3SAndroid Build Coastguard Worker  set("CMAKE_EXE_LINKER_FLAGS_${_configName}"    "${CMAKE_EXE_LINKER_FLAGS_${_copyConfigName}}"    CACHE STRING "Linker flags used during \"${configName}\" builds for executables.")
34*ba62d9d3SAndroid Build Coastguard Worker  set("CMAKE_MODULE_LINKER_FLAGS_${_configName}" "${CMAKE_MODULE_LINKER_FLAGS_${_copyConfigName}}" CACHE STRING "Linker flags used during \"${configName}\" builds for modules.")
35*ba62d9d3SAndroid Build Coastguard Worker  set("CMAKE_SHARED_LINKER_FLAGS_${_configName}" "${CMAKE_SHARED_LINKER_FLAGS_${_copyConfigName}}" CACHE STRING "Linker flags used during \"${configName}\" builds for shared libraries.")
36*ba62d9d3SAndroid Build Coastguard Worker  set("CMAKE_STATIC_LINKER_FLAGS_${_configName}" "${CMAKE_STATIC_LINKER_FLAGS_${_copyConfigName}}" CACHE STRING "Linker flags used during \"${configName}\" builds for static libraries.")
37*ba62d9d3SAndroid Build Coastguard Worker  mark_as_advanced(
38*ba62d9d3SAndroid Build Coastguard Worker      "CMAKE_CXX_FLAGS_${_configName}"
39*ba62d9d3SAndroid Build Coastguard Worker      "CMAKE_C_FLAGS_${_configName}"
40*ba62d9d3SAndroid Build Coastguard Worker      "CMAKE_EXE_LINKER_FLAGS_${_configName}"
41*ba62d9d3SAndroid Build Coastguard Worker      "CMAKE_MODULE_LINKER_FLAGS_${_configName}"
42*ba62d9d3SAndroid Build Coastguard Worker      "CMAKE_SHARED_LINKER_FLAGS_${_configName}"
43*ba62d9d3SAndroid Build Coastguard Worker      "CMAKE_STATIC_LINKER_FLAGS_${_configName}"
44*ba62d9d3SAndroid Build Coastguard Worker    )
45*ba62d9d3SAndroid Build Coastguard Worker
46*ba62d9d3SAndroid Build Coastguard Workerendfunction()
47*ba62d9d3SAndroid Build Coastguard Worker
48*ba62d9d3SAndroid Build Coastguard Workerfunction( setup_configurations )
49*ba62d9d3SAndroid Build Coastguard Worker    set(CMAKE_CONFIGURATION_TYPES
50*ba62d9d3SAndroid Build Coastguard Worker        "Debug"
51*ba62d9d3SAndroid Build Coastguard Worker        "ReleaseInternal"
52*ba62d9d3SAndroid Build Coastguard Worker        "Release"
53*ba62d9d3SAndroid Build Coastguard Worker      )
54*ba62d9d3SAndroid Build Coastguard Worker    custom_build_add("ReleaseInternal"       "Release")
55*ba62d9d3SAndroid Build Coastguard Worker    set(CMAKE_CONFIGURATION_TYPES ${CMAKE_CONFIGURATION_TYPES} CACHE STRING "Available build configurations." FORCE)
56*ba62d9d3SAndroid Build Coastguard Workerendfunction( setup_configurations )
57*ba62d9d3SAndroid Build Coastguard Worker
58*ba62d9d3SAndroid Build Coastguard Worker# If you update this function - make sure you also update the copy of this for the IGC build that is
59*ba62d9d3SAndroid Build Coastguard Worker# hard-coded into the CM_jitter CMakeLists.txt
60*ba62d9d3SAndroid Build Coastguard Workerfunction ( setup_library target src_list shared actual_name)
61*ba62d9d3SAndroid Build Coastguard Worker  if ( ${shared} )
62*ba62d9d3SAndroid Build Coastguard Worker    add_library(${target} SHARED ${src_list})
63*ba62d9d3SAndroid Build Coastguard Worker  else ( ${shared} )
64*ba62d9d3SAndroid Build Coastguard Worker    add_library(${target} ${src_list})
65*ba62d9d3SAndroid Build Coastguard Worker  endif ( ${shared} )
66*ba62d9d3SAndroid Build Coastguard Workerendfunction( setup_library )
67*ba62d9d3SAndroid Build Coastguard Worker
68*ba62d9d3SAndroid Build Coastguard Worker# get the major and minor versions from the cm_rt header file
69*ba62d9d3SAndroid Build Coastguard Workermacro ( get_cmrt_versions cmrt_major_version cmrt_minor_version cmrt_patch_version)
70*ba62d9d3SAndroid Build Coastguard Worker  file(STRINGS ${CMAKE_CURRENT_LIST_DIR}/../agnostic/share/cm_rt.h version_line REGEX "#define __INTEL_CM" LIMIT_COUNT 1)
71*ba62d9d3SAndroid Build Coastguard Worker  string(REGEX MATCH "CM_([0-9]+)_([0-9]+)" version_line ${version_line})
72*ba62d9d3SAndroid Build Coastguard Worker  string(REPLACE "CM_" "" version_line ${version_line})
73*ba62d9d3SAndroid Build Coastguard Worker  string(REPLACE "_" ";" version_list ${version_line})
74*ba62d9d3SAndroid Build Coastguard Worker  list(GET version_list 0 major)
75*ba62d9d3SAndroid Build Coastguard Worker  list(GET version_list 1 minor)
76*ba62d9d3SAndroid Build Coastguard Worker
77*ba62d9d3SAndroid Build Coastguard Worker  set(${cmrt_major_version} ${major})
78*ba62d9d3SAndroid Build Coastguard Worker  set(${cmrt_minor_version} ${minor})
79*ba62d9d3SAndroid Build Coastguard Worker  set(${cmrt_patch_version} 0)
80*ba62d9d3SAndroid Build Coastguard Workerendmacro()
81*ba62d9d3SAndroid Build Coastguard Worker
82*ba62d9d3SAndroid Build Coastguard Worker# Only can include subdirectory which has a cmrt_srcs.cmake
83*ba62d9d3SAndroid Build Coastguard Worker# the effect is like include(${CMAKE_CURRENT_LIST_DIR}/<subd>/cmrt_srcs.cmake)
84*ba62d9d3SAndroid Build Coastguard Workermacro(cmrt_include_subdirectory subd)
85*ba62d9d3SAndroid Build Coastguard Worker    if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/${subd}/cmrt_srcs.cmake)
86*ba62d9d3SAndroid Build Coastguard Worker        include(${CMAKE_CURRENT_LIST_DIR}/${subd}/cmrt_srcs.cmake)
87*ba62d9d3SAndroid Build Coastguard Worker    else()
88*ba62d9d3SAndroid Build Coastguard Worker        message("-- ${CMAKE_CURRENT_LIST_DIR}/${subd}/cmrt_srcs.cmake doesn't exist, macro(cmrt_include_subdirectory) just does nothing")
89*ba62d9d3SAndroid Build Coastguard Worker    endif()
90*ba62d9d3SAndroid Build Coastguard Workerendmacro()
91*ba62d9d3SAndroid Build Coastguard Worker
92*ba62d9d3SAndroid Build Coastguard Worker# Only can include subdirectory which has a cmrt_srcs.cmake
93*ba62d9d3SAndroid Build Coastguard Worker# the effect is like include(${CMAKE_CURRENT_LIST_DIR}/<subd>/cmrt_srcs.cmake)
94*ba62d9d3SAndroid Build Coastguard Workermacro(cmrt_include_directory dir)
95*ba62d9d3SAndroid Build Coastguard Worker    if(EXISTS ${dir}/cmrt_srcs.cmake)
96*ba62d9d3SAndroid Build Coastguard Worker        include(${dir}/cmrt_srcs.cmake)
97*ba62d9d3SAndroid Build Coastguard Worker    else()
98*ba62d9d3SAndroid Build Coastguard Worker        message("-- ${dir}/cmrt_srcs.cmake doesn't exist, macro(cmrt_include_subdirectory) just does nothing")
99*ba62d9d3SAndroid Build Coastguard Worker    endif()
100*ba62d9d3SAndroid Build Coastguard Workerendmacro()
101