172 lines
4.9 KiB
CMake
172 lines
4.9 KiB
CMake
# Flags to link with LLVM/MLIR libraries
|
|
|
|
# Path to LLVM source folder.
|
|
if(DEFINED ENV{LLVM_SRC})
|
|
set(LLVM_SRC $ENV{LLVM_SRC})
|
|
if(EXISTS ${LLVM_SRC})
|
|
message(STATUS "LLVM_SRC " ${LLVM_SRC})
|
|
else()
|
|
message(
|
|
FATAL_ERROR "The path specified by LLVM_SRC does not exist: "
|
|
${LLVM_SRC})
|
|
endif()
|
|
else()
|
|
message(FATAL_ERROR "env variable LLVM_SRC not set")
|
|
endif()
|
|
|
|
# Path to LLVM build folder
|
|
if(DEFINED ENV{LLVM_BUILD})
|
|
set(LLVM_BUILD $ENV{LLVM_BUILD})
|
|
if(EXISTS ${LLVM_BUILD})
|
|
message(STATUS "LLVM_BUILD " ${LLVM_BUILD})
|
|
else()
|
|
message(
|
|
FATAL_ERROR "The path specified by LLVM_BUILD does not exist: "
|
|
${LLVM_BUILD})
|
|
endif()
|
|
else()
|
|
message(FATAL_ERROR "env variable LLVM_BUILD not set")
|
|
endif()
|
|
|
|
# LLVM project lib folder
|
|
set(LLVM_PROJECT_LIB ${LLVM_BUILD}/lib)
|
|
|
|
# Include paths for MLIR
|
|
set(LLVM_SRC_INCLUDE_PATH ${LLVM_SRC}/include)
|
|
set(LLVM_BIN_INCLUDE_PATH ${LLVM_BUILD}/include)
|
|
set(MLIR_SRC_INCLUDE_PATH ${LLVM_SRC}/projects/mlir/include)
|
|
set(MLIR_BIN_INCLUDE_PATH ${LLVM_BUILD}/projects/mlir/include)
|
|
|
|
set(MLIR_INCLUDE_PATHS
|
|
${LLVM_SRC_INCLUDE_PATH};${LLVM_BIN_INCLUDE_PATH};${MLIR_SRC_INCLUDE_PATH};${MLIR_BIN_INCLUDE_PATH})
|
|
include_directories(${MLIR_INCLUDE_PATHS})
|
|
|
|
find_library(MLIR_LIB_ANALYSIS
|
|
NAMES MLIRAnalysis
|
|
PATHS ${LLVM_PROJECT_LIB}
|
|
NO_DEFAULT_PATH)
|
|
|
|
find_library(MLIR_LIB_IR NAMES MLIRIR PATHS ${LLVM_PROJECT_LIB} NO_DEFAULT_PATH)
|
|
|
|
find_library(MLIR_LIB_PARSER
|
|
NAMES MLIRParser
|
|
PATHS ${LLVM_PROJECT_LIB}
|
|
NO_DEFAULT_PATH)
|
|
|
|
find_library(MLIR_LIB_PASS
|
|
NAMES MLIRPass
|
|
PATHS ${LLVM_PROJECT_LIB}
|
|
NO_DEFAULT_PATH)
|
|
|
|
find_library(MLIR_LIB_TRANSFORMS
|
|
NAMES MLIRTransforms
|
|
PATHS ${LLVM_PROJECT_LIB}
|
|
NO_DEFAULT_PATH)
|
|
|
|
find_library(MLIR_LIB_VECTOR_OPS
|
|
NAMES MLIRVectorOps
|
|
PATHS ${LLVM_PROJECT_LIB}
|
|
NO_DEFAULT_PATH)
|
|
|
|
find_library(MLIR_LIB_SUPPORT
|
|
NAMES MLIRSupport
|
|
PATHS ${LLVM_PROJECT_LIB}
|
|
NO_DEFAULT_PATH)
|
|
|
|
find_library(MLIR_LIB_STANDARD_OPS
|
|
NAMES MLIRStandardOps
|
|
PATHS ${LLVM_PROJECT_LIB}
|
|
NO_DEFAULT_PATH)
|
|
|
|
find_library(MLIR_LIB_OPT_MAIN
|
|
NAMES MLIROptMain
|
|
PATHS ${LLVM_PROJECT_LIB}
|
|
NO_DEFAULT_PATH)
|
|
|
|
find_library(MLIR_LLVM_IR
|
|
NAMES MLIRLLVMIR
|
|
PATHS ${LLVM_PROJECT_LIB}
|
|
NO_DEFAULT_PATH)
|
|
|
|
find_library(MLIR_LIB_TRANSFORM_UTILS
|
|
NAMES MLIRTransformUtils
|
|
PATHS ${LLVM_PROJECT_LIB}
|
|
NO_DEFAULT_PATH)
|
|
|
|
find_library(LLVM_LIB_SUPPORT
|
|
NAMES LLVMSupport
|
|
PATHS ${LLVM_PROJECT_LIB}
|
|
NO_DEFAULT_PATH)
|
|
|
|
# Threading libraries required due to parallel pass execution.
|
|
find_package(Threads REQUIRED)
|
|
|
|
set(MLIRLIBS
|
|
${MLIR_LIB_ANALYSIS}
|
|
${MLIR_LIB_IR}
|
|
${MLIR_LIB_PARSER}
|
|
${MLIR_LIB_PASS}
|
|
${MLIR_LIB_TRANSFORMS}
|
|
${MLIR_LIB_VECTOR_OPS}
|
|
${MLIR_LIB_STANDARD_OPS}
|
|
${MLIR_LIB_OPT_MAIN}
|
|
${MLIR_LIB_SUPPORT}
|
|
${MLIR_LIB_TRANSFORM_UTILS}
|
|
|
|
${MLIR_LIB_ANALYSIS}
|
|
${MLIR_LIB_IR}
|
|
${MLIR_LIB_PARSER}
|
|
${MLIR_LIB_PASS}
|
|
${MLIR_LIB_TRANSFORMS}
|
|
${MLIR_LIB_VECTOR_OPS}
|
|
${MLIR_LIB_STANDARD_OPS}
|
|
${MLIR_LIB_OPT_MAIN}
|
|
${MLIR_LIB_SUPPORT}
|
|
${MLIR_LIB_TRANSFORM_UTILS}
|
|
|
|
${LLVM_LIB_SUPPORT}
|
|
Threads::Threads)
|
|
|
|
function(whole_archive_link target)
|
|
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
|
|
set(link_flags "-L${LLVM_BUILD}/lib ")
|
|
FOREACH(LIB ${ARGN})
|
|
string(CONCAT link_flags ${link_flags} "-Wl,-force_load ${LLVM_BUILD}/lib/lib${LIB}.a ")
|
|
ENDFOREACH(LIB)
|
|
elseif(MSVC)
|
|
FOREACH(LIB ${ARGN})
|
|
string(CONCAT link_flags ${link_flags} "/WHOLEARCHIVE:${LIB} ")
|
|
ENDFOREACH(LIB)
|
|
else()
|
|
set(link_flags "-L${LLVM_BUILD}/lib -Wl,--whole-archive,")
|
|
FOREACH(LIB ${ARGN})
|
|
string(CONCAT link_flags ${link_flags} "-l${LIB},")
|
|
ENDFOREACH(LIB)
|
|
string(CONCAT link_flags ${link_flags} "--no-whole-archive")
|
|
endif()
|
|
set_target_properties(${target} PROPERTIES LINK_FLAGS ${link_flags})
|
|
endfunction(whole_archive_link)
|
|
|
|
# Set up TableGen environment.
|
|
include(${LLVM_BUILD}/lib/cmake/llvm/TableGen.cmake)
|
|
|
|
function(onnf_tablegen ofn)
|
|
tablegen(MLIR
|
|
${ARGV}
|
|
"-I${MLIR_SRC_INCLUDE_PATH}"
|
|
"-I${MLIR_BIN_INCLUDE_PATH}")
|
|
set(TABLEGEN_OUTPUT
|
|
${TABLEGEN_OUTPUT} ${CMAKE_CURRENT_BINARY_DIR}/${ofn}
|
|
PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
# Import the pre-built mlir TableGen as an imported exetuable. It is required by
|
|
# the LLVM TableGen command to have the TableGen target so that changes to the
|
|
# table gen utility itself can be detected and cause re-compilation of .td file.
|
|
add_executable(mlir-tblgen IMPORTED)
|
|
set_property(TARGET mlir-tblgen
|
|
PROPERTY IMPORTED_LOCATION
|
|
${LLVM_BUILD}/bin/mlir-tblgen)
|
|
set(MLIR_TABLEGEN_EXE mlir-tblgen)
|
|
|