xref: /aosp_15_r20/external/intel-media-driver/Tools/bldsys/include/utils.cmake (revision ba62d9d3abf0e404f2022b4cd7a85e107f48596f)
1*ba62d9d3SAndroid Build Coastguard Worker# *****************************************************************************
2*ba62d9d3SAndroid Build Coastguard Worker# Copyright (c) 2017 Intel Corporation
3*ba62d9d3SAndroid Build Coastguard Worker#
4*ba62d9d3SAndroid Build Coastguard Worker# Permission is hereby granted, free of charge, to any person obtaining a copy
5*ba62d9d3SAndroid Build Coastguard Worker# of this software and associated documentation files (the "Software"), to deal
6*ba62d9d3SAndroid Build Coastguard Worker# in the Software without restriction, including without limitation the rights
7*ba62d9d3SAndroid Build Coastguard Worker# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8*ba62d9d3SAndroid Build Coastguard Worker# copies of the Software, and to permit persons to whom the Software is
9*ba62d9d3SAndroid Build Coastguard Worker# furnished to do so, subject to the following conditions:
10*ba62d9d3SAndroid Build Coastguard Worker#
11*ba62d9d3SAndroid Build Coastguard Worker# The above copyright notice and this permission notice shall be included in all
12*ba62d9d3SAndroid Build Coastguard Worker# copies or substantial portions of the Software.
13*ba62d9d3SAndroid Build Coastguard Worker#
14*ba62d9d3SAndroid Build Coastguard Worker# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15*ba62d9d3SAndroid Build Coastguard Worker# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16*ba62d9d3SAndroid Build Coastguard Worker# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17*ba62d9d3SAndroid Build Coastguard Worker# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18*ba62d9d3SAndroid Build Coastguard Worker# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19*ba62d9d3SAndroid Build Coastguard Worker# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20*ba62d9d3SAndroid Build Coastguard Worker# SOFTWARE.
21*ba62d9d3SAndroid Build Coastguard Worker# *****************************************************************************
22*ba62d9d3SAndroid Build Coastguard Worker
23*ba62d9d3SAndroid Build Coastguard Worker# utility functions for cmake
24*ba62d9d3SAndroid Build Coastguard Worker
25*ba62d9d3SAndroid Build Coastguard Workerif(NOT DEFINED _bs_include_utils)
26*ba62d9d3SAndroid Build Coastguard Workerset(_bs_include_utils TRUE)
27*ba62d9d3SAndroid Build Coastguard Worker
28*ba62d9d3SAndroid Build Coastguard Workerinclude(${BUILD_SYS_INC}/bs_base_utils.cmake)
29*ba62d9d3SAndroid Build Coastguard Worker
30*ba62d9d3SAndroid Build Coastguard Worker
31*ba62d9d3SAndroid Build Coastguard Worker# macro to setup output name to OUTPUT_NAME
32*ba62d9d3SAndroid Build Coastguard Worker# and turn on position independent code. This
33*ba62d9d3SAndroid Build Coastguard Worker# was pulled in to cover the separate hooks
34*ba62d9d3SAndroid Build Coastguard Worker# that each component was using to a standard macro
35*ba62d9d3SAndroid Build Coastguard Worker# for Linux builds only.  Can be extended to
36*ba62d9d3SAndroid Build Coastguard Worker# cover other OS targets without the need to update
37*ba62d9d3SAndroid Build Coastguard Worker# individual component lists.
38*ba62d9d3SAndroid Build Coastguard Workermacro(bs_set_post_target)
39*ba62d9d3SAndroid Build Coastguard Worker    if (${PLATFORM} STREQUAL linux)
40*ba62d9d3SAndroid Build Coastguard Worker        set_property(TARGET ${LIB_NAME} PROPERTY OUTPUT_NAME ${OUTPUT_NAME})
41*ba62d9d3SAndroid Build Coastguard Worker        set_property(TARGET ${LIB_NAME} PROPERTY POSITION_INDEPENDENT_CODE ON)
42*ba62d9d3SAndroid Build Coastguard Worker    endif(${PLATFORM} STREQUAL linux)
43*ba62d9d3SAndroid Build Coastguard Workerendmacro()
44*ba62d9d3SAndroid Build Coastguard Worker
45*ba62d9d3SAndroid Build Coastguard Worker# macro to setup standard defines This
46*ba62d9d3SAndroid Build Coastguard Worker# was pulled in to cover the separate v2c hooks
47*ba62d9d3SAndroid Build Coastguard Worker# that each component was using to a standard macro
48*ba62d9d3SAndroid Build Coastguard Worker# Can be extended to cover more OS targets without the need to update
49*ba62d9d3SAndroid Build Coastguard Worker# individual component lists.
50*ba62d9d3SAndroid Build Coastguard Workermacro(bs_set_defines)
51*ba62d9d3SAndroid Build Coastguard Worker    if (${PLATFORM} STREQUAL "ghs")
52*ba62d9d3SAndroid Build Coastguard Worker        # LANGUAGE "CXX" alone is not enough for GHS compiler
53*ba62d9d3SAndroid Build Coastguard Worker        # as both CC and CXX execs point to the same binary
54*ba62d9d3SAndroid Build Coastguard Worker        add_definitions(-dotciscxx)
55*ba62d9d3SAndroid Build Coastguard Worker    endif (${PLATFORM} STREQUAL "ghs")
56*ba62d9d3SAndroid Build Coastguard Worker
57*ba62d9d3SAndroid Build Coastguard Worker    if(NOT ${PLATFORM} STREQUAL "qnx")
58*ba62d9d3SAndroid Build Coastguard Worker        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
59*ba62d9d3SAndroid Build Coastguard Worker    endif()
60*ba62d9d3SAndroid Build Coastguard Worker
61*ba62d9d3SAndroid Build Coastguard Worker    if (${PLATFORM} STREQUAL linux)
62*ba62d9d3SAndroid Build Coastguard Worker        add_definitions(-D__STDC_LIMIT_MACROS)
63*ba62d9d3SAndroid Build Coastguard Worker        add_definitions(-D__STDC_CONSTANT_MACROS)
64*ba62d9d3SAndroid Build Coastguard Worker    endif (${PLATFORM} STREQUAL linux)
65*ba62d9d3SAndroid Build Coastguard Workerendmacro()
66*ba62d9d3SAndroid Build Coastguard Worker
67*ba62d9d3SAndroid Build Coastguard Worker# macro to properly setup the target_link_libraries
68*ba62d9d3SAndroid Build Coastguard Worker# for both INTERNAL_LIBS and EXTERNAL_LIBS.
69*ba62d9d3SAndroid Build Coastguard Workermacro(bs_ufo_link_libraries TARGET_NAME INTERNAL_LIBS EXTERNAL_LIBS)
70*ba62d9d3SAndroid Build Coastguard Worker
71*ba62d9d3SAndroid Build Coastguard Worker    string(REPLACE " " ";" INTERNAL_LIBS_LIST "${INTERNAL_LIBS}")
72*ba62d9d3SAndroid Build Coastguard Worker    string(REPLACE " " ";" EXTERNAL_LIBS_LIST "${EXTERNAL_LIBS}")
73*ba62d9d3SAndroid Build Coastguard Worker
74*ba62d9d3SAndroid Build Coastguard Worker    set(CMAKE_EXE_LINKER_FLAGS_RELEASE )
75*ba62d9d3SAndroid Build Coastguard Worker
76*ba62d9d3SAndroid Build Coastguard Worker    target_link_libraries(
77*ba62d9d3SAndroid Build Coastguard Worker        ${TARGET_NAME}
78*ba62d9d3SAndroid Build Coastguard Worker        -Wl,-Bsymbolic
79*ba62d9d3SAndroid Build Coastguard Worker        -Wl,--no-undefined
80*ba62d9d3SAndroid Build Coastguard Worker    )
81*ba62d9d3SAndroid Build Coastguard Worker
82*ba62d9d3SAndroid Build Coastguard Worker    foreach(lib ${INTERNAL_LIBS_LIST})
83*ba62d9d3SAndroid Build Coastguard Worker        # work around an undef (DeleteGHAL3DRegInfo) when linking with external projects
84*ba62d9d3SAndroid Build Coastguard Worker        if(NOT lib MATCHES "glsl_fe_link")
85*ba62d9d3SAndroid Build Coastguard Worker            target_link_libraries(${TARGET_NAME} -Wl,--whole-archive ${lib})
86*ba62d9d3SAndroid Build Coastguard Worker        endif()
87*ba62d9d3SAndroid Build Coastguard Worker    endforeach()
88*ba62d9d3SAndroid Build Coastguard Worker
89*ba62d9d3SAndroid Build Coastguard Worker    target_link_libraries(
90*ba62d9d3SAndroid Build Coastguard Worker        ${TARGET_NAME}
91*ba62d9d3SAndroid Build Coastguard Worker        -Wl,--no-whole-archive
92*ba62d9d3SAndroid Build Coastguard Worker    )
93*ba62d9d3SAndroid Build Coastguard Worker
94*ba62d9d3SAndroid Build Coastguard Worker    foreach(lib ${EXTERNAL_LIBS_LIST})
95*ba62d9d3SAndroid Build Coastguard Worker        target_link_libraries(${TARGET_NAME} ${lib})
96*ba62d9d3SAndroid Build Coastguard Worker    endforeach()
97*ba62d9d3SAndroid Build Coastguard Worker
98*ba62d9d3SAndroid Build Coastguard Workerendmacro()
99*ba62d9d3SAndroid Build Coastguard Workermacro(bs_ufo_link_libraries_noBsymbolic TARGET_NAME INTERNAL_LIBS EXTERNAL_LIBS)
100*ba62d9d3SAndroid Build Coastguard Worker
101*ba62d9d3SAndroid Build Coastguard Worker    string(REPLACE " " ";" INTERNAL_LIBS_LIST "${INTERNAL_LIBS}")
102*ba62d9d3SAndroid Build Coastguard Worker    string(REPLACE " " ";" EXTERNAL_LIBS_LIST "${EXTERNAL_LIBS}")
103*ba62d9d3SAndroid Build Coastguard Worker
104*ba62d9d3SAndroid Build Coastguard Worker    set(CMAKE_EXE_LINKER_FLAGS_RELEASE )
105*ba62d9d3SAndroid Build Coastguard Worker
106*ba62d9d3SAndroid Build Coastguard Worker    target_link_libraries(
107*ba62d9d3SAndroid Build Coastguard Worker        ${TARGET_NAME}
108*ba62d9d3SAndroid Build Coastguard Worker        -Wl,--no-undefined
109*ba62d9d3SAndroid Build Coastguard Worker    )
110*ba62d9d3SAndroid Build Coastguard Worker
111*ba62d9d3SAndroid Build Coastguard Worker    foreach(lib ${INTERNAL_LIBS_LIST})
112*ba62d9d3SAndroid Build Coastguard Worker        # work around an undef (DeleteGHAL3DRegInfo) when linking with external projects
113*ba62d9d3SAndroid Build Coastguard Worker        if(NOT lib MATCHES "glsl_fe_link")
114*ba62d9d3SAndroid Build Coastguard Worker            target_link_libraries(${TARGET_NAME} -Wl,--whole-archive ${lib})
115*ba62d9d3SAndroid Build Coastguard Worker        endif()
116*ba62d9d3SAndroid Build Coastguard Worker    endforeach()
117*ba62d9d3SAndroid Build Coastguard Worker
118*ba62d9d3SAndroid Build Coastguard Worker    target_link_libraries(
119*ba62d9d3SAndroid Build Coastguard Worker        ${TARGET_NAME}
120*ba62d9d3SAndroid Build Coastguard Worker        -Wl,--no-whole-archive
121*ba62d9d3SAndroid Build Coastguard Worker    )
122*ba62d9d3SAndroid Build Coastguard Worker
123*ba62d9d3SAndroid Build Coastguard Worker    foreach(lib ${EXTERNAL_LIBS_LIST})
124*ba62d9d3SAndroid Build Coastguard Worker        target_link_libraries(${TARGET_NAME} ${lib})
125*ba62d9d3SAndroid Build Coastguard Worker    endforeach()
126*ba62d9d3SAndroid Build Coastguard Worker
127*ba62d9d3SAndroid Build Coastguard Workerendmacro()
128*ba62d9d3SAndroid Build Coastguard Worker# macro to setup forced exceptions for Linux
129*ba62d9d3SAndroid Build Coastguard Worker# builds only.  Should be extended for other
130*ba62d9d3SAndroid Build Coastguard Worker# targets that require forced exceptions.
131*ba62d9d3SAndroid Build Coastguard Workermacro(bs_set_force_exceptions)
132*ba62d9d3SAndroid Build Coastguard Worker    if (${PLATFORM} STREQUAL "linux")
133*ba62d9d3SAndroid Build Coastguard Worker        string(REPLACE "no-exceptions" "exceptions" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
134*ba62d9d3SAndroid Build Coastguard Worker        string(REPLACE "no-exceptions" "exceptions" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
135*ba62d9d3SAndroid Build Coastguard Worker        string(REPLACE "no-exceptions" "exceptions" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
136*ba62d9d3SAndroid Build Coastguard Worker        string(REPLACE "no-exceptions" "exceptions" CMAKE_C_FLAGS_RELEASEINTERNAL "${CMAKE_C_FLAGS_RELEASEINTERNAL}")
137*ba62d9d3SAndroid Build Coastguard Worker
138*ba62d9d3SAndroid Build Coastguard Worker        string(REPLACE "no-exceptions" "exceptions" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
139*ba62d9d3SAndroid Build Coastguard Worker        string(REPLACE "no-exceptions" "exceptions" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
140*ba62d9d3SAndroid Build Coastguard Worker        string(REPLACE "no-exceptions" "exceptions" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
141*ba62d9d3SAndroid Build Coastguard Worker        string(REPLACE "no-exceptions" "exceptions" CMAKE_CXX_FLAGS_RELEASEINTERNAL "${CMAKE_CXX_FLAGS_RELEASEINTERNAL}")
142*ba62d9d3SAndroid Build Coastguard Worker
143*ba62d9d3SAndroid Build Coastguard Worker        string(REPLACE "-DNO_EXCEPTION_HANDLING" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
144*ba62d9d3SAndroid Build Coastguard Worker        string(REPLACE "-DNO_EXCEPTION_HANDLING" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
145*ba62d9d3SAndroid Build Coastguard Worker        string(REPLACE "-DNO_EXCEPTION_HANDLING" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
146*ba62d9d3SAndroid Build Coastguard Worker        string(REPLACE "-DNO_EXCEPTION_HANDLING" "" CMAKE_C_FLAGS_RELEASEINERNAL "${CMAKE_C_FLAGS_RELEASEINERNAL}")
147*ba62d9d3SAndroid Build Coastguard Worker
148*ba62d9d3SAndroid Build Coastguard Worker        string(REPLACE "-DNO_EXCEPTION_HANDLING" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
149*ba62d9d3SAndroid Build Coastguard Worker        string(REPLACE "-DNO_EXCEPTION_HANDLING" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
150*ba62d9d3SAndroid Build Coastguard Worker        string(REPLACE "-DNO_EXCEPTION_HANDLING" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
151*ba62d9d3SAndroid Build Coastguard Worker        string(REPLACE "-DNO_EXCEPTION_HANDLING" "" CMAKE_CXX_FLAGS_RELEASEINTERNAL "${CMAKE_CXX_FLAGS_RELEASEINTERNAL}")
152*ba62d9d3SAndroid Build Coastguard Worker    endif()
153*ba62d9d3SAndroid Build Coastguard Workerendmacro()
154*ba62d9d3SAndroid Build Coastguard Worker
155*ba62d9d3SAndroid Build Coastguard Worker# function to force an error if a variable if it is not
156*ba62d9d3SAndroid Build Coastguard Worker# defined
157*ba62d9d3SAndroid Build Coastguard Workerfunction(bs_fatal_if_undefined)
158*ba62d9d3SAndroid Build Coastguard Worker    string(REPLACE " " ";" _var_names "${ARGV}")
159*ba62d9d3SAndroid Build Coastguard Worker    set(_undef_seen FALSE)
160*ba62d9d3SAndroid Build Coastguard Worker    foreach(_varnam ${_var_names})
161*ba62d9d3SAndroid Build Coastguard Worker        if(NOT DEFINED ${_varnam})
162*ba62d9d3SAndroid Build Coastguard Worker            message(SEND_ERROR "Required variable not defined: ${_varnam}")
163*ba62d9d3SAndroid Build Coastguard Worker            set(_undef_seen TRUE)
164*ba62d9d3SAndroid Build Coastguard Worker        endif()
165*ba62d9d3SAndroid Build Coastguard Worker    endforeach()
166*ba62d9d3SAndroid Build Coastguard Worker    if(_undef_seen)
167*ba62d9d3SAndroid Build Coastguard Worker        message(FATAL_ERROR "Stopping due to undefined variables")
168*ba62d9d3SAndroid Build Coastguard Worker    endif(_undef_seen)
169*ba62d9d3SAndroid Build Coastguard Workerendfunction(bs_fatal_if_undefined)
170*ba62d9d3SAndroid Build Coastguard Worker
171*ba62d9d3SAndroid Build Coastguard Worker# macro to return the llvm directory path
172*ba62d9d3SAndroid Build Coastguard Worker# for host and target builds.
173*ba62d9d3SAndroid Build Coastguard Workermacro(bs_get_llvm_dir)
174*ba62d9d3SAndroid Build Coastguard Worker    set(LLVM_DIR ${DUMP_DIR}/igc/llvm/${LLVM_INT_DIR})
175*ba62d9d3SAndroid Build Coastguard Worker    set(CODEGEN_DIR ${DUMP_DIR}/codegen)
176*ba62d9d3SAndroid Build Coastguard Workerendmacro()
177*ba62d9d3SAndroid Build Coastguard Worker
178*ba62d9d3SAndroid Build Coastguard Worker# macro to add common includes used by multiple components.
179*ba62d9d3SAndroid Build Coastguard Workermacro(bs_add_some_common_includes)
180*ba62d9d3SAndroid Build Coastguard Worker    bs_fatal_if_undefined(PLATFORM)
181*ba62d9d3SAndroid Build Coastguard Worker    if (${PLATFORM} STREQUAL linux)
182*ba62d9d3SAndroid Build Coastguard Worker        bs_get_llvm_dir()
183*ba62d9d3SAndroid Build Coastguard Worker        bs_fatal_if_undefined(CODEGEN_DIR LLVM_DIR GFX_DEVELOPMENT_DIR)
184*ba62d9d3SAndroid Build Coastguard Worker        include_directories(${CODEGEN_DIR})
185*ba62d9d3SAndroid Build Coastguard Worker        include_directories(${LLVM_DIR}/include)
186*ba62d9d3SAndroid Build Coastguard Worker        include_directories(${GFX_DEVELOPMENT_DIR}/Source/OpenGL/source/os/linux/oskl)
187*ba62d9d3SAndroid Build Coastguard Worker
188*ba62d9d3SAndroid Build Coastguard Worker        if(NOT "${LIBDRM_SRC}" STREQUAL "")
189*ba62d9d3SAndroid Build Coastguard Worker            message("using LIBDRM_SRC=${LIBDRM_SRC}")
190*ba62d9d3SAndroid Build Coastguard Worker            include_directories(${LIBDRM_SRC})
191*ba62d9d3SAndroid Build Coastguard Worker            include_directories(${LIBDRM_SRC}/include/drm)
192*ba62d9d3SAndroid Build Coastguard Worker            include_directories(${LIBDRM_SRC}/intel)
193*ba62d9d3SAndroid Build Coastguard Worker        else()
194*ba62d9d3SAndroid Build Coastguard Worker            include_directories(${BS_DIR_OPENGL}/source/os/linux/oskl/drm_intel)
195*ba62d9d3SAndroid Build Coastguard Worker            include_directories(${BS_DIR_INSTRUMENTATION}/driver/linux/drm_intel)
196*ba62d9d3SAndroid Build Coastguard Worker        endif()
197*ba62d9d3SAndroid Build Coastguard Worker        set(DRM_LIB_PATH drm)
198*ba62d9d3SAndroid Build Coastguard Worker        set(DRM_INTEL_LIB_PATH drm_intel)
199*ba62d9d3SAndroid Build Coastguard Worker    endif()
200*ba62d9d3SAndroid Build Coastguard Workerendmacro()
201*ba62d9d3SAndroid Build Coastguard Worker
202*ba62d9d3SAndroid Build Coastguard Worker# macro to allow setting a list of extra compile
203*ba62d9d3SAndroid Build Coastguard Worker# definitions.
204*ba62d9d3SAndroid Build Coastguard Workermacro(bs_set_extra_target_properties targ propValues)
205*ba62d9d3SAndroid Build Coastguard Worker    string(REPLACE " " ";" PROP_VALUES "${ARGV}")
206*ba62d9d3SAndroid Build Coastguard Worker    if(TARGET "${targ}")
207*ba62d9d3SAndroid Build Coastguard Worker        foreach(prop ${PROP_VALUES})
208*ba62d9d3SAndroid Build Coastguard Worker            if (${prop} STREQUAL ${targ})
209*ba62d9d3SAndroid Build Coastguard Worker                continue()
210*ba62d9d3SAndroid Build Coastguard Worker            endif()
211*ba62d9d3SAndroid Build Coastguard Worker            set_property(TARGET "${targ}" APPEND PROPERTY COMPILE_DEFINITIONS
212*ba62d9d3SAndroid Build Coastguard Worker                ${prop}
213*ba62d9d3SAndroid Build Coastguard Worker            )
214*ba62d9d3SAndroid Build Coastguard Worker        endforeach()
215*ba62d9d3SAndroid Build Coastguard Worker    endif(TARGET "${targ}")
216*ba62d9d3SAndroid Build Coastguard Workerendmacro()
217*ba62d9d3SAndroid Build Coastguard Worker
218*ba62d9d3SAndroid Build Coastguard Workerendif(NOT DEFINED _bs_include_utils)
219