nnfusion/CMakeLists.txt

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")