#=========================== begin_copyright_notice ============================ # # Copyright (C) 2017-2024 Intel Corporation # # SPDX-License-Identifier: MIT # #============================ end_copyright_notice ============================= # CMake settings: # - IGC_OPTION__LIBRARY_NAME # FCL # - FCL_OPTION__LIBRARY_NAME # - IGC_OPTION__ARCHITECTURE_HOST # - IGC_OPTION__ARCHITECTURE_TARGET # - IGC_OPTION__BIF_LINK_BC # - IGC_OPTION__INCLUDE_IGC_COMPILER_TOOLS # - IGC_OPTION__OUTPUT_DIR cmake_minimum_required(VERSION 3.13.4 FATAL_ERROR) set_property(GLOBAL PROPERTY USE_FOLDERS ON) # Default languages: C, C++. project(IGC) if(UNIX) include(GNUInstallDirs) endif() # Increment IGC_API_MAJOR_VERSION if there is ABI Change. if(NOT DEFINED IGC_API_MAJOR_VERSION) set(IGC_API_MAJOR_VERSION 2) endif() if(NOT DEFINED IGC_API_MINOR_VERSION) set(IGC_API_MINOR_VERSION 20) endif() if(NOT DEFINED IGC_API_PATCH_VERSION) set(IGC_API_PATCH_VERSION 0) endif() # IGC_BUILD_METADATA # Used as version suffix, to distinguish builds with the same semantic version # Eg. libigc-1.2.3+x and libigc-1.2.3+y if(NOT DEFINED IGC_BUILD_METADATA) if(DEFINED ENV{IGC_BUILD_METADATA}) set(IGC_BUILD_METADATA $ENV{IGC_BUILD_METADATA}) else() set(IGC_BUILD_METADATA 0) endif() endif() set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED TRUE) # ====================================================================================================== # ================================================ UTILS =============================================== # ====================================================================================================== list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/BiFModule/cmake) list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) include(igc_flags_utils) include(igc_arch_utils) include(igc_resource_utils) include(igc_source_group_utils) include(igc_llvm_utils) include(igc_imported_tools) # ====================================================================================================== # ====================================================================================================== # ====================================================================================================== # ====================================================================================================== # ==================================== BUILD CONFIGURATIONS (part 1) =================================== # ====================================================================================================== # IGC project available configuration types: set(IGC_CMAKE_CONFIGURATION_TYPES "Debug" "Release" ) set(IGC_CMAKE_CONFIGURATION_TYPES ${IGC_CMAKE_CONFIGURATION_TYPES} CACHE STRING "IGC available build configurations." FORCE) if(CMAKE_CONFIGURATION_TYPES) # Multi-configuration generator: use CMAKE_CONFIGURATION_TYPES variable set(CMAKE_CONFIGURATION_TYPES ${IGC_CMAKE_CONFIGURATION_TYPES}) if(CMAKE_BUILD_TYPE) message(FATAL_ERROR "CMAKE_BUILD_TYPE variable is not allowed while using multi-configuration generator!") endif() else() # Single-configuration generator: use CMAKE_BUILD_TYPE variable if(DEFINED CMAKE_BUILD_TYPE) string(TOLOWER "${CMAKE_BUILD_TYPE}" _buildType) string(STRIP "${_buildType}" _buildType) if(_buildType MATCHES "^release$") set(_buildType "Release") elseif(_buildType MATCHES "^debug$") set(_buildType "Debug") else() set(_buildType "Release") message(WARNING "CMAKE_BUILD_TYPE: Unknown build configuration. The following configurations are available: ${IGC_CMAKE_CONFIGURATION_TYPES}.\nThe \"${_buildType}\" configuration will be used.\nThis value has meaning only for single-configuration generators (like Make). It will be ignored for MSVC/XCode.") endif() else() set(_buildType "Release") message(WARNING "CMAKE_BUILD_TYPE: No build configuration specified. The following configurations are available: ${IGC_CMAKE_CONFIGURATION_TYPES}.\nThe \"${_buildType}\" configuration will be used.\nThis value has meaning only for single-configuration generators (like Make). It will be ignored for MSVC/XCode.") endif() set(CMAKE_BUILD_TYPE "${_buildType}") unset(_buildType) endif() # Patterns which identify debug and release configurations. set(IGC_BUILD__DEBUG_PATTERN "^Debug$") set(IGC_BUILD__RELEASE_PATTERN "^Release$") # The configuration variables used below are likely to have been most recently # defined by the project statement's call to the toolchain file # ${CMAKE_TOOLCHAIN_FILE}. # Some known cmake variables describing compiler: # - CMAKE_CXX_COMPILER_ID == "Clang..." -> Clang # - CMAKE_CXX_COMPILER_ID == "GNU" -> GCC # - CMAKE_CXX_COMPILER_ID == "Intel" -> Intel C++ # - CMAKE_CXX_COMPILER_ID == "MSVC" -> using Visual Studio C++ # Local variables describing compilers: # _igc_compiler_is_gnu - C/C++ is gcc/g++ (not clang) # _igc_compiler_is_clang - C/C++ is clang/clang++ (not gcc/g++) # _igc_compiler_is_gnu_or_clang = C/C++ is either gnu or clang if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") set(_igc_compiler_is_gnu 1) else() set(_igc_compiler_is_gnu 0) endif() if((CMAKE_C_COMPILER_ID MATCHES "Clang") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang")) set(_igc_compiler_is_clang 1) else() set(_igc_compiler_is_clang 0) endif((CMAKE_C_COMPILER_ID MATCHES "Clang") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang")) if(_igc_compiler_is_gnu OR _igc_compiler_is_clang) set(_igc_compiler_is_gnu_or_clang 1) else() set(_igc_compiler_is_gnu_or_clang 0) endif(_igc_compiler_is_gnu OR _igc_compiler_is_clang) # # First, Set IGC_OPTION__ARCHITECTURE_TARGET, IGC_OPTION__ARCHITECTURE_HOST, # and IGC_BUILD__CROSSCOMPILE_NEEDED. # igc_arch_detect(IGC_BUILD__DETECTED_ARCHITECTURE_TARGET IGC_BUILD__DETECTED_ARCHITECTURE_HOST) igc_arch_validate(_detectedTargetArchValid "${IGC_BUILD__DETECTED_ARCHITECTURE_TARGET}") igc_arch_validate(_detectedHostArchValid "${IGC_BUILD__DETECTED_ARCHITECTURE_HOST}") if(DEFINED IGC_OPTION__ARCHITECTURE_TARGET) igc_arch_normalize(_targetArchitecture "${IGC_OPTION__ARCHITECTURE_TARGET}") elseif(_detectedTargetArchValid) set(_targetArchitecture "${IGC_BUILD__DETECTED_ARCHITECTURE_TARGET}") message(WARNING "IGC_OPTION__ARCHITECTURE_TARGET: Target architecture is not specified. Trying to deduce it from context.") else() message(FATAL_ERROR "IGC_OPTION__ARCHITECTURE_TARGET: Target architecture is not specified and cannot be deduced from context.\nPlease specify one, e.g. Windows32, Linux64, Android32, ...") endif() if(DEFINED IGC_OPTION__ARCHITECTURE_HOST) igc_arch_normalize(_hostArchitecture "${IGC_OPTION__ARCHITECTURE_HOST}") elseif(_detectedHostArchValid) set(_hostArchitecture "${IGC_BUILD__DETECTED_ARCHITECTURE_HOST}") if(CMAKE_CROSSCOMPILING) message(WARNING "IGC_OPTION__ARCHITECTURE_HOST: Host architecture is not specified. Trying to deduce it from context.") endif() elseif(CMAKE_CROSSCOMPILING) message(FATAL_ERROR "IGC_OPTION__ARCHITECTURE_HOST: Host architecture is not specified and cannot be deduced from context.\nPlease specify one, e.g. Windows32, Linux64, Android32, ...") else() set(_hostArchitecture "${_targetArchitecture}") endif() igc_arch_crosscompile_needed(IGC_BUILD__CROSSCOMPILE_NEEDED "${_targetArchitecture}" "${_hostArchitecture}") set(IGC_OPTION__ARCHITECTURE_TARGET "${_targetArchitecture}" CACHE STRING "Target architecture for compilation." FORCE) set(IGC_OPTION__ARCHITECTURE_HOST "${_hostArchitecture}" CACHE STRING "Architecture of host used during compilation. Only used when cross-compiling." FORCE) unset(_detectedTargetArchValid) unset(_detectedHostArchValid) unset(_targetArchitecture) unset(_hostArchitecture) # GFX_DEVELOPMENT_DIR shall be provided by UFO build system if(NOT GFX_DEVELOPMENT_DIR) get_filename_component(GFX_DEVELOPMENT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../ ABSOLUTE) endif() find_program(PYTHON_EXECUTABLE NAMES "python3" "python") set(IGC_CODEGEN_BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}/autogen") if(MSVC_IDE) set(IGC_CODEGEN_DIR "${IGC_CODEGEN_BASE_DIR}/${IGC_CMAKE_CFG_INTDIR}") elseif(MSVC) set(IGC_CODEGEN_DIR "${IGC_CODEGEN_BASE_DIR}/${IGC_CMAKE_CFG_INTDIR}") else() set(IGC_CODEGEN_DIR "${IGC_CODEGEN_BASE_DIR}") endif() add_subdirectory(MDAutogen ${IGC_CODEGEN_BASE_DIR}/MDAutogen) set_source_files_properties(${IGC_CODEGEN_DIR}/MDNodeFunctions.gen PROPERTIES GENERATED TRUE) # ============================================================================ # ========== BUILD CONFIGURATIONS (part 2) =================================== # ============================================================================ # The section must be after project definition and its supported languages because otherwise # used variables are not available yet. # Generate debug symbols even in release mode, thus making it possible to produce # separate Debian/RPM debug information packages. # FIXME: Instead of hacking the release build flags, consider using CMake's # RelWithDebInfo build type. if(UNIX) 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() # Populating global property with list of debug configurations (based on pattern). set(_debugConfigs) foreach(_configName ${CMAKE_CONFIGURATION_TYPES} ${CMAKE_BUILD_TYPE}) if(_configName MATCHES "${IGC_BUILD__DEBUG_PATTERN}") list(APPEND _debugConfigs "${_configName}") endif() endforeach() set_property(GLOBAL PROPERTY DEBUG_CONFIGURATIONS ${_debugConfigs}) unset(_debugConfigs) # ====================================================================================================== # ====================================================================================================== # ====================================================================================================== # ====================================================================================================== # ========================================= BUILD CMAKE OPTIONS ======================================== # ====================================================================================================== include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/igc_library_name.cmake") set(IGC_LIBRARY_NAME ${IGC_LIBRARY_NAME} PARENT_SCOPE) set(FCL_ENABLED ON) if (FCL_ENABLED) #FCL if(DEFINED FCL_OPTION__LIBRARY_NAME) set(FCL_LIBRARY_NAME "${FCL_OPTION__LIBRARY_NAME}") else() set(FCL_LIBRARY_NAME "igdfcl") endif() set(FCL_LIBRARY_NAME ${FCL_LIBRARY_NAME} PARENT_SCOPE) set(_allowBifLink ON) set(IGC_OPTION__BIF_LINK_BC ${_allowBifLink} CACHE BOOL "Built-in Functions: Link .bc files into final shared libraries.") mark_as_advanced(IGC_OPTION__BIF_LINK_BC) unset(_allowBifLink) endif() # TODO: Remove this flag once only LLVM 16+ is supported (no possibility to enable typed pointers). if(IGC_OPTION__LLVM_PREFERRED_VERSION VERSION_GREATER_EQUAL 16) option(IGC_OPTION__API_ENABLE_OPAQUE_POINTERS "[Experimental] Enable opaque pointers across the IGC stack.\ Forces opaque pointers' usage in IGC/LLVM passes, OCL Clang FE and built-in functions' bitcode.\ Enabled by default for LLVM 16+." ON) else() option(IGC_OPTION__API_ENABLE_OPAQUE_POINTERS "[Experimental] Enable opaque pointers across the IGC stack.\ Forces opaque pointers' usage in IGC/LLVM passes, OCL Clang FE and built-in functions' bitcode.\ Enabled by default for LLVM 16+." OFF) endif() option(IGC_OPTION__ENABLE_LIT_TESTS "Enable lit testing for IGC compiler. May require additional tools like llvm lit and opt" OFF) set(IGC_OPTION__BIF_SRC_OCL_DIR "${IGC_SOURCE_DIR}/BiFModule" CACHE PATH "Built-in Functions: Root directory where sources for OpenCL builtins are located.") mark_as_advanced(IGC_OPTION__BIF_SRC_OCL_DIR) if(IGC_BUILD__CROSSCOMPILE_NEEDED AND (NOT CMAKE_CROSSCOMPILING)) message(FATAL_ERROR "IGC_OPTION__ARCHITECTURE_TARGET,\nIGC_OPTION__ARCHITECTURE_HOST: Current target / host architecture combination requires cross-compiling. Please specify correct toolchain.") endif() igc_arch_validate(_archValid "${IGC_OPTION__ARCHITECTURE_TARGET}") if(NOT _archValid) message(FATAL_ERROR "IGC_OPTION__ARCHITECTURE_TARGET: Target architecture \"${IGC_OPTION__ARCHITECTURE_TARGET}\" is invalid.\nPlease specify correct one, e.g. Windows32, Linux64, Android32, ...") endif() igc_arch_validate(_archValid "${IGC_OPTION__ARCHITECTURE_HOST}") if(NOT _archValid) message(FATAL_ERROR "IGC_OPTION__ARCHITECTURE_HOST: Host architecture \"${IGC_OPTION__ARCHITECTURE_HOST}\" is invalid.\nPlease specify correct one, e.g. Windows32, Linux64, Android32, ...") endif() set(IGC_OPTION__IST_IGCC_ONLY ON CACHE BOOL "Only building igcc part of IST (IGCStandalone).") if(NOT DEFINED IGC_OPTION__BUILD_IGC_OPT) set(IGC_OPTION__BUILD_IGC_OPT OFF) endif() igc_arch_get_cpu(_cpuSuffix) if(NOT DEFINED IGC_OPTION__OUTPUT_DIR) set(IGC_OPTION__OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}" CACHE PATH "Output directory path where the final libraries will be stored.") endif() get_filename_component(IGC_OPTION__OUTPUT_DIR ${IGC_OPTION__OUTPUT_DIR} ABSOLUTE) unset(_cpuSuffix) if(NOT DEFINED IGC_OPTION__INCLUDE_IGC_COMPILER_TOOLS) set(IGC_OPTION__INCLUDE_IGC_COMPILER_TOOLS OFF) endif() set(IGC_OPTION__COMPILE_LINK_ALLOW_UNSAFE_SIZE_OPT ON CACHE BOOL "Compile/link: Allow unsafe size optimization like --gc-sections.") mark_as_advanced(IGC_OPTION__COMPILE_LINK_ALLOW_UNSAFE_SIZE_OPT) # IGC install time absolute path if(IGC_OPTION__INSTALL_TIME_ROOT_DIR) get_filename_component(IGC_INSTALL_TIME_ROOT_DIR ${IGC_OPTION__INSTALL_TIME_ROOT_DIR} ABSOLUTE) else() set(IGC_INSTALL_TIME_ROOT_DIR ${CMAKE_INSTALL_PREFIX}) endif() # ============================================= Status ================================================= message(STATUS "================================ IGC Project ================================") if(CMAKE_CONFIGURATION_TYPES) message(STATUS "Build types: ${CMAKE_CONFIGURATION_TYPES} (multi-configuration generator)") else() message(STATUS "Build type: ${CMAKE_BUILD_TYPE} (single-configuration generator)") endif() message(STATUS "Build tools: ${IGC_OPTION__INCLUDE_IGC_COMPILER_TOOLS}") message(STATUS "") message(STATUS "Output directory:") message(STATUS " \"${IGC_OPTION__OUTPUT_DIR}\"") message(STATUS "Install root directory:") message(STATUS " \"${IGC_INSTALL_TIME_ROOT_DIR}\"") message(STATUS "Architecture:") message(STATUS " - target: ${IGC_OPTION__ARCHITECTURE_TARGET} (detected: ${IGC_BUILD__DETECTED_ARCHITECTURE_TARGET})") message(STATUS " - host: ${IGC_OPTION__ARCHITECTURE_HOST} (detected: ${IGC_BUILD__DETECTED_ARCHITECTURE_HOST})") message(STATUS "") message(STATUS "Cross-compilation needed: ${IGC_BUILD__CROSSCOMPILE_NEEDED}") message(STATUS "Cross-compilation set: ${CMAKE_CROSSCOMPILING}") message(STATUS "") message(STATUS "Advanced:") message(STATUS " - Link BiF resources: ${IGC_OPTION__BIF_LINK_BC}") message(STATUS " - Building Windows Universal: ${IGC_OPTION__UNIVERSAL_DRIVER}") message(STATUS "=============================================================================") # ====================================================================================================== # ====================================================================================================== # ====================================================================================================== # ====================================================================================================== # ======================================== COMPILE/LINK SETTINGS ======================================= # ====================================================================================================== # =========================================== Helper variables ========================================= # We are building IGC. set(IGC_BUILD YES) if(CMAKE_SYSTEM_NAME MATCHES "Windows") set(LLVM_ON_WIN32 ON) else() set(LLVM_ON_WIN32 OFF) endif() # NOTE: LLVM_ON_UNIX is also true for Android (CMAKE_SYSTEM_NAME specified by Android toolchain file is also "Linux", # but we should make sure so there is no errors in our assumptions). if((CMAKE_SYSTEM_NAME MATCHES "Linux") OR ANDROID) set(LLVM_ON_UNIX ON) else() set(LLVM_ON_UNIX OFF) endif() if(_igc_compiler_is_gnu_or_clang AND NOT IGC_BUILD_DISABLE_FLAGS_GNU_CLANG) set(IGC_BUILD__WHOLE_ARCHIVE "-Wl,--whole-archive") set(IGC_BUILD__NO_WHOLE_ARCHIVE "-Wl,--no-whole-archive") set(IGC_BUILD__START_GROUP "-Wl,--start-group") set(IGC_BUILD__END_GROUP "-Wl,--end-group") else() set(IGC_BUILD__WHOLE_ARCHIVE "") set(IGC_BUILD__NO_WHOLE_ARCHIVE "") set(IGC_BUILD__START_GROUP "") set(IGC_BUILD__END_GROUP "") endif() set(IGC_BUILD__PROJ_NAME_PREFIX "") #SPIRV consumption variable set(IGC_BUILD__SPIRV_ENABLED ON) set(IGC_OPTION__LLVM_INTERIM OFF CACHE BOOL "Configure IGC to build with a provisional LLVM revision") message(STATUS "[IGC] IGC_OPTION__LLVM_INTERIM = ${IGC_OPTION__LLVM_INTERIM}") # Recognize if we need to use LLVM interim mode and set appropriate definition if (IGC_OPTION__LLVM_INTERIM) # Switch on IGC_BUILD_LLVM_INTERIM when -DIGC_OPTION__LLVM_INTERIM=1 option is provided for locally build set(IGC_BUILD_LLVM_INTERIM ON) elseif($ENV{IGC_LLVM_INTERIM}) # Switch on IGC_BUILD_LLVM_INTERIM when IGC_LLVM_INTERIM is set in environment e.g. yaml file set(IGC_BUILD_LLVM_INTERIM ON) endif() if(IGC_BUILD_LLVM_INTERIM) message(STATUS "[IGC] IGC_BUILD_LLVM_INTERIM = ${IGC_BUILD_LLVM_INTERIM}") add_compile_definitions(IGC_LLVM_TRUNK_REVISION) endif() # Enable vector compiler for Linux and Windows # If user already defined this, honor decision if(NOT DEFINED IGC_BUILD__VC_ENABLED) if(LLVM_ON_UNIX OR LLVM_ON_WIN32) set(IGC_BUILD__VC_ENABLED ON) endif() endif() if(IGC_BUILD_LLVM_INTERIM AND IGC_BUILD__VC_ENABLED) # Add vc-intrinsics patcher for Interim mode include("${IGC_SOURCE_DIR}/../external/vc-intrinsics/CMakeLists.txt") endif() if(NOT IGC_BUILD__VC_ENABLED OR NOT DEFINED IGC_BUILD__VC_ENABLED) set(IGC_BUILD__CMLIT_ENABLE OFF) endif() # ======================================== Path helper variables ======================================= set(IGC_BUILD__IGC_SRC_DIR "${IGC_SOURCE_DIR}") set(IGC_BUILD__IGC_COMMON_DIR "${IGC_BUILD__IGC_SRC_DIR}/common") set(IGC_BUILD__IGC_BIN_DIR "${IGC_BINARY_DIR}") set(IGC_BUILD__GFX_DEV_SRC_DIR "${IGC_SOURCE_DIR}/..") set(IGC_BUILD__GFX_DEV_TOOLS_DIR "${IGC_SOURCE_DIR}/../../Tools") set(IGC_BUILD__COMMON_DIR "${IGC_BUILD__GFX_DEV_SRC_DIR}/Common") set(IGC_BUILD__3D_COMMON_DIR "${IGC_BUILD__GFX_DEV_SRC_DIR}/3d/common") set(IGC_BUILD__INC_DIR "${IGC_BUILD__GFX_DEV_SRC_DIR}/inc") set(IGC_BUILD__COMMON_COMPILER_DIR "${IGC_BUILD__GFX_DEV_SRC_DIR}/inc/common/Compiler") set(IGC_BUILD__VISA_DIR "${IGC_BUILD__GFX_DEV_SRC_DIR}/visa") set(IGC_BUILD__TOOLS_IGC_DIR "${IGC_BUILD__GFX_DEV_TOOLS_DIR}/IGC") set(IGC_BUILD__TOOLS_IST_DIR "${IGC_BUILD__GFX_DEV_TOOLS_DIR}/IST") set(IGC_BUILD__BIF_DIR "${IGC_OPTION__OUTPUT_DIR}/bif/${IGC_CMAKE_CFG_INTDIR}") set(IGC_BUILD__TOOLS_OUTPUT_DIR "${IGC_OPTION__OUTPUT_DIR}/Tools") set(IGC_BUILD__UNIT_TEST_OUTPUT_DIR "${IGC_OPTION__OUTPUT_DIR}/UnitTests") set(IGC_BUILD__CTH_DIR "${IGC_OPTION__OUTPUT_DIR}/fcl") # Including CIF set(CIF_BASE_DIR "AdaptorOCL/cif") add_subdirectory("${CIF_BASE_DIR}/cif" ${CMAKE_CURRENT_BINARY_DIR}/cif) # ================================================ Outputs ============================================= set(EXECUTABLE_OUTPUT_PATH ${IGC_OPTION__OUTPUT_DIR}) set(LIBRARY_OUTPUT_PATH ${IGC_OPTION__OUTPUT_DIR}) # =============================== Compiler options (generic configuration) ============================= # Compiler options: # = - Equal # ^ - Implicitly defined by differnt option (like /O2). # ! - Should not be changed (should not be defined in first place -> there is no non-Windows support). # * - Needs to be modified in CMake. # + - Needs to be added in CMake. # - - Needs to be removed in CMake. # # MSVC: # =/analyze- =/EHsc =/errorReport:prompt =/fp:precise =/Gd =/Gm- ^/GF /GR- ^/GS ^/Gy /MP /MT =/nologo =/O2 ^/Ob2 ^/Oi /Os =/Oy- =/W3 !/Zc:forScope- =/Zc:wchar_t /Zi /Zp8 # ?/wd"4146" ?/wd"4355" ?/wd"4800" ?/wd"4482" ?/wd"4244" ?/WX # CMake: # =/analyze- =/EHsc =/errorReport:prompt =/fp:precise =/Gd =/Gm- ^/GF */GR ^/GS ^/Gy +/MP */MD =/nologo =/O2 ^/Ob2 ^/Oi +/Os =/Oy- -/TP =/W3 /Zc:forScope =/Zc:wchar_t +/Zi ^/Zp8 # ?/WX- # # Notes: # - "/Zc:forScope-" is non-standard behavior which is not portable to other OSes. It was defined for MFC and should not be used in modern code. # - "/Zp8" is default max. alignment for struct members (this option and its behavior can be hard to port to other OSes). # - "/wd" some of the warning are critically useful (especially when warning level is less than 4): # 4146 -> this can lead to problems with comparison; limits or numeric_limits usually allow to quickly correct the code. # 4244 -> this can lead to hard to catch problems with loss of data (especially when /W2 or /W3 type occurred and in x86_64 architetures). # 4355 -> warning: "this" passed to base class should be off by default (what enabled this?). # 4482 -> C++11 compilers allow enum qualification without warning (should not be problem since MSVC 2013). # 4800 -> can be disabled but it can be corrected pretty quick. # 4267 -> var : conversion from 'size_t' to 'type', possible loss of data # 4273 -> function' : inconsistent DLL linkage # - "/WX" should be re-enabled when all warnings are cleaned from code. # - Although "/O1" is usual set of settings for optmimization for size, but "/O2" "/Oi" "/Os" is preferred in IGC. # - we want to disable warning 4267: conversion from 'size_t' to 'uint32_t', possible loss of data # - Adding warning 4062 to be emiited at level 1: enumerator 'identifier' in switch of enum 'enumeration' is not handled if(MSVC) igc_flag_register_settings( CompilerOptions GROUP NAME CallingConvention "/G[drzv]" GROUP NAME CompileAs "/T[CP]" GROUP NAME DebugInfoFormat "/Z[7iI]" GROUP NAME Exceptions "/EHa" "/EHsc?" GROUP NAME FaviorSizeSpeed "/O[st]" GROUP NAME Optimization "/O[d12x]" GROUP NAME RuntimeLibrary "/M[TD]d?" GROUP NAME Rtti "/GR-?" GROUP NAME TreatWarnAsError "/WX-?" ALIAS AdditionalOptions "/w14062" "/Wv:18" ALIAS CallingConvCdecl "/Gd" ALIAS CallingConvFastcall "/Gr" ALIAS CallingConvStdcall "/Gz" ALIAS CallingConvVectorcall "/Gv" ALIAS CompileAsC "/TC" ALIAS CompileAsCpp "/TP" ALIAS CompileAsDefault CompileAs REMOVE_GROUP ALIAS DebugInfoDisabled DebugInfoFormat REMOVE_GROUP ALIAS DebugInfoProgramDatabase "/Zi" ALIAS DisableSpecificWarnings "/wd4267" "/wd4273" "/wd4091" "/wd4996" "/wd4291" ALIAS ExceptionsDisabled Exceptions REMOVE_GROUP ALIAS ExceptionsEnabled "/EHsc" ALIAS FaviorSize "/Os" ALIAS FaviorSpeed "/Ot" ALIAS MultiProcessorCompilation "/MP" ALIAS OptimizeDisabled "/Od" ALIAS OptimizeSize "/O2" "/Oi" "/Os" ALIAS OptimizeSpeed "/O2" "/Oi" "/Ot" ALIAS OptimizeFull "/Ox" ALIAS RtMultiThreadedStatic "/MT" ALIAS RtMultiThreadedShared "/MD" ALIAS RtMultiThreadedStaticDebug "/MTd" ALIAS RtMultiThreadedSharedDebug "/MDd" ALIAS RttiDisabled "/GR-" ALIAS RttiEnabled "/GR" ALIAS TreatWarnAsErrorDisabled "/WX-" ALIAS TreatWarnAsErrorEnabled "/WX" ALIAS UninitializedVarWarning "/w14701" ALIAS UnreferencedVariable "/w14189" ALIAS WholeProgramOptimization "/GL" ALIAS ControlFlowGuard "/guard:cf" ALIAS DeadCodeEliminate ALIAS DeadCodePreserve ) elseif(_igc_compiler_is_gnu) igc_flag_register_settings( CompilerOptions GROUP NAME DebugInfoFormat "-g[0-3]?" GROUP NAME Exceptions "-f(no-)?exceptions" GROUP NAME Optimization "-O[0-3sg]?" GROUP NAME Rtti "-f(no-)?rtti" GROUP NAME TreatWarnAsError "-Werror" ALIAS AdditionalOptions ALIAS CallingConvCdecl ALIAS CallingConvFastcall ALIAS CallingConvStdcall ALIAS CallingConvVectorcall ALIAS CompileAsC ALIAS CompileAsCpp ALIAS CompileAsDefault ALIAS DebugInfoDisabled "-g0" ALIAS DebugInfoProgramDatabase "-g" ALIAS DisableSpecificWarnings ALIAS ExceptionsDisabled "-fno-exceptions" ALIAS ExceptionsEnabled "-fexceptions" ALIAS FaviorSize "-Os" ALIAS FaviorSpeed "-O3" ALIAS MultiProcessorCompilation ALIAS OptimizeDisabled "-O0" ALIAS OptimizeSize "-Os" ALIAS OptimizeSpeed "-O2" ALIAS OptimizeFull "-O3" ALIAS RtMultiThreadedStatic ALIAS RtMultiThreadedShared ALIAS RtMultiThreadedStaticDebug ALIAS RtMultiThreadedSharedDebug ALIAS RttiDisabled "-fno-rtti" ALIAS RttiEnabled "-frtti" ALIAS TreatWarnAsErrorDisabled TreatWarnAsError REMOVE_GROUP ALIAS TreatWarnAsErrorEnabled "-Werror" ALIAS UnreferencedVariable ALIAS UninitializedVarWarning ALIAS WholeProgramOptimization ALIAS ControlFlowGuard ALIAS DeadCodeEliminate ALIAS DeadCodePreserve ) if(IGC_OPTION__COMPILE_LINK_ALLOW_UNSAFE_SIZE_OPT) igc_flag_register_settings( CompilerOptions GROUP NAME EmitDataSec "-fdata-sections" GROUP NAME EmitFuncSec "-ffunction-sections" ALIAS DeadCodeEliminate "-fdata-sections" "-ffunction-sections" ALIAS DeadCodePreserve EmitDataSec EmitFuncSec REMOVE_GROUP ) endif() elseif(_igc_compiler_is_clang) igc_flag_register_settings( CompilerOptions GROUP NAME DebugInfoFormat "-g(dwardf-[2-4]?)?" GROUP NAME Exceptions "-f(no-)?exceptions" GROUP NAME Optimization "-O([0-3]?|fast|s|z)?" GROUP NAME Rtti "-f(no-)?rtti" GROUP NAME TreatWarnAsError "-Werror" ALIAS AdditionalOptions ALIAS CallingConvCdecl ALIAS CallingConvFastcall ALIAS CallingConvStdcall ALIAS CallingConvVectorcall ALIAS CompileAsC ALIAS CompileAsCpp ALIAS CompileAsDefault ALIAS DebugInfoDisabled DebugInfoFormat REMOVE_GROUP ALIAS DebugInfoProgramDatabase "-g" ALIAS DisableSpecificWarnings ALIAS ExceptionsDisabled Exceptions REMOVE_GROUP ALIAS ExceptionsEnabled "-fexceptions" ALIAS FaviorSize "-Os" ALIAS FaviorSpeed "-O3" ALIAS MultiProcessorCompilation ALIAS OptimizeDisabled "-O0" ALIAS OptimizeSize "-Os" ALIAS OptimizeSpeed "-O2" ALIAS OptimizeFull "-03" ALIAS RtMultiThreadedStatic ALIAS RtMultiThreadedShared ALIAS RtMultiThreadedStaticDebug ALIAS RtMultiThreadedSharedDebug ALIAS RttiDisabled "-fno-rtti" ALIAS RttiEnabled Rtti REMOVE_GROUP ALIAS TreatWarnAsErrorDisabled TreatWarnAsError REMOVE_GROUP ALIAS TreatWarnAsErrorEnabled "-Werror" ALIAS UnreferencedVariable ALIAS UninitializedVarWarning ALIAS WholeProgramOptimization ALIAS ControlFlowGuard ALIAS DeadCodeEliminate ALIAS DeadCodePreserve ) else() igc_flag_register_settings( CompilerOptions ALIAS AdditionalOptions ALIAS CallingConvCdecl ALIAS CallingConvFastcall ALIAS CallingConvStdcall ALIAS CallingConvVectorcall ALIAS CompileAsC ALIAS CompileAsCpp ALIAS CompileAsDefault ALIAS DebugInfoDisabled ALIAS DebugInfoProgramDatabase ALIAS DisableSpecificWarnings ALIAS ExceptionsDisabled ALIAS ExceptionsEnabled ALIAS FaviorSize ALIAS FaviorSpeed ALIAS MultiProcessorCompilation ALIAS OptimizeDisabled ALIAS OptimizeSize ALIAS OptimizeSpeed ALIAS OptimizeFull ALIAS RtMultiThreadedStatic ALIAS RtMultiThreadedShared ALIAS RtMultiThreadedStaticDebug ALIAS RtMultiThreadedSharedDebug ALIAS RttiDisabled ALIAS RttiEnabled ALIAS TreatWarnAsErrorDisabled ALIAS TreatWarnAsErrorEnabled ALIAS UnreferencedVariable ALIAS UninitializedVarWarning ALIAS WholeProgramOptimization ALIAS ControlFlowGuard ALIAS DeadCodeEliminate ALIAS DeadCodePreserve ) endif() # ================================ Linker options (generic configuration) ============================== if(MSVC) if(IGC_OPTION__UNIVERSAL_DRIVER) igc_flag_register_settings( LinkerOptions GROUP NAME DebugInfo "/[dD][eE][bB][uU][gG]" GROUP NAME DeadCode "/[oO][pP][tT]:([nN][oO])?[rR][eE][fF]" GROUP NAME IdenticalCodeData "/[oO][pP][tT]:([nN][oO])?[iI][cC][fF](=[0-9]+)?" ALIAS AdditionalOptions ALIAS DebugInfoDisabled DebugInfo REMOVE_GROUP ALIAS DebugInfoProgramDatabase "/DEBUG" ALIAS DeadCodeEliminate "/OPT:REF" ALIAS DeadCodePreserve "/OPT:NOREF" ALIAS IdenticalCodeDataFold "/OPT:ICF" ALIAS IdenticalCodeDataNoFold "/OPT:NOICF" ALIAS LinkTimeCodeGeneration "/LTCG" ALIAS ControlFlowGuard "/guard:cf" ALIAS NoDefaultLib "/NODEFAULTLIB:kernel32.lib" ALIAS ControlFlowEnforcement "/CETCOMPAT" ) else() igc_flag_register_settings( LinkerOptions GROUP NAME DebugInfo "/[dD][eE][bB][uU][gG]" GROUP NAME DeadCode "/[oO][pP][tT]:([nN][oO])?[rR][eE][fF]" GROUP NAME IdenticalCodeData "/[oO][pP][tT]:([nN][oO])?[iI][cC][fF](=[0-9]+)?" ALIAS DebugInfoDisabled DebugInfo REMOVE_GROUP ALIAS DebugInfoProgramDatabase "/DEBUG" ALIAS DeadCodeEliminate "/OPT:REF" ALIAS DeadCodePreserve "/OPT:NOREF" ALIAS IdenticalCodeDataFold "/OPT:ICF" ALIAS IdenticalCodeDataNoFold "/OPT:NOICF" ALIAS LinkTimeCodeGeneration "/LTCG" ALIAS ControlFlowGuard "/guard:cf" ALIAS NoDefaultLib ALIAS ControlFlowEnforcement "/CETCOMPAT" ) endif() else() igc_flag_register_settings( LinkerOptions ALIAS DebugInfoDisabled ALIAS DebugInfoProgramDatabase ALIAS DeadCodeEliminate ALIAS DeadCodePreserve ALIAS IdenticalCodeDataFold ALIAS IdenticalCodeDataNoFold ALIAS LinkTimeCodeGeneration ALIAS ControlFlowGuard ALIAS NoDefaultLib ALIAS ControlFlowEnforcement ) if(IGC_OPTION__COMPILE_LINK_ALLOW_UNSAFE_SIZE_OPT) if(_igc_compiler_is_gnu_or_clang) igc_flag_register_settings( LinkerOptions GROUP NAME GcSections "-Wl,--gc-sections" ALIAS DeadCodeEliminate "-Wl,--gc-sections" ALIAS DeadCodePreserve GcSections REMOVE_GROUP ) endif() endif() endif() # =========================================== Compiler options ========================================= foreach(_compilerFlagName IN ITEMS "CMAKE_CXX_FLAGS" "CMAKE_C_FLAGS") # Change some generic settings of compiler. # NOTE: Debug info generation is enabled for all build configuration, because it is separate on Windows # and we will use "strip" command on Linux and Android (to separate it). if(IGC_OPTION__UNIVERSAL_DRIVER) igc_config_flag_apply_settings( CompilerOptions "${_compilerFlagName}" ALL_PATTERN "" SET CompileAsDefault DisableSpecificWarnings ExceptionsEnabled MultiProcessorCompilation DeadCodeEliminate CallingConvCdecl ) else() igc_config_flag_apply_settings( CompilerOptions "${_compilerFlagName}" ALL_PATTERN "" SET CompileAsDefault DisableSpecificWarnings ExceptionsEnabled MultiProcessorCompilation DeadCodeEliminate ) endif() igc_config_flag_apply_settings( CompilerOptions "${_compilerFlagName}" ALL_PATTERN_NOINHERIT "" SET DebugInfoProgramDatabase OptimizeSize RtMultiThreadedStatic ) igc_config_flag_apply_settings( CompilerOptions "${_compilerFlagName}" PATTERN "${IGC_BUILD__DEBUG_PATTERN}" SET OptimizeDisabled RtMultiThreadedStaticDebug UnreferencedVariable ) igc_config_flag_apply_settings( CompilerOptions "${_compilerFlagName}" PATTERN "${IGC_BUILD__RELEASE_PATTERN}" SET OptimizeSpeed ControlFlowGuard # Disable LTCG due to increase of release build time #WholeProgramOptimization ) # Adding needed settings specific to MSVC. if(MSVC) # Adding needed settings specific to GCC. # NOTE: Following options can be needed in the future (although some not recommended: NR): # [NR] -fno-short-enums # [NR] -fno-tree-pre # -fno-omit-frame-pointer # -Wa,--noexecstack # -fkeep-inline-functions igc_config_flag_apply_settings( CompilerOptions "${_compilerFlagName}" ALL_PATTERN "" SET AdditionalOptions RttiDisabled TreatWarnAsErrorEnabled ) elseif( ANDROID ) igc_config_flag_apply_settings( CompilerOptions "${_compilerFlagName}" ALL_PATTERN "" SET_RAW -pipe -fmessage-length=0 -march=corei7 -mstackrealign -fms-extensions -fvisibility=hidden -Werror -Wno-unused-parameter -Wno-missing-field-initializers -Wwrite-strings -Wno-long-long -Wswitch -Wno-sign-compare -Wno-unused-result -Wno-enum-compare -Wno-type-limits -Wno-ignored-qualifiers -Wno-format -Wno-format-security -Wno-extra -Wno-write-strings -finline -fno-strict-aliasing -msse -msse2 -msse3 -mssse3 -msse4 -msse4.1 -msse4.2 -Wno-unknown-pragmas -fPIC -Bsymbolic ) if(_igc_compiler_is_gnu) igc_config_flag_apply_settings( CompilerOptions "${_compilerFlagName}" ALL_PATTERN "" SET_RAW -funswitch-loops -Wno-maybe-uninitialized ) endif() if(_igc_compiler_is_gnu OR (_igc_compiler_is_clang AND NOT CMAKE_C_COMPILER_VERSION LESS "4.0")) igc_config_flag_apply_settings( CompilerOptions "${_compilerFlagName}" ALL_PATTERN "" SET_RAW -finline-functions ) endif() elseif(_igc_compiler_is_gnu_or_clang) if("${IGC_OPTION__ARCHITECTURE_TARGET}" STREQUAL "LinuxARM") igc_config_flag_apply_settings( CompilerOptions "${_compilerFlagName}" ALL_PATTERN "" SET_RAW -pipe -fmessage-length=0 #-march=armv8.2-a+fp+simd+sve2 -march=armv8-a+fp+simd -fms-extensions -Werror -Wno-unused-parameter -Wno-missing-field-initializers -Wwrite-strings -Wno-long-long -Wswitch -Wno-sign-compare -Wno-unused-result -Wno-enum-compare -Wno-type-limits -Wno-ignored-qualifiers -Wno-shadow -Wformat -Wformat-security -Wno-extra -Wno-write-strings -finline -fno-strict-aliasing -Wno-unknown-pragmas -fPIC -Bsymbolic ) elseif("${IGC_OPTION__ARCHITECTURE_TARGET}" STREQUAL "LinuxRISCV") igc_config_flag_apply_settings( CompilerOptions "${_compilerFlagName}" ALL_PATTERN "" SET_RAW -pipe -fmessage-length=0 -march=rv64gc -fms-extensions -Werror -Wno-unused-parameter -Wno-missing-field-initializers -Wwrite-strings -Wno-long-long -Wswitch -Wno-sign-compare -Wno-unused-result -Wno-enum-compare -Wno-type-limits -Wno-ignored-qualifiers -Wno-shadow -Wformat -Wformat-security -Wno-extra -Wno-write-strings -finline -fno-strict-aliasing -Wno-unknown-pragmas -fPIC -Bsymbolic ) else() igc_config_flag_apply_settings( CompilerOptions "${_compilerFlagName}" ALL_PATTERN "" SET_RAW -pipe -fmessage-length=0 -march=corei7 -mstackrealign -fms-extensions -Werror -Wno-unused-parameter -Wno-missing-field-initializers -Wwrite-strings -Wno-long-long -Wswitch -Wno-sign-compare -Wno-unused-result -Wno-enum-compare -Wno-type-limits -Wno-ignored-qualifiers -Wno-shadow -Wformat -Wformat-security -Wno-extra -Wno-write-strings -finline -fno-strict-aliasing -msse -msse2 -msse3 -mssse3 -msse4 -msse4.1 -msse4.2 -Wno-unknown-pragmas -fPIC -Bsymbolic ) endif() string(FIND ${CMAKE_CXX_FLAGS} "-D_FORTIFY_SOURCE=3" __FORTIFY_SOURCE_3_SET) set(flags -fstack-protector) if(${__FORTIFY_SOURCE_3_SET} EQUAL -1) list(APPEND flags -D_FORTIFY_SOURCE=2) endif() igc_config_flag_apply_settings( CompilerOptions "${_compilerFlagName}" PATTERN "${IGC_BUILD__RELEASE_PATTERN}" SET_RAW ${flags} ) if(_igc_compiler_is_gnu OR (_igc_compiler_is_clang AND NOT CMAKE_C_COMPILER_VERSION LESS "4.0")) igc_config_flag_apply_settings( CompilerOptions "${_compilerFlagName}" ALL_PATTERN "" SET_RAW -finline-functions ) endif() if(NOT _igc_compiler_is_clang) set(flags -funswitch-loops -Wno-maybe-uninitialized) if(NOT ANDROID) list(APPEND flags -lrt) endif() igc_config_flag_apply_settings( CompilerOptions "${_compilerFlagName}" ALL_PATTERN "" SET_RAW ${flags} ) endif() elseif(_igc_compiler_is_clang) igc_config_flag_apply_settings( CompilerOptions "${_compilerFlagName}" ALL_PATTERN "" SET_RAW -pipe -fvisibility=hidden -fvisibility-inlines-hidden -Wcovered-switch-default -Wno-unused-parameter -Wno-gnu -finline -fkeep-inline-functions -msse4.2 ) if(NOT CMAKE_C_COMPILER_VERSION LESS "4.0") igc_config_flag_apply_settings( CompilerOptions "${_compilerFlagName}" ALL_PATTERN "" SET_RAW -finline-functions ) endif() endif() # NOTE: Increase bracket-depth to 1024 for clang because we exceed the default limit of 256. # This resulted in errors like: # "instantiating fold expression with ... arguments exceeded expression nesting limit of 256" if(_igc_compiler_is_clang) igc_config_flag_apply_settings( CompilerOptions "${_compilerFlagName}" ALL_PATTERN "" SET_RAW -fbracket-depth=1024 ) endif() endforeach() if( ANDROID OR _igc_compiler_is_gnu_or_clang) igc_config_flag_apply_settings( LinkerOptions CMAKE_SHARED_LINKER_FLAGS ALL_PATTERN "" SET_RAW -Wl,--no-undefined ) endif() # NOTE: [WA] Workaround for OpenGL-IGC crash problem. Due to different handling of static objects destructors # the destructor of PassRegistry was called two times during exiting of OpenGL. # This switch is not conformant with C++ standard (order of destruction of static elements is not met) but # it is used in Android build system (possibliy due to Android bionic __cxa_atexit limitations). if(_igc_compiler_is_gnu_or_clang) if(ANDROID) igc_config_flag_apply_settings( CompilerOptions CMAKE_CXX_FLAGS ALL_PATTERN "" SET_RAW -fno-use-cxa-atexit -fvisibility-inlines-hidden -fpermissive -fno-rtti ) endif() endif() # Unconditionally disable rtti (C++ only) igc_config_flag_apply_settings( CompilerOptions CMAKE_CXX_FLAGS ALL_PATTERN "" SET RttiDisabled ) if(_igc_compiler_is_gnu_or_clang) igc_config_flag_apply_settings( CompilerOptions CMAKE_CXX_FLAGS ALL_PATTERN "" SET_RAW -fvisibility=hidden -fvisibility-inlines-hidden ) endif() # ============================================ Linker options ========================================== foreach(_linkerFlagName IN ITEMS "CMAKE_EXE_LINKER_FLAGS" "CMAKE_SHARED_LINKER_FLAGS") # Change some generic settings of linker. # NOTE: Debug info generation is enabled for all build configuration, because it is separate on Windows # and we will use "strip" command on Linux and Android (to separate it). igc_config_flag_apply_settings( LinkerOptions "${_linkerFlagName}" ALL_PATTERN "" SET DebugInfoProgramDatabase NoDefaultLib ) igc_config_flag_apply_settings( LinkerOptions "${_linkerFlagName}" ALL_PATTERN_NOINHERIT "" SET DeadCodeEliminate IdenticalCodeDataFold ) igc_config_flag_apply_settings( LinkerOptions "${_linkerFlagName}" PATTERN "${IGC_BUILD__RELEASE_PATTERN}" SET ControlFlowGuard ControlFlowEnforcement # Disable LTCG due to release build time increase #LinkTimeCodeGeneration ) igc_config_flag_apply_settings( LinkerOptions "${_linkerFlagName}" PATTERN "${IGC_BUILD__DEBUG_PATTERN}" SET DeadCodePreserve IdenticalCodeDataNoFold ) endforeach() if(MSVC) igc_config_flag_apply_settings( LinkerOptions CMAKE_SHARED_LINKER_FLAGS ALL_PATTERN "" SET_RAW "/MANIFEST:NO" "/ignore:4099" "/ignore:4197" ) set(IGC_BUILD__EXPORT_SYMBOLS_LINK_FLAGS_DEBUG "${IGC_BUILD__EXPORT_SYMBOLS_LINK_FLAGS_DEBUG}" "/ignore:4099") # Disable LTCG due to release build time increase #igc_config_flag_apply_settings( # LinkerOptions # CMAKE_STATIC_LINKER_FLAGS # PATTERN "${IGC_BUILD__RELEASE_PATTERN}" # SET # LinkTimeCodeGeneration #) # Force static linking of common libraries on Android for shared objects. elseif(_igc_compiler_is_gnu_or_clang) if(NOT ANDROID AND NOT IGC_BUILD_DISABLE_FLAGS_GNU_CLANG) igc_config_flag_apply_settings( LinkerOptions CMAKE_SHARED_LINKER_FLAGS ALL_PATTERN "" SET_RAW -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now ) endif() endif() if(_igc_compiler_is_clang) igc_config_flag_apply_settings( LinkerOptions CMAKE_SHARED_LINKER_FLAGS ALL_PATTERN "" SET_RAW -shared -Wl,-undefined,dynamic_lookup -Wl,-headerpad_max_install_names ) endif() # ================================== Compiler preprocessor definitions ================================= # ? CL_NUMBER < env:CL_NUMBER if env:CL_NUMBER != '' # ?* BUILD_NUMBER < env:BUILD_NUMBER if env:BUILD_NUMBER != '' # M IGC_EXPORTS=1 if !IGCStandalone # M _COMPILER_DLL_ if Compiler|| GenISAIntrinisics # * _CONSOLE if visa # + _CRT_SECURE_NO_WARNINGS # + _DEBUG if cfg:Debug # + _IGC_ # * _LIB if build:static library # + _SCL_SECURE_NO_WARNINGS # +* DEBUG if cfg:Debug # + DLL_MODE if visa # M GHAL3D_SHADERDUMP_ENABLE if IGCStandalone # + GHAL3D=USC # + ICBE_LHDM if platform:Windows # +* INSIDE_PLUGIN # M iSTD=USC_iSTD if IGCStanalone # + ISTDLIB_UMD ? # + NDEBUG if !cfg:Debug # + NOMINMAX # M* RIIGC if IGCStanalone # + USC_DXX if cfg:Debug # + USC_EXPORTS # + VER_H if !platform:Windows # M WIN32 if platform:Windows && bits:32 # + WIN64 if platform:Windows && bits:64 # + i386=1 if bits:32 # + _X86_=1 if bits:32 # + _AMD64_ if bits:64 # + ENABLE_REGISTRY_READ if cfg:Debug add_compile_definitions( _IGC_ GHAL3D=USC _HAS_EXCEPTIONS=0 IGC_EXPORTS=1 USC_EXPORTS=1 ISTDLIB_UMD IGC_CMAKE __STDC_CONSTANT_MACROS __STDC_LIMIT_MACROS _SCL_SECURE_NO_WARNINGS _CRT_SECURE_NO_WARNINGS NOMINMAX STD_CALL INSIDE_PLUGIN _COMPILER_DLL_ $<$:_DEBUG> $<$:ENABLE_REGISTRY_READ> $<$:USC_DXX> $<$:NDEBUG> $<$:_X86_=1> $<$:i386=1> $<$:_AMD64_> $<$:ICBE_LINUX> $<$:LINUX> $<$:USE_MMX> $<$:USE_SSE> $<$:USE_SSE2> $<$:USE_SSE3> $<$:USE_SSSE3> $<$:USE_MMX> $<$:USE_SSE> $<$:USE_SSE2> $<$:USE_SSE3> $<$:USE_SSSE3> $<$:USE_NEON> #$<$:USE_SVE> #$<$:USE_SVE2> $<$:ICBE_LHDM> $<$:_WIN32> $<$:"WIN32"> $<$:WIN32_LEAN_AND_MEAN=1> $<$:WINNT=1> $<$,$>:_WIN64> $<$,$>:WIN64> ) if(IGC_OPTION__BIF_LINK_BC) add_compile_definitions( BIF_LINK_BC ) endif() if(DEFINED VME_TYPES_DEFINED) add_compile_definitions( VME_TYPES_DEFINED=${VME_TYPES_DEFINED} ) endif() #SPIRV consumption flag if(IGC_BUILD__SPIRV_ENABLED) add_compile_definitions( IGC_SPIRV_ENABLED ) endif() #VC OPT switch on/off if(IGC_BUILD__VC_ENABLED) add_compile_definitions( IGC_VC_ENABLED ) endif() # Additional definitions for vISA projects. set(IGC_BUID__VISA_COMPILE_DEFINITIONS DLL_MODE ) if(NOT ANDROID) add_compile_definitions(CL_KHR_FP64_EXT) endif() if(DEFINED ENV{BUILD_ID}) add_compile_definitions( DRIVER_BUILD_ID=$ENV{BUILD_ID} ) endif() if(DEFINED ENV{TEST_P4_CHANGELIST}) add_compile_definitions( TB_BUILD_ID=$ENV{TEST_P4_CHANGELIST} ) endif() # ====================================================================================================== if(IGC_BUILD__SHOW_CFLAGS) get_cmake_property(_compilerOptionsVarNames VARIABLES) foreach(_compilerOptionsVarName ${_compilerOptionsVarNames}) if(_compilerOptionsVarName MATCHES "^CMAKE_.*_FLAGS(_.*)?$") message("[F] ${_compilerOptionsVarName}: ${${_compilerOptionsVarName}}") endif() endforeach() endif() # ==================================== LLVM package ==================================================== include("${CMAKE_CURRENT_SOURCE_DIR}/../external/llvm/llvm_deps.cmake") set(IGC_BUILD__CLANG_VERSION ${IGC_OPTION__LLVM_PREFERRED_VERSION} CACHE STRING "Preferred version of OpenCL Clang to use") string(REPLACE "." ";" CLANG_VERSION_LIST "${IGC_BUILD__CLANG_VERSION}") list(GET CLANG_VERSION_LIST 0 IGC_BUILD__CLANG_VERSION_MAJOR) include(igc_llvm) # ==================================== LLD package ===================================================== message(STATUS "[lld] option = ${IGC_OPTION__LLVM_LLD}") if(IGC_OPTION__LLVM_LLD) include(igc_find_liblldELF) endif() # ==================================== SPIRV-LLVM-Translator package =================================== if(IGC_OPTION__LINK_KHRONOS_SPIRV_TRANSLATOR) include(igc_spirv) endif() # ==================================== WrapperLLVM package ============================================= add_subdirectory(WrapperLLVM) igc_sg_define(IGC__WrapperLLVM) include_directories("${CMAKE_CURRENT_SOURCE_DIR}/WrapperLLVM/include") # ======================================== Include directories ========================================= include_directories( "${IGC_CODEGEN_DIR}" "${IGC_BUILD__IGC_SRC_DIR}" "${IGC_BUILD__IGC_COMMON_DIR}" "${IGC_BUILD__GFX_DEV_SRC_DIR}" "${IGC_BUILD__COMMON_DIR}" "${IGC_BUILD__3D_COMMON_DIR}" "${IGC_BUILD__INC_DIR}" "${IGC_BUILD__INC_DIR}/common" "${IGC_BUILD__COMMON_COMPILER_DIR}" "${IGC_BUILD__COMMON_COMPILER_DIR}/API" "${IGC_BUILD__VISA_DIR}/include" "${IGC_OPTION__OUTPUT_DIR}" "${IGC_BUILD__IGC_BIN_DIR}/${IGC_CMAKE_CFG_INTDIR}" "${IGC_BUILD__IGC_SRC_DIR}/AdaptorOCL/ocl_igc_shared/executable_format" "${IGC_BUILD__IGC_SRC_DIR}/AdaptorOCL" "${IGC_BUILD__IGC_BIN_DIR}/AdaptorOCL/ocl_igc_interface/impl" "${IGC_BUILD__IGC_SRC_DIR}/Options" "${IGC_BUILD__IGC_SRC_DIR}/Options/include" "${CMAKE_CURRENT_BINARY_DIR}/Options/include" ) include_directories( "${IGC_BUILD__COMMON_COMPILER_DIR}/common" ) include_directories( "${CIF_INCLUDE_DIR}" ) if(LLVM_ON_WIN32) include_directories( "${IGC_BUILD__COMMON_COMPILER_DIR}/adapters/d3d9/api" "${IGC_BUILD__COMMON_COMPILER_DIR}/adapters/d3d9" "${IGC_BUILD__COMMON_COMPILER_DIR}/adapters/d3d10/API" ) endif() if (WIN32) include_directories( "${CMAKE_CURRENT_SOURCE_DIR}/../../../SPIRV-LLVM-Translator_${IGC_OPTION__LLVM_PREFERRED_VERSION}/include" "${CMAKE_CURRENT_SOURCE_DIR}/../../../SPIRV-LLVM-Translator_${IGC_OPTION__LLVM_PREFERRED_VERSION}/lib/SPIRV" "${CMAKE_CURRENT_SOURCE_DIR}/../../../SPIRV-LLVM-Translator_${IGC_OPTION__LLVM_PREFERRED_VERSION}/lib/SPIRV/Mangler" ) endif (WIN32) if (NOT WIN32) include_directories( "${CMAKE_CURRENT_SOURCE_DIR}/../../../SPIRV-LLVM-Translator/include" "${CMAKE_CURRENT_SOURCE_DIR}/../../../SPIRV-LLVM-Translator/lib/SPIRV" "${CMAKE_CURRENT_SOURCE_DIR}/../../../SPIRV-LLVM-Translator/lib/SPIRV/Mangler" ) endif (NOT WIN32) # ==================================== ZE Binary Writer ================================================ add_subdirectory(ZEBinWriter/zebin) include_directories("${CMAKE_CURRENT_SOURCE_DIR}/ZEBinWriter/zebin/source") set(ZEBIN_INCLUDE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/ZEBinWriter/zebin/source/autogen") include_directories("${ZEBIN_INCLUDE_PATH}") add_subdirectory(PCH) # ===================================== Projects and source groups ===================================== # Suffixes of main projects. # __igc_common - contains sources/headers/resources/settings common for all main projects (see list below). # __igc_dll - dynamic library for IGC. # __igc_lib - static library for IGC. # Static libraries are only used for some tools. # NOTE: Due to limitation of Windows resources and exports cannot be passed # easily from static library to dynamic. For resources, please use set(IGC_BUILD__MAIN_IGC_LIB_SUFFIXES "__igc_dll" ) set(IGC_BUILD__PROJ__igc_dll "${IGC_BUILD__PROJ_NAME_PREFIX}${IGC_LIBRARY_NAME}_dll") set(ENV{igc_dll} "${IGC_BUILD__PROJ__igc_dll}") set(IGC_BUILD__PROJ_LABEL__igc_dll "${IGC_BUILD__PROJ__igc_dll}") if(UNIX) set(IGC_BUILD__PROJ_SYMBOL_SCRIPT_NAME "igc_create_linker_script.sh") set(IGC_BUILD__PROJ_SYMBOL_SCRIPT_FULL_PATH ${CMAKE_CURRENT_SOURCE_DIR}/Scripts/${IGC_BUILD__PROJ_SYMBOL_SCRIPT_NAME}) set(IGC_BUILD__PROJ_SYMBOL_SCRIPT_COPY_PATH ${CMAKE_CURRENT_SOURCE_DIR}/${IGC_BUILD__PROJ_SYMBOL_SCRIPT_NAME}) set(IGC_BUILD__PROJ_LINKER_SCRIPT_NAME igc_symbols.ld) set(IGC_BUILD__PROJ_LINKER_SCRIPT_FULL_PATH ${CMAKE_CURRENT_SOURCE_DIR}/${IGC_BUILD__PROJ_LINKER_SCRIPT_NAME}) set(IGC_BUILD__PROJ_BIF_LIBRARY_NAME "null") set(IGC_BUILD__PROJ_DX10_LIBRARY_NAME "null") set(IGC_BUILD__PROJ_DXIL_LIBRARY_NAME "null") set(IGC_BUILD__PROJ_VULKAN_FE_LIBRARY_NAME "null") endif() #FCL set(IGC_BUILD__PROJ__fcl_dll "${IGC_BUILD__PROJ_NAME_PREFIX}fcl_dll") set(IGC_BUILD__PROJ_LABEL__fcl_dll "${IGC_BUILD__PROJ__fcl_dll}") set(IGC_BUILD__PROJ__igc_lib "${IGC_BUILD__PROJ_NAME_PREFIX}${IGC_LIBRARY_NAME}_lib") set(IGC_BUILD__PROJ_LABEL__igc_lib "${IGC_BUILD__PROJ__igc_lib}") set(IGC_BUILD__PROJ_LABEL__GenX_IR "${IGC_BUILD__PROJ_NAME_PREFIX}vISA") add_subdirectory(common) igc_sg_define(IGC__common) igc_sg_define(IGC__Common_CLElfLib) set(IGC_BUILD__SPIRV_TOOLS_ENABLED ON) if(IGC_BUILD__SPIRV_TOOLS_ENABLED) include("${IGC_SOURCE_DIR}/../external/SPIRV-Tools/CMakeLists.txt") include_directories("${IGC_BUILD__SPIRV-Headers_DIR}/include") include_directories("${IGC_BUILD__SPIRV-Tools_DIR}/include") add_compile_definitions("$<$:IGC_SPIRV_TOOLS_ENABLED>") add_compile_definitions("$<$:IGC_SPIRV_TOOLS_ENABLED>") igc_sg_define(IGC__SPIRV-Tools) if(NOT TARGET ${IGC_BUILD__PROJ__SPIRV-Tools}) message(FATAL_ERROR "Error while adding SPIR-V Tools project. Please make sure ${IGC_BUILD__SPIRV-Tools_DIR} is present.") endif() endif() add_subdirectory(GenISAIntrinsics) add_subdirectory(Options) if(LLVM_ON_WIN32) add_subdirectory(AdaptorOCL) igc_sg_define(IGC__AdaptorOCL) endif() if(FCL_ENABLED) include(igc_find_opencl_clang) endif() if(IGC_BUILD__VC_ENABLED) add_subdirectory(CMFE) endif() if (FCL_ENABLED) # Built-in Functions (and resources). if(IGC_OPTION__BIF_LINK_BC) add_subdirectory(BiFModule) add_subdirectory(BiFManager) endif() add_subdirectory(OCLFE) endif() if(IGC_BUILD__VC_ENABLED) set(IGC_BUILD__CMLIT_ENABLE_DEFAULT OFF) if(IGC_OPTION__ENABLE_LIT_TESTS AND LLVM_ON_UNIX) set(IGC_BUILD__CMLIT_ENABLE_DEFAULT ON) endif() set(IGC_BUILD__CMLIT_ENABLE ${IGC_BUILD__CMLIT_ENABLE_DEFAULT} CACHE BOOL "Whether VC lit testing is enabled") if(IGC_BUILD__CMLIT_ENABLE) # Path to llvm-opt and llvm lib built with LLVM_LINK_LLVM_DYLIB option # Required to load vc-be plugin in opt set(IGC_BUILD__CMOPT_DEFAULT_DIR ${IGC_BUILD__GFX_DEV_SRC_DIR}/../cmc/cm-opt/llvm-${LLVM_VERSION_MAJOR}) set(IGC_BUILD__CMOPT_DIR ${IGC_BUILD__CMOPT_DEFAULT_DIR} CACHE PATH "Path to opt utility for VC lit testing") message(STATUS "VC LIT tests enabled. Opt in ${IGC_BUILD__CMOPT_DIR}") endif() add_subdirectory(VectorCompiler) endif() add_subdirectory(Compiler) add_subdirectory(DebugInfo) add_subdirectory(DriverInterface) igc_sg_define(IGC__DriverInterface) igc_sg_define(IGC__LivenessUtils) add_subdirectory(VISALinkerDriver) ### Will add this glue later as we start transitioning igc to new repo ### #if(MSVC) # set(IGC2_SRC_ORIG ${BS_DIR_EXTERNAL_COMPONENTS}/igc2) # set(IGC2_WORKSPACE ${CMAKE_CURRENT_BINARY_DIR}/../igc2) # message(STATUS "[IGC2] igc2 dll will be built from sources") # message(STATUS "[IGC2] Copying igc2 sources ${IGC2_SRC_ORIG} to ${IGC2_WORKSPACE}") # message("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++") # message("^^^^^********^^^^^^$$$$$$$$$$^^^^^^^^^^^^^^^^&&&&&&&&&&&^^^^^^^^^&&&&&&&&") # if(NOT EXISTS "${IGC2_WORKSPACE}") # execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory ${IGC2_SRC_ORIG} ${IGC2_WORKSPACE}) # endif() # add_subdirectory(${IGC2_WORKSPACE} ${IGC2_WORKSPACE}/bin) #endif() igc_sg_define(IGC__VISALinkerDriver) if(MSVC) set(IGC_BUILD__RES__IGC__igc_common "${CMAKE_CURRENT_SOURCE_DIR}/igc.rc" ) igc_rc_register_resource(IGC__igc_dll RESOURCES DriverInterface__igc_dll FILE "${IGC_BUILD__RES__IGC__igc_common}") # [WA#2] igc_rc_get_resource(IGC_BUILD__RES__IGC__igc_dll IGC__igc_dll) # Static libraries on Windows cannot pass resources to final libraries. source_group("Resources" FILES ${IGC_BUILD__RES__IGC__igc_dll} ) endif() # Sources/headers for main libraries. set(IGC_BUILD__SRC__IGC__igc_common ${IGC_BUILD__SRC__IGC_AdaptorOCL} ${IGC_BUILD__SRC__IGC_common} ${IGC_BUILD__SRC__IGC_Common_CLElfLib} ) set(IGC_BUILD__SRC__IGC__igc_dll ${IGC_BUILD__SRC__IGC__igc_common} ${IGC_BUILD__SRC__IGC_DriverInterface__igc_dll} ) set(IGC_BUILD__SRC__IGC__igc_lib ${IGC_BUILD__SRC__IGC__igc_dll}) set(IGC_BUILD__HDR__IGC__igc_common ${IGC_BUILD__HDR__IGC_AdaptorOCL} # currently empty ${IGC_BUILD__HDR__IGC_common} ${IGC_BUILD__HDR__IGC_Common_CLElfLib} ) set(IGC_BUILD__HDR__IGC__igc_dll ${IGC_BUILD__HDR__IGC__igc_common} ${IGC_BUILD__HDR__IGC_DriverInterface__igc_dll} ${IGC_WrapperLLVM_HDR} ) if (FCL_ENABLED) #FCL set(IGC_BUILD__SRC__IGC__fcl_dll ${IGC_BUILD__SRC__FCL} ) set(IGC_BUILD__HDR__IGC__fcl_dll ${IGC_BUILD__HDR__FCL} ) set(IGC_BUILD__RES__IGC__fcl_dll ${IGC_BUILD__RES__FCL} ) add_library("${IGC_BUILD__PROJ__fcl_dll}" SHARED ${IGC_BUILD__SRC__IGC__fcl_dll} ${IGC_BUILD__HDR__IGC__fcl_dll} ${IGC_BUILD__RES__IGC__fcl_dll} ) set_target_properties("${IGC_BUILD__PROJ__fcl_dll}" PROPERTIES FOLDER "Libraries") add_dependencies("${IGC_BUILD__PROJ__fcl_dll}" opencl-clang-lib) endif() set(IGC_BUILD__HDR__IGC__igc_lib ${IGC_BUILD__HDR__IGC__igc_dll} ) # Main library targets (library names). add_library("${IGC_BUILD__PROJ__igc_dll}" SHARED ${IGC_BUILD__SRC__IGC__igc_dll} ${IGC_BUILD__HDR__IGC__igc_dll} ${IGC_BUILD__RES__IGC__igc_dll} ) target_compile_definitions(${IGC_BUILD__PROJ__igc_dll} PRIVATE VER_ORIGINALNAME="$") if(UNIX) #Copying script to current directory to elevate permissions - replaces file if already exists file( COPY ${IGC_BUILD__PROJ_SYMBOL_SCRIPT_FULL_PATH} FILE_PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ DESTINATION ${CMAKE_CURRENT_SOURCE_DIR} ) if(TARGET ${IGC_BUILD__PROJ__AdaptorDx10}) set(IGC_BUILD__PROJ_DX10_LIBRARY_NAME "$") endif() if(TARGET ${IGC_BUILD__PROJ__AdaptorDXIL}) set(IGC_BUILD__PROJ_DXIL_LIBRARY_NAME "$") endif() if(TARGET ${IGC_BUILD__PROJ__BiFLib_OCL}) set(IGC_BUILD__PROJ_BIF_LIBRARY_NAME "$") endif() if(TARGET ${IGC_BUILD__PROJ__VulkanFrontend}) set(IGC_BUILD__PROJ_VULKAN_FE_LIBRARY_NAME "$") endif() add_custom_command( TARGET "${IGC_BUILD__PROJ__igc_dll}" PRE_LINK COMMAND ${IGC_BUILD__PROJ_SYMBOL_SCRIPT_COPY_PATH} ${IGC_BUILD__PROJ_LINKER_SCRIPT_NAME} ${IGC_BUILD__PROJ_BIF_LIBRARY_NAME} ${IGC_BUILD__PROJ_DX10_LIBRARY_NAME} ${IGC_BUILD__PROJ_DXIL_LIBRARY_NAME} ${IGC_BUILD__PROJ_VULKAN_FE_LIBRARY_NAME} $ -- COMMAND_EXPAND_LISTS COMMENT "Creating linker script for custom symbol exporting" ) #Using just created linker script from add_custom_command target_link_libraries("${IGC_BUILD__PROJ__igc_dll}" PRIVATE -Wl,--version-script="${IGC_BUILD__PROJ_LINKER_SCRIPT_FULL_PATH}") endif() if(IGC_OPTION__LINK_KHRONOS_SPIRV_TRANSLATOR) target_link_libraries("${IGC_BUILD__PROJ__igc_dll}" PRIVATE LLVMSPIRVLib) endif() if(IGC_BUILD__LLVM_SOURCES AND IGC_OPTION__LLVM_LLD) if(UNIX) if(NOT ${CMAKE_BUILD_TYPE} EQUAL "Release") add_dependencies("${IGC_BUILD__PROJ__igc_dll}" lld) endif() else() add_dependencies("${IGC_BUILD__PROJ__igc_dll}" lld) endif() endif() target_include_directories(${IGC_BUILD__PROJ__igc_dll} INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/AdaptorOCL/ocl_igc_shared" "${CMAKE_CURRENT_SOURCE_DIR}/AdaptorOCL/ocl_igc_shared/device_enqueue" "${CMAKE_CURRENT_SOURCE_DIR}/AdaptorOCL/ocl_igc_shared/executable_format" "${CMAKE_CURRENT_SOURCE_DIR}/AdaptorOCL/cif" "${CMAKE_CURRENT_SOURCE_DIR}/AdaptorOCL/" "${CMAKE_CURRENT_SOURCE_DIR}/" "${IGC_BUILD__IGC_BIN_DIR}/AdaptorOCL/" ) #IGC_DLL igc_target_flag_property_add_once_config_var("${IGC_BUILD__PROJ__igc_dll}" LINK_FLAGS IGC_BUILD__EXPORT_SYMBOLS_LINK_FLAGS) set_property(TARGET "${IGC_BUILD__PROJ__igc_dll}" PROPERTY PROJECT_LABEL "${IGC_BUILD__PROJ_LABEL__igc_dll}") if (FCL_ENABLED) #FCL #igc_target_flag_property_add_once_config_var("${IGC_BUILD__PROJ__fcl_dll}" LINK_FLAGS IGC_BUILD__EXPORT_SYMBOLS_LINK_FLAGS) set_property(TARGET "${IGC_BUILD__PROJ__fcl_dll}" PROPERTY PROJECT_LABEL "${IGC_BUILD__PROJ_LABEL__fcl_dll}") endif() #Set Universal properties if this is universal build if(MSVC AND IGC_OPTION__UNIVERSAL_DRIVER) bs_set_wdk(${IGC_BUILD__PROJ__igc_dll}) set_target_properties(${IGC_BUILD__PROJ__igc_dll} PROPERTIES VS_PLATFORM_TOOLSET WindowsApplicationForDrivers10.0) set_target_properties(${IGC_BUILD__PROJ__igc_dll} PROPERTIES VS_GLOBAL_DriverTargetPlatform Universal) set_target_properties(${IGC_BUILD__PROJ__igc_dll} PROPERTIES VS_TARGET_PLATFORM_VERSION "") windows_libs_props_universal(${IGC_BUILD__PROJ__igc_dll}) bs_set_wdk(${IGC_BUILD__PROJ__fcl_dll}) set_target_properties(${IGC_BUILD__PROJ__fcl_dll} PROPERTIES VS_PLATFORM_TOOLSET WindowsApplicationForDrivers10.0) set_target_properties(${IGC_BUILD__PROJ__fcl_dll} PROPERTIES VS_GLOBAL_DriverTargetPlatform Universal) set_target_properties(${IGC_BUILD__PROJ__fcl_dll} PROPERTIES VS_TARGET_PLATFORM_VERSION "") windows_libs_props_universal(${IGC_BUILD__PROJ__fcl_dll}) endif() if(IGC_OPTION__BUILD_IGC_OPT OR IGC_OPTION__INCLUDE_IGC_COMPILER_TOOLS) # NOTE: Remember to always pass resources when linking with static library. # Use igc_rc_get_resource() with resource identifier like IGC__igc_lib # Also use IGC_BUILD__LINK_LINE__igc_lib variable to get target_link_libraries()'s line which # links igc_lib correctly (with correct resolve of circular dependencies). add_library("${IGC_BUILD__PROJ__igc_lib}" STATIC ${IGC_BUILD__SRC__IGC__igc_lib} ${IGC_BUILD__HDR__IGC__igc_lib} ) set_target_properties("${IGC_BUILD__PROJ__igc_lib}" PROPERTIES FOLDER "Libraries") if(IGC_OPTION__LINK_KHRONOS_SPIRV_TRANSLATOR) target_link_libraries("${IGC_BUILD__PROJ__igc_lib}" PRIVATE LLVMSPIRVLib) endif() if(MSVC) bs_set_wdk(${IGC_BUILD__PROJ__igc_lib}) windows_libs_props_universal(${IGC_BUILD__PROJ__igc_lib}) endif() set_property(TARGET "${IGC_BUILD__PROJ__igc_lib}" PROPERTY PROJECT_LABEL "${IGC_BUILD__PROJ_LABEL__igc_lib}") set_property(TARGET "${IGC_BUILD__PROJ__igc_lib}" PROPERTY EXCLUDE_FROM_ALL YES) set(IGC_BUILD__MAIN_IGC_LIB_SUFFIXES ${IGC_BUILD__MAIN_IGC_LIB_SUFFIXES} "__igc_lib" ) endif() # Output names. if(LLVM_ON_UNIX) set(_cpuSuffix "") else() igc_arch_get_cpu(_cpuSuffix) endif() set_target_properties("${IGC_BUILD__PROJ__igc_dll}" PROPERTIES OUTPUT_NAME "${IGC_LIBRARY_NAME}${_cpuSuffix}") set_target_properties("${IGC_BUILD__PROJ__igc_dll}" PROPERTIES VERSION "${IGC_API_MAJOR_VERSION}.${IGC_API_MINOR_VERSION}.${IGC_API_PATCH_VERSION}+${IGC_BUILD_METADATA}" SOVERSION "${IGC_API_MAJOR_VERSION}") unset(_cpuSuffix) if (FCL_ENABLED) #FCL if(LLVM_ON_UNIX) set(_cpuSuffix "") else() igc_arch_get_cpu(_cpuSuffix) endif() set_target_properties("${IGC_BUILD__PROJ__fcl_dll}" PROPERTIES OUTPUT_NAME "${FCL_LIBRARY_NAME}${_cpuSuffix}") set_target_properties("${IGC_BUILD__PROJ__fcl_dll}" PROPERTIES VERSION "${IGC_API_MAJOR_VERSION}.${IGC_API_MINOR_VERSION}.${IGC_API_PATCH_VERSION}+${IGC_BUILD_METADATA}" SOVERSION "${IGC_API_MAJOR_VERSION}") unset(_cpuSuffix) endif() # Injecting external vISA project. add_subdirectory("${IGC_BUILD__VISA_DIR}" visa) set_property(TARGET "GenX_IR" APPEND PROPERTY COMPILE_DEFINITIONS ${IGC_BUID__VISA_COMPILE_DEFINITIONS} ) set_property(TARGET "GenX_IR" PROPERTY PROJECT_LABEL "${IGC_BUILD__PROJ_LABEL__GenX_IR}") # =================================== Link targets and dependencies ==================================== foreach(_libBuildSuffix ${IGC_BUILD__MAIN_IGC_LIB_SUFFIXES}) add_dependencies("${IGC_BUILD__PROJ${_libBuildSuffix}}" "${IGC_BUILD__PROJ__GenISAIntrinsics}") add_dependencies("${IGC_BUILD__PROJ${_libBuildSuffix}}" MDAutogen) if(MSVC AND IGC_OPTION__BIF_LINK_BC) add_dependencies("${IGC_BUILD__PROJ${_libBuildSuffix}}" "${IGC_BUILD__PROJ__BiFModule_OCL}") add_dependencies("${IGC_BUILD__PROJ${_libBuildSuffix}}" "${IGC_BUILD__PROJ__BiFModuleCache_OCL}") add_dependencies("${IGC_BUILD__PROJ${_libBuildSuffix}}" "${IGC_BUILD__PROJ__BiFManager}") endif() endforeach() if (FCL_ENABLED) #FCL add_dependencies("${IGC_BUILD__PROJ__fcl_dll}" "${IGC_BUILD__PROJ__BiFModule_OCL}") add_dependencies("${IGC_BUILD__PROJ__fcl_dll}" "${IGC_BUILD__PROJ__BiFManager}") endif() foreach(_libBuildSuffix ${IGC_BUILD__MAIN_IGC_LIB_SUFFIXES}) get_property(_targetType TARGET "${IGC_BUILD__PROJ${_libBuildSuffix}}" PROPERTY TYPE) if(_targetType MATCHES "^STATIC_LIBRARY$") set(_targetIsStatic YES) else() set(_targetIsStatic NO) endif() unset(_targetType) # list of libraries linked in all configurations set(_targetLinkLineCommon) # Generated link line for IGC static library allows to properly use it in other projects. if(_targetIsStatic) list(APPEND _targetLinkLineCommon "${IGC_BUILD__PROJ${_libBuildSuffix}}" ) endif() if(LLVM_ON_WIN32) list(APPEND _targetLinkLineCommon "${IGC_BUILD__PROJ__AdaptorOCL}" ) endif() list(APPEND _targetLinkLineCommon zebinlib) list(APPEND _targetLinkLineCommon IGCOptions) list(APPEND _targetLinkLineCommon "${IGC_BUILD__PROJ__VISALinkerDriver}") list(APPEND _targetLinkLineCommon "${IGC_BUILD__PROJ__BiFManager}" ) if(IGC_BUILD__SPIRV_TOOLS_ENABLED) list(APPEND _targetLinkLineCommon "$<$:${IGC_BUILD__PROJ__SPIRV-Tools}>" "$<$:${IGC_BUILD__PROJ__SPIRV-Tools}>" ) endif() list(APPEND _targetLinkLineCommon "${IGC_BUILD__PROJ__Compiler}" "${IGC_BUILD__PROJ__GenISAIntrinsics}" GenX_IR GenXDebugInfo ) if(LLVM_ON_UNIX AND IGC_OPTION__BIF_LINK_BC) list(APPEND _targetLinkLineCommon "${IGC_BUILD__WHOLE_ARCHIVE}" "${IGC_BUILD__PROJ__BiFLib_OCL}" "${IGC_BUILD__NO_WHOLE_ARCHIVE}" ) endif() # Generated link line for IGC static library allows to properly use it in other projects. if(_targetIsStatic) list(APPEND _targetLinkLineCommon "${IGC_BUILD__PROJ${_libBuildSuffix}}" ) endif() if(IGC_BUILD__VC_ENABLED) list(APPEND _targetLinkLineCommon ${IGC_BUILD__PROJ_VC_LIBS_TO_LINK} ) if(_targetIsStatic) # Add some VC headers for static library manually since there is # no private target_link_libraries for static igc library and # include directories are not propagated. target_link_libraries("${IGC_BUILD__PROJ${_libBuildSuffix}}" PRIVATE VCHeaders ) get_target_property(VC_IGCDEPS_HEADERS VCIGCDeps INTERFACE_INCLUDE_DIRECTORIES) target_include_directories("${IGC_BUILD__PROJ${_libBuildSuffix}}" PRIVATE ${VC_IGCDEPS_HEADERS} ) endif() endif() list(APPEND _targetLinkLineCommon "${IGC_BUILD__START_GROUP}" ${IGC_BUILD__LLVM_LIBS_TO_LINK} "${IGC_BUILD__END_GROUP}" ) if(UNIX) list(APPEND _targetLinkLineCommon pthread ) endif() if(UNIX) list(APPEND _targetLinkLineCommon -Wl,--exclude-libs,liblldELF.a ) endif() if(_targetIsStatic) # Link line for projects that use IGC as static library (allows to resolve multi-circular dependencies between libraries). set("IGC_BUILD__LINK_LINE_RELEASE${_libBuildSuffix}" ${_targetLinkLineCommon} ) else() target_link_libraries("${IGC_BUILD__PROJ${_libBuildSuffix}}" PRIVATE "${_targetLinkLineCommon}" "${CMAKE_DL_LIBS}" ) # Android binary needs to link static libstdc++ and liblog if(ANDROID) find_package(Threads REQUIRED) target_link_libraries("${IGC_BUILD__PROJ${_libBuildSuffix}}" PRIVATE Threads::Threads -static-libstdc++ -llog) endif() # Link line for shared / dynamic library requires only library project (all static libs are linked inside). set_property(TARGET "${IGC_BUILD__PROJ${_libBuildSuffix}}" PROPERTY LINK_INTERFACE_LIBRARIES "") set("IGC_BUILD__LINK_LINE${_libBuildSuffix}" "${IGC_BUILD__PROJ${_libBuildSuffix}}" ) endif() endforeach() if (FCL_ENABLED AND IGC_OPTION__BIF_LINK_BC) # Built-in Functions (and resources). target_link_libraries("${IGC_BUILD__PROJ__Compiler}" "${IGC_BUILD__PROJ__BiFManager}") add_dependencies("${IGC_BUILD__PROJ__Compiler}" "${IGC_BUILD__PROJ__BiFManager}") endif() include(igc_pch_reuse) if (FCL_ENABLED) #FCL get_property(_targetType TARGET "${IGC_BUILD__PROJ__fcl_dll}" PROPERTY TYPE) if(_targetType MATCHES "^STATIC_LIBRARY$") set(_targetIsStatic YES) else() set(_targetIsStatic NO) endif() unset(_targetType) set(_targetLinkLine) list(APPEND _targetLinkLine IGCOptions) # Generated link line for IGC/IGC RS static library allows to properly use it in other projects. if(_targetIsStatic) list(APPEND _targetLinkLine "${IGC_BUILD__PROJ${_libBuildSuffix}}" ) endif() # Generated link line for IGC/IGC RS static library allows to properly use it in other projects. if(_targetIsStatic) list(APPEND _targetLinkLine "${IGC_BUILD__PROJ__fcl_dll}" ) endif() if(LLVM_ON_UNIX) list(APPEND _targetLinkLine "${IGC_BUILD__WHOLE_ARCHIVE}" "${IGC_BUILD__PROJ__CTHLib_FCL}" "${IGC_BUILD__NO_WHOLE_ARCHIVE}" ) endif() list(APPEND _targetLinkLine "${IGC_BUILD__START_GROUP}" ${IGC_BUILD__LLVM_LIBS_TO_LINK} "${IGC_BUILD__END_GROUP}" ) list(REMOVE_ITEM _targetLinkLine IGC_BUILD__LLVM_LIBS_TO_LINK ) if(_targetIsStatic) # Link line for projects that use IGC as static library (allows to resolve multi-circular dependencies between libraries). set("IGC_BUILD__LINK_LINE__fcl_dll" ${_targetLinkLine} ) else() if (UNIX) set(COMMON_CLANG opencl-clang-lib) else() set(COMMON_CLANG "") endif() target_link_libraries("${IGC_BUILD__PROJ__fcl_dll}" ${_targetLinkLine} ${COMMON_CLANG} ${CMAKE_DL_LIBS} ) if(IGC_BUILD__VC_ENABLED) target_link_libraries("${IGC_BUILD__PROJ__fcl_dll}" AdaptorCM) endif() # Link line for shared / dynamic library requires only library project (all static libs are linked inside). set_property(TARGET "${IGC_BUILD__PROJ__fcl_dll}" PROPERTY LINK_INTERFACE_LIBRARIES "") set("IGC_BUILD__LINK_LINE__fcl_dll" "${IGC_BUILD__PROJ__fcl_dll}" ) endif() unset(_targetIsStatic) unset(_targetLinkLine) endif() #FCL_ENABLED if (IGC_OPTION__BUILD_IGC_OPT) add_subdirectory(igc_opt) endif() if(IGC_OPTION__INCLUDE_IGC_COMPILER_TOOLS) # TODO: If we want IGCStandalone on Linux, someone must clean the code, so it will be compiling. if(LLVM_ON_UNIX) add_subdirectory("${IGC_BUILD__TOOLS_IGC_DIR}" tools) endif() if(LLVM_ON_WIN32) add_subdirectory("${IGC_BUILD__TOOLS_IGC_DIR}" ist) endif() endif() if(MSVC AND IGC_OPTION__BUILD_IGC_OPT) add_custom_command( TARGET ${IGC_BUILD__PROJ__igc_dll} POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy "$" "$" COMMAND "${CMAKE_COMMAND}" -E copy "$" "$" ) endif() # ============================================== LIT TESTS ============================================= if(DEFINED IGC_BUILD__PROJ__igc_opt AND TARGET ${IGC_BUILD__PROJ__igc_opt}) add_subdirectory(Compiler/tests) endif() # ============================================ VC LIT TESTS ============================================= # If VC LITs are enabled, we need main target depend from it if(IGC_BUILD__CMLIT_ENABLE) add_dependencies("${IGC_BUILD__PROJ__igc_dll}" "check-vc") endif() if(IGC_OPTION__ENABLE_OCLOC_LIT_TESTS) add_subdirectory(ocloc_tests) endif() # ====================================================================================================== # Workaround for MSVS10 to avoid the "Dialog Hell" # NOTE: This could be removed with future version of CMake. if(MSVC_VERSION EQUAL 1600) set(IGC_SLN_FILENAME "${CMAKE_CURRENT_BINARY_DIR}/IGC.sln") if (EXISTS "${IGC_SLN_FILENAME}") file(APPEND "${IGC_SLN_FILENAME}" "\n# This should be regenerated!\n") endif (EXISTS "${IGC_SLN_FILENAME}") endif() ######################################################################## # cpack to create deb package ######################################################################## set(IGC_PC_PACKAGE_RELEASE "") if(DEFINED IGC_BUILD_METADATA) set(IGC_PC_PACKAGE_RELEASE "-${IGC_BUILD_METADATA}") endif() include(cmake/igc_version.cmake) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/AdaptorOCL/igc.opencl.h.in ${IGC_BUILD__IGC_BIN_DIR}/AdaptorOCL/igc.opencl.h) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/AdaptorOCL/igc-opencl.pc.in ${IGC_BUILD__IGC_BIN_DIR}/AdaptorOCL/igc-opencl.pc @ONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/AdaptorOCL/ocl_igc_interface/impl/version_in.h ${IGC_BUILD__IGC_BIN_DIR}/AdaptorOCL/ocl_igc_interface/impl/version.h) if(UNIX) install(TARGETS ${IGC_BUILD__PROJ__igc_dll} LIBRARY DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR} COMPONENT igc-core NAMELINK_SKIP) install(TARGETS ${IGC_BUILD__PROJ__igc_dll} LIBRARY DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR} COMPONENT igc-core-devel NAMELINK_ONLY) if (FCL_ENABLED) install(TARGETS ${IGC_BUILD__PROJ__fcl_dll} LIBRARY DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR} COMPONENT igc-opencl NAMELINK_SKIP) install(TARGETS ${IGC_BUILD__PROJ__fcl_dll} LIBRARY DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR} COMPONENT igc-opencl-devel NAMELINK_ONLY) endif() install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/AdaptorOCL/ocl_igc_shared DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR}/igc COMPONENT igc-opencl-devel) install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/AdaptorOCL/ocl_igc_interface DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR}/igc COMPONENT igc-opencl-devel) install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/AdaptorOCL/OCLAPI DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR}/igc COMPONENT igc-opencl-devel) install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/AdaptorOCL/cif DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR}/igc COMPONENT igc-opencl-devel) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/common/StateSaveAreaHeader.h DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR}/igc/common COMPONENT igc-opencl-devel) if(IGC_BUILD__LLVM_SOURCES AND IGC_OPTION__LLVM_LLD) # For now lld could be included only via building from LLVM sources if(NOT ${CMAKE_BUILD_TYPE} EQUAL "Release") install(TARGETS lld RUNTIME DESTINATION ${CMAKE_INSTALL_FULL_BINDIR} COMPONENT igc-opencl-devel) endif() endif() install( CODE "file( WRITE ${CMAKE_CURRENT_BINARY_DIR}/tmp/postinst \"/sbin/ldconfig\n\" )" CODE "file( WRITE ${CMAKE_CURRENT_BINARY_DIR}/tmp/postrm \"/sbin/ldconfig\n\" )" CODE "file( COPY ${CMAKE_CURRENT_BINARY_DIR}/tmp/postinst DESTINATION ${CMAKE_CURRENT_BINARY_DIR} FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE )" CODE "file( COPY ${CMAKE_CURRENT_BINARY_DIR}/tmp/postrm DESTINATION ${CMAKE_CURRENT_BINARY_DIR} FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE )" COMPONENT igc-core ) install(FILES ${IGC_BUILD__IGC_BIN_DIR}/AdaptorOCL/igc-opencl.pc DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}/pkgconfig COMPONENT igc-opencl-devel) install(FILES ${IGC_BUILD__IGC_BIN_DIR}/AdaptorOCL/igc.opencl.h DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR}/igc COMPONENT igc-opencl-devel) if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../NOTICES.txt) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../NOTICES.txt DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}/igc2 COMPONENT igc-core) endif() install(FILES ${IGC_BUILD__VISA_DIR}/include/RelocationInfo.h DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR}/visa COMPONENT igc-opencl-devel) install(DIRECTORY ${IGC_BUILD__VISA_DIR}/iga/IGALibrary/api/ DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR}/iga COMPONENT igc-core-devel FILES_MATCHING PATTERN "*.h*") install(FILES ${ZEBIN_INCLUDE_PATH}/../ZEELF.h DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR}/igc/zebin COMPONENT igc-core-devel) elseif (WIN32) install(TARGETS ${IGC_BUILD__PROJ__igc_dll} RUNTIME DESTINATION Release/bin CONFIGURATIONS Release) install(TARGETS ${IGC_BUILD__PROJ__igc_dll} RUNTIME DESTINATION Debug/bin CONFIGURATIONS Debug) install(FILES $ DESTINATION Release/pdb CONFIGURATIONS Release) install(FILES $ DESTINATION Debug/pdb CONFIGURATIONS Debug) if(CMAKE_SIZEOF_VOID_P EQUAL 8) # Only copy 64 build if(IGC_BUILD__LLVM_SOURCES AND IGC_OPTION__LLVM_LLD) # For now lld could be included only via building from LLVM sources install(TARGETS lld RUNTIME DESTINATION ../Test_Tools/Release/x64/Standalones CONFIGURATIONS Release) install(TARGETS lld RUNTIME DESTINATION ../Test_Tools/Debug/x64/Standalones CONFIGURATIONS Debug) endif() install(TARGETS ${IGC_BUILD__PROJ__igc_dll} RUNTIME DESTINATION ../Test_Tools/Release/x64/Standalones CONFIGURATIONS Release) install(TARGETS ${IGC_BUILD__PROJ__igc_dll} RUNTIME DESTINATION ../Test_Tools/Debug/x64/Standalones CONFIGURATIONS Debug) endif(CMAKE_SIZEOF_VOID_P EQUAL 8) if (FCL_ENABLED) install(TARGETS ${IGC_BUILD__PROJ__fcl_dll} RUNTIME DESTINATION Release/bin CONFIGURATIONS Release) install(TARGETS ${IGC_BUILD__PROJ__fcl_dll} RUNTIME DESTINATION Debug/bin CONFIGURATIONS Debug) install(FILES $ DESTINATION Release/pdb CONFIGURATIONS Release) install(FILES $ DESTINATION Debug/pdb CONFIGURATIONS Debug) endif() endif() if(UNIX) if(IGC_OPTION__CPACK_GENERATOR) set(CPACK_GENERATOR "${IGC_OPTION__CPACK_GENERATOR}") else() # If generators list was not defined build native package for current distro if(EXISTS "/etc/debian_version") set(CPACK_GENERATOR "DEB") elseif(EXISTS "/etc/redhat-release") set(CPACK_GENERATOR "RPM") else() set(CPACK_GENERATOR "TXZ") set(CPACK_SET_DESTDIR ON) endif() endif() # Architecture-related options if("${IGC_OPTION__ARCHITECTURE_TARGET}" STREQUAL "LinuxARM") set(CPACK_PACKAGE_ARCHITECTURE "arm64") set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "arm64") set(CPACK_RPM_PACKAGE_ARCHITECTURE "arm64") else() set(CPACK_PACKAGE_ARCHITECTURE "x86_64") set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64") set(CPACK_RPM_PACKAGE_ARCHITECTURE "x86_64") endif() set(CPACK_DEBIAN_PACKAGE_MAINTAINER "intel") set(CPACK_PACKAGE_NAME "intel") set(CPACK_PACKAGE_VERSION_MAJOR ${IGC_API_MAJOR_VERSION}) set(CPACK_PACKAGE_VERSION_MINOR ${IGC_API_MINOR_VERSION}) set(CPACK_PACKAGE_VERSION_PATCH ${IGC_API_PATCH_VERSION}) set(CPACK_PACKAGE_VERSION_BUILD ${IGC_BUILD_METADATA}) # Check if current build is a release build # # If build is a release build the version string will be MAJOR.MINOR.PATCH+RELEASE_METADATA # Else the version string becomes MAJOR.MINOR.PATCH-dev.BUILD_METADATA if(DEFINED IGC_RELEASE_METADATA AND NOT IGC_RELEASE_METADATA STREQUAL "") set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") set(PACKAGE_VERSION_WTH_METADATA "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}+${IGC_RELEASE_METADATA}") else() set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}-dev.${CPACK_PACKAGE_VERSION_BUILD}") set(PACKAGE_VERSION_WTH_METADATA "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}-dev.${CPACK_PACKAGE_VERSION_BUILD}") endif() set(CPACK_PACKAGE_INSTALL_DIRECTORY ${IGC_INSTALL_TIME_ROOT_DIR}) set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "postinst;postrm") set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "Intel(R) Graphics Compiler for OpenCL(TM)\nBase revision: ${IGC_BUILD_METADATA+IGC_RELEASE_METADATA}") set(CPACK_RPM_PACKAGE_DESCRIPTION "Intel(R) Graphics Compiler for OpenCL(TM)\nBase revision: ${IGC_BUILD_METADATA+IGC_RELEASE_METADATA}") set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) set(CPACK_RPM_PACKAGE_RELOCATABLE TRUE) set(CPACK_DEBIAN_IGC-CORE_FILE_NAME "intel-igc-core-2_${PACKAGE_VERSION_WTH_METADATA}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb") set(CPACK_DEBIAN_IGC-CORE_PACKAGE_NAME "intel-igc-core-2") set(CPACK_DEBIAN_IGC-CORE-DEVEL_FILE_NAME "intel-igc-core-devel_${PACKAGE_VERSION_WTH_METADATA}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb") set(CPACK_DEBIAN_IGC-CORE-DEVEL_PACKAGE_NAME "intel-igc-core-devel") set(CPACK_DEBIAN_IGC-CORE-DEVEL_PACKAGE_DEPENDS "intel-igc-core-2(=${CPACK_PACKAGE_VERSION})") set(CPACK_DEBIAN_IGC-OPENCL_FILE_NAME "intel-igc-opencl-2_${PACKAGE_VERSION_WTH_METADATA}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb") set(CPACK_DEBIAN_IGC-OPENCL_PACKAGE_NAME "intel-igc-opencl-2") set(CPACK_DEBIAN_IGC-OPENCL_PACKAGE_DEPENDS "intel-igc-core-2(=${CPACK_PACKAGE_VERSION})") set(CPACK_DEBIAN_IGC-OPENCL-DEVEL_FILE_NAME "intel-igc-opencl-devel_${PACKAGE_VERSION_WTH_METADATA}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb") set(CPACK_DEBIAN_IGC-OPENCL-DEVEL_PACKAGE_DEPENDS "intel-igc-opencl-2(=${CPACK_PACKAGE_VERSION})") set(CPACK_RPM_IGC-CORE_FILE_NAME "intel-igc-core-2-${PACKAGE_VERSION_WTH_METADATA}.${CPACK_RPM_PACKAGE_ARCHITECTURE}.rpm") set(CPACK_RPM_IGC-CORE-DEVEL_FILE_NAME "intel-igc-core-devel_${PACKAGE_VERSION_WTH_METADATA}_${CPACK_RPM_PACKAGE_ARCHITECTURE}.rpm") set(CPACK_RPM_IGC-CORE-DEVEL_PACKAGE_NAME "intel-igc-core-devel") set(CPACK_RPM_IGC-CORE-DEVEL_PACKAGE_REQUIRES "intel-igc-core-2 = ${CPACK_PACKAGE_VERSION}") set(CPACK_RPM_IGC-CORE_PACKAGE_NAME "intel-igc-core-2") set(CPACK_RPM_IGC-OPENCL_FILE_NAME "intel-igc-opencl-2-${PACKAGE_VERSION_WTH_METADATA}.${CPACK_RPM_PACKAGE_ARCHITECTURE}.rpm") set(CPACK_RPM_IGC-OPENCL_PACKAGE_NAME "intel-igc-opencl-2") set(CPACK_RPM_IGC-OPENCL_PACKAGE_REQUIRES "intel-igc-core-2 = ${CPACK_PACKAGE_VERSION}") set(CPACK_RPM_IGC-OPENCL-DEVEL_FILE_NAME "intel-igc-opencl-devel-${PACKAGE_VERSION_WTH_METADATA}.${CPACK_RPM_PACKAGE_ARCHITECTURE}.rpm") set(CPACK_RPM_IGC-OPENCL-DEVEL_PACKAGE_REQUIRES "intel-igc-opencl-2 = ${CPACK_PACKAGE_VERSION}}") set(CPACK_ARCHIVE_IGC-CORE_FILE_NAME "intel-igc-core-2-${PACKAGE_VERSION_WTH_METADATA}.${CPACK_PACKAGE_ARCHITECTURE}") set(CPACK_ARCHIVE_IGC-OPENCL_FILE_NAME "intel-igc-opencl-2-${PACKAGE_VERSION_WTH_METADATA}.${CPACK_PACKAGE_ARCHITECTURE}") set(CPACK_ARCHIVE_IGC-OPENCL-DEVEL_FILE_NAME "intel-igc-opencl-devel-${PACKAGE_VERSION_WTH_METADATA}.${CPACK_PACKAGE_ARCHITECTURE}") set(CPACK_ARCHIVE_IGC-CORE-DEVEL_FILE_NAME "intel-igc-core-devel-${PACKAGE_VERSION_WTH_METADATA}.${CPACK_PACKAGE_ARCHITECTURE}") # Create separate debug symbol packages if the CMake/CPack version in use # provides stable support for that functionality. if (NOT CMAKE_VERSION VERSION_LESS 3.20) set(CPACK_DEBIAN_DEBUGINFO_PACKAGE ON) endif() set(CPACK_DEB_COMPONENT_INSTALL ON) set(CPACK_RPM_COMPONENT_INSTALL ON) set(CPACK_ARCHIVE_COMPONENT_INSTALL ON) set(CPACK_COMPONENTS_ALL igc-core igc-opencl igc-opencl-devel igc-core-devel) include (CPack) endif(UNIX)