2017-12-21 00:45:38 +01:00
|
|
|
#
|
2025-01-16 18:57:26 +00:00
|
|
|
# Copyright (C) 2018-2025 Intel Corporation
|
2017-12-21 00:45:38 +01:00
|
|
|
#
|
2018-09-13 16:26:01 +02:00
|
|
|
# SPDX-License-Identifier: MIT
|
2017-12-21 00:45:38 +01:00
|
|
|
#
|
|
|
|
|
2024-05-21 11:25:37 +00:00
|
|
|
cmake_minimum_required(VERSION 3.13.0 FATAL_ERROR)
|
2019-06-08 20:43:00 +02:00
|
|
|
|
2023-07-05 08:51:26 +00:00
|
|
|
if(NEO_ENABLE_INTERPROCEDURAL_OPTIMIZATION)
|
|
|
|
cmake_policy(SET CMP0069 NEW)
|
|
|
|
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
|
|
|
|
set(NEO_DISABLE_LD_LLD TRUE)
|
|
|
|
message(STATUS "Enabling interprocedural optimization")
|
|
|
|
endif()
|
|
|
|
|
2021-07-19 17:24:56 +00:00
|
|
|
# Set the runtime source directory
|
|
|
|
if(NOT DEFINED NEO_SOURCE_DIR)
|
|
|
|
set(NEO_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
|
|
|
endif()
|
2017-12-15 11:15:32 +01:00
|
|
|
|
2024-07-01 12:07:44 +00:00
|
|
|
if(CMAKE_GENERATOR MATCHES "Visual Studio")
|
2020-08-19 12:18:18 +02:00
|
|
|
set(CMAKE_GENERATOR_TOOLSET "host=x64")
|
2019-07-29 14:02:43 +02:00
|
|
|
endif()
|
|
|
|
|
2019-06-09 23:32:22 +02:00
|
|
|
if(NOT PROJECT_NAME)
|
2020-08-19 12:18:18 +02:00
|
|
|
set(PROJECT_NAME igdrcl)
|
2019-06-09 23:32:22 +02:00
|
|
|
endif()
|
|
|
|
|
|
|
|
project(${PROJECT_NAME})
|
2017-12-21 00:45:38 +01:00
|
|
|
|
2021-07-19 17:24:56 +00:00
|
|
|
file(READ ".branch" BRANCH_TYPE)
|
|
|
|
string(STRIP "${BRANCH_TYPE}" BRANCH_TYPE)
|
|
|
|
set(BRANCH_DIR_SUFFIX "/${BRANCH_TYPE}")
|
|
|
|
list(APPEND BRANCH_DIR_LIST "/")
|
|
|
|
if(NOT "${BRANCH_TYPE}" STREQUAL "")
|
|
|
|
list(APPEND BRANCH_DIR_LIST "/${BRANCH_TYPE}/")
|
2021-09-13 13:28:11 +00:00
|
|
|
set(BRANCH_DIR_SUFFIX "${BRANCH_DIR_SUFFIX}/")
|
2021-07-19 17:24:56 +00:00
|
|
|
endif()
|
|
|
|
message(STATUS "branch dir list: ${BRANCH_DIR_LIST}")
|
|
|
|
|
2022-01-17 16:46:52 +00:00
|
|
|
if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64")
|
|
|
|
set(NEO_TARGET_PROCESSOR "x86_64")
|
|
|
|
elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64")
|
|
|
|
set(NEO_TARGET_PROCESSOR "x86_64")
|
|
|
|
elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64")
|
|
|
|
set(NEO_TARGET_PROCESSOR "aarch64")
|
|
|
|
if(NOT ${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL ${CMAKE_SYSTEM_PROCESSOR})
|
|
|
|
set(NEO_DISABLE_LD_LLD TRUE)
|
|
|
|
set(NEO_DISABLE_LD_GOLD TRUE)
|
|
|
|
endif()
|
|
|
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/third_party/sse2neon)
|
|
|
|
endif()
|
|
|
|
message(STATUS "Host processor: ${CMAKE_HOST_SYSTEM_PROCESSOR}")
|
|
|
|
message(STATUS "Target processor: ${CMAKE_SYSTEM_PROCESSOR}")
|
|
|
|
message(STATUS "Neo target processor: ${NEO_TARGET_PROCESSOR}")
|
|
|
|
|
|
|
|
if(NOT DEFINED NEO_TARGET_PROCESSOR)
|
|
|
|
message(FATAL_ERROR "Unsupported target processor: ${CMAKE_SYSTEM_PROCESSOR}")
|
|
|
|
endif()
|
|
|
|
|
2021-07-19 17:24:56 +00:00
|
|
|
# Include custom configs
|
|
|
|
include("${BRANCH_TYPE}/custom_config.cmake" OPTIONAL)
|
|
|
|
|
|
|
|
# Include needed macros
|
2021-09-17 12:50:27 +02:00
|
|
|
include(cmake/common_macros.cmake)
|
2021-07-19 17:24:56 +00:00
|
|
|
|
2018-03-22 10:17:00 +01:00
|
|
|
if(CMAKE_CONFIGURATION_TYPES)
|
2020-08-19 12:18:18 +02:00
|
|
|
# Set custom build types for multi-configuration generators
|
|
|
|
set(CMAKE_CONFIGURATION_TYPES "Release;ReleaseInternal;Debug")
|
|
|
|
if(DEFINED CMAKE_BUILD_TYPE)
|
|
|
|
list(APPEND CMAKE_CONFIGURATION_TYPES ${CMAKE_BUILD_TYPE})
|
|
|
|
endif()
|
|
|
|
list(REMOVE_DUPLICATES CMAKE_CONFIGURATION_TYPES)
|
2018-03-22 10:17:00 +01:00
|
|
|
endif()
|
|
|
|
|
2019-05-15 18:06:16 +02:00
|
|
|
include(GNUInstallDirs)
|
|
|
|
|
2023-11-08 14:05:13 +00:00
|
|
|
if(USE_SANITIZE_UB AND WIN32)
|
|
|
|
add_definitions(-D_ITERATOR_DEBUG_LEVEL=0)
|
|
|
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Xlinker /NODEFAULTLIB:clang_rt.ubsan_standalone_cxx-x86_64.lib")
|
2024-12-19 16:56:46 +00:00
|
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Xlinker /NODEFAULTLIB:clang_rt.ubsan_standalone_cxx-x86_64.lib")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(WIN32 AND NOT MSVC)
|
|
|
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Xlinker onecore.lib")
|
|
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Xlinker onecore.lib")
|
2023-11-08 14:05:13 +00:00
|
|
|
endif()
|
|
|
|
|
2024-06-13 11:42:03 +00:00
|
|
|
if(NOT DEFINED NEO_USE_CL_CACHE)
|
|
|
|
set(NEO_USE_CL_CACHE FALSE CACHE BOOL "use cl_cache when running ocloc" FORCE)
|
|
|
|
endif()
|
|
|
|
if(NEO_USE_CL_CACHE)
|
|
|
|
set(NEO_DISABLE_BUILTINS_COMPILATION FALSE)
|
|
|
|
endif()
|
2019-05-15 18:06:16 +02:00
|
|
|
# define global property where we will collect component list to package
|
2020-03-18 18:43:17 +01:00
|
|
|
define_property(GLOBAL PROPERTY NEO_OCL_COMPONENTS_LIST BRIEF_DOCS "List of components" FULL_DOCS "List of components to create packages")
|
|
|
|
set(GLOBAL PROPERTY NEO_OCL_COMPONENTS_LIST "")
|
|
|
|
define_property(GLOBAL PROPERTY NEO_L0_COMPONENTS_LIST BRIEF_DOCS "List of components" FULL_DOCS "List of components to create packages")
|
|
|
|
set(GLOBAL PROPERTY NEO_L0_COMPONENTS_LIST "")
|
2019-05-15 18:06:16 +02:00
|
|
|
|
2021-08-20 10:36:51 +02:00
|
|
|
string(REPLACE " " ";" NEO_RUN_INTERCEPTOR_LIST "${NEO_RUN_INTERCEPTOR}")
|
|
|
|
|
2017-12-21 00:45:38 +01:00
|
|
|
if(TR_DEPRECATED)
|
2020-08-19 12:18:18 +02:00
|
|
|
add_definitions(-D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING=1)
|
|
|
|
endif()
|
2017-12-21 00:45:38 +01:00
|
|
|
|
2018-06-05 16:38:01 +02:00
|
|
|
if(RELEASE_WITH_REGKEYS)
|
2020-08-19 12:18:18 +02:00
|
|
|
message(STATUS "Enabling RegKey reading in release build")
|
|
|
|
add_definitions(-D_RELEASE_BUILD_WITH_REGKEYS)
|
|
|
|
endif()
|
2018-06-05 16:38:01 +02:00
|
|
|
|
2022-04-04 11:38:00 +00:00
|
|
|
if(ENABLE_DYNAMIC_MEMORY_TRACKING)
|
|
|
|
message(STATUS "Enabling dynamic memory tracking")
|
|
|
|
add_definitions(-DENABLE_DYNAMIC_MEMORY_TRACKING)
|
|
|
|
endif()
|
|
|
|
|
2024-10-31 14:59:17 +00:00
|
|
|
if(NEO_SERIALIZED_BUILTINS_COMPILATION)
|
|
|
|
message(STATUS "Enabling serialized builtins compilation")
|
|
|
|
endif()
|
|
|
|
|
2019-10-22 14:41:31 +02:00
|
|
|
if(DEFINED NEO_EXTRA_DEFINES)
|
2020-08-19 12:18:18 +02:00
|
|
|
string(REPLACE "," ";" NEO_EXTRA_DEFINES "${NEO_EXTRA_DEFINES}")
|
|
|
|
foreach(_tmp ${NEO_EXTRA_DEFINES})
|
|
|
|
message(STATUS "adding extra define: ${_tmp}")
|
|
|
|
add_definitions(-D${_tmp})
|
|
|
|
endforeach()
|
2019-10-22 14:41:31 +02:00
|
|
|
endif()
|
|
|
|
|
2021-07-01 15:08:00 +02:00
|
|
|
include("${BRANCH_TYPE}/${BRANCH_TYPE}.cmake" OPTIONAL)
|
2020-06-24 16:28:01 +02:00
|
|
|
|
2017-12-21 00:45:38 +01:00
|
|
|
if(NOT CMAKE_BUILD_TYPE)
|
2019-05-15 11:49:49 +02:00
|
|
|
message(STATUS "CMAKE_BUILD_TYPE not specified, using Release")
|
|
|
|
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type: [Release, ReleaseInternal, Debug]" FORCE)
|
2017-12-21 00:45:38 +01:00
|
|
|
endif()
|
|
|
|
|
2020-06-03 16:43:19 +02:00
|
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
|
|
set(NEO_BITS "64")
|
|
|
|
set(NEO_ARCH "x64")
|
|
|
|
else()
|
|
|
|
set(NEO_BITS "32")
|
|
|
|
set(NEO_ARCH "x86")
|
|
|
|
endif()
|
|
|
|
|
2021-11-10 19:19:29 +00:00
|
|
|
if(NOT DEFINED NEO_BUILD_WITH_OCL)
|
|
|
|
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/opencl/CMakeLists.txt)
|
|
|
|
set(NEO_BUILD_WITH_OCL TRUE)
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
2020-06-03 16:43:19 +02:00
|
|
|
if(NOT DEFINED BUILD_WITH_L0)
|
2021-11-24 15:38:12 +00:00
|
|
|
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/level_zero/CMakeLists.txt)
|
|
|
|
if("${NEO_BITS}" STREQUAL "64")
|
|
|
|
set(BUILD_WITH_L0 TRUE)
|
|
|
|
endif()
|
2020-08-19 12:18:18 +02:00
|
|
|
endif()
|
2020-06-03 16:43:19 +02:00
|
|
|
endif()
|
|
|
|
|
2020-06-03 20:39:59 +02:00
|
|
|
if(NOT "${NEO_BITS}" STREQUAL "64")
|
2020-08-19 12:18:18 +02:00
|
|
|
set(BUILD_WITH_L0 FALSE)
|
2020-06-03 20:39:59 +02:00
|
|
|
endif()
|
|
|
|
|
2020-05-06 18:33:15 +02:00
|
|
|
add_definitions(
|
2020-08-19 12:18:18 +02:00
|
|
|
-DCL_USE_DEPRECATED_OPENCL_1_1_APIS
|
|
|
|
-DCL_USE_DEPRECATED_OPENCL_1_2_APIS
|
|
|
|
-DCL_USE_DEPRECATED_OPENCL_2_0_APIS
|
|
|
|
-DCL_USE_DEPRECATED_OPENCL_2_1_APIS
|
|
|
|
-DCL_USE_DEPRECATED_OPENCL_2_2_APIS
|
2020-05-06 18:33:15 +02:00
|
|
|
)
|
2018-04-25 16:07:42 +02:00
|
|
|
|
2024-01-15 01:51:23 +00:00
|
|
|
add_definitions(-D__user= -D__packed=)
|
2023-05-18 08:31:32 +02:00
|
|
|
|
2018-11-15 14:50:18 +01:00
|
|
|
set(CMAKE_C_FLAGS_RELEASEINTERNAL "${CMAKE_C_FLAGS_RELEASE}")
|
|
|
|
set(CMAKE_CXX_FLAGS_RELEASEINTERNAL "${CMAKE_CXX_FLAGS_RELEASE}")
|
|
|
|
set(CMAKE_SHARED_LINKER_FLAGS_RELEASEINTERNAL "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}")
|
|
|
|
set(CMAKE_EXE_LINKER_FLAGS_RELEASEINTERNAL "${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
|
2019-01-25 10:20:43 +01:00
|
|
|
if(MSVC AND ENABLE_VS_FASTLINK)
|
2020-08-19 12:18:18 +02:00
|
|
|
string(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG " /debug:FASTLINK")
|
|
|
|
string(APPEND CMAKE_SHARED_LINKER_FLAGS_DEBUG " /debug:FASTLINK")
|
|
|
|
string(APPEND CMAKE_STATIC_LINKER_FLAGS_DEBUG " /debug:FASTLINK")
|
|
|
|
string(APPEND CMAKE_MODULE_LINKER_FLAGS_DEBUG " /debug:FASTLINK")
|
2019-01-25 10:20:43 +01:00
|
|
|
endif()
|
2021-09-17 12:50:27 +02:00
|
|
|
|
2021-11-02 21:54:29 +00:00
|
|
|
include(CheckCXXCompilerFlag)
|
2020-11-13 13:05:32 +00:00
|
|
|
if(UNIX)
|
2024-03-12 11:52:58 +00:00
|
|
|
if(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU" AND(
|
|
|
|
${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 9.0 OR
|
|
|
|
(${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER_EQUAL 12.0 AND ${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 13.0
|
|
|
|
)))
|
|
|
|
message(STATUS "Disabling LTO because compiler is ${CMAKE_CXX_COMPILER_ID} v${CMAKE_CXX_COMPILER_VERSION}")
|
|
|
|
set(NEO_DISABLE_LTO TRUE)
|
|
|
|
endif()
|
|
|
|
if(NOT NEO_DISABLE_LTO)
|
|
|
|
check_cxx_compiler_flag("-flto=auto" COMPILER_SUPPORTS_FLTO_AUTO)
|
|
|
|
if(COMPILER_SUPPORTS_FLTO_AUTO)
|
|
|
|
message(STATUS "enabling lto=auto, disabling ld.lld")
|
|
|
|
set(NEO_DISABLE_LD_LLD TRUE)
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto=auto")
|
|
|
|
check_cxx_compiler_flag("-ffat-lto-objects" COMPILER_SUPPORTS_FAT_LTO_OBJECTS)
|
|
|
|
if(COMPILER_SUPPORTS_FAT_LTO_OBJECTS)
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffat-lto-objects")
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
endif()
|
2021-08-25 14:52:00 +02:00
|
|
|
find_program(__LD_GOLD_FOUND ld.gold)
|
|
|
|
find_program(__LD_LLD_FOUND ld.lld)
|
2021-11-02 21:54:29 +00:00
|
|
|
check_cxx_compiler_flag(-fuse-ld=lld COMPILER_SUPPORTS_LLD)
|
|
|
|
check_cxx_compiler_flag(-fuse-ld=gold COMPILER_SUPPORTS_GOLD)
|
|
|
|
if(NOT NEO_DISABLE_LD_LLD AND COMPILER_SUPPORTS_LLD AND __LD_LLD_FOUND)
|
2021-08-25 14:52:00 +02:00
|
|
|
message(STATUS "Using linker: ld.lld")
|
2022-04-27 12:58:21 +00:00
|
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=lld -Wl,--build-id=sha1")
|
2024-02-20 15:14:00 +00:00
|
|
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fuse-ld=lld -Wl,--build-id=sha1")
|
2021-11-02 21:54:29 +00:00
|
|
|
elseif(NOT NEO_DISABLE_LD_GOLD AND COMPILER_SUPPORTS_GOLD AND __LD_GOLD_FOUND)
|
2021-08-25 14:52:00 +02:00
|
|
|
message(STATUS "Using linker: ld.gold")
|
|
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold")
|
2024-02-20 15:14:00 +00:00
|
|
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fuse-ld=gold")
|
2021-08-25 14:52:00 +02:00
|
|
|
else()
|
|
|
|
message(STATUS "Using linker: default")
|
|
|
|
endif()
|
2022-04-04 11:38:00 +00:00
|
|
|
if(ENABLE_DYNAMIC_MEMORY_TRACKING)
|
|
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--export-dynamic")
|
|
|
|
endif()
|
2021-02-02 15:23:14 +01:00
|
|
|
if(NEO_BUILD_DEBUG_SYMBOLS_PACKAGE)
|
|
|
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -g")
|
|
|
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -g")
|
|
|
|
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -g")
|
|
|
|
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -g")
|
|
|
|
endif()
|
2020-11-13 13:05:32 +00:00
|
|
|
set(CMAKE_C_FLAGS_RELEASEINTERNAL "${CMAKE_C_FLAGS_RELEASEINTERNAL} -g")
|
|
|
|
set(CMAKE_CXX_FLAGS_RELEASEINTERNAL "${CMAKE_CXX_FLAGS_RELEASEINTERNAL} -g")
|
|
|
|
set(CMAKE_SHARED_LINKER_FLAGS_RELEASEINTERNAL "${CMAKE_SHARED_LINKER_FLAGS_RELEASEINTERNAL} -g")
|
|
|
|
set(CMAKE_EXE_LINKER_FLAGS_RELEASEINTERNAL "${CMAKE_EXE_LINKER_FLAGS_RELEASEINTERNAL} -g")
|
|
|
|
endif()
|
2017-12-21 00:45:38 +01:00
|
|
|
|
|
|
|
string(TOLOWER "${CMAKE_BUILD_TYPE}" BUILD_TYPE_lower)
|
2018-01-22 08:53:39 +01:00
|
|
|
if("${BUILD_TYPE_lower}" STREQUAL "releaseinternal")
|
2019-05-15 11:49:49 +02:00
|
|
|
add_definitions(-D_RELEASE_INTERNAL)
|
2018-01-22 08:53:39 +01:00
|
|
|
endif("${BUILD_TYPE_lower}" STREQUAL "releaseinternal")
|
2017-12-21 00:45:38 +01:00
|
|
|
|
|
|
|
message(STATUS "${CMAKE_BUILD_TYPE} build configuration")
|
|
|
|
|
2020-02-27 16:17:08 +01:00
|
|
|
# Set the ocloc directory
|
|
|
|
if(NOT DEFINED OCLOC_DIRECTORY)
|
|
|
|
set(OCLOC_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/shared/offline_compiler)
|
|
|
|
endif()
|
|
|
|
|
2020-03-11 14:03:26 +01:00
|
|
|
# Set the shared source directory
|
|
|
|
if(NOT DEFINED NEO_SHARED_DIRECTORY)
|
|
|
|
set(NEO_SHARED_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/shared/source)
|
2019-07-12 14:53:34 +02:00
|
|
|
endif()
|
|
|
|
|
2020-03-11 14:03:26 +01:00
|
|
|
# Set the shared test directory
|
|
|
|
if(NOT DEFINED NEO_SHARED_TEST_DIRECTORY)
|
|
|
|
set(NEO_SHARED_TEST_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/shared/test)
|
2020-02-24 00:22:25 +01:00
|
|
|
endif()
|
|
|
|
|
2021-11-10 10:34:06 +00:00
|
|
|
# leave temporarily for compatibitlity
|
|
|
|
if(DEFINED SKIP_UNIT_TESTS)
|
|
|
|
set(NEO_SKIP_UNIT_TESTS ${SKIP_UNIT_TESTS})
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(NEO_SKIP_UNIT_TESTS)
|
|
|
|
set(NEO_SKIP_SHARED_UNIT_TESTS TRUE)
|
|
|
|
set(NEO_SKIP_OCL_UNIT_TESTS TRUE)
|
|
|
|
set(NEO_SKIP_L0_UNIT_TESTS TRUE)
|
|
|
|
set(NEO_SKIP_L0_BLACK_BOX_TESTS TRUE)
|
2019-06-06 12:31:39 +02:00
|
|
|
endif()
|
|
|
|
|
2024-04-17 14:48:57 +00:00
|
|
|
if(DEFINED NEO_GENERATE_AUBS_FOR)
|
|
|
|
if(DEFINED NEO_SKIP_AUB_TESTS_RUN AND NEO_SKIP_AUB_TESTS_RUN)
|
|
|
|
message(FATAL_ERROR "Invalid cmake flags combination, NEO_GENERATE_AUBS_FOR assumes aub tests execution is not skipped")
|
|
|
|
endif()
|
|
|
|
set(NEO_SKIP_AUB_TESTS_RUN FALSE)
|
|
|
|
endif()
|
|
|
|
|
2024-03-27 14:11:37 +00:00
|
|
|
if(NOT DEFINED NEO_SKIP_AUB_TESTS_RUN)
|
|
|
|
set(NEO_SKIP_AUB_TESTS_RUN TRUE)
|
2022-07-07 15:06:41 +00:00
|
|
|
endif()
|
|
|
|
|
2024-03-27 14:11:37 +00:00
|
|
|
if(NOT DEFINED NEO_SKIP_AUB_TESTS)
|
|
|
|
set(NEO_SKIP_AUB_TESTS TRUE)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(NOT NEO_SKIP_AUB_TESTS_RUN)
|
|
|
|
set(NEO_SKIP_AUB_TESTS FALSE)
|
|
|
|
endif()
|
|
|
|
|
2024-07-10 12:36:56 +00:00
|
|
|
if(NEO_IGNORE_INVALID_TEST_EXCLUDES)
|
|
|
|
add_definitions(-DNEO_IGNORE_INVALID_TEST_EXCLUDES)
|
|
|
|
endif()
|
|
|
|
|
2024-03-27 14:11:37 +00:00
|
|
|
message(STATUS "NEO_SKIP_AUB_TESTS: ${NEO_SKIP_AUB_TESTS}")
|
|
|
|
message(STATUS "NEO_SKIP_AUB_TESTS_RUN: ${NEO_SKIP_AUB_TESTS_RUN}")
|
|
|
|
|
2017-12-21 00:45:38 +01:00
|
|
|
# Set our build directory
|
2019-10-14 12:55:52 +02:00
|
|
|
if(NOT DEFINED NEO_BUILD_DIR)
|
|
|
|
set(NEO_BUILD_DIR ${CMAKE_BINARY_DIR})
|
2017-12-21 00:45:38 +01:00
|
|
|
endif()
|
|
|
|
|
2019-10-14 12:55:52 +02:00
|
|
|
if(NOT NEO_BINARY_DIR)
|
|
|
|
set(NEO_BINARY_DIR ${CMAKE_BINARY_DIR})
|
2017-12-21 00:45:38 +01:00
|
|
|
endif()
|
|
|
|
|
2025-01-20 10:31:05 +00:00
|
|
|
# we use c++20
|
|
|
|
set(CMAKE_CXX_STANDARD 20)
|
2017-12-21 00:45:38 +01:00
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
|
2018-03-01 10:14:12 +01:00
|
|
|
# we force using response files
|
|
|
|
set(CMAKE_NINJA_FORCE_RESPONSE_FILE 1)
|
|
|
|
|
2018-03-14 23:03:58 +01:00
|
|
|
# set output paths
|
2019-10-14 12:55:52 +02:00
|
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${NEO_BINARY_DIR}/bin)
|
|
|
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${NEO_BINARY_DIR}/bin)
|
|
|
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${NEO_BINARY_DIR}/lib)
|
2018-03-14 23:03:58 +01:00
|
|
|
|
2020-03-06 23:09:52 +01:00
|
|
|
# determine Neo version
|
|
|
|
include(version.cmake)
|
|
|
|
|
2021-01-20 16:25:05 +00:00
|
|
|
# set variables for symbols stripping
|
2021-02-02 15:23:14 +01:00
|
|
|
if(UNIX AND NEO_BUILD_DEBUG_SYMBOLS_PACKAGE)
|
2021-01-20 16:25:05 +00:00
|
|
|
set_property(GLOBAL PROPERTY DEBUG_SYMBOL_FILES "")
|
|
|
|
set_property(GLOBAL PROPERTY IGDRCL_SYMBOL_FILE "")
|
2021-02-02 15:23:14 +01:00
|
|
|
set_property(GLOBAL APPEND PROPERTY NEO_OCL_COMPONENTS_LIST "opencl-debuginfo")
|
2021-01-20 16:25:05 +00:00
|
|
|
set(STRIP_SYMBOLS_TARGET strip_debug_symbols)
|
|
|
|
set(DEBUG_SYMBOL_INSTALL_DIR "/usr/lib/debug${CMAKE_INSTALL_FULL_LIBDIR}")
|
|
|
|
add_custom_target(${STRIP_SYMBOLS_TARGET} ALL)
|
|
|
|
endif()
|
|
|
|
|
2017-12-15 11:15:32 +01:00
|
|
|
# We want to build with the static, multithreaded runtime libraries (as opposed
|
|
|
|
# to the multithreaded runtime DLLs)
|
2023-11-08 14:05:13 +00:00
|
|
|
if(WIN32)
|
|
|
|
if(MSVC)
|
|
|
|
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_RELEASEINTERNAL "${CMAKE_CXX_FLAGS_RELEASEINTERNAL}")
|
|
|
|
string(REPLACE "/GR" "/GR-" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
|
|
|
add_definitions(-D_HAS_STATIC_RTTI=0)
|
|
|
|
else()
|
|
|
|
string(REPLACE "-D_DLL " "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
|
|
|
|
string(REPLACE "-D_DLL " "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
|
|
|
|
string(REPLACE "-D_DLL " "" CMAKE_CXX_FLAGS_RELEASEINTERNAL "${CMAKE_CXX_FLAGS_RELEASEINTERNAL}")
|
|
|
|
endif()
|
2021-01-10 21:36:01 +01:00
|
|
|
add_definitions(-DPURGE_DEBUG_KEY_NAMES=1)
|
|
|
|
else()
|
|
|
|
add_definitions(-DPURGE_DEBUG_KEY_NAMES=0)
|
2020-08-19 12:18:18 +02:00
|
|
|
endif()
|
2017-12-15 11:15:32 +01:00
|
|
|
|
2021-11-10 10:34:06 +00:00
|
|
|
if(NOT NEO_SKIP_UNIT_TESTS)
|
2020-03-25 12:31:47 +01:00
|
|
|
if(NOT DEFINED GTEST_REPEAT)
|
|
|
|
set(GTEST_REPEAT 1)
|
|
|
|
endif()
|
|
|
|
message(STATUS "GTest repeat count set to ${GTEST_REPEAT}")
|
|
|
|
|
|
|
|
if(NOT DEFINED GTEST_SHUFFLE)
|
|
|
|
set(GTEST_SHUFFLE --gtest_shuffle --gtest_random_seed=0)
|
|
|
|
endif()
|
|
|
|
message(STATUS "GTest shuffle set to ${GTEST_SHUFFLE}")
|
|
|
|
endif()
|
|
|
|
|
2018-01-31 11:22:13 +01:00
|
|
|
if(NOT KMDAF_HEADERS_DIR)
|
2020-08-19 12:18:18 +02:00
|
|
|
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../kmdaf/inc/common/kmDaf.h")
|
|
|
|
get_filename_component(KMDAF_HEADERS_DIR "../kmdaf/inc/common/" ABSOLUTE)
|
|
|
|
message(STATUS "KM-DAF headers dir: ${KMDAF_HEADERS_DIR}")
|
|
|
|
endif()
|
|
|
|
endif()
|
2018-01-31 11:22:13 +01:00
|
|
|
|
2022-11-23 09:14:27 +00:00
|
|
|
get_filename_component(AUB_STREAM_HEADERS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party${BRANCH_DIR_SUFFIX}aub_stream" ABSOLUTE)
|
2018-10-30 18:29:32 +01:00
|
|
|
if(IS_DIRECTORY ${AUB_STREAM_HEADERS_DIR})
|
2020-08-19 12:18:18 +02:00
|
|
|
message(STATUS "Aub Stream Headers dir: ${AUB_STREAM_HEADERS_DIR}")
|
2018-10-30 18:29:32 +01:00
|
|
|
else()
|
2020-08-19 12:18:18 +02:00
|
|
|
message(FATAL_ERROR "Aub Stream headers not available!")
|
2018-10-30 18:29:32 +01:00
|
|
|
endif()
|
|
|
|
|
2020-07-15 21:58:51 +02:00
|
|
|
if(TARGET aub_stream)
|
2020-08-19 12:18:18 +02:00
|
|
|
set(AUB_STREAM_PROJECT_NAME "aub_stream")
|
2023-08-29 12:41:10 +00:00
|
|
|
get_target_property(AUB_STREAM_HEADERS_DIR ${AUB_STREAM_PROJECT_NAME} INTERFACE_INCLUDE_DIRECTORIES)
|
2020-07-15 21:58:51 +02:00
|
|
|
else()
|
2020-08-19 12:18:18 +02:00
|
|
|
if(NOT DEFINED AUB_STREAM_DIR)
|
|
|
|
get_filename_component(TEMP_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../aub_stream/aub_mem_dump" ABSOLUTE)
|
|
|
|
if(IS_DIRECTORY ${TEMP_DIR})
|
2021-09-24 16:40:29 +00:00
|
|
|
get_filename_component(AUB_STREAM_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../aub_stream" ABSOLUTE)
|
2020-08-19 12:18:18 +02:00
|
|
|
message(STATUS "Aub Stream dir: ${AUB_STREAM_DIR}")
|
2018-10-30 18:29:32 +01:00
|
|
|
endif()
|
2020-08-19 12:18:18 +02:00
|
|
|
endif()
|
2019-02-14 03:41:50 -08:00
|
|
|
|
2020-08-19 12:18:18 +02:00
|
|
|
if(DISABLE_AUB_STREAM)
|
|
|
|
unset(AUB_STREAM_DIR)
|
|
|
|
endif()
|
2019-02-07 15:09:27 +01:00
|
|
|
endif()
|
2018-10-30 18:29:32 +01:00
|
|
|
|
2018-05-17 09:34:27 +02:00
|
|
|
if(NOT DEFINED KHRONOS_HEADERS_DIR)
|
2018-06-15 18:59:30 +02:00
|
|
|
get_filename_component(DIR_tmp "${CMAKE_CURRENT_SOURCE_DIR}/third_party/opencl_headers" ABSOLUTE)
|
2018-05-17 09:34:27 +02:00
|
|
|
if(IS_DIRECTORY ${DIR_tmp})
|
|
|
|
set(KHRONOS_HEADERS_DIR ${DIR_tmp})
|
2020-05-06 18:33:15 +02:00
|
|
|
add_definitions(-DCL_TARGET_OPENCL_VERSION=300)
|
2018-05-17 09:34:27 +02:00
|
|
|
else()
|
2018-06-15 18:59:30 +02:00
|
|
|
message(FATAL_ERROR "Khronos OpenCL headers not available!")
|
2018-05-17 09:34:27 +02:00
|
|
|
endif()
|
2022-08-22 16:29:28 +00:00
|
|
|
elseif(DEFINED CL_TARGET_OPENCL_VERSION)
|
|
|
|
add_definitions(-DCL_TARGET_OPENCL_VERSION=${CL_TARGET_OPENCL_VERSION})
|
|
|
|
else()
|
|
|
|
add_definitions(-DCL_TARGET_OPENCL_VERSION=300)
|
2018-05-17 09:34:27 +02:00
|
|
|
endif()
|
2017-12-21 00:45:38 +01:00
|
|
|
message(STATUS "Khronos OpenCL headers dir: ${KHRONOS_HEADERS_DIR}")
|
|
|
|
set(OCL_HEADERS_DIR ${KHRONOS_HEADERS_DIR})
|
|
|
|
|
2018-08-27 16:30:40 +02:00
|
|
|
if(NOT DEFINED KHRONOS_GL_HEADERS_DIR)
|
|
|
|
get_filename_component(GL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/opengl_headers" ABSOLUTE)
|
|
|
|
if(IS_DIRECTORY ${GL_DIR})
|
|
|
|
set(KHRONOS_GL_HEADERS_DIR ${GL_DIR})
|
|
|
|
add_definitions(-DGL_TARGET_OPENGL_VERSION=210)
|
|
|
|
endif()
|
2022-08-22 16:29:28 +00:00
|
|
|
elseif(DEFINED GL_TARGET_OPENGL_VERSION)
|
|
|
|
add_definitions(-DGL_TARGET_OPENGL_VERSION=${GL_TARGET_OPENGL_VERSION})
|
|
|
|
else()
|
|
|
|
add_definitions(-DGL_TARGET_OPENGL_VERSION=210)
|
2018-08-27 16:30:40 +02:00
|
|
|
endif()
|
|
|
|
message(STATUS "Khronos OpenGL headers dir: ${KHRONOS_GL_HEADERS_DIR}")
|
|
|
|
|
2022-06-13 23:13:43 +00:00
|
|
|
if(NOT DEFINED AOT_CONFIG_HEADERS_DIR)
|
|
|
|
get_filename_component(AOT_CONFIG_HEADERS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party${BRANCH_DIR_SUFFIX}aot_config_headers" ABSOLUTE)
|
|
|
|
message(STATUS "AOT config headers dir: ${AOT_CONFIG_HEADERS_DIR}")
|
|
|
|
endif()
|
|
|
|
|
2018-02-23 22:41:16 +01:00
|
|
|
# Intel Graphics Compiler detection
|
2024-10-23 19:55:38 +00:00
|
|
|
include(cmake${BRANCH_DIR_SUFFIX}/find_igc.cmake)
|
2018-06-11 16:15:11 +02:00
|
|
|
|
2018-03-22 10:17:00 +01:00
|
|
|
# GmmLib detection
|
2021-09-17 12:50:27 +02:00
|
|
|
include(cmake/find_gmmlib.cmake)
|
2020-01-09 16:14:59 +01:00
|
|
|
|
2021-10-22 15:43:51 +00:00
|
|
|
# Metrics detection
|
|
|
|
include(cmake/find_metrics.cmake)
|
|
|
|
|
2021-09-17 12:50:27 +02:00
|
|
|
# LibVA detection
|
2019-08-02 16:10:46 +02:00
|
|
|
if(NOT DISABLE_LIBVA)
|
2020-08-19 12:18:18 +02:00
|
|
|
if(UNIX)
|
|
|
|
set(NEO__LIBVA_IS_REQUIRED "")
|
|
|
|
if(IGDRCL_FORCE_USE_LIBVA)
|
|
|
|
set(NEO__LIBVA_IS_REQUIRED "REQUIRED")
|
|
|
|
endif()
|
2018-11-04 22:56:34 +01:00
|
|
|
|
2020-08-19 12:18:18 +02:00
|
|
|
if(DEFINED LIBVA_SOURCE_DIR)
|
|
|
|
get_filename_component(LIBVA_SOURCE_DIR "${LIBVA_SOURCE_DIR}" ABSOLUTE)
|
|
|
|
else()
|
|
|
|
get_filename_component(LIBVA_SOURCE_DIR_tmp "${NEO_SOURCE_DIR}/../libva" ABSOLUTE)
|
|
|
|
if(IS_DIRECTORY "${LIBVA_SOURCE_DIR_tmp}")
|
|
|
|
set(LIBVA_SOURCE_DIR "${LIBVA_SOURCE_DIR_tmp}")
|
2019-08-02 16:10:46 +02:00
|
|
|
endif()
|
2020-08-19 12:18:18 +02:00
|
|
|
endif()
|
2018-11-04 22:56:34 +01:00
|
|
|
|
2020-08-19 12:18:18 +02:00
|
|
|
find_package(PkgConfig)
|
|
|
|
if(DEFINED LIBVA_SOURCE_DIR AND IS_DIRECTORY "${LIBVA_SOURCE_DIR}/lib/pkgconfig/")
|
|
|
|
set(OLD_PKG_CONFIG_PATH $ENV{PKG_CONFIG_PATH})
|
|
|
|
set(ENV{PKG_CONFIG_PATH} "${LIBVA_SOURCE_DIR}/lib/pkgconfig/")
|
|
|
|
endif()
|
|
|
|
pkg_check_modules(NEO__LIBVA ${NEO__LIBVA_IS_REQUIRED} libva>=1.0.0)
|
|
|
|
include(CheckLibraryExists)
|
|
|
|
if(DEFINED LIBVA_SOURCE_DIR AND IS_DIRECTORY "${LIBVA_SOURCE_DIR}/lib/pkgconfig/")
|
|
|
|
set(ENV{PKG_CONFIG_PATH} ${OLD_PKG_CONFIG_PATH})
|
|
|
|
endif()
|
2018-11-04 22:56:34 +01:00
|
|
|
|
2020-08-19 12:18:18 +02:00
|
|
|
if(NEO__LIBVA_FOUND)
|
|
|
|
CHECK_LIBRARY_EXISTS(va vaGetLibFunc ${NEO__LIBVA_LIBDIR} HAVE_VAGETLIBFUNC)
|
2018-11-20 22:41:09 +01:00
|
|
|
|
2020-08-19 12:18:18 +02:00
|
|
|
add_definitions(-DLIBVA)
|
|
|
|
message(STATUS "Using libva ")
|
2018-11-04 22:56:34 +01:00
|
|
|
|
2020-08-19 12:18:18 +02:00
|
|
|
if(DEFINED LIBVA_SOURCE_DIR AND IS_DIRECTORY "${LIBVA_SOURCE_DIR}/lib/pkgconfig/")
|
|
|
|
string(REPLACE "${NEO__LIBVA_INCLUDEDIR}" "${LIBVA_SOURCE_DIR}/include" NEO__LIBVA_INCLUDE_DIRS "${NEO__LIBVA_INCLUDE_DIRS}")
|
|
|
|
string(REPLACE "${NEO__LIBVA_LIBDIR}" "${LIBVA_SOURCE_DIR}/lib" NEO__LIBVA_LIBDIR "${NEO__LIBVA_LIBDIR}")
|
|
|
|
set(NEO__LIBVA_LIBRARY_PATH "${NEO__LIBVA_LIBDIR}")
|
|
|
|
endif()
|
2018-11-04 22:56:34 +01:00
|
|
|
|
2020-08-19 12:18:18 +02:00
|
|
|
list(LENGTH NEO__LIBVA_INCLUDE_DIRS __len)
|
|
|
|
if(__len GREATER 0)
|
|
|
|
set(NEO__LIBVA_INCLUDE_DIR ${NEO__LIBVA_INCLUDE_DIRS})
|
|
|
|
include_directories("${NEO__LIBVA_INCLUDE_DIR}")
|
|
|
|
message(STATUS "LibVA include dirs: ${NEO__LIBVA_INCLUDE_DIR}")
|
2019-08-02 16:10:46 +02:00
|
|
|
endif()
|
2018-11-20 22:41:09 +01:00
|
|
|
endif()
|
2020-08-19 12:18:18 +02:00
|
|
|
endif()
|
2018-11-04 22:56:34 +01:00
|
|
|
endif()
|
|
|
|
|
2024-06-06 11:17:54 +00:00
|
|
|
include(cmake/find_gtest.cmake)
|
2019-03-27 10:06:29 +01:00
|
|
|
|
2020-08-19 12:18:18 +02:00
|
|
|
message(STATUS "AUB_STREAM_DIR = ${AUB_STREAM_DIR}")
|
2018-10-30 18:29:32 +01:00
|
|
|
if(DEFINED AUB_STREAM_DIR)
|
2020-08-19 12:18:18 +02:00
|
|
|
set(AUB_STREAM_PROJECT_NAME "aub_stream")
|
|
|
|
add_subdirectory_unique(${AUB_STREAM_DIR} ${CMAKE_BINARY_DIR}/aub_stream EXCLUDE_FROM_ALL)
|
2022-10-06 09:43:43 +00:00
|
|
|
|
2022-11-23 09:14:27 +00:00
|
|
|
get_target_property(ENGINE_NODE_DIR ${AUB_STREAM_PROJECT_NAME} INTERFACE_INCLUDE_DIRECTORIES)
|
|
|
|
if(NOT EXISTS ${ENGINE_NODE_DIR}/aubstream/engine_node.h)
|
|
|
|
set(ENGINE_NODE_DIR ${AUB_STREAM_HEADERS_DIR})
|
2022-10-06 09:43:43 +00:00
|
|
|
endif()
|
2019-03-27 10:06:29 +01:00
|
|
|
else()
|
2020-08-19 12:18:18 +02:00
|
|
|
set(ENGINE_NODE_DIR ${AUB_STREAM_HEADERS_DIR})
|
2018-10-30 18:29:32 +01:00
|
|
|
endif()
|
2019-03-27 10:06:29 +01:00
|
|
|
message(STATUS "Engine node dir: ${ENGINE_NODE_DIR}")
|
2018-05-09 00:57:07 +02:00
|
|
|
|
2022-11-21 12:02:03 +01:00
|
|
|
if(NEO_FORCE_USE_AUB_STREAM AND NOT DEFINED AUB_STREAM_PROJECT_NAME)
|
|
|
|
message(FATAL_ERROR "Aubstream is not available but required by user")
|
|
|
|
endif()
|
|
|
|
|
2017-12-21 00:45:38 +01:00
|
|
|
# We want to organize our IDE targets into folders
|
|
|
|
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
|
|
|
|
2024-05-28 03:16:24 +00:00
|
|
|
# Get available platforms
|
2024-06-24 21:04:11 +00:00
|
|
|
if(DEFINED NEO_ALLOW_LEGACY_PLATFORMS_SUPPORT AND NOT DEFINED NEO_LEGACY_PLATFORMS_SUPPORT)
|
|
|
|
set(NEO_LEGACY_PLATFORMS_SUPPORT ${NEO_ALLOW_LEGACY_PLATFORMS_SUPPORT})
|
|
|
|
endif()
|
|
|
|
if(NOT DEFINED NEO_LEGACY_PLATFORMS_SUPPORT)
|
2024-09-13 22:09:56 +00:00
|
|
|
set(NEO_LEGACY_PLATFORMS_SUPPORT FALSE)
|
2024-06-24 21:04:11 +00:00
|
|
|
endif()
|
|
|
|
if(NOT DEFINED NEO_CURRENT_PLATFORMS_SUPPORT)
|
|
|
|
set(NEO_CURRENT_PLATFORMS_SUPPORT TRUE)
|
|
|
|
endif()
|
2024-08-12 10:36:59 +00:00
|
|
|
set(NEO__LEGACY_NAME_SUFFIX "_legacy1")
|
2024-06-24 21:04:11 +00:00
|
|
|
if(NEO_LEGACY_PLATFORMS_SUPPORT AND NOT NEO_CURRENT_PLATFORMS_SUPPORT)
|
2024-08-01 11:32:18 +00:00
|
|
|
if(NOT DEFINED NEO_OCLOC_VERSION_MODE)
|
|
|
|
set(NEO_OCLOC_VERSION_MODE "0")
|
2024-06-24 21:04:11 +00:00
|
|
|
endif()
|
2024-08-12 10:36:59 +00:00
|
|
|
set(NEO__SO_NAME_SUFFIX ${NEO__LEGACY_NAME_SUFFIX})
|
2024-06-24 21:04:11 +00:00
|
|
|
endif()
|
2024-08-01 11:32:18 +00:00
|
|
|
if(NOT DEFINED NEO_OCLOC_VERSION_MODE)
|
|
|
|
set(NEO_OCLOC_VERSION_MODE "1")
|
2024-06-24 21:04:11 +00:00
|
|
|
endif()
|
2017-12-21 00:45:38 +01:00
|
|
|
include(platforms.cmake)
|
2024-05-28 03:16:24 +00:00
|
|
|
list(LENGTH ALL_PRODUCT_FAMILY_LIST ALL_PRODUCT_FAMILY_LIST_COUNT)
|
|
|
|
if(1 EQUAL ${ALL_PRODUCT_FAMILY_LIST_COUNT})
|
|
|
|
SET(NEO_SINGLE_SKU_BUILD TRUE)
|
|
|
|
message(STATUS "Single Sku Build detected")
|
|
|
|
endif()
|
2017-12-21 00:45:38 +01:00
|
|
|
|
2023-10-16 14:21:51 +00:00
|
|
|
if(WIN32)
|
|
|
|
set(DISABLE_WDDM_LINUX TRUE)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(PLATFORMS_TO_HAVE_WDDM_DISABLED AND NOT DISABLE_WDDM_LINUX)
|
|
|
|
message(STATUS "Platforms to have WDDM_LINUX disabled: ${PLATFORMS_TO_HAVE_WDDM_DISABLED}")
|
|
|
|
set(PLATFORMS_TO_HAVE_WDDM_ENABLED ${SUPPORTED_PLATFORM_LIST})
|
|
|
|
foreach(SKU_NAME ${PLATFORMS_TO_HAVE_WDDM_DISABLED})
|
|
|
|
list(REMOVE_ITEM PLATFORMS_TO_HAVE_WDDM_ENABLED ${SKU_NAME})
|
|
|
|
endforeach()
|
|
|
|
if(NOT PLATFORMS_TO_HAVE_WDDM_ENABLED)
|
|
|
|
set(DISABLE_WDDM_LINUX TRUE)
|
|
|
|
endif()
|
|
|
|
unset(PLATFORMS_TO_HAVE_WDDM_ENABLED)
|
|
|
|
endif()
|
|
|
|
unset(PLATFORMS_TO_HAVE_WDDM_DISABLED)
|
|
|
|
|
|
|
|
include(cmake/find_wdk.cmake)
|
|
|
|
|
|
|
|
if(WIN32)
|
|
|
|
set(DRIVER_MODEL wddm)
|
|
|
|
else()
|
|
|
|
if(DISABLE_WDDM_LINUX)
|
|
|
|
set(DRIVER_MODEL drm)
|
|
|
|
else()
|
|
|
|
set(DRIVER_MODEL drm_or_wddm)
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
message(STATUS "Driver model : ${DRIVER_MODEL}")
|
|
|
|
|
|
|
|
if(WIN32 OR NOT DISABLE_WDDM_LINUX)
|
|
|
|
add_definitions(-D_CRT_SECURE_NO_WARNINGS -DWDDM_VERSION_NUMBER=23 -DNOMINMAX)
|
|
|
|
add_definitions(-DLEGACY_D3DAPI_VERSION=20)
|
|
|
|
if(NOT WIN32)
|
|
|
|
add_definitions(-DWDDM_LINUX=1)
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
2022-05-09 15:52:12 +00:00
|
|
|
if(UNIX)
|
2024-12-12 13:26:54 +00:00
|
|
|
# i915 prelim detection
|
2022-05-09 15:52:12 +00:00
|
|
|
if(NOT ("${BRANCH_TYPE}" STREQUAL ""))
|
2024-10-09 10:37:32 +00:00
|
|
|
set(NEO_ENABLE_I915_PRELIM_DETECTION TRUE)
|
|
|
|
elseif(NOT DEFINED NEO_ENABLE_I915_PRELIM_DETECTION)
|
|
|
|
set(NEO_ENABLE_I915_PRELIM_DETECTION FALSE)
|
2022-05-09 15:52:12 +00:00
|
|
|
endif()
|
2024-10-09 10:37:32 +00:00
|
|
|
message(STATUS "i915 prelim headers detection: ${NEO_ENABLE_I915_PRELIM_DETECTION}")
|
2024-09-06 13:52:36 +00:00
|
|
|
|
2024-12-12 13:26:54 +00:00
|
|
|
# xe prelim detection
|
2024-09-06 13:52:36 +00:00
|
|
|
if(NOT ("${BRANCH_TYPE}" STREQUAL ""))
|
|
|
|
set(NEO_ENABLE_XE_PRELIM_DETECTION TRUE)
|
|
|
|
elseif(NOT DEFINED NEO_ENABLE_XE_PRELIM_DETECTION)
|
|
|
|
set(NEO_ENABLE_XE_PRELIM_DETECTION FALSE)
|
|
|
|
endif()
|
2024-09-10 13:06:06 +02:00
|
|
|
message(STATUS "xe prelim headers detection: ${NEO_ENABLE_XE_PRELIM_DETECTION}")
|
2023-01-05 15:23:22 +00:00
|
|
|
|
2024-12-12 13:26:54 +00:00
|
|
|
# xe eudebug support
|
2024-03-18 07:59:53 +00:00
|
|
|
if(NOT ("${BRANCH_TYPE}" STREQUAL ""))
|
2024-03-18 14:29:33 +00:00
|
|
|
set(NEO_ENABLE_XE_EU_DEBUG_SUPPORT TRUE)
|
|
|
|
elseif(NOT DEFINED NEO_ENABLE_XE_EU_DEBUG_SUPPORT)
|
|
|
|
set(NEO_ENABLE_XE_EU_DEBUG_SUPPORT FALSE)
|
2024-03-18 07:59:53 +00:00
|
|
|
endif()
|
2024-03-18 14:29:33 +00:00
|
|
|
message(STATUS "Xe EU Debug support: ${NEO_ENABLE_XE_EU_DEBUG_SUPPORT}")
|
2024-03-18 07:59:53 +00:00
|
|
|
|
2024-12-12 13:26:54 +00:00
|
|
|
if(NEO_ENABLE_XE_EU_DEBUG_SUPPORT)
|
|
|
|
# xe eudebug exp upstream support
|
|
|
|
if(NOT ("${BRANCH_TYPE}" STREQUAL ""))
|
|
|
|
set(NEO_USE_XE_EU_DEBUG_EXP_UPSTREAM TRUE)
|
|
|
|
elseif(NOT DEFINED NEO_USE_XE_EU_DEBUG_EXP_UPSTREAM)
|
|
|
|
set(NEO_USE_XE_EU_DEBUG_EXP_UPSTREAM FALSE)
|
|
|
|
endif()
|
|
|
|
message(STATUS "Xe EU Debug support for upstream: ${NEO_USE_XE_EU_DEBUG_EXP_UPSTREAM}")
|
|
|
|
message(STATUS "Xe EU Debug support for prelim: ${NEO_ENABLE_XE_PRELIM_DETECTION}")
|
2024-09-09 20:36:19 +00:00
|
|
|
endif()
|
2022-05-09 15:52:12 +00:00
|
|
|
endif()
|
2024-03-28 13:31:57 +00:00
|
|
|
|
2024-04-17 10:41:12 +00:00
|
|
|
include(cmake${BRANCH_DIR_SUFFIX}/find_drm.cmake)
|
2021-10-26 10:53:04 +00:00
|
|
|
|
2021-11-09 14:22:53 +00:00
|
|
|
# Enable/Disable BuiltIns compilation during build
|
|
|
|
set(COMPILE_BUILT_INS TRUE CACHE BOOL "Enable built-in kernels compilation")
|
2022-03-22 22:51:18 +00:00
|
|
|
if(NOT DEFINED NEO_KERNELS_BIN_DIR)
|
2023-06-19 15:53:54 +00:00
|
|
|
string(REPLACE "internal" "" NEO_KERNELS_BUILD_TYPE_DIR "${BUILD_TYPE_lower}")
|
|
|
|
message(STATUS "Neo kernels build type dir: ${NEO_KERNELS_BUILD_TYPE_DIR}")
|
2022-09-08 10:55:57 +00:00
|
|
|
if(WIN32)
|
2023-06-19 15:53:54 +00:00
|
|
|
get_filename_component(NEO_KERNELS_BIN_DIR "${NEO_SOURCE_DIR}/../kernels_bin/windows/${NEO_KERNELS_BUILD_TYPE_DIR}" ABSOLUTE)
|
2022-09-08 10:55:57 +00:00
|
|
|
else()
|
|
|
|
get_filename_component(NEO_KERNELS_BIN_DIR "${NEO_SOURCE_DIR}/../kernels_bin/linux" ABSOLUTE)
|
|
|
|
endif()
|
2022-03-22 22:51:18 +00:00
|
|
|
endif()
|
2017-12-21 00:45:38 +01:00
|
|
|
|
|
|
|
# Changing the default executable and library output directories
|
|
|
|
set(IGDRCL_OUTPUT_DIR "${IGDRCL_OPTION__OUTPUT_DIR}")
|
|
|
|
|
|
|
|
# do not add rpath
|
2020-08-19 12:18:18 +02:00
|
|
|
set(CMAKE_SKIP_RPATH YES CACHE BOOL "" FORCE)
|
2017-12-21 00:45:38 +01:00
|
|
|
|
|
|
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG")
|
|
|
|
|
2019-02-20 03:19:02 +01:00
|
|
|
option(APPVERIFIER_ALLOWED "allow use of AppVerifier" OFF)
|
2017-12-21 00:45:38 +01:00
|
|
|
|
|
|
|
option(CCACHE_ALLOWED "allow use of ccache" TRUE)
|
2024-03-29 09:19:40 +00:00
|
|
|
if((CMAKE_HOST_UNIX OR("${CMAKE_GENERATOR}" STREQUAL "Ninja")) AND CCACHE_ALLOWED)
|
|
|
|
find_program(CCACHE_EXE_FOUND ccache)
|
|
|
|
if(CCACHE_EXE_FOUND)
|
|
|
|
message(STATUS "Found ccache: ${CCACHE_EXE_FOUND}")
|
|
|
|
|
|
|
|
if(NOT NEO_DONT_SET_CCACHE_BASEDIR AND NOT DEFINED ENV{CCACHE_BASEDIR})
|
|
|
|
get_filename_component(__tmp_dir "../infra" ABSOLUTE)
|
|
|
|
if(IS_DIRECTORY ${__tmp_dir})
|
|
|
|
get_filename_component(NEO_CCACHE_BASEDIR ".." ABSOLUTE)
|
|
|
|
if(CMAKE_HOST_WIN32)
|
|
|
|
list(APPEND NEO_RULE_LAUNCH_LIST "\"${CMAKE_COMMAND}\" -E env CCACHE_BASEDIR=${NEO_CCACHE_BASEDIR}")
|
|
|
|
else()
|
|
|
|
list(APPEND NEO_RULE_LAUNCH_LIST "CCACHE_BASEDIR=${NEO_CCACHE_BASEDIR}")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
message(STATUS "setting ccache base dir: ${NEO_CCACHE_BASEDIR}")
|
|
|
|
endif()
|
|
|
|
elseif(DEFINED ENV{CCACHE_BASEDIR})
|
|
|
|
message(STATUS "Using ccache base dir: $ENV{CCACHE_BASEDIR}")
|
2022-02-01 20:29:15 +00:00
|
|
|
endif()
|
2024-03-29 09:19:40 +00:00
|
|
|
list(APPEND NEO_RULE_LAUNCH_LIST "${CCACHE_EXE_FOUND}")
|
|
|
|
string(REPLACE ";" " " NEO_RULE_LAUNCH_STR "${NEO_RULE_LAUNCH_LIST}")
|
|
|
|
message(STATUS "Using rule: ${NEO_RULE_LAUNCH_STR}")
|
2022-02-01 20:29:15 +00:00
|
|
|
|
2024-03-29 09:19:40 +00:00
|
|
|
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${NEO_RULE_LAUNCH_STR})
|
|
|
|
if("${CMAKE_GENERATOR}" STREQUAL "Ninja")
|
|
|
|
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ${NEO_RULE_LAUNCH_STR})
|
|
|
|
else()
|
|
|
|
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CCACHE_EXE_FOUND}")
|
|
|
|
endif()
|
2022-02-03 17:21:13 +00:00
|
|
|
endif()
|
2017-12-21 00:45:38 +01:00
|
|
|
endif()
|
|
|
|
|
|
|
|
# Miscs options
|
|
|
|
option(IGDRCL_GCOV "generate gcov report" OFF)
|
|
|
|
|
2021-09-17 22:28:25 +00:00
|
|
|
option(NEO_SHOW_VERBOSE_ULT_RESULTS "Use the default/verbose test output" OFF)
|
|
|
|
|
|
|
|
if(NOT NEO_SHOW_VERBOSE_ULT_RESULTS)
|
|
|
|
set(NEO_TESTS_LISTENER_OPTION "--disable_default_listener")
|
|
|
|
else()
|
|
|
|
set(NEO_TESTS_LISTENER_OPTION "--enable_default_listener")
|
|
|
|
endif()
|
|
|
|
|
2017-12-21 00:45:38 +01:00
|
|
|
if(MSVC)
|
2019-05-15 11:49:49 +02:00
|
|
|
# Force to treat warnings as errors
|
|
|
|
if(NOT CMAKE_CXX_FLAGS MATCHES "/WX")
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX")
|
2020-08-19 12:18:18 +02:00
|
|
|
if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
|
2022-06-29 10:52:17 +00:00
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /we4189 /we4388")
|
2020-08-19 12:18:18 +02:00
|
|
|
endif()
|
2019-05-15 11:49:49 +02:00
|
|
|
endif()
|
2018-02-24 00:25:34 +01:00
|
|
|
|
2020-08-19 12:18:18 +02:00
|
|
|
# Disable generating manifest
|
2019-05-15 11:49:49 +02:00
|
|
|
set(LINKER_FLAGS "/MANIFEST:NO")
|
2019-04-05 10:11:43 +02:00
|
|
|
|
2021-02-15 15:38:10 +00:00
|
|
|
# Disable COMDAT folding optimization
|
|
|
|
set(LINKER_FLAGS "${LINKER_FLAGS} /OPT:NOICF")
|
|
|
|
|
2021-05-31 16:47:40 +02:00
|
|
|
# Use legacy float rounding
|
|
|
|
set(LINKER_FLAGS "${LINKER_FLAGS} legacy_stdio_float_rounding.obj")
|
|
|
|
|
2022-02-10 14:34:03 +00:00
|
|
|
set(LINKER_FLAGS "${LINKER_FLAGS} /CETCOMPAT")
|
|
|
|
|
2020-08-19 12:18:18 +02:00
|
|
|
# Support for WUD
|
2021-05-18 15:19:50 +00:00
|
|
|
set(CMAKE_CXX_STANDARD_LIBRARIES "onecore.lib")
|
2019-05-15 11:49:49 +02:00
|
|
|
foreach(IT kernel32.lib;user32.lib;gdi32.lib;advapi32.lib;ole32.lib;)
|
|
|
|
set(LINKER_FLAGS "${LINKER_FLAGS} /NODEFAULTLIB:${IT}")
|
|
|
|
endforeach()
|
|
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_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}")
|
|
|
|
add_definitions(-DUNICODE -D_UNICODE)
|
2017-12-21 00:45:38 +01:00
|
|
|
else()
|
2019-05-15 11:49:49 +02:00
|
|
|
if(IGDRCL_GCOV)
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage --coverage")
|
|
|
|
endif()
|
|
|
|
option(USE_ASAN "Link with address sanitization support" OFF)
|
|
|
|
if(USE_ASAN)
|
|
|
|
if(CMAKE_COMPILER_IS_GNUCC)
|
|
|
|
set(ASAN_FLAGS " -fsanitize=address -fno-omit-frame-pointer -DSANITIZER_BUILD")
|
|
|
|
set(ASAN_LIBS "asan")
|
2020-05-20 23:01:05 +02:00
|
|
|
set(GTEST_ENV ${GTEST_ENV} LSAN_OPTIONS=suppressions=${CMAKE_CURRENT_SOURCE_DIR}/opencl/test/unit_test/lsan_suppressions.txt)
|
2019-05-15 11:49:49 +02:00
|
|
|
else()
|
|
|
|
message(STATUS "Address sanitization with clang not yet support")
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
if(USE_TSAN)
|
2020-11-27 10:53:28 +01:00
|
|
|
if(CMAKE_COMPILER_IS_GNUCC AND USE_ASAN)
|
|
|
|
message(STATUS "Cannot use thread sanitization with address sanitization in gcc")
|
|
|
|
else()
|
2019-05-15 11:49:49 +02:00
|
|
|
set(TSAN_FLAGS " -fsanitize=thread -DSANITIZER_BUILD")
|
|
|
|
set(TSAN_LIBS "tsan")
|
|
|
|
endif()
|
|
|
|
endif()
|
2017-12-21 00:45:38 +01:00
|
|
|
|
2019-04-05 10:11:43 +02:00
|
|
|
endif()
|
2017-12-21 00:45:38 +01:00
|
|
|
|
2022-06-14 15:32:06 +00:00
|
|
|
# increase the maximum number of sections in .obj files
|
|
|
|
if(MSVC)
|
|
|
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /bigobj")
|
|
|
|
set(CMAKE_CXX_FLAGS_RELEASEINTERNAL "${CMAKE_CXX_FLAGS_RELEASEINTERNAL} /bigobj")
|
|
|
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /bigobj")
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")
|
|
|
|
endif()
|
|
|
|
|
2017-12-21 00:45:38 +01:00
|
|
|
# setup variables needed for custom configuration type
|
|
|
|
# generate PDB files even for release build on MSVC
|
|
|
|
if(MSVC)
|
2019-05-15 11:49:49 +02:00
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
|
|
|
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi")
|
2021-02-15 17:42:38 +00:00
|
|
|
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF")
|
2018-02-07 16:46:35 +01:00
|
|
|
|
2019-05-15 11:49:49 +02:00
|
|
|
set(CMAKE_CXX_FLAGS_RELEASEINTERNAL "${CMAKE_CXX_FLAGS_RELEASEINTERNAL} /Zi")
|
2021-02-15 17:42:38 +00:00
|
|
|
set(CMAKE_SHARED_LINKER_FLAGS_RELEASEINTERNAL "${CMAKE_SHARED_LINKER_FLAGS_RELEASEINTERNAL} /DEBUG /OPT:REF")
|
2019-07-04 19:39:03 +02:00
|
|
|
|
|
|
|
if(NO_PDB)
|
|
|
|
string(REGEX REPLACE "/Zi" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
|
|
|
|
string(REGEX REPLACE "/Zi" "" CMAKE_CXX_FLAGS_RELEASEINTERNAL "${CMAKE_CXX_FLAGS_RELEASEINTERNAL}")
|
|
|
|
string(REGEX REPLACE "/Zi" "/Z7" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
|
|
|
|
endif()
|
2024-02-27 15:11:40 +00:00
|
|
|
elseif(WIN32 AND "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" AND NOT NO_PDB)
|
|
|
|
add_compile_options(-gcodeview)
|
|
|
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -g")
|
|
|
|
set(CMAKE_CXX_FLAGS_RELEASEINTERNAL "${CMAKE_CXX_FLAGS_RELEASEINTERNAL} -g")
|
2017-12-21 00:45:38 +01:00
|
|
|
endif()
|
|
|
|
|
2019-03-27 12:07:46 +01:00
|
|
|
# spectre mitigation
|
2022-09-22 22:15:31 +00:00
|
|
|
if(NOT NEO_DISABLE_MITIGATIONS)
|
|
|
|
if(MSVC)
|
|
|
|
check_cxx_compiler_flag(/Qspectre COMPILER_SUPPORTS_QSPECTRE)
|
|
|
|
check_cxx_compiler_flag(/d2guardspecload COMPILER_SUPPORTS_D2GUARDSPECLOAD)
|
|
|
|
if(COMPILER_SUPPORTS_QSPECTRE)
|
|
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Qspectre")
|
|
|
|
elseif(COMPILER_SUPPORTS_D2GUARDSPECLOAD)
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /d2guardspecload")
|
|
|
|
else()
|
|
|
|
message(WARNING "Spectre mitigation is not supported by the compiler")
|
|
|
|
endif()
|
2019-05-15 11:49:49 +02:00
|
|
|
else()
|
2020-04-15 19:27:42 +02:00
|
|
|
if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
|
|
|
|
check_cxx_compiler_flag(-mretpoline COMPILER_SUPPORTS_RETPOLINE)
|
|
|
|
if(COMPILER_SUPPORTS_RETPOLINE)
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mretpoline")
|
|
|
|
else()
|
|
|
|
message(WARNING "Spectre mitigation -mretpoline flag is not supported by the compiler")
|
|
|
|
endif()
|
2019-05-15 11:49:49 +02:00
|
|
|
else()
|
2020-04-15 19:27:42 +02:00
|
|
|
check_cxx_compiler_flag(-mindirect-branch=thunk COMPILER_SUPPORTS_INDIRECT_BRANCH_THUNK)
|
|
|
|
if(COMPILER_SUPPORTS_INDIRECT_BRANCH_THUNK)
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mindirect-branch=thunk")
|
|
|
|
else()
|
|
|
|
message(WARNING "Spectre mitigation -mindirect-branch=thunk flag is not supported by the compiler")
|
|
|
|
endif()
|
|
|
|
check_cxx_compiler_flag(-mfunction-return=thunk COMPILER_SUPPORTS_FUNCTION_RETURN_THUNK)
|
|
|
|
if(COMPILER_SUPPORTS_FUNCTION_RETURN_THUNK)
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfunction-return=thunk")
|
|
|
|
else()
|
|
|
|
message(WARNING "Spectre mitigation -mfunction-return=thunk flag is not supported by the compiler")
|
|
|
|
endif()
|
|
|
|
check_cxx_compiler_flag(-mindirect-branch-register COMPILER_SUPPORTS_INDIRECT_BRANCH_REGISTER)
|
|
|
|
if(COMPILER_SUPPORTS_INDIRECT_BRANCH_REGISTER)
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mindirect-branch-register")
|
|
|
|
else()
|
|
|
|
message(WARNING "Spectre mitigation -mindirect-branch-register flag is not supported by the compiler")
|
|
|
|
endif()
|
2019-05-15 11:49:49 +02:00
|
|
|
endif()
|
|
|
|
endif()
|
2022-09-22 22:15:31 +00:00
|
|
|
else()
|
|
|
|
message(WARNING "Spectre mitigation DISABLED")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(NOT MSVC)
|
2021-09-02 21:25:03 +00:00
|
|
|
check_cxx_compiler_flag(-msse4.2 COMPILER_SUPPORTS_SSE42)
|
|
|
|
check_cxx_compiler_flag(-mavx2 COMPILER_SUPPORTS_AVX2)
|
2022-03-28 16:30:45 +00:00
|
|
|
check_cxx_compiler_flag(-march=armv8-a+simd COMPILER_SUPPORTS_NEON)
|
2020-08-19 12:18:18 +02:00
|
|
|
endif()
|
2019-03-27 12:07:46 +01:00
|
|
|
|
2017-12-21 00:45:38 +01:00
|
|
|
if(NOT MSVC)
|
2024-02-20 15:14:00 +00:00
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftemplate-depth=1024")
|
2020-08-19 12:18:18 +02:00
|
|
|
endif()
|
2017-12-21 00:45:38 +01:00
|
|
|
|
2023-12-13 12:22:24 +00:00
|
|
|
# intrinsics (_mm_clflushopt and waitpkg) support
|
2023-12-01 14:35:38 +00:00
|
|
|
if(NOT MSVC)
|
|
|
|
check_cxx_compiler_flag(-mclflushopt SUPPORTS_CLFLUSHOPT)
|
2023-12-13 12:22:24 +00:00
|
|
|
check_cxx_compiler_flag(-mwaitpkg SUPPORTS_WAITPKG)
|
2023-12-01 14:35:38 +00:00
|
|
|
if(SUPPORTS_CLFLUSHOPT)
|
|
|
|
add_compile_definitions(SUPPORTS_CLFLUSHOPT)
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mclflushopt")
|
|
|
|
endif()
|
2023-12-13 12:22:24 +00:00
|
|
|
if(SUPPORTS_WAITPKG)
|
|
|
|
add_compile_definitions(SUPPORTS_WAITPKG)
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mwaitpkg")
|
|
|
|
else()
|
|
|
|
message(WARNING "-mwaitpkg flag is not supported by the compiler")
|
|
|
|
endif()
|
2023-12-01 14:35:38 +00:00
|
|
|
else()
|
|
|
|
add_compile_definitions(SUPPORTS_CLFLUSHOPT)
|
2023-12-13 12:22:24 +00:00
|
|
|
add_compile_definitions(SUPPORTS_WAITPKG)
|
2023-12-01 14:35:38 +00:00
|
|
|
endif()
|
|
|
|
|
2017-12-21 00:45:38 +01:00
|
|
|
# Compiler warning flags
|
|
|
|
if(NOT MSVC)
|
2024-11-29 16:44:40 +00:00
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror")
|
2021-05-26 23:45:38 +02:00
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Winvalid-pch")
|
2024-11-29 16:44:40 +00:00
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wformat -Wformat-security")
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wvla")
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-pragmas") # needed for pragmas in case of MSVC
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter") # needed for unused function arguments
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-missing-field-initializers") # needed for dependencies, e.g. gmmlib
|
2019-05-15 11:49:49 +02:00
|
|
|
|
2020-08-19 12:18:18 +02:00
|
|
|
if("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
|
2019-05-15 11:49:49 +02:00
|
|
|
# clang only
|
2024-01-10 12:32:03 +00:00
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wshorten-64-to-32 -Wno-extern-c-compat -Wno-instantiation-after-specialization")
|
2020-08-19 12:18:18 +02:00
|
|
|
if(NOT (CMAKE_C_COMPILER_VERSION VERSION_LESS 3.6))
|
2024-11-29 16:44:40 +00:00
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSANITIZER_BUILD")
|
2020-04-01 12:21:48 +02:00
|
|
|
endif()
|
2019-05-15 11:49:49 +02:00
|
|
|
else()
|
|
|
|
# gcc only
|
|
|
|
endif()
|
2021-05-26 23:45:38 +02:00
|
|
|
|
2021-03-15 12:33:34 +01:00
|
|
|
if(USE_SANITIZE_UB)
|
|
|
|
check_cxx_compiler_flag(-fsanitize=undefined COMPILER_SUPPORTS_UNDEFINED_BEHAVIOR_SANITIZER)
|
|
|
|
if(COMPILER_SUPPORTS_UNDEFINED_BEHAVIOR_SANITIZER)
|
|
|
|
message(STATUS "Enabling undefined behavior sanitizer")
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined -fsanitize-recover=vptr -fno-rtti -DSANITIZER_BUILD")
|
|
|
|
if(NOT SANITIZE_UB_ALLOW_CONTINUE)
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-sanitize-recover=undefined")
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
endif()
|
2017-12-21 00:45:38 +01:00
|
|
|
endif()
|
|
|
|
|
|
|
|
# Compile code with defenses enabled (settings to be used for production release code)
|
|
|
|
if("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
|
2019-05-15 11:49:49 +02:00
|
|
|
if(MSVC)
|
|
|
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GS")
|
|
|
|
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} /DynamicBase")
|
|
|
|
if("${NEO_ARCH}" STREQUAL "x86")
|
|
|
|
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /SafeSEH")
|
|
|
|
endif()
|
|
|
|
else()
|
2024-06-25 14:44:27 +00:00
|
|
|
string(FIND ${CMAKE_CXX_FLAGS} "-D_FORTIFY_SOURCE=3" __FORTIFY_SOURCE_3_SET)
|
|
|
|
if(${__FORTIFY_SOURCE_3_SET} LESS 0)
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -D_FORTIFY_SOURCE=2")
|
|
|
|
endif()
|
|
|
|
|
2024-11-29 16:44:40 +00:00
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong")
|
2019-05-15 11:49:49 +02:00
|
|
|
if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
|
|
|
|
else()
|
|
|
|
# gcc, g++ only
|
|
|
|
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,now")
|
|
|
|
endif()
|
|
|
|
endif()
|
2017-12-21 00:45:38 +01:00
|
|
|
endif()
|
|
|
|
|
|
|
|
# Project-wide include paths
|
2019-08-05 15:16:57 +02:00
|
|
|
# Please keep alphabetical order
|
2019-10-14 12:55:52 +02:00
|
|
|
include_directories(${NEO_BUILD_DIR})
|
2019-10-10 17:41:59 +02:00
|
|
|
include_directories(${NEO_SOURCE_DIR})
|
2021-03-19 13:43:50 +01:00
|
|
|
include_directories(${NEO_SHARED_DIRECTORY}/aub_mem_dump/definitions${BRANCH_DIR_SUFFIX})
|
2020-03-11 14:03:26 +01:00
|
|
|
include_directories(${NEO_SHARED_DIRECTORY}/built_ins/builtinops${BRANCH_DIR_SUFFIX})
|
2021-10-21 01:30:53 +00:00
|
|
|
include_directories(${NEO_SHARED_DIRECTORY}/command_container/definitions${BRANCH_DIR_SUFFIX})
|
2020-03-11 14:03:26 +01:00
|
|
|
include_directories(${NEO_SHARED_DIRECTORY}/command_stream/definitions${BRANCH_DIR_SUFFIX})
|
|
|
|
include_directories(${NEO_SHARED_DIRECTORY}/debug_settings/definitions${BRANCH_DIR_SUFFIX})
|
2021-03-03 12:47:04 +01:00
|
|
|
include_directories(${NEO_SHARED_DIRECTORY}/dll/devices${BRANCH_DIR_SUFFIX})
|
2023-12-15 14:36:11 +00:00
|
|
|
include_directories(${NEO_SHARED_DIRECTORY}/kernel/definitions${BRANCH_DIR_SUFFIX})
|
2020-08-26 22:36:51 +02:00
|
|
|
include_directories(${NEO_SHARED_DIRECTORY}/gen_common${BRANCH_DIR_SUFFIX})
|
2021-05-19 00:30:46 +02:00
|
|
|
if(WIN32)
|
|
|
|
include_directories(${NEO_SHARED_DIRECTORY}/gmm_helper/windows/gmm_memory${BRANCH_DIR_SUFFIX})
|
|
|
|
else()
|
2024-03-28 13:31:57 +00:00
|
|
|
include_directories(${NEO_LINUX_KMD_HEADERS_DIR}
|
2022-08-08 22:22:25 +00:00
|
|
|
${NEO_SHARED_DIRECTORY}/gmm_helper/windows/gmm_memory
|
|
|
|
)
|
|
|
|
if("${BRANCH_TYPE}" STREQUAL "")
|
|
|
|
include_directories(${NEO_SOURCE_DIR}/third_party/uapi/prelim)
|
|
|
|
endif()
|
2021-05-19 00:30:46 +02:00
|
|
|
endif()
|
2020-04-26 21:48:59 +02:00
|
|
|
include_directories(${NEO_SHARED_DIRECTORY}/helpers/definitions${BRANCH_DIR_SUFFIX})
|
2020-03-11 14:03:26 +01:00
|
|
|
include_directories(${NEO_SHARED_DIRECTORY}/memory_properties${BRANCH_DIR_SUFFIX})
|
2023-04-13 14:16:49 +00:00
|
|
|
include_directories(${NEO_SHARED_DIRECTORY}/release_helper/definitions${BRANCH_DIR_SUFFIX})
|
2020-03-11 14:03:26 +01:00
|
|
|
include_directories(${NEO_SHARED_DIRECTORY}/sku_info/definitions${BRANCH_DIR_SUFFIX})
|
2021-07-28 14:45:43 +00:00
|
|
|
|
2022-03-10 17:27:38 +00:00
|
|
|
macro(macro_for_each_platform)
|
|
|
|
string(TOLOWER ${PLATFORM_IT} PLATFORM_IT_LOWER)
|
2024-07-09 09:29:17 +00:00
|
|
|
foreach(PLATFORM_DIRECTORY
|
|
|
|
${NEO_SHARED_DIRECTORY}/${CORE_TYPE_LOWER}/${PLATFORM_IT_LOWER}/definitions${BRANCH_DIR_SUFFIX}
|
|
|
|
${NEO_SHARED_DIRECTORY}/ail/${CORE_TYPE_LOWER}/${PLATFORM_IT_LOWER}/definitions${BRANCH_DIR_SUFFIX}
|
|
|
|
)
|
2022-03-10 17:27:38 +00:00
|
|
|
if(EXISTS ${PLATFORM_DIRECTORY})
|
|
|
|
include_directories(${PLATFORM_DIRECTORY})
|
|
|
|
endif()
|
|
|
|
endforeach()
|
|
|
|
endmacro()
|
|
|
|
|
2021-11-24 09:38:00 +00:00
|
|
|
macro(macro_for_each_core_type)
|
|
|
|
foreach(PLATFORM_DIRECTORY ${NEO_SHARED_DIRECTORY}/${CORE_TYPE_LOWER}/definitions${BRANCH_DIR_SUFFIX} ${NEO_SOURCE_DIR}/opencl/source/${CORE_TYPE_LOWER}/definitions${BRANCH_DIR_SUFFIX})
|
2021-07-28 14:45:43 +00:00
|
|
|
if(EXISTS ${PLATFORM_DIRECTORY})
|
|
|
|
include_directories(${PLATFORM_DIRECTORY})
|
|
|
|
endif()
|
|
|
|
endforeach()
|
2022-03-10 17:27:38 +00:00
|
|
|
|
2023-03-09 22:00:24 +00:00
|
|
|
apply_macro_for_each_platform("SUPPORTED")
|
2021-07-28 14:45:43 +00:00
|
|
|
endmacro()
|
2022-03-10 17:27:38 +00:00
|
|
|
|
2021-11-24 09:38:00 +00:00
|
|
|
apply_macro_for_each_core_type("SUPPORTED")
|
2021-07-28 14:45:43 +00:00
|
|
|
|
2017-12-21 00:45:38 +01:00
|
|
|
# Define where to put binaries
|
2019-12-19 14:22:00 +01:00
|
|
|
set(TargetDir ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
|
2017-12-21 00:45:38 +01:00
|
|
|
if(MSVC)
|
2020-08-19 12:18:18 +02:00
|
|
|
if(NOT "${CMAKE_GENERATOR}" STREQUAL "Ninja")
|
|
|
|
set(TargetDir ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE})
|
|
|
|
endif()
|
2019-12-19 14:22:00 +01:00
|
|
|
endif()
|
2017-12-21 00:45:38 +01:00
|
|
|
|
2024-06-03 10:17:02 +00:00
|
|
|
add_subdirectory_unique(shared/source/release_helper)
|
2020-02-27 16:17:08 +01:00
|
|
|
add_subdirectory_unique(${OCLOC_DIRECTORY} ${NEO_BUILD_DIR}/offline_compiler)
|
2022-12-06 19:23:03 +01:00
|
|
|
target_compile_definitions(ocloc_lib
|
|
|
|
PRIVATE MOCKABLE_VIRTUAL=
|
|
|
|
)
|
2021-11-08 20:14:43 +00:00
|
|
|
include(cmake/ocloc_cmd_prefix.cmake)
|
2020-01-29 17:43:20 +01:00
|
|
|
|
|
|
|
if(DONT_CARE_OF_VIRTUALS)
|
2020-08-19 12:18:18 +02:00
|
|
|
set(NEO_SHARED_RELEASE_LIB_NAME "neo_shared")
|
|
|
|
set(NEO_SHARED_MOCKABLE_LIB_NAME ${NEO_SHARED_RELEASE_LIB_NAME})
|
2020-01-29 17:43:20 +01:00
|
|
|
else()
|
2020-08-19 12:18:18 +02:00
|
|
|
set(NEO_SHARED_RELEASE_LIB_NAME "neo_shared")
|
2021-11-10 10:34:06 +00:00
|
|
|
if(NOT NEO_SKIP_UNIT_TESTS)
|
2020-08-19 12:18:18 +02:00
|
|
|
set(NEO_SHARED_MOCKABLE_LIB_NAME "neo_shared_mockable")
|
|
|
|
endif()
|
2020-01-29 17:43:20 +01:00
|
|
|
endif()
|
2020-02-24 13:10:44 +01:00
|
|
|
|
|
|
|
set(BIKSIM_LIB_NAME "biksim")
|
|
|
|
set(BUILTINS_SOURCES_LIB_NAME "builtins_sources")
|
2022-08-22 14:53:48 +00:00
|
|
|
set(BUILTINS_BINARIES_STATELESS_LIB_NAME "builtins_binaries_stateless")
|
2024-01-16 10:10:08 +00:00
|
|
|
set(BUILTINS_BINARIES_STATELESS_HEAPLESS_LIB_NAME "builtins_binaries_stateless_heapless")
|
2020-10-01 13:31:19 +02:00
|
|
|
set(BUILTINS_BINARIES_BINDFUL_LIB_NAME "builtins_binaries_bindful")
|
|
|
|
set(BUILTINS_BINARIES_BINDLESS_LIB_NAME "builtins_binaries_bindless")
|
2020-09-03 15:19:18 +02:00
|
|
|
set(BUILTINS_SPIRV_LIB_NAME "builtins_spirv")
|
2020-02-24 13:10:44 +01:00
|
|
|
|
2021-10-25 08:00:23 +00:00
|
|
|
if(WIN32)
|
2024-10-24 16:31:35 +00:00
|
|
|
set(NEO_EXTRA_LIBS Ws2_32 winmm)
|
2021-10-25 08:00:23 +00:00
|
|
|
else()
|
|
|
|
set(NEO_EXTRA_LIBS dl pthread rt)
|
|
|
|
endif()
|
|
|
|
|
2021-11-04 01:22:30 +00:00
|
|
|
add_subdirectory_unique(shared)
|
2021-08-23 15:44:36 +00:00
|
|
|
|
2021-11-10 19:19:29 +00:00
|
|
|
if(NEO_BUILD_WITH_OCL)
|
|
|
|
add_subdirectory_unique(opencl)
|
2018-03-21 23:40:59 +01:00
|
|
|
else()
|
2021-11-10 19:19:29 +00:00
|
|
|
hide_subdir(opencl)
|
|
|
|
set(NEO_SKIP_OCL_UNIT_TESTS TRUE)
|
2020-04-18 19:10:44 +02:00
|
|
|
endif()
|
|
|
|
|
2017-12-21 00:45:38 +01:00
|
|
|
set(DONT_LINK_ELF_STATICALLY TRUE)
|
2019-10-10 17:41:59 +02:00
|
|
|
if(EXISTS ${NEO_SOURCE_DIR}/../internal)
|
2019-10-14 12:55:52 +02:00
|
|
|
add_subdirectory_unique(${NEO_SOURCE_DIR}/../internal ${NEO_BUILD_DIR}/internal)
|
2020-08-19 12:18:18 +02:00
|
|
|
endif()
|
2017-12-21 00:45:38 +01:00
|
|
|
|
2020-11-23 15:00:38 +01:00
|
|
|
set(NEO_SCRIPT_PROJECTS_FOLDER "neo scripts")
|
2017-12-21 00:45:38 +01:00
|
|
|
|
2022-05-19 01:52:41 +00:00
|
|
|
set(NEO_SHARED_BUILTINS_DIR "${NEO_SOURCE_DIR}/shared/source/built_ins/kernels")
|
|
|
|
set(NEO_SHARED_TEST_FILES_DIR "${NEO_SOURCE_DIR}/shared/test/common/test_files")
|
|
|
|
set(NEO_OPENCL_TEST_FILES_DIR "${NEO_SOURCE_DIR}/opencl/test/unit_test/test_files")
|
|
|
|
|
2019-10-14 12:55:52 +02:00
|
|
|
configure_file(config.h.in ${NEO_BUILD_DIR}/config.h)
|
|
|
|
configure_file(driver_version.h.in ${NEO_BUILD_DIR}/driver_version.h) # Put Driver version into define
|
2022-05-19 01:52:41 +00:00
|
|
|
configure_file(test_files_setup.h.in ${NEO_BUILD_DIR}/test_files_setup.h)
|
2022-06-29 12:15:26 +00:00
|
|
|
configure_file(hw_cmds_default.h.in ${NEO_BUILD_DIR}/hw_cmds_default.h)
|
2019-05-15 11:49:49 +02:00
|
|
|
|
2020-03-15 23:03:19 -08:00
|
|
|
if(BUILD_WITH_L0)
|
2020-08-19 12:18:18 +02:00
|
|
|
add_subdirectory_unique(level_zero)
|
2020-03-15 23:03:19 -08:00
|
|
|
endif()
|
|
|
|
|
|
|
|
add_subdirectory_unique(target_unit_tests)
|
2021-06-28 14:05:04 +02:00
|
|
|
add_subdirectory_unique(target_aub_tests)
|
2020-03-15 23:03:19 -08:00
|
|
|
|
2019-06-05 16:41:57 +02:00
|
|
|
add_subdirectories()
|
2019-05-15 18:06:16 +02:00
|
|
|
|
2020-03-06 23:09:52 +01:00
|
|
|
include(package.cmake)
|