forked from onnx/onnx-mlir
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CMakeLists.txt
99 lines (83 loc) · 3.72 KB
/
CMakeLists.txt
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
# SPDX-License-Identifier: Apache-2.0
# Match the minimum required version of LLVM and MLIR
cmake_minimum_required(VERSION 3.13.4)
project(onnx-mlir)
set(CMAKE_CXX_STANDARD 14)
if (NOT CMAKE_BUILD_TYPE)
message(STATUS "No build type selected, default to Debug")
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Build type (default Debug)" FORCE)
endif()
# CMP0116: Ninja generators transform `DEPFILE`s from `add_custom_command()`
# New in CMake 3.20. https://cmake.org/cmake/help/latest/policy/CMP0116.html
# Use the same setting as llvm-project
if (POLICY CMP0116)
cmake_policy(SET CMP0116 OLD)
endif()
if (MSVC)
# Disable warnings generated by onnx but treated as errors by onnx
# See: https://github.com/onnx/onnx/issues/3530
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd4125")
endif()
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/$<CONFIG>/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/$<CONFIG>/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/$<CONFIG>/bin)
set(ONNX_MLIR_SRC_ROOT ${CMAKE_CURRENT_SOURCE_DIR})
set(ONNX_MLIR_BIN_ROOT ${CMAKE_CURRENT_BINARY_DIR})
set(ONNX_MLIR_LIBRARY_PATH ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
set(ONNX_MLIR_RUNTIME_PATH ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
include(CTest)
include(MLIR.cmake)
# MLIR.cmake calls find_package(MLIR) which sets LLVM_MINIMUM_PYTHON_VERSION
find_package(Python3 ${LLVM_MINIMUM_PYTHON_VERSION} REQUIRED COMPONENTS Interpreter Development)
# Don't require AWT to allow headless JDK to reduce docker image size
set(JAVA_AWT_INCLUDE_PATH headless)
set(JAVA_AWT_LIBRARY headless)
find_package(Java COMPONENTS Development)
find_package(JNI)
if (Java_Development_FOUND AND JNI_FOUND)
set(ONNX_MLIR_ENABLE_JNI TRUE)
include(UseJava)
else()
set(ONNX_MLIR_ENABLE_JNI FALSE)
message(WARNING "Java Development component or JNI not found, JNI targets will not work")
endif()
# The onnx build on windows requires the provision of either static or shared libs for protobuf
# and to achieve that there are several different flags that need to be set in protobuf, onnx
# as well as cmake (for find_package). At the very minimum ONNX_USE_PROTOBUF_SHARED_LIBS and
# Protobuf_USE_STATIC_LIBS need to be opposites of each other, but onnx does not currently set them
# up that way (onnx doesn't set Protobuf_USE_STATIC_LIBS at all and cmake interprets that as setting
# Protobuf_USE_STATIC_LIBS to OFF). If/when onnx is updated to correctly set up both variables,
# this can be removed (see https://github.com/onnx/onnx/issues/3345).
# We are setting CMP0077 to NEW here, so that onnx does not override our regular variables for
# protobuf when the project is included below.
if (POLICY CMP0077)
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
endif (POLICY CMP0077)
if (NOT DEFINED ONNX_USE_PROTOBUF_SHARED_LIBS AND NOT DEFINED Protobuf_USE_STATIC_LIBS)
set(ONNX_USE_PROTOBUF_SHARED_LIBS OFF)
set(Protobuf_USE_STATIC_LIBS ON)
elseif (NOT DEFINED Protobuf_USE_STATIC_LIBS)
if (ONNX_USE_PROTOBUF_SHARED_LIBS)
set(Protobuf_USE_STATIC_LIBS OFF)
else()
set(Protobuf_USE_STATIC_LIBS ON)
endif()
elseif (NOT DEFINED ONNX_USE_PROTOBUF_SHARED_LIBS)
if (Protobuf_USE_STATIC_LIBS)
set(ONNX_USE_PROTOBUF_SHARED_LIBS OFF)
else()
set(ONNX_USE_PROTOBUF_SHARED_LIBS ON)
endif()
elseif ((ONNX_USE_PROTOBUF_SHARED_LIBS AND Protobuf_USE_STATIC_LIBS)
OR (NOT ONNX_USE_PROTOBUF_SHARED_LIBS AND NOT Protobuf_USE_STATIC_LIBS))
message(FATAL_ERROR
"ONNX_USE_PROTOBUF_SHARED_LIBS and Protobuf_USE_STATIC_LIBS must be opposites of each other.")
endif()
add_subdirectory(third_party/onnx)
add_subdirectory(third_party/pybind11)
add_subdirectory(third_party/rapidcheck)
add_subdirectory(utils)
add_subdirectory(include)
add_subdirectory(src)
add_subdirectory(docs)
add_subdirectory(test)