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