Skip to content

Commit e71debb

Browse files
authored
[circle-mlir] Introduce CMake helper for Abseil, FB, MLIR (#14660)
This will introduce CMake helper for Abseil, flatbuffers and MLIR. ONE-DCO-1.0-Signed-off-by: SaeHie Park <[email protected]>
1 parent c4b5816 commit e71debb

File tree

3 files changed

+201
-0
lines changed

3 files changed

+201
-0
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
if(NOT CIRCLE_MLIR_WORKDIR)
2+
if(NOT CIRCLE_MLIR_LOCALINST)
3+
# for local build
4+
set(ABSEIL_INST_DIR "${CMAKE_BINARY_DIR}/submodules/abseil-cpp-install")
5+
else()
6+
set(ABSEIL_INST_DIR "${CIRCLE_MLIR_LOCALINST}/abseil-cpp-install")
7+
endif()
8+
else()
9+
# for CI or with Docker build
10+
set(ABSEIL_INST_DIR "${CIRCLE_MLIR_WORKDIR}")
11+
endif()
12+
set(ABSEIL_INST_INC "${ABSEIL_INST_DIR}/include")
13+
14+
link_directories(${ABSEIL_INST_DIR}/lib)
15+
16+
add_library(abseil_cpp INTERFACE)
17+
target_include_directories(abseil_cpp INTERFACE ${ABSEIL_INST_INC})
18+
target_link_libraries(abseil_cpp INTERFACE absl_base)
19+
target_link_libraries(abseil_cpp INTERFACE absl_hash)
20+
target_link_libraries(abseil_cpp INTERFACE absl_strings)
21+
target_link_libraries(abseil_cpp INTERFACE absl_strings_internal)
22+
target_link_libraries(abseil_cpp INTERFACE absl_raw_hash_set)
23+
target_link_libraries(abseil_cpp INTERFACE absl_log_severity)
24+
target_link_libraries(abseil_cpp INTERFACE absl_low_level_hash)
25+
target_link_libraries(abseil_cpp INTERFACE absl_city)
26+
target_link_libraries(abseil_cpp INTERFACE absl_raw_logging_internal)
27+
target_link_libraries(abseil_cpp INTERFACE absl_throw_delegate)
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
if(NOT CIRCLE_MLIR_WORKDIR)
2+
if(NOT CIRCLE_MLIR_LOCALINST)
3+
set(FLATBUFFERS_INS "${CMAKE_BINARY_DIR}/submodules/flatbuffers-install")
4+
else()
5+
set(FLATBUFFERS_INS "${CIRCLE_MLIR_LOCALINST}/flatbuffers-install")
6+
endif()
7+
else()
8+
set(FLATBUFFERS_INS "${CIRCLE_MLIR_WORKDIR}")
9+
endif()
10+
11+
set(FLATC_PATH "${FLATBUFFERS_INS}/bin/flatc")
12+
13+
link_directories(${FLATBUFFERS_INS}/lib)
14+
15+
add_library(flatbuffers INTERFACE)
16+
target_include_directories(flatbuffers INTERFACE ${FLATBUFFERS_INS}/include)
17+
18+
function(FlatBuffers_Target TGT)
19+
set(oneValueArgs OUTPUT_DIR SCHEMA_DIR INCLUDE_DIR)
20+
set(multiValueArgs SCHEMA_FILES)
21+
cmake_parse_arguments(ARG "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
22+
23+
# Use OUTPUT_DIR as INCLUDE_DIR if INCLUDE_DIR is not specified
24+
if(NOT ARG_INCLUDE_DIR)
25+
set(ARG_INCLUDE_DIR ${ARG_OUTPUT_DIR})
26+
endif(NOT ARG_INCLUDE_DIR)
27+
28+
get_filename_component(abs_output_dir ${ARG_OUTPUT_DIR} ABSOLUTE)
29+
get_filename_component(abs_include_dir ${ARG_INCLUDE_DIR} ABSOLUTE)
30+
get_filename_component(abs_schema_dir ${ARG_SCHEMA_DIR} ABSOLUTE)
31+
32+
# Let's reset list variables before using them
33+
# NOTE THIS DOES NOT AFFECT parent scope
34+
unset(SCHEMA_FILES)
35+
unset(OUTPUT_FILES)
36+
37+
foreach(schema ${ARG_SCHEMA_FILES})
38+
get_filename_component(schema_fn "${schema}" NAME)
39+
get_filename_component(dir "${schema}" DIRECTORY)
40+
41+
get_filename_component(schema_fn_we "${schema_fn}" NAME_WE)
42+
43+
list(APPEND SCHEMA_FILES "${abs_schema_dir}/${schema}")
44+
list(APPEND OUTPUT_FILES "${abs_output_dir}/${schema_fn_we}_generated.h")
45+
endforeach()
46+
47+
# Generate headers
48+
add_custom_command(OUTPUT ${OUTPUT_FILES}
49+
COMMAND ${CMAKE_COMMAND} -E make_directory "${abs_output_dir}"
50+
COMMAND "${FLATC_PATH}" -c --no-includes
51+
--no-union-value-namespacing
52+
--gen-mutable
53+
--gen-object-api -o "${abs_output_dir}"
54+
${SCHEMA_FILES}
55+
DEPENDS ${SCHEMA_FILES}
56+
COMMENT "Generate '${TGT}' headers")
57+
58+
# NOTE This header-only library is deliberately declared as STATIC library
59+
# to avoid possible scope issues related with generated files
60+
add_library(${TGT} STATIC ${OUTPUT_FILES})
61+
set_target_properties(${TGT} PROPERTIES LINKER_LANGUAGE CXX)
62+
target_include_directories(${TGT} PUBLIC "${ARG_INCLUDE_DIR}")
63+
target_link_libraries(${TGT} PUBLIC flatbuffers)
64+
endfunction(FlatBuffers_Target)

circle-mlir/infra/cmake/UseMLIR.cmake

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
if(NOT CIRCLE_MLIR_WORKDIR)
2+
if(NOT CIRCLE_MLIR_LOCALINST)
3+
# for local build
4+
set(LLVM_INST_DIR "${CMAKE_BINARY_DIR}/submodules/llvm-project-install")
5+
set(ONNXMLIR_SRC "${CMAKE_SOURCE_DIR}/submodules/onnx-mlir")
6+
set(ONNXMLIR_BLD "${CMAKE_BINARY_DIR}/submodules/onnx-mlir-build")
7+
set(ONNXMLIR_INS "${CMAKE_BINARY_DIR}/submodules/onnx-mlir-install")
8+
set(PROTOBUF_INS "${CMAKE_BINARY_DIR}/submodules/protobuf-install")
9+
else()
10+
set(LLVM_INST_DIR "${CIRCLE_MLIR_LOCALINST}/llvm-project-install")
11+
set(ONNXMLIR_SRC "${CMAKE_SOURCE_DIR}/submodules/onnx-mlir")
12+
set(ONNXMLIR_BLD "${CIRCLE_MLIR_LOCALINST}/onnx-mlir-build")
13+
set(ONNXMLIR_INS "${CIRCLE_MLIR_LOCALINST}/onnx-mlir-install")
14+
set(PROTOBUF_INS "${CIRCLE_MLIR_LOCALINST}/protobuf-install")
15+
endif()
16+
else()
17+
# for CI or with Docker build
18+
set(LLVM_INST_DIR "${CIRCLE_MLIR_WORKDIR}")
19+
set(ONNXMLIR_SRC "${CIRCLE_MLIR_WORKDIR}/onnx-mlir")
20+
set(ONNXMLIR_BLD "${CIRCLE_MLIR_WORKDIR}/onnx-mlir-build")
21+
set(ONNXMLIR_INS "${CIRCLE_MLIR_WORKDIR}")
22+
set(PROTOBUF_INS "/usr/local")
23+
message(STATUS "LLVM_INST_DIR is set to ${LLVM_INST_DIR}")
24+
endif()
25+
set(LLVM_INST_INC "${LLVM_INST_DIR}/include")
26+
27+
set(LLVM_DIR "${LLVM_INST_DIR}/lib/cmake/llvm")
28+
set(MLIR_DIR "${LLVM_INST_DIR}/lib/cmake/mlir")
29+
find_package(LLVM REQUIRED CONFIG)
30+
find_package(MLIR REQUIRED CONFIG)
31+
32+
list(APPEND CMAKE_MODULE_PATH ${LLVM_DIR})
33+
list(APPEND CMAKE_MODULE_PATH ${MLIR_DIR})
34+
include(AddLLVM)
35+
include(AddMLIR)
36+
include(TableGen)
37+
38+
# call to use MLIR
39+
macro(cir_mlir_static_flags TARGET_LIB)
40+
llvm_update_compile_flags(${TARGET_LIB})
41+
target_include_directories(${TARGET_LIB} PUBLIC ${LLVM_INST_INC})
42+
target_link_directories(${TARGET_LIB} PUBLIC ${LLVM_INST_DIR}/lib)
43+
target_link_libraries(${TARGET_LIB} PUBLIC MLIRIR)
44+
target_link_libraries(${TARGET_LIB} PUBLIC MLIRDialect)
45+
target_link_libraries(${TARGET_LIB} PUBLIC MLIRAffineDialect)
46+
target_link_libraries(${TARGET_LIB} PUBLIC MLIRFuncDialect)
47+
target_link_libraries(${TARGET_LIB} PUBLIC MLIRLinalgDialect)
48+
target_link_libraries(${TARGET_LIB} PUBLIC MLIRLLVMDialect)
49+
target_link_libraries(${TARGET_LIB} PUBLIC MLIRMathDialect)
50+
target_link_libraries(${TARGET_LIB} PUBLIC MLIRMemRefDialect)
51+
target_link_libraries(${TARGET_LIB} PUBLIC MLIRSCFDialect)
52+
target_link_libraries(${TARGET_LIB} PUBLIC MLIRShapeDialect)
53+
target_link_libraries(${TARGET_LIB} PUBLIC MLIRQuantDialect)
54+
target_link_libraries(${TARGET_LIB} PUBLIC MLIRVectorDialect)
55+
target_link_libraries(${TARGET_LIB} PUBLIC MLIRDialectUtils)
56+
target_link_libraries(${TARGET_LIB} PUBLIC MLIROptLib)
57+
target_link_libraries(${TARGET_LIB} PUBLIC MLIRSupport)
58+
target_link_libraries(${TARGET_LIB} PUBLIC MLIRLLVMCommonConversion)
59+
target_link_libraries(${TARGET_LIB} PUBLIC MLIRAffineUtils)
60+
endmacro(cir_mlir_static_flags)
61+
62+
# call to use ONNX-MLIR
63+
macro(cir_onnx_static_flags TARGET_LIB)
64+
target_include_directories(${TARGET_LIB} PRIVATE ${ONNXMLIR_SRC})
65+
target_include_directories(${TARGET_LIB} PRIVATE ${ONNXMLIR_BLD})
66+
target_link_directories(${TARGET_LIB} PUBLIC ${ONNXMLIR_INS}/lib)
67+
target_link_libraries(${TARGET_LIB} PUBLIC OMKrnlOps)
68+
target_link_libraries(${TARGET_LIB} PUBLIC OMONNXOps)
69+
target_link_libraries(${TARGET_LIB} PUBLIC OMMlirDialects)
70+
target_link_libraries(${TARGET_LIB} PUBLIC OMDiagnostic)
71+
target_link_libraries(${TARGET_LIB} PUBLIC OMSupport)
72+
target_link_libraries(${TARGET_LIB} PUBLIC OMMlirUtilities)
73+
target_link_libraries(${TARGET_LIB} PUBLIC OMShapeInferencePass)
74+
target_link_libraries(${TARGET_LIB} PUBLIC OMShapeInference)
75+
target_link_libraries(${TARGET_LIB} PUBLIC OMShapeInferenceOpInterface)
76+
target_link_libraries(${TARGET_LIB} PUBLIC OMShapeHelperOpInterface)
77+
target_link_libraries(${TARGET_LIB} PUBLIC OMONNXRewrite)
78+
target_link_libraries(${TARGET_LIB} PUBLIC OMONNXElementsAttr)
79+
target_link_libraries(${TARGET_LIB} PUBLIC OMTensorUtils)
80+
target_link_libraries(${TARGET_LIB} PUBLIC OMONNXStandardFuncReturnPass)
81+
endmacro(cir_onnx_static_flags)
82+
83+
macro(cir_onnx_tools_flags TARGET_LIB)
84+
# NOTE ONNX_ML definition is used to build onnx-mlir and needed to match
85+
# related header files
86+
target_compile_definitions(${TARGET_LIB} PRIVATE "ONNX_ML=1")
87+
target_include_directories(${TARGET_LIB} PRIVATE ${ONNXMLIR_SRC}/include)
88+
target_include_directories(${TARGET_LIB} PRIVATE ${ONNXMLIR_INS}/include)
89+
target_include_directories(${TARGET_LIB} PRIVATE ${PROTOBUF_INS}/include)
90+
target_link_libraries(${TARGET_LIB} PUBLIC OMCompilerOptions)
91+
target_link_libraries(${TARGET_LIB} PUBLIC OMBuilder)
92+
target_link_libraries(${TARGET_LIB} PUBLIC OMAccelerator)
93+
target_link_libraries(${TARGET_LIB} PUBLIC OMHasOnnxSubgraphOpInterface)
94+
target_link_libraries(${TARGET_LIB} PUBLIC OMResultTypeInferenceOpInterface)
95+
target_link_libraries(${TARGET_LIB} PUBLIC onnx)
96+
target_link_libraries(${TARGET_LIB} PUBLIC onnx_proto)
97+
target_link_directories(${TARGET_LIB} PUBLIC ${PROTOBUF_INS}/lib)
98+
# force static link with protobuf library. this will simplify version mismatch
99+
# with different Ubuntu versions and building Debian package.
100+
target_link_libraries(${TARGET_LIB} PUBLIC libprotobuf.a)
101+
endmacro(cir_onnx_tools_flags)
102+
103+
# call to use MLIR TableGen
104+
macro(cir_mlir_tablegen_flags TARGET_LIB)
105+
llvm_update_compile_flags(${TARGET_LIB})
106+
target_include_directories(${TARGET_LIB} PUBLIC ${LLVM_INST_INC})
107+
target_link_libraries(${TARGET_LIB} PUBLIC LLVMSupport)
108+
target_link_libraries(${TARGET_LIB} PUBLIC LLVMTableGen)
109+
target_link_libraries(${TARGET_LIB} PUBLIC MLIRTableGen)
110+
endmacro(cir_mlir_tablegen_flags)

0 commit comments

Comments
 (0)