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