blob: 777c810ba0ace1c0b92f1d8d6cc2f6fdd09cdb12 [file] [log] [blame]
# *****************************************************************************
# Copyright (c) 2017 Intel Corporation
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
# *****************************************************************************
# utility functions for cmake
if(NOT DEFINED _bs_include_utils)
set(_bs_include_utils TRUE)
include(${BUILD_SYS_INC}/bs_base_utils.cmake)
# macro to setup output name to OUTPUT_NAME
# and turn on position independent code. This
# was pulled in to cover the separate hooks
# that each component was using to a standard macro
# for Linux builds only. Can be extended to
# cover other OS targets without the need to update
# individual component lists.
macro(bs_set_post_target)
if (${PLATFORM} STREQUAL linux)
set_property(TARGET ${LIB_NAME} PROPERTY OUTPUT_NAME ${OUTPUT_NAME})
set_property(TARGET ${LIB_NAME} PROPERTY POSITION_INDEPENDENT_CODE ON)
endif(${PLATFORM} STREQUAL linux)
endmacro()
# macro to setup standard defines This
# was pulled in to cover the separate v2c hooks
# that each component was using to a standard macro
# Can be extended to cover more OS targets without the need to update
# individual component lists.
macro(bs_set_defines)
if (${PLATFORM} STREQUAL "ghs")
# LANGUAGE "CXX" alone is not enough for GHS compiler
# as both CC and CXX execs point to the same binary
add_definitions(-dotciscxx)
endif (${PLATFORM} STREQUAL "ghs")
if(NOT ${PLATFORM} STREQUAL "qnx")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
endif()
if (${PLATFORM} STREQUAL linux)
add_definitions(-D__STDC_LIMIT_MACROS)
add_definitions(-D__STDC_CONSTANT_MACROS)
endif (${PLATFORM} STREQUAL linux)
endmacro()
# macro to properly setup the target_link_libraries
# for both INTERNAL_LIBS and EXTERNAL_LIBS.
macro(bs_ufo_link_libraries TARGET_NAME INTERNAL_LIBS EXTERNAL_LIBS)
string(REPLACE " " ";" INTERNAL_LIBS_LIST "${INTERNAL_LIBS}")
string(REPLACE " " ";" EXTERNAL_LIBS_LIST "${EXTERNAL_LIBS}")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE )
target_link_libraries(
${TARGET_NAME}
-Wl,-Bsymbolic
-Wl,--no-undefined
)
foreach(lib ${INTERNAL_LIBS_LIST})
# work around an undef (DeleteGHAL3DRegInfo) when linking with external projects
if(NOT lib MATCHES "glsl_fe_link")
target_link_libraries(${TARGET_NAME} -Wl,--whole-archive ${lib})
endif()
endforeach()
target_link_libraries(
${TARGET_NAME}
-Wl,--no-whole-archive
)
foreach(lib ${EXTERNAL_LIBS_LIST})
target_link_libraries(${TARGET_NAME} ${lib})
endforeach()
endmacro()
macro(bs_ufo_link_libraries_noBsymbolic TARGET_NAME INTERNAL_LIBS EXTERNAL_LIBS)
string(REPLACE " " ";" INTERNAL_LIBS_LIST "${INTERNAL_LIBS}")
string(REPLACE " " ";" EXTERNAL_LIBS_LIST "${EXTERNAL_LIBS}")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE )
target_link_libraries(
${TARGET_NAME}
-Wl,--no-undefined
)
foreach(lib ${INTERNAL_LIBS_LIST})
# work around an undef (DeleteGHAL3DRegInfo) when linking with external projects
if(NOT lib MATCHES "glsl_fe_link")
target_link_libraries(${TARGET_NAME} -Wl,--whole-archive ${lib})
endif()
endforeach()
target_link_libraries(
${TARGET_NAME}
-Wl,--no-whole-archive
)
foreach(lib ${EXTERNAL_LIBS_LIST})
target_link_libraries(${TARGET_NAME} ${lib})
endforeach()
endmacro()
# macro to setup forced exceptions for Linux
# builds only. Should be extended for other
# targets that require forced exceptions.
macro(bs_set_force_exceptions)
if (${PLATFORM} STREQUAL "linux")
string(REPLACE "no-exceptions" "exceptions" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
string(REPLACE "no-exceptions" "exceptions" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
string(REPLACE "no-exceptions" "exceptions" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
string(REPLACE "no-exceptions" "exceptions" CMAKE_C_FLAGS_RELEASEINTERNAL "${CMAKE_C_FLAGS_RELEASEINTERNAL}")
string(REPLACE "no-exceptions" "exceptions" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
string(REPLACE "no-exceptions" "exceptions" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
string(REPLACE "no-exceptions" "exceptions" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
string(REPLACE "no-exceptions" "exceptions" CMAKE_CXX_FLAGS_RELEASEINTERNAL "${CMAKE_CXX_FLAGS_RELEASEINTERNAL}")
string(REPLACE "-DNO_EXCEPTION_HANDLING" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
string(REPLACE "-DNO_EXCEPTION_HANDLING" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
string(REPLACE "-DNO_EXCEPTION_HANDLING" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
string(REPLACE "-DNO_EXCEPTION_HANDLING" "" CMAKE_C_FLAGS_RELEASEINERNAL "${CMAKE_C_FLAGS_RELEASEINERNAL}")
string(REPLACE "-DNO_EXCEPTION_HANDLING" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
string(REPLACE "-DNO_EXCEPTION_HANDLING" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
string(REPLACE "-DNO_EXCEPTION_HANDLING" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
string(REPLACE "-DNO_EXCEPTION_HANDLING" "" CMAKE_CXX_FLAGS_RELEASEINTERNAL "${CMAKE_CXX_FLAGS_RELEASEINTERNAL}")
endif()
endmacro()
# function to force an error if a variable if it is not
# defined
function(bs_fatal_if_undefined)
string(REPLACE " " ";" _var_names "${ARGV}")
set(_undef_seen FALSE)
foreach(_varnam ${_var_names})
if(NOT DEFINED ${_varnam})
message(SEND_ERROR "Required variable not defined: ${_varnam}")
set(_undef_seen TRUE)
endif()
endforeach()
if(_undef_seen)
message(FATAL_ERROR "Stopping due to undefined variables")
endif(_undef_seen)
endfunction(bs_fatal_if_undefined)
# macro to return the llvm directory path
# for host and target builds.
macro(bs_get_llvm_dir)
set(LLVM_DIR ${DUMP_DIR}/igc/llvm/${LLVM_INT_DIR})
set(CODEGEN_DIR ${DUMP_DIR}/codegen)
endmacro()
# macro to add common includes used by multiple components.
macro(bs_add_some_common_includes)
bs_fatal_if_undefined(PLATFORM)
if (${PLATFORM} STREQUAL linux)
bs_get_llvm_dir()
bs_fatal_if_undefined(CODEGEN_DIR LLVM_DIR GFX_DEVELOPMENT_DIR)
include_directories(${CODEGEN_DIR})
include_directories(${LLVM_DIR}/include)
include_directories(${GFX_DEVELOPMENT_DIR}/Source/OpenGL/source/os/linux/oskl)
if(NOT "${LIBDRM_SRC}" STREQUAL "")
message("using LIBDRM_SRC=${LIBDRM_SRC}")
include_directories(${LIBDRM_SRC})
include_directories(${LIBDRM_SRC}/include/drm)
include_directories(${LIBDRM_SRC}/intel)
else()
include_directories(${BS_DIR_OPENGL}/source/os/linux/oskl/drm_intel)
include_directories(${BS_DIR_INSTRUMENTATION}/driver/linux/drm_intel)
endif()
set(DRM_LIB_PATH drm)
set(DRM_INTEL_LIB_PATH drm_intel)
endif()
endmacro()
# macro to allow setting a list of extra compile
# definitions.
macro(bs_set_extra_target_properties targ propValues)
string(REPLACE " " ";" PROP_VALUES "${ARGV}")
if(TARGET "${targ}")
foreach(prop ${PROP_VALUES})
if (${prop} STREQUAL ${targ})
continue()
endif()
set_property(TARGET "${targ}" APPEND PROPERTY COMPILE_DEFINITIONS
${prop}
)
endforeach()
endif(TARGET "${targ}")
endmacro()
endif(NOT DEFINED _bs_include_utils)