154 строки
5.0 KiB
CMake
154 строки
5.0 KiB
CMake
# Copyright (c) Microsoft Corporation.
|
|
# Licensed under the MIT License.
|
|
|
|
project (nnfusion)
|
|
|
|
message(STATUS " _ __ _ __ ____ _ ")
|
|
message(STATUS " / |/ // |/ // __/__ __ ___ (_)___ ___ ")
|
|
message(STATUS " / // // _/ / // /(_-< / // _ \\ / _ \\")
|
|
message(STATUS " /_/|_//_/|_//_/ \\_,_//___//_/ \\___//_//_/")
|
|
message(STATUS " MSRAsia NNFusion Team(@nnfusion)")
|
|
message(STATUS " https://github.com/microsoft/nnfusion")
|
|
message(STATUS "")
|
|
|
|
#-----------------------------------------------------------------------------------------------
|
|
# STEP.0 Global Options
|
|
#-----------------------------------------------------------------------------------------------
|
|
option(NNFUSION "Enable NNFusion backend." TRUE)
|
|
option(DEBUG_ENABLE "Enable debug mode" FALSE)
|
|
option(CODE_COVERAGE_ENABLE "Enable code coverage." FALSE)
|
|
option(ONNX_FRONTEND "Enable ONNX frontend." TRUE)
|
|
option(TENSORFLOW_FRONTEND "Enable Tensorflow frontend." TRUE)
|
|
option(TORCHSCRIPT_FRONTEND "Enable TorchScript frontend." FALSE)
|
|
|
|
#-----------------------------------------------------------------------------------------------
|
|
# STEP.1 Customnized targets
|
|
#-----------------------------------------------------------------------------------------------
|
|
|
|
message(STATUS "Installation directory: ${CMAKE_INSTALL_PREFIX}")
|
|
|
|
add_custom_target(style-check
|
|
COMMAND ${PROJECT_SOURCE_DIR}/maint/script/check_code_style.sh
|
|
)
|
|
|
|
add_custom_target(style
|
|
COMMAND ${PROJECT_SOURCE_DIR}/maint/script/apply_code_style.sh
|
|
)
|
|
|
|
#-----------------------------------------------------------------------------------------------
|
|
# STEP.2 Set CMake configs
|
|
#-----------------------------------------------------------------------------------------------
|
|
# *Make build proto file inside build folder possible.
|
|
set(CMAKE_DISABLE_SOURCE_CHANGES OFF)
|
|
set(CMAKE_DISABLE_IN_SOURCE_BUILD OFF)
|
|
|
|
# Determin which flags in use
|
|
if (UNIX AND NOT APPLE)
|
|
set(LINUX TRUE)
|
|
endif()
|
|
|
|
if (APPLE)
|
|
set(WholeArchiveFlag -Wl,-force_load)
|
|
set(NoWholeArchiveFlag -Wl,-noall_load)
|
|
else()
|
|
set(WholeArchiveFlag -Wl,--whole-archive)
|
|
set(NoWholeArchiveFlag -Wl,--no-whole-archive)
|
|
endif()
|
|
|
|
cmake_minimum_required (VERSION 3.10)
|
|
|
|
# Create compilation database compile_commands.json .
|
|
# Could be unsed in VScode or some analysis tool.
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
|
|
# STEP.3 Set compiler flags
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
|
|
|
if (${WARNINGS_AS_ERRORS})
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
|
|
message(STATUS "Warnings as errors")
|
|
endif()
|
|
|
|
# SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-g")
|
|
if(${DEBUG_ENABLE})
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0")
|
|
else()
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
|
|
endif()
|
|
|
|
if (CODE_COVERAGE_ENABLE)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage")
|
|
endif()
|
|
|
|
set(GLOBAL_INCLUDE_PATH
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src
|
|
${CMAKE_CURRENT_SOURCE_DIR}/thirdparty
|
|
# for proto headers
|
|
${PROJECT_BINARY_DIR}/src
|
|
)
|
|
|
|
include_directories(
|
|
${GLOBAL_INCLUDE_PATH}
|
|
)
|
|
|
|
#-----------------------------------------------------------------------------------------------
|
|
# STEP.4 Set Project Defines
|
|
#-----------------------------------------------------------------------------------------------
|
|
|
|
# For usage inside source code
|
|
if(ONNX_FRONTEND)
|
|
add_definitions(-DONNX_FRONTEND)
|
|
endif()
|
|
|
|
if(TORCHSCRIPT_FRONTEND)
|
|
add_definitions(-DTORCHSCRIPT_FRONTEND)
|
|
endif()
|
|
|
|
add_definitions(-DPROJECT_ROOT_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
|
|
|
|
#-----------------------------------------------------------------------------------------------
|
|
# STEP.5 Find thirdparty libraries
|
|
#-----------------------------------------------------------------------------------------------
|
|
###Static###
|
|
set(Protobuf_USE_STATIC_LIBS ON)
|
|
find_package(Threads REQUIRED) # This is for test usage
|
|
find_package(GTest)
|
|
find_package(Protobuf 3.5.0)
|
|
|
|
SET(CMAKE_FIND_LIBRARY_SUFFIXES .a)
|
|
find_library(GFLAGS NAMES gflags)
|
|
if (NOT "${GFLAGS}" STREQUAL "")
|
|
message(STATUS "Found gflags: ${GFLAGS}")
|
|
else()
|
|
message(FATAL_ERROR "Not found gflags" )
|
|
endif()
|
|
|
|
find_library(SQLITE3 NAMES sqlite3)
|
|
if (NOT "${SQLITE3}" STREQUAL "")
|
|
message(STATUS "Found sqlite3: ${SQLITE3}")
|
|
else()
|
|
message(FATAL_ERROR "Not found sqlite3" )
|
|
endif()
|
|
|
|
#-----------------------------------------------------------------------------------------------
|
|
# STEP.6 Check envs
|
|
#-----------------------------------------------------------------------------------------------
|
|
if(Protobuf_LIBRARY MATCHES "NOTFOUND")
|
|
message(STATUS "Cannot found any Protobuf libraries.")
|
|
endif()
|
|
|
|
#-----------------------------------------------------------------------------------------------
|
|
# STEP.7 Enable features
|
|
#-----------------------------------------------------------------------------------------------
|
|
add_subdirectory(thirdparty)
|
|
message(STATUS "thirdparty enabled")
|
|
|
|
add_subdirectory(src)
|
|
message(STATUS "nnfusion enabled")
|
|
|
|
add_subdirectory(test)
|
|
message(STATUS "unit tests enabled")
|
|
|
|
# add_subdirectory(doc)
|
|
# message(STATUS "nnfusion documents enabled")
|