File: llvm_utils.cmake

package info (click to toggle)
intel-graphics-compiler 1.0.12504.6-1%2Bdeb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 83,912 kB
  • sloc: cpp: 910,147; lisp: 202,655; ansic: 15,197; python: 4,025; yacc: 2,241; lex: 1,570; pascal: 244; sh: 104; makefile: 25
file content (123 lines) | stat: -rw-r--r-- 4,537 bytes parent folder | download | duplicates (3)
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()