Created
September 15, 2020 02:17
-
-
Save lszinv/ea545412923cfd9771b815a7ac5ec382 to your computer and use it in GitHub Desktop.
Sample CMake
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| cmake_minimum_required(VERSION 3.17) | |
| project(overiew_project) | |
| set(CMAKE_CXX_STANDARD 17) | |
| include(${CMAKE_ROOT}/Modules/ExternalProject.cmake) | |
| list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/lib/cmake/") | |
| ################## | |
| ## Dependencies | |
| ################## | |
| enable_testing() | |
| ## | |
| # LLVM | |
| ## | |
| # The build artifacts will be kept in the llvm subfolder to avoid it being deleted during a clean | |
| # So that it doesn't waste a bunch of time being recompiled all the time | |
| # The LLVM folder properties can be set when calling cmake if llvm-project has been previously compiled | |
| ## | |
| set(LLVM_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/llvm-project/ CACHE STRING "llvm-project root dir") | |
| set(LLVM_BUILD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/llvm-project/build CACHE STRING "llvm-project build dir") | |
| set(LLVM_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/llvm_install CACHE STRING "llvm-project install dir") | |
| # Set the LLVM vars if the corresponding environment variables are set. To avoid needing to constantly pass in the | |
| # cmake parameters if you've built LLVM out of project | |
| if(DEFINED ENV{LLVM_ROOT_DIR}) | |
| set(LLVM_ROOT_DIR $ENV{LLVM_ROOT_DIR}) | |
| endif() | |
| if(DEFINED ENV{LLVM_BUILD_DIR}) | |
| set(LLVM_BUILD_DIR $ENV{LLVM_BUILD_DIR}) | |
| endif() | |
| if(DEFINED ENV{LLVM_INSTALL_DIR}) | |
| set(LLVM_INSTALL_DIR $ENV{LLVM_INSTALL_DIR}) | |
| endif() | |
| if(DEFINED ENV{LLVM_ROOT_DIR} AND DEFINED ENV{LLVM_BUILD_DIR} AND DEFINED ENV{LLVM_INSTALL_DIR}) | |
| message("Using externally built llvm-project") | |
| else() | |
| file(MAKE_DIRECTORY ${LLVM_BUILD_DIR}) | |
| ExternalProject_Add(llvm-project | |
| PREFIX llvm-project | |
| SOURCE_DIR ${LLVM_ROOT_DIR}/llvm | |
| BINARY_DIR ${LLVM_BUILD_DIR} | |
| CMAKE_GENERATOR Ninja | |
| CMAKE_ARGS | |
| -DBUILD_SHARED_LIBS=ON | |
| -DCMAKE_BUILD_TYPE=Release | |
| -DCMAKE_EXPORT_COMPILE_COMMANDS=ON | |
| -DCMAKE_INSTALL_PREFIX=${LLVM_INSTALL_DIR} | |
| -DLLVM_BUILD_EXAMPLES=ON | |
| -DLLVM_ENABLE_ASSERTIONS=ON | |
| -DLLVM_ENABLE_PIC=ON | |
| -DLLVM_ENABLE_PROJECTS=mlir | |
| -DLLVM_ENABLE_RTTI=ON | |
| -DLLVM_TARGETS_TO_BUILD=host | |
| ) | |
| # Don't always build this, Make target only if the user explicitly calls it | |
| set_target_properties(llvm-project PROPERTIES EXCLUDE_FROM_ALL TRUE) | |
| endif() | |
| ## | |
| # Protobuf | |
| # Dependency for onnx-mlir. Unfortunately can't do a non-system install because onnx-mlir expects it to be system installed. | |
| # If we set it up to add the linking and include directories to cmake, there's no explicit | |
| # control to which one onnx-mlir will pick up vs a system installed one | |
| ## | |
| set(PROTOBUF_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/protobuf) | |
| set(PROTOBUF_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/protobuf_install) | |
| ExternalProject_Add(protobuf | |
| PREFIX protobuf | |
| SOURCE_DIR ${PROTOBUF_ROOT_DIR} | |
| BUILD_COMMAND make | |
| CONFIGURE_COMMAND ${PROTOBUF_ROOT_DIR}/autogen.sh && ${PROTOBUF_ROOT_DIR}/configure | |
| INSTALL_COMMAND make install | |
| BUILD_IN_SOURCE 1 | |
| ) | |
| set_target_properties(protobuf PROPERTIES EXCLUDE_FROM_ALL TRUE) | |
| ## | |
| # Onnx-MLIR | |
| ## | |
| # ONNX_ML Definition tells ONNX includes to look for the onnx-ml protobuf headers instead of the onnx ones | |
| add_definitions(-DONNX_ML) | |
| set(ONNX_MLIR_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/onnx-mlir) | |
| set(ONNX_MLIR_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/om_install) # onnx-mlir doesn't actually install any libs, so this is just its dependencies | |
| ExternalProject_Add(onnx-mlir | |
| PREFIX onnx-mlir | |
| SOURCE_DIR "${ONNX_MLIR_ROOT_DIR}" | |
| # Forcefully setting the LLVM environment variables that onnx-mlir are requiring | |
| CMAKE_COMMAND LLVM_PROJ_SRC=${LLVM_ROOT_DIR} LLVM_PROJ_BUILD=${LLVM_BUILD_DIR} cmake | |
| CMAKE_ARGS | |
| -DCMAKE_INSTALL_PREFIX=${ONNX_MLIR_INSTALL_DIR} | |
| -DBUILD_SHARED_LIBS=ON | |
| -DCMAKE_EXPORT_COMPILE_COMMANDS=ON | |
| # Dependency on llvm-project is commented out to prevent needless builds of llvm-project. | |
| # DEPENDS llvm-project | |
| ) | |
| ExternalProject_Get_property(onnx-mlir BINARY_DIR INSTALL_DIR) | |
| set(ONNX_MLIR_BUILD_DIR ${BINARY_DIR}) | |
| ######################## | |
| ## MyLib | |
| ######################## | |
| ExternalProject_Add(mylib | |
| PREFIX mylib | |
| SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src" | |
| BUILD_ALWAYS 1 | |
| TEST_AFTER_INSTALL 1 | |
| CMAKE_GENERATOR Ninja | |
| CMAKE_ARGS | |
| -DCMAKE_BUILD_TYPE=Debug # Default build with debug symbols | |
| -DLLVM_BUILD_DIR=${LLVM_BUILD_DIR} | |
| -DLLVM_INSTALL_DIR=${LLVM_INSTALL_DIR} | |
| -DONNX_MLIR_ROOT_DIR=${ONNX_MLIR_ROOT_DIR} | |
| -DONNX_MLIR_BUILD_DIR=${ONNX_MLIR_BUILD_DIR} | |
| -DONNX_MLIR_INSTALL_DIR=${ONNX_MLIR_INSTALL_DIR} | |
| -DCMAKE_EXPORT_COMPILE_COMMANDS=ON | |
| DEPENDS onnx-mlir) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment