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 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
|
#=========================== begin_copyright_notice ============================
#
# Copyright (C) 2021 Intel Corporation
#
# SPDX-License-Identifier: MIT
#
#============================ end_copyright_notice =============================
# IGC_OPTION__LLD_DIR - Specify additional directories for searching lld libraries and executables
# IGC_OPTION__LLDELF_H_DIR - Specify additional directories for searching lldELF headers
function(add_lld_library LIB_NAME)
if(WIN32)
find_library(${LIB_NAME}_PATH_RELEASE
${LIB_NAME}
PATHS "${IGC_OPTION__LLD_DIR}/Release/lib"
PATH_SUFFIXES "llvm-${LLVM_VERSION_MAJOR}/lib")
if("${${LIB_NAME}_PATH_RELEASE}" STREQUAL "${LIB_NAME}_PATH_RELEASE-NOTFOUND")
message(FATAL_ERROR
"Cannot find ${LIB_NAME} library in Release version in ${IGC_OPTION__LLD_DIR}")
endif()
find_library(${LIB_NAME}_PATH_DEBUG
${LIB_NAME}
PATHS "${IGC_OPTION__LLD_DIR}/Debug/lib"
PATH_SUFFIXES "llvm-${LLVM_VERSION_MAJOR}/lib")
if("${${LIB_NAME}_PATH_DEBUG}" STREQUAL "${LIB_NAME}_PATH_DEBUG-NOTFOUND")
message(FATAL_ERROR
"Cannot find ${LIB_NAME} library in Debug version in ${IGC_OPTION__LLD_DIR}")
endif()
add_library(${LIB_NAME} UNKNOWN IMPORTED GLOBAL)
set_target_properties(${LIB_NAME} PROPERTIES
IMPORTED_LOCATION_RELEASE "${${LIB_NAME}_PATH_RELEASE}"
IMPORTED_LOCATION_RELEASEINTERNAL "${${LIB_NAME}_PATH_RELEASE}"
IMPORTED_LOCATION_DEBUG "${${LIB_NAME}_PATH_DEBUG}"
)
else()
if(NOT DEFINED IGC_OPTION__LLDELF_LIB_DIR)
set(IGC_OPTION__LLDELF_LIB_DIR ${LLVM_ROOT})
endif()
message(STATUS "[${LIB_NAME}] searching in: ${IGC_OPTION__LLDELF_LIB_DIR}")
find_library(${LIB_NAME}_PATH
${LIB_NAME}
PATHS ${IGC_OPTION__LLDELF_LIB_DIR}
PATH_SUFFIXES "lib" "llvm-${LLVM_VERSION_MAJOR}/lib")
message(STATUS "[${LIB_NAME}] found = ${${LIB_NAME}_PATH}")
if(${LIB_NAME}_PATH-NOTFOUND)
message(FATAL_ERROR
"Cannot find ${LIB_NAME} library, please install missing library or provide the path by IGC_OPTION__LLDELF_LIB_DIR")
endif()
add_library(${LIB_NAME} UNKNOWN IMPORTED GLOBAL)
set_target_properties(${LIB_NAME} PROPERTIES IMPORTED_LOCATION ${${LIB_NAME}_PATH})
endif()
endfunction()
function(add_lld_executable EXE_NAME)
if(WIN32)
find_program(${EXE_NAME}_PATH_RELEASE
${EXE_NAME}
PATHS "${IGC_OPTION__LLD_DIR}/Release/bin"
PATH_SUFFIXES "llvm-${LLVM_VERSION_MAJOR}/bin")
if("${${EXE_NAME}_PATH_RELEASE}" STREQUAL "${EXE_NAME}_PATH_RELEASE-NOTFOUND")
message(FATAL_ERROR
"Cannot find ${EXE_NAME} executable in Release version in ${IGC_OPTION__LLD_DIR}")
endif()
find_program(${EXE_NAME}_PATH_DEBUG
${EXE_NAME}
PATHS "${IGC_OPTION__LLD_DIR}/Debug/bin"
PATH_SUFFIXES "llvm-${LLVM_VERSION_MAJOR}/bin")
if("${${EXE_NAME}_PATH_DEBUG}" STREQUAL "${EXE_NAME}_PATH_DEBUG-NOTFOUND")
message(FATAL_ERROR
"Cannot find ${EXE_NAME} executable in Debug version in ${IGC_OPTION__LLD_DIR}")
endif()
add_executable(${EXE_NAME} IMPORTED GLOBAL)
set_target_properties(${EXE_NAME} PROPERTIES
IMPORTED_LOCATION_RELEASE "${${EXE_NAME}_PATH_RELEASE}"
IMPORTED_LOCATION_RELEASEINTERNAL "${${EXE_NAME}_PATH_RELEASE}"
IMPORTED_LOCATION_DEBUG "${${EXE_NAME}_PATH_DEBUG}"
)
else()
if(NOT DEFINED IGC_OPTION__LLD_BIN_DIR)
set(IGC_OPTION__LLD_BIN_DIR ${LLVM_ROOT})
endif()
message(STATUS "[${EXE_NAME}] searching in: ${IGC_OPTION__LLD_BIN_DIR}")
find_program(${EXE_NAME}_PATH
${EXE_NAME}
PATHS ${IGC_OPTION__LLD_BIN_DIR}
PATH_SUFFIXES "bin" "llvm-${LLVM_VERSION_MAJOR}/bin")
message(STATUS "[${EXE_NAME}] found = ${${EXE_NAME}_PATH}")
if(${EXE_NAME}_PATH-NOTFOUND)
message(FATAL_ERROR "Cannot find ${EXE_NAME} executable, please install missing executable or provide the path by IGC_OPTION__LLD_BIN_DIR")
endif()
add_executable(${EXE_NAME} IMPORTED GLOBAL)
set_target_properties(${EXE_NAME} PROPERTIES IMPORTED_LOCATION ${${EXE_NAME}_PATH})
endif()
endfunction()
if(IGC_BUILD__LLVM_SOURCES)
message(STATUS "[lldELF] from sources: ${IGC_BUILD__LLVM_SOURCES}")
get_target_property(lldELF_SRC_DIR lldELF SOURCE_DIR)
set(LLD_INCLUDE_DIR "${lldELF_SRC_DIR}/../include")
elseif(IGC_BUILD__LLVM_PREBUILDS)
message(STATUS "[lldELF] from prebuilds: ${IGC_BUILD__LLVM_PREBUILDS}")
message(STATUS "[lldELF] extra dir: ${IGC_OPTION__LLD_DIR}")
add_lld_executable(lld)
add_lld_library(lldELF)
add_lld_library(lldCommon)
igc_get_llvm_targets(LLD_COMMON_LLVM_DEPS
Codegen
Core
DebugInfoDWARF
Demangle
MC
Option
Support
Target)
igc_get_llvm_targets(LLD_ELF_LLVM_DEPS
${LLVM_TARGETS_TO_BUILD}
Analysis
AsmPrinter
BinaryFormat
BitWriter
Codegen
Core
DebugInfoDWARF
Demangle
GlobalISel
LTO
MC
MCDisassembler
Object
Option
Passes
SelectionDAG
Support)
target_link_libraries(lldCommon INTERFACE
${LLD_COMMON_LLVM_DEPS})
target_link_libraries(lldELF INTERFACE
${LLD_ELF_LLVM_DEPS}
lldCommon)
if(LLVM_ENABLE_ZLIB)
find_package(ZLIB)
target_link_libraries(lldELF INTERFACE ZLIB::ZLIB)
endif()
if(NOT DEFINED IGC_OPTION__LLDELF_H_DIR)
set(IGC_OPTION__LLDELF_H_DIR ${LLVM_ROOT})
endif()
message(STATUS "[Driver.h] searching in: ${IGC_OPTION__LLDELF_H_DIR}")
find_path(
LLD_INCLUDE_DIR
NAMES "Driver.h"
PATHS ${IGC_OPTION__LLDELF_H_DIR}
PATH_SUFFIXES
"llvm-${LLVM_VERSION_MAJOR}/include/lld/Common/"
"include/lld/Common/"
)
message(STATUS "[Driver.h] found = ${LLD_INCLUDE_DIR}")
if(LLD_INCLUDE_DIR-NOTFOUND)
message(FATAL_ERROR
"Cannot find 'lld/Common/Driver.h' header, please install missing header or provide the path by IGC_OPTION__LLDELF_H_DIR")
endif()
get_filename_component(LLD_INCLUDE_DIR "${LLD_INCLUDE_DIR}/../.." ABSOLUTE)
else()
message(STATUS "[lldELF] neither source nor prebuilds.")
endif()
list(APPEND IGC_BUILD__LLVM_LIBS_TO_LINK
lldELF)
message(STATUS "[lldELF] include dir: ${LLD_INCLUDE_DIR}")
include_directories(${LLD_INCLUDE_DIR})
|