Add all subdirs to build directory

Change-Id: I27bf5e6644a0590bc932c0561e365a0684029c67
Signed-off-by: Maciej Plewka <maciej.plewka@intel.com>
This commit is contained in:
Maciej Plewka
2019-05-15 11:49:49 +02:00
committed by sys_ocldev
parent c0342cdc87
commit 0c22cdfb74
2 changed files with 212 additions and 199 deletions

View File

@ -32,8 +32,8 @@ if(RELEASE_WITH_REGKEYS)
endif(RELEASE_WITH_REGKEYS) endif(RELEASE_WITH_REGKEYS)
if(NOT CMAKE_BUILD_TYPE) if(NOT CMAKE_BUILD_TYPE)
message(STATUS "CMAKE_BUILD_TYPE not specified, using Release") message(STATUS "CMAKE_BUILD_TYPE not specified, using Release")
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type: [Release, ReleaseInternal, Debug]" FORCE) set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type: [Release, ReleaseInternal, Debug]" FORCE)
endif() endif()
add_definitions(-DCL_USE_DEPRECATED_OPENCL_1_1_APIS -DCL_USE_DEPRECATED_OPENCL_1_2_APIS -DCL_USE_DEPRECATED_OPENCL_2_0_APIS) add_definitions(-DCL_USE_DEPRECATED_OPENCL_1_1_APIS -DCL_USE_DEPRECATED_OPENCL_1_2_APIS -DCL_USE_DEPRECATED_OPENCL_2_0_APIS)
@ -55,23 +55,23 @@ endif()
string(TOLOWER "${CMAKE_BUILD_TYPE}" BUILD_TYPE_lower) string(TOLOWER "${CMAKE_BUILD_TYPE}" BUILD_TYPE_lower)
if("${BUILD_TYPE_lower}" STREQUAL "releaseinternal") if("${BUILD_TYPE_lower}" STREQUAL "releaseinternal")
add_definitions(-D_RELEASE_INTERNAL) add_definitions(-D_RELEASE_INTERNAL)
endif("${BUILD_TYPE_lower}" STREQUAL "releaseinternal") endif("${BUILD_TYPE_lower}" STREQUAL "releaseinternal")
message(STATUS "${CMAKE_BUILD_TYPE} build configuration") message(STATUS "${CMAKE_BUILD_TYPE} build configuration")
# Set the runtime source directory # Set the runtime source directory
if(NOT DEFINED IGDRCL_SOURCE_DIR) if(NOT DEFINED IGDRCL_SOURCE_DIR)
set(IGDRCL_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) set(IGDRCL_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
endif() endif()
# Set our build directory # Set our build directory
if(NOT DEFINED IGDRCL_BUILD_DIR) if(NOT DEFINED IGDRCL_BUILD_DIR)
set(IGDRCL_BUILD_DIR ${CMAKE_BINARY_DIR}) set(IGDRCL_BUILD_DIR ${CMAKE_BINARY_DIR})
endif() endif()
if(NOT IGDRCL_BINARY_DIR) if(NOT IGDRCL_BINARY_DIR)
set(IGDRCL_BINARY_DIR ${CMAKE_BINARY_DIR}) set(IGDRCL_BINARY_DIR ${CMAKE_BINARY_DIR})
endif() endif()
# we use c++14 # we use c++14
@ -89,17 +89,17 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${IGDRCL_BINARY_DIR}/lib)
# We want to build with the static, multithreaded runtime libraries (as opposed # We want to build with the static, multithreaded runtime libraries (as opposed
# to the multithreaded runtime DLLs) # to the multithreaded runtime DLLs)
if(MSVC) if(MSVC)
string(REPLACE "/MDd" "/MTd" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}") string(REPLACE "/MDd" "/MTd" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
string(REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") string(REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
string(REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_RELEASEINTERNAL "${CMAKE_CXX_FLAGS_RELEASEINTERNAL}") string(REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_RELEASEINTERNAL "${CMAKE_CXX_FLAGS_RELEASEINTERNAL}")
endif(MSVC) endif(MSVC)
if(CMAKE_SIZEOF_VOID_P EQUAL 8) if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(NEO_BITS "64") set(NEO_BITS "64")
set(NEO_ARCH "x64") set(NEO_ARCH "x64")
else() else()
set(NEO_BITS "32") set(NEO_BITS "32")
set(NEO_ARCH "x86") set(NEO_ARCH "x86")
endif() endif()
if(NOT KMDAF_HEADERS_DIR) if(NOT KMDAF_HEADERS_DIR)
@ -162,51 +162,51 @@ endif()
message(STATUS "Khronos OpenGL headers dir: ${KHRONOS_GL_HEADERS_DIR}") message(STATUS "Khronos OpenGL headers dir: ${KHRONOS_GL_HEADERS_DIR}")
if(NOT THIRD_PARTY_DIR) if(NOT THIRD_PARTY_DIR)
get_filename_component(THIRD_PARTY_DIR "../third_party/" ABSOLUTE) get_filename_component(THIRD_PARTY_DIR "../third_party/" ABSOLUTE)
endif(NOT THIRD_PARTY_DIR) endif(NOT THIRD_PARTY_DIR)
message(STATUS "Third party dir: ${THIRD_PARTY_DIR}") message(STATUS "Third party dir: ${THIRD_PARTY_DIR}")
if(WIN32) if(WIN32)
# get WDK location and version to use # get WDK location and version to use
if(NOT WDK_DIR) if(NOT WDK_DIR)
if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../wdk") if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../wdk")
get_filename_component(WDK_DIR "../wdk" ABSOLUTE) get_filename_component(WDK_DIR "../wdk" ABSOLUTE)
endif() endif()
endif(NOT WDK_DIR) endif(NOT WDK_DIR)
if(WDK_DIR) if(WDK_DIR)
if(IS_DIRECTORY "${WDK_DIR}/Win15") if(IS_DIRECTORY "${WDK_DIR}/Win15")
get_filename_component(WDK_DIR "${WDK_DIR}/Win15" ABSOLUTE) get_filename_component(WDK_DIR "${WDK_DIR}/Win15" ABSOLUTE)
endif() endif()
endif() endif()
message(STATUS "WDK Directory: ${WDK_DIR}") message(STATUS "WDK Directory: ${WDK_DIR}")
if(NOT WDK_VERSION) if(NOT WDK_VERSION)
# Get WDK version from ${WDK_DIR}/WDKVersion.txt # Get WDK version from ${WDK_DIR}/WDKVersion.txt
file(READ "${WDK_DIR}/WDKVersion.txt" WindowsTargetPlatformVersion) file(READ "${WDK_DIR}/WDKVersion.txt" WindowsTargetPlatformVersion)
string(REPLACE " " ";" WindowsTargetPlatformVersion ${WindowsTargetPlatformVersion}) string(REPLACE " " ";" WindowsTargetPlatformVersion ${WindowsTargetPlatformVersion})
list(LENGTH WindowsTargetPlatformVersion versionListLength) list(LENGTH WindowsTargetPlatformVersion versionListLength)
if(NOT versionListLength EQUAL 3) if(NOT versionListLength EQUAL 3)
message(ERROR "Error reading content of WDKVersion.txt file") message(ERROR "Error reading content of WDKVersion.txt file")
endif(NOT versionListLength EQUAL 3) endif(NOT versionListLength EQUAL 3)
list(GET WindowsTargetPlatformVersion 2 WindowsTargetPlatformVersion) list(GET WindowsTargetPlatformVersion 2 WindowsTargetPlatformVersion)
else() else()
set(WindowsTargetPlatformVersion ${WDK_VERSION}) set(WindowsTargetPlatformVersion ${WDK_VERSION})
endif() endif()
message(STATUS "WDK Version is ${WindowsTargetPlatformVersion}") message(STATUS "WDK Version is ${WindowsTargetPlatformVersion}")
if(${WindowsTargetPlatformVersion} VERSION_LESS "10.0.18328.0") if(${WindowsTargetPlatformVersion} VERSION_LESS "10.0.18328.0")
set(CONST_FROM_WDK_10_0_18328_0) set(CONST_FROM_WDK_10_0_18328_0)
else() else()
set(CONST_FROM_WDK_10_0_18328_0 "CONST") set(CONST_FROM_WDK_10_0_18328_0 "CONST")
endif() endif()
add_compile_options(-DCONST_FROM_WDK_10_0_18328_0=${CONST_FROM_WDK_10_0_18328_0}) add_compile_options(-DCONST_FROM_WDK_10_0_18328_0=${CONST_FROM_WDK_10_0_18328_0})
set(WDK_INCLUDE_PATHS set(WDK_INCLUDE_PATHS
"${WDK_DIR}/Include/${WindowsTargetPlatformVersion}/um" "${WDK_DIR}/Include/${WindowsTargetPlatformVersion}/um"
"${WDK_DIR}/Include/${WindowsTargetPlatformVersion}/shared" "${WDK_DIR}/Include/${WindowsTargetPlatformVersion}/shared"
"${WDK_DIR}/Include/${WindowsTargetPlatformVersion}/km" "${WDK_DIR}/Include/${WindowsTargetPlatformVersion}/km"
) )
message(STATUS "WDK include paths: ${WDK_INCLUDE_PATHS}") message(STATUS "WDK include paths: ${WDK_INCLUDE_PATHS}")
endif() endif()
# Intel Graphics Compiler detection # Intel Graphics Compiler detection
@ -251,7 +251,7 @@ if(NOT IGC__IGC_TARGETS)
set(IGC_OPTION__OUTPUT_DIR "${IGDRCL_BUILD_DIR}/igc") set(IGC_OPTION__OUTPUT_DIR "${IGDRCL_BUILD_DIR}/igc")
set(IGC_OPTION__INCLUDE_IGC_COMPILER_TOOLS OFF) set(IGC_OPTION__INCLUDE_IGC_COMPILER_TOOLS OFF)
add_subdirectory("${IGC_DIR}" "${IGDRCL_BUILD_DIR}/igc" EXCLUDE_FROM_ALL) add_subdirectory_unique("${IGC_DIR}" "${IGDRCL_BUILD_DIR}/igc" EXCLUDE_FROM_ALL)
set(IGDRCL__IGC_TARGETS "${IGC__IGC_TARGETS}") set(IGDRCL__IGC_TARGETS "${IGC__IGC_TARGETS}")
foreach(TARGET_tmp ${IGDRCL__IGC_TARGETS}) foreach(TARGET_tmp ${IGDRCL__IGC_TARGETS})
@ -322,7 +322,7 @@ if(NOT DEFINED GMMUMD_LIB_NAME)
else() else()
if(EXISTS "${GMM_SOURCE_DIR}/CMakeLists.txt") if(EXISTS "${GMM_SOURCE_DIR}/CMakeLists.txt")
message(STATUS "GmmLib source dir is: ${GMM_SOURCE_DIR}") message(STATUS "GmmLib source dir is: ${GMM_SOURCE_DIR}")
add_subdirectory("${GMM_SOURCE_DIR}" "${IGDRCL_BUILD_DIR}/gmmlib") add_subdirectory_unique("${GMM_SOURCE_DIR}" "${IGDRCL_BUILD_DIR}/gmmlib")
if(NOT DEFINED GMMUMD_LIB_NAME) if(NOT DEFINED GMMUMD_LIB_NAME)
set(GMMUMD_LIB_NAME "igfx_gmmumd_dll") set(GMMUMD_LIB_NAME "igfx_gmmumd_dll")
@ -364,7 +364,7 @@ if(NOT INSTRUMENTATION_LIB_NAME)
endif() endif()
if(IS_DIRECTORY "${INSTRUMENTATION_SOURCE_DIR}") if(IS_DIRECTORY "${INSTRUMENTATION_SOURCE_DIR}")
message(STATUS "Instrumentation source dir is: ${INSTRUMENTATION_SOURCE_DIR}") message(STATUS "Instrumentation source dir is: ${INSTRUMENTATION_SOURCE_DIR}")
add_subdirectory("${INSTRUMENTATION_SOURCE_DIR}" "${IGDRCL_BUILD_DIR}/instrumentation") add_subdirectory_unique("${INSTRUMENTATION_SOURCE_DIR}" "${IGDRCL_BUILD_DIR}/instrumentation")
set(INSTRUMENTATION_LIB_NAME "instrumentation_umd") set(INSTRUMENTATION_LIB_NAME "instrumentation_umd")
set(HAVE_INSTRUMENTATION TRUE) set(HAVE_INSTRUMENTATION TRUE)
endif() endif()
@ -427,12 +427,12 @@ if(NEO_BITS STREQUAL "64")
endif() endif()
add_subdirectory(third_party/gtest) add_subdirectory_unique(third_party/gtest)
message(STATUS "AUB_STREAM_DIR = ${AUB_STREAM_DIR}" ) message(STATUS "AUB_STREAM_DIR = ${AUB_STREAM_DIR}" )
if(DEFINED AUB_STREAM_DIR) if(DEFINED AUB_STREAM_DIR)
set(AUB_STREAM_PROJECT_NAME "aub_stream") set(AUB_STREAM_PROJECT_NAME "aub_stream")
add_subdirectory(${AUB_STREAM_DIR} ${CMAKE_BINARY_DIR}/aub_stream EXCLUDE_FROM_ALL) add_subdirectory_unique(${AUB_STREAM_DIR} ${CMAKE_BINARY_DIR}/aub_stream EXCLUDE_FROM_ALL)
set(ENGINE_NODE_DIR ${AUB_STREAM_DIR}/aub_mem_dump${BRANCH_DIR_SUFFIX}/includes) set(ENGINE_NODE_DIR ${AUB_STREAM_DIR}/aub_mem_dump${BRANCH_DIR_SUFFIX}/includes)
else() else()
set(ENGINE_NODE_DIR ${AUB_STREAM_HEADERS_DIR}) set(ENGINE_NODE_DIR ${AUB_STREAM_HEADERS_DIR})
@ -466,9 +466,9 @@ option(APPVERIFIER_ALLOWED "allow use of AppVerifier" OFF)
option(CCACHE_ALLOWED "allow use of ccache" TRUE) option(CCACHE_ALLOWED "allow use of ccache" TRUE)
find_program(CCACHE_EXE_FOUND ccache) find_program(CCACHE_EXE_FOUND ccache)
if(CCACHE_EXE_FOUND AND CCACHE_ALLOWED) if(CCACHE_EXE_FOUND AND CCACHE_ALLOWED)
message(STATUS "Found ccache: ${CCACHE_EXE_FOUND}") message(STATUS "Found ccache: ${CCACHE_EXE_FOUND}")
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache) set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
endif() endif()
# Miscs options # Miscs options
@ -479,177 +479,177 @@ set(CL_CACHE_LOCATION "cl_cache" CACHE STRING "OpenCL program binary cache locat
# Put profiling enable flag into define # Put profiling enable flag into define
if(OCL_RUNTIME_PROFILING) if(OCL_RUNTIME_PROFILING)
add_definitions(-DOCL_RUNTIME_PROFILING=${OCL_RUNTIME_PROFILING}) add_definitions(-DOCL_RUNTIME_PROFILING=${OCL_RUNTIME_PROFILING})
endif() endif()
if(MSVC) if(MSVC)
# Force to treat warnings as errors # Force to treat warnings as errors
if(NOT CMAKE_CXX_FLAGS MATCHES "/WX") if(NOT CMAKE_CXX_FLAGS MATCHES "/WX")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX")
if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /we4189") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /we4189")
endif() endif()
endif() endif()
# Disable generating manifest # Disable generating manifest
set(LINKER_FLAGS "/MANIFEST:NO") set(LINKER_FLAGS "/MANIFEST:NO")
# Support for WUD # Support for WUD
set(CMAKE_CXX_STANDARD_LIBRARIES "onecore.lib") set(CMAKE_CXX_STANDARD_LIBRARIES "onecore.lib")
foreach(IT kernel32.lib;user32.lib;gdi32.lib;advapi32.lib;ole32.lib;) foreach(IT kernel32.lib;user32.lib;gdi32.lib;advapi32.lib;ole32.lib;)
set(LINKER_FLAGS "${LINKER_FLAGS} /NODEFAULTLIB:${IT}") set(LINKER_FLAGS "${LINKER_FLAGS} /NODEFAULTLIB:${IT}")
endforeach() endforeach()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LINKER_FLAGS}") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LINKER_FLAGS}")
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${LINKER_FLAGS}") set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${LINKER_FLAGS}")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${LINKER_FLAGS}") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${LINKER_FLAGS}")
add_definitions(-DUNICODE -D_UNICODE) add_definitions(-DUNICODE -D_UNICODE)
link_directories("${WDK_DIR}/Lib/${WindowsTargetPlatformVersion}/um/${NEO_ARCH}/") link_directories("${WDK_DIR}/Lib/${WindowsTargetPlatformVersion}/um/${NEO_ARCH}/")
else() else()
if(IGDRCL_GCOV) if(IGDRCL_GCOV)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage --coverage") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage --coverage")
endif() endif()
option(USE_ASAN "Link with address sanitization support" OFF) option(USE_ASAN "Link with address sanitization support" OFF)
if(USE_ASAN) if(USE_ASAN)
if(CMAKE_COMPILER_IS_GNUCC) if(CMAKE_COMPILER_IS_GNUCC)
set(ASAN_FLAGS " -fsanitize=address -fno-omit-frame-pointer -DSANITIZER_BUILD") set(ASAN_FLAGS " -fsanitize=address -fno-omit-frame-pointer -DSANITIZER_BUILD")
set(ASAN_LIBS "asan") set(ASAN_LIBS "asan")
else() else()
message(STATUS "Address sanitization with clang not yet support") message(STATUS "Address sanitization with clang not yet support")
endif() endif()
endif() endif()
if(USE_TSAN) if(USE_TSAN)
if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
set(TSAN_FLAGS " -fsanitize=thread -DSANITIZER_BUILD") set(TSAN_FLAGS " -fsanitize=thread -DSANITIZER_BUILD")
set(TSAN_LIBS "tsan") set(TSAN_LIBS "tsan")
else() else()
message(STATUS "Thread sanitization with gcc is not fully supported") message(STATUS "Thread sanitization with gcc is not fully supported")
endif() endif()
endif() endif()
endif() endif()
# setup variables needed for custom configuration type # setup variables needed for custom configuration type
# generate PDB files even for release build on MSVC # generate PDB files even for release build on MSVC
if(MSVC) if(MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi")
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF") set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF")
set(CMAKE_CXX_FLAGS_RELEASEINTERNAL "${CMAKE_CXX_FLAGS_RELEASEINTERNAL} /Zi") set(CMAKE_CXX_FLAGS_RELEASEINTERNAL "${CMAKE_CXX_FLAGS_RELEASEINTERNAL} /Zi")
set(CMAKE_SHARED_LINKER_FLAGS_RELEASEINTERNAL "${CMAKE_SHARED_LINKER_FLAGS_RELEASEINTERNAL} /DEBUG /OPT:REF /OPT:ICF") set(CMAKE_SHARED_LINKER_FLAGS_RELEASEINTERNAL "${CMAKE_SHARED_LINKER_FLAGS_RELEASEINTERNAL} /DEBUG /OPT:REF /OPT:ICF")
endif() endif()
# spectre mitigation # spectre mitigation
include(CheckCXXCompilerFlag) include(CheckCXXCompilerFlag)
if(MSVC) if(MSVC)
check_cxx_compiler_flag(/Qspectre COMPILER_SUPPORTS_QSPECTRE) check_cxx_compiler_flag(/Qspectre COMPILER_SUPPORTS_QSPECTRE)
check_cxx_compiler_flag(/d2guardspecload COMPILER_SUPPORTS_D2GUARDSPECLOAD) check_cxx_compiler_flag(/d2guardspecload COMPILER_SUPPORTS_D2GUARDSPECLOAD)
if(COMPILER_SUPPORTS_QSPECTRE) if(COMPILER_SUPPORTS_QSPECTRE)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Qspectre") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Qspectre")
elseif(COMPILER_SUPPORTS_D2GUARDSPECLOAD) elseif(COMPILER_SUPPORTS_D2GUARDSPECLOAD)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /d2guardspecload") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /d2guardspecload")
else() else()
message(WARNING "Spectre mitigation is not supported by the compiler") message(WARNING "Spectre mitigation is not supported by the compiler")
endif() endif()
else() else()
if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
check_cxx_compiler_flag(-mretpoline COMPILER_SUPPORTS_RETPOLINE) check_cxx_compiler_flag(-mretpoline COMPILER_SUPPORTS_RETPOLINE)
if(COMPILER_SUPPORTS_RETPOLINE) if(COMPILER_SUPPORTS_RETPOLINE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mretpoline") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mretpoline")
else() else()
message(WARNING "Spectre mitigation -mretpoline flag is not supported by the compiler") message(WARNING "Spectre mitigation -mretpoline flag is not supported by the compiler")
endif() endif()
else() else()
check_cxx_compiler_flag(-mindirect-branch=thunk COMPILER_SUPPORTS_INDIRECT_BRANCH_THUNK) check_cxx_compiler_flag(-mindirect-branch=thunk COMPILER_SUPPORTS_INDIRECT_BRANCH_THUNK)
if(COMPILER_SUPPORTS_INDIRECT_BRANCH_THUNK) if(COMPILER_SUPPORTS_INDIRECT_BRANCH_THUNK)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mindirect-branch=thunk") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mindirect-branch=thunk")
else() else()
message(WARNING "Spectre mitigation -mindirect-branch=thunk flag is not supported by the compiler") message(WARNING "Spectre mitigation -mindirect-branch=thunk flag is not supported by the compiler")
endif() endif()
check_cxx_compiler_flag(-mfunction-return=thunk COMPILER_SUPPORTS_FUNCTION_RETURN_THUNK) check_cxx_compiler_flag(-mfunction-return=thunk COMPILER_SUPPORTS_FUNCTION_RETURN_THUNK)
if(COMPILER_SUPPORTS_FUNCTION_RETURN_THUNK) if(COMPILER_SUPPORTS_FUNCTION_RETURN_THUNK)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfunction-return=thunk") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfunction-return=thunk")
else() else()
message(WARNING "Spectre mitigation -mfunction-return=thunk flag is not supported by the compiler") message(WARNING "Spectre mitigation -mfunction-return=thunk flag is not supported by the compiler")
endif() endif()
check_cxx_compiler_flag(-mindirect-branch-register COMPILER_SUPPORTS_INDIRECT_BRANCH_REGISTER) check_cxx_compiler_flag(-mindirect-branch-register COMPILER_SUPPORTS_INDIRECT_BRANCH_REGISTER)
if(COMPILER_SUPPORTS_INDIRECT_BRANCH_REGISTER) if(COMPILER_SUPPORTS_INDIRECT_BRANCH_REGISTER)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mindirect-branch-register") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mindirect-branch-register")
else() else()
message(WARNING "Spectre mitigation -mindirect-branch-register flag is not supported by the compiler") message(WARNING "Spectre mitigation -mindirect-branch-register flag is not supported by the compiler")
endif() endif()
endif() endif()
endif(MSVC) endif(MSVC)
if(NOT MSVC) if(NOT MSVC)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftemplate-depth=1024") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftemplate-depth=1024")
endif(NOT MSVC) endif(NOT MSVC)
# Compiler warning flags # Compiler warning flags
if(NOT MSVC) if(NOT MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wempty-body") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wempty-body")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wignored-qualifiers") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wignored-qualifiers")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wtype-limits") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wtype-limits")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wuninitialized") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wuninitialized")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra -Wno-unused-parameter -Wno-missing-field-initializers") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra -Wno-unused-parameter -Wno-missing-field-initializers")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Winvalid-pch") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Winvalid-pch")
if("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" ) if("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" )
# clang only # clang only
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wshorten-64-to-32") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wshorten-64-to-32")
if(USE_SANITIZE_UB) if(USE_SANITIZE_UB)
message(STATUS "Enabling undefined behavior sanitizer") message(STATUS "Enabling undefined behavior sanitizer")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined -fno-sanitize-recover=undefined -fsanitize-recover=vptr -fno-rtti -DSANITIZER_BUILD") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined -fno-sanitize-recover=undefined -fsanitize-recover=vptr -fno-rtti -DSANITIZER_BUILD")
endif(USE_SANITIZE_UB) endif(USE_SANITIZE_UB)
if (NOT (CMAKE_C_COMPILER_VERSION VERSION_LESS 3.6)) if (NOT (CMAKE_C_COMPILER_VERSION VERSION_LESS 3.6))
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-local-typedefs -DSANITIZER_BUILD") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-local-typedefs -DSANITIZER_BUILD")
endif() endif()
if (NOT (CMAKE_C_COMPILER_VERSION VERSION_LESS 4.0)) if (NOT (CMAKE_C_COMPILER_VERSION VERSION_LESS 4.0))
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-register") # Added for htons() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-register") # Added for htons()
endif() endif()
else() else()
# gcc only # gcc only
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-local-typedefs -Wno-unused-but-set-variable") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-local-typedefs -Wno-unused-but-set-variable")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wclobbered") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wclobbered")
if (CMAKE_C_COMPILER_VERSION VERSION_LESS 7.0) if (CMAKE_C_COMPILER_VERSION VERSION_LESS 7.0)
else() else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wimplicit-fallthrough=4") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wimplicit-fallthrough=4")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-noexcept-type") # Added for gtest set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-noexcept-type") # Added for gtest
endif() endif()
endif() endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
endif() endif()
# Compile code with defenses enabled (settings to be used for production release code) # Compile code with defenses enabled (settings to be used for production release code)
if("${CMAKE_BUILD_TYPE}" STREQUAL "Release") if("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
if(MSVC) if(MSVC)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GS") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GS")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /sdl") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /sdl")
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /NXCompat") set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /NXCompat")
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DynamicBase") set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DynamicBase")
if("${NEO_ARCH}" STREQUAL "x86") if("${NEO_ARCH}" STREQUAL "x86")
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /SafeSEH") set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /SafeSEH")
endif() endif()
else() else()
if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -D_FORTIFY_SOURCE=2") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -D_FORTIFY_SOURCE=2")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wformat -Wformat-security") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wformat -Wformat-security")
else() else()
# gcc, g++ only # gcc, g++ only
if (CMAKE_C_COMPILER_VERSION VERSION_LESS 4.9) if (CMAKE_C_COMPILER_VERSION VERSION_LESS 4.9)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector")
else() else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong")
endif() endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -D_FORTIFY_SOURCE=2") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -D_FORTIFY_SOURCE=2")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wformat -Wformat-security") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wformat -Wformat-security")
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -Wl,-z,noexecstack") set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -Wl,-z,noexecstack")
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -Wl,-z,relro") set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -Wl,-z,relro")
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -Wl,-z,now") set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -Wl,-z,now")
endif() endif()
endif() endif()
endif() endif()
# Project-wide include paths # Project-wide include paths
@ -686,9 +686,9 @@ else()
set(TargetDir ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) set(TargetDir ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
endif(MSVC) endif(MSVC)
add_subdirectory(offline_compiler ${IGDRCL_BUILD_DIR}/offline_compiler) add_subdirectory_unique(offline_compiler ${IGDRCL_BUILD_DIR}/offline_compiler)
target_compile_definitions(ocloc PRIVATE MOCKABLE_VIRTUAL=) target_compile_definitions(ocloc PRIVATE MOCKABLE_VIRTUAL=)
add_subdirectory(core) add_subdirectory_unique(core)
macro(generate_runtime_lib LIB_NAME MOCKABLE GENERATE_EXEC) macro(generate_runtime_lib LIB_NAME MOCKABLE GENERATE_EXEC)
set(NEO_STATIC_LIB_NAME ${LIB_NAME}) set(NEO_STATIC_LIB_NAME ${LIB_NAME})
@ -719,7 +719,7 @@ set(BUILTINS_SOURCES_LIB_NAME "builtins_sources")
set(BUILTINS_BINARIES_LIB_NAME "builtins_binaries") set(BUILTINS_BINARIES_LIB_NAME "builtins_binaries")
set(SCHEDULER_BINARY_LIB_NAME "scheduler_binary") set(SCHEDULER_BINARY_LIB_NAME "scheduler_binary")
add_subdirectory(elf) add_subdirectory_unique(elf)
if(DONT_CARE_OF_VIRTUALS) if(DONT_CARE_OF_VIRTUALS)
message(STATUS "All targets will use virtuals") message(STATUS "All targets will use virtuals")
@ -736,16 +736,18 @@ else()
endif() endif()
if(DEFAULT_TESTED_PLATFORM) if(DEFAULT_TESTED_PLATFORM)
add_subdirectory(unit_tests ${IGDRCL_BUILD_DIR}/unit_tests) add_subdirectory_unique(unit_tests ${IGDRCL_BUILD_DIR}/unit_tests)
else()
hide_subdir(unit_tests)
endif() endif()
set(DONT_LINK_ELF_STATICALLY TRUE) set(DONT_LINK_ELF_STATICALLY TRUE)
if(EXISTS ${IGDRCL_SOURCE_DIR}/../internal) if(EXISTS ${IGDRCL_SOURCE_DIR}/../internal)
add_subdirectory(${IGDRCL_SOURCE_DIR}/../internal ${IGDRCL_BUILD_DIR}/internal) add_subdirectory_unique(${IGDRCL_SOURCE_DIR}/../internal ${IGDRCL_BUILD_DIR}/internal)
endif(EXISTS ${IGDRCL_SOURCE_DIR}/../internal) endif(EXISTS ${IGDRCL_SOURCE_DIR}/../internal)
include(package.cmake) include(package.cmake)
add_subdirectory(scripts/lint) add_subdirectory_unique(scripts/lint)
configure_file(config.h.in ${IGDRCL_BUILD_DIR}/config.h) configure_file(config.h.in ${IGDRCL_BUILD_DIR}/config.h)
if(WIN32 AND NOT IGDRCL__IGC_FOUND) if(WIN32 AND NOT IGDRCL__IGC_FOUND)
@ -753,3 +755,6 @@ if(WIN32 AND NOT IGDRCL__IGC_FOUND)
endif() endif()
configure_file(driver_version.h.in ${IGDRCL_BUILD_DIR}/driver_version.h) # Put Driver version into define configure_file(driver_version.h.in ${IGDRCL_BUILD_DIR}/driver_version.h) # Put Driver version into define
configure_file(lib_names.h.in ${IGDRCL_BUILD_DIR}/lib_names.h) configure_file(lib_names.h.in ${IGDRCL_BUILD_DIR}/lib_names.h)
hide_subdir(runtime)
add_subdirectories()

View File

@ -1,5 +1,5 @@
# #
# Copyright (C) 2018 Intel Corporation # Copyright (C) 2018-2019 Intel Corporation
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT
# #
@ -9,6 +9,14 @@ macro(hide_subdir subdir)
set(${subdir_relative}_hidden} TRUE) set(${subdir_relative}_hidden} TRUE)
endmacro() endmacro()
macro(add_subdirectory_unique subdir)
file(RELATIVE_PATH subdir_relative ${IGDRCL_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
if(NOT ${subdir_relative}_hidden})
add_subdirectory(${subdir} ${ARGN})
endif()
hide_subdir(${subdir})
endmacro()
macro(add_subdirectories) macro(add_subdirectories)
file(GLOB subdirectories RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*) file(GLOB subdirectories RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*)
foreach(subdir ${subdirectories}) foreach(subdir ${subdirectories})