1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
#=========================== begin_copyright_notice ============================
#
# Copyright (C) 2018-2021 Intel Corporation
#
# SPDX-License-Identifier: MIT
#
#============================ end_copyright_notice =============================
include_guard(DIRECTORY)
#
# Macro to set python interpreter for LLVM
#
macro(llvm_utils_python_set proj_name)
# If cached PYTHON_EXECUTABLE already exists save it to restore.
get_property(PYTHON_EXECUTABLE_BACKUP CACHE PYTHON_EXECUTABLE PROPERTY VALUE)
# Set python interpreter for LLVM.
set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE} CACHE PATH "" FORCE)
message(STATUS "[${proj_name}] PYTHON_EXECUTABLE = ${PYTHON_EXECUTABLE}")
endmacro()
#
# Macro to restore python interpreter
#
macro(llvm_utils_python_restore)
if(PYTHON_EXECUTABLE_BACKUP)
# Restore python interpreter.
set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE_BACKUP} CACHE PATH "" FORCE)
else()
# Clear python interpreter from LLVM.
unset(PYTHON_EXECUTABLE CACHE)
endif()
endmacro()
#
# Macro to clear build flags that already set
#
macro(llvm_utils_push_build_flags proj_name)
message(STATUS "[${proj_name}] Clearing build system compilation flags")
unset(CMAKE_C_FLAGS)
unset(CMAKE_CXX_FLAGS)
unset(CMAKE_SHARED_LINKER_FLAGS)
unset(CMAKE_EXE_LINKER_FLAGS)
unset(CMAKE_STATIC_LINKER_FLAGS)
unset(CMAKE_LOCAL_LINKER_FLAGS)
unset(CMAKE_MODULE_LINKER_FLAGS)
foreach(configuration_type ${CMAKE_CONFIGURATION_TYPES} ${CMAKE_BUILD_TYPE})
string(TOUPPER ${configuration_type} capitalized_configuration_type)
unset(CMAKE_C_FLAGS_${capitalized_configuration_type})
unset(CMAKE_CXX_FLAGS_${capitalized_configuration_type})
unset(CMAKE_SHARED_LINKER_FLAGS_${capitalized_configuration_type})
unset(CMAKE_EXE_LINKER_FLAGS_${capitalized_configuration_type})
unset(CMAKE_STATIC_LINKER_FLAGS_${capitalized_configuration_type})
unset(CMAKE_MODULE_LINKER_FLAGS_${capitalized_configuration_type})
endforeach()
endmacro()
# Helper macro to be called from project preparation cmakes.
# It will set correct flags and other variables for LLVM-based projects.
# Parameters:
# proj_name -- project name
# src_dir -- source directory that contains project
# bin_dir -- binary directory for project
macro(build_llvm_project proj_name src_dir bin_dir)
# Do not alter LLVM compilation flags -- clear them all.
llvm_utils_push_build_flags(${proj_name})
llvm_utils_python_set(${proj_name})
add_subdirectory(${src_dir} ${bin_dir} EXCLUDE_FROM_ALL)
llvm_utils_python_restore()
endmacro()
# Convenience macro to set option and record its value in list.
macro(set_llvm_opt opt)
set(${opt} ${ARGN})
list(APPEND LLVM_OPTIONS "-D${opt}=${${opt}}")
endmacro()
# Helper macro to register LLVM external project.
# proj -- project to register
# source_dir -- sources of project
# RELATIVE_TO_LLVM -- whether project is located in LLVM-project tree
macro(register_llvm_external_project proj source_dir)
cmake_parse_arguments(ARG "RELATIVE_TO_LLVM" "" "" ${ARGN})
if(ARG_RELATIVE_TO_LLVM)
set_property(GLOBAL APPEND PROPERTY IGC_LLVM_PROJECT_${proj}_RELATIVE YES)
endif()
set_property(GLOBAL APPEND PROPERTY IGC_LLVM_PROJECTS ${proj})
set_property(GLOBAL PROPERTY IGC_LLVM_PROJECT_${proj}_DIR ${source_dir})
endmacro()
# Get registered projects.
macro(get_llvm_external_projects out)
get_property(${out} GLOBAL PROPERTY IGC_LLVM_PROJECTS)
endmacro()
# Get source dir for LLVM project.
# proj -- project to get directory for
# out -- output variable
# BASE_DIR dir -- if project is RELATIVE_TO_LLVM then use "dir" as a base
macro(get_llvm_external_project_dir proj out)
cmake_parse_arguments(ARG "" "BASE_DIR" "" ${ARGN})
get_property(${out} GLOBAL PROPERTY IGC_LLVM_PROJECT_${proj}_DIR)
get_property(is_rel GLOBAL PROPERTY IGC_LLVM_PROJECT_${proj}_RELATIVE)
if(is_rel AND ARG_BASE_DIR)
get_filename_component(${out} ${${out}} ABSOLUTE BASE_DIR ${ARG_BASE_DIR})
endif()
endmacro()
# Helper function to define and check build mode variable for project.
# proj_name -- name of project to print in messages.
# var -- output variable that should be defined.
macro(llvm_define_mode_variable proj_name var)
set(SOURCE_MODE_NAME "Source")
set(PREBUILDS_MODE_NAME "Prebuilds")
if(${var} AND NOT (${var} MATCHES "^(${SOURCE_MODE_NAME}|${PREBUILDS_MODE_NAME})$"))
message(FATAL_ERROR "${proj_name} mode can be only ${SOURCE_MODE_NAME}, ${PREBUILDS_MODE_NAME} or empty!")
endif()
endmacro()
|