forked from torch-spyre/dataflow-scheduler
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
148 lines (125 loc) · 4.67 KB
/
Copy pathCMakeLists.txt
File metadata and controls
148 lines (125 loc) · 4.67 KB
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
cmake_minimum_required(VERSION 3.21)
# Add custom modules to the search path.
list(PREPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
project(DataflowScheduler
VERSION 0.1
LANGUAGES C CXX
)
# Set defaults for compiler features and options.
set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to")
set(CMAKE_CXX_STANDARD_REQUIRED YES)
set(CMAKE_BUILD_WITH_INSTALL_NAME_DIR ON)
set(LLVM_LIT_ARGS "-sv" CACHE STRING "Default options for lit")
if(PROJECT_IS_TOP_LEVEL)
# Find MLIR.
find_package(MLIR REQUIRED CONFIG)
message(STATUS "Using MLIRConfig.cmake in: ${MLIR_DIR}")
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
# Load LLVM and MLIR CMake modules.
list(APPEND CMAKE_MODULE_PATH "${MLIR_CMAKE_DIR}")
list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}")
include(TableGen)
include(AddLLVM)
include(AddMLIR)
include(HandleLLVMOptions)
# Apply target properties for LLVM/MLIR globally.
include_directories(SYSTEM ${LLVM_INCLUDE_DIRS})
include_directories(SYSTEM ${MLIR_INCLUDE_DIRS})
link_directories(${LLVM_BUILD_LIBRARY_DIR})
add_definitions(${LLVM_DEFINITIONS})
# Set shared output directories.
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
set(LLVM_LIBRARY_OUTPUT_INTDIR ${PROJECT_BINARY_DIR}/lib)
set(LLVM_RUNTIME_OUTPUT_INTDIR ${PROJECT_BINARY_DIR}/bin)
# Set up RPATH for installed distribution.
include(GNUInstallDirs)
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH YES)
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
endif()
#
# Configure options
#
option(DataflowScheduler_ENABLE_PYTHON_BINDINGS "Build Python bindings" NO)
option(DataflowScheduler_BUILD_TOOLS "Build tool executables" ${PROJECT_IS_TOP_LEVEL})
option(DataflowScheduler_ENABLE_WERROR "Treat compiler warnings as errors (-Werror)" YES)
#
# Umbrella targets
#
# Build all CAPI libraries.
add_custom_target(dataflow-scheduler-capi)
# Build all documentation targets.
add_custom_target(dataflow-scheduler-doc)
# Build all generated include targets.
add_custom_target(dataflow-scheduler-headers)
if(NOT TARGET check-all)
# Run all regression tests.
add_custom_target(check-all)
endif()
#
# Derived variables
#
# Handle linking against LLVM/MLIR shared library.
if(TARGET MLIR AND NOT DEFINED MLIR_LINK_MLIR_DYLIB)
# As a workaround for MLIRConfig.cmake not exporting this variable, we will
# infer that it is set if the DSO target exists.
set(MLIR_LINK_MLIR_DYLIB YES)
endif()
if(LLVM_LINK_LLVM_DYLIB)
get_target_property(_llvm_dso LLVM LOCATION)
message(STATUS "Linking against: ${_llvm_dso}")
endif()
if(MLIR_LINK_MLIR_DYLIB)
get_target_property(_mlir_dso MLIR LOCATION)
message(STATUS "Linking against: ${_mlir_dso}")
endif()
# Handle building combined Python bindings.
if(DataflowScheduler_ENABLE_PYTHON_BINDINGS)
set(MLIR_ENABLE_BINDINGS_PYTHON ON)
set(KTIR_ENABLE_PYTHON_BINDINGS ON)
set(DataflowSchedulerDialects_ENABLE_PYTHON_BINDINGS ON)
include(MLIRDetectPythonEnv)
mlir_configure_python_dev_packages()
if(NOT DEFINED MLIR_PYTHON_PACKAGE_PREFIX)
set(MLIR_PYTHON_PACKAGE_PREFIX "mlir_scheduler" CACHE STRING "" FORCE)
endif()
if(NOT DEFINED MLIR_BINDINGS_PYTHON_NB_DOMAIN)
set(MLIR_BINDINGS_PYTHON_NB_DOMAIN "mlir_scheduler" CACHE STRING "" FORCE)
endif()
if(NOT DEFINED MLIR_BINDINGS_PYTHON_INSTALL_PREFIX)
set(MLIR_BINDINGS_PYTHON_INSTALL_PREFIX
"python_packages/scheduler/${MLIR_PYTHON_PACKAGE_PREFIX}"
CACHE STRING "" FORCE
)
endif()
endif()
add_subdirectory(external)
add_dependencies(dataflow-scheduler-headers dataflow-scheduler-dialects-headers ktir-headers)
add_dependencies(dataflow-scheduler-doc dataflow-scheduler-dialects-doc ktir-doc)
# Treat warnings as errors for all first-party sources. This block is
# intentionally placed after add_subdirectory(external) so that the flag is
# not applied to third-party submodules.
if(DataflowScheduler_ENABLE_WERROR)
add_compile_options(-Werror)
message(STATUS "DataflowScheduler: -Werror enabled for first-party sources")
endif()
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_VISIBILITY_INLINES_HIDDEN YES)
# Include DataflowScheduler CMake module.
set(DataflowScheduler_INCLUDE_DIRS
${PROJECT_SOURCE_DIR}/include
${PROJECT_BINARY_DIR}/include
CACHE STRING "" FORCE
)
include(AddDataflowScheduler)
include(clang-format)
add_subdirectory(include)
add_subdirectory(lib)
if(DataflowScheduler_ENABLE_PYTHON_BINDINGS)
add_subdirectory(python)
endif()
add_subdirectory(test)
add_subdirectory(tools)
# Install instructions, these must come last so that all properties are set.
add_subdirectory(cmake)