mirror of https://github.com/kendryte/nncase.git
278 lines
8.7 KiB
CMake
278 lines
8.7 KiB
CMake
cmake_minimum_required(VERSION 3.15)
|
|
|
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake/Modules)
|
|
|
|
if(NOT DEFINED NNCASE_VERSION)
|
|
set(NNCASE_VERSION "2.0.0")
|
|
endif()
|
|
|
|
if(DEFINED ENV{NNCASE_VERSION_SUFFIX})
|
|
set(NNCASE_VERSION_SUFFIX $ENV{NNCASE_VERSION_SUFFIX})
|
|
endif()
|
|
|
|
if(NOT DEFINED NNCASE_VERSION_SUFFIX)
|
|
find_package (Git)
|
|
execute_process(
|
|
COMMAND ${GIT_EXECUTABLE} describe --always --dirty --tag
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
OUTPUT_VARIABLE GIT_TAG
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
|
if ("v${NNCASE_VERSION}" STREQUAL "${GIT_TAG}")
|
|
set(NNCASE_VERSION_SUFFIX "")
|
|
else()
|
|
execute_process(
|
|
COMMAND ${GIT_EXECUTABLE} describe --always --dirty
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
OUTPUT_VARIABLE GIT_DESC
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
set(NNCASE_VERSION_SUFFIX "-${GIT_DESC}")
|
|
endif()
|
|
endif()
|
|
|
|
if (NOT PACKAGE_VERSION)
|
|
set(PACKAGE_VERSION
|
|
"${NNCASE_VERSION}${NNCASE_VERSION_SUFFIX}")
|
|
endif()
|
|
|
|
project(nncase
|
|
VERSION ${NNCASE_VERSION}
|
|
LANGUAGES C CXX ASM)
|
|
|
|
option(ENABLE_OPENMP "OpenMP support" ON)
|
|
option(ENABLE_HALIDE "halide kernels support" ON)
|
|
option(DOTNET_INIT_FOR_CONFIG "Initialize dotnet from runtimeconfig" OFF)
|
|
option(BUILD_PYTHON_BINDING "Build python binding" ON)
|
|
option(BUILD_CSHARP_BINDING "Build csharp binding" ON)
|
|
option(BUILD_BENCHMARK "Build benchmark programs" ON)
|
|
option(BUILD_TESTING "Build test programs" OFF)
|
|
option(ENABLE_OP_PROFILE "Profile ops cast time" OFF)
|
|
option(ENABLE_DUMP_MANAGER "Enable dump manager" OFF)
|
|
option(ENABLE_RVV "Some kernel impl by rvv" OFF)
|
|
option(ENABLE_DUMP_MEM "Dump mem usage" OFF)
|
|
|
|
if (ENABLE_OP_PROFILE)
|
|
add_definitions(-DENABLE_OP_PROFILE)
|
|
endif()
|
|
|
|
if(ENABLE_DUMP_MEM)
|
|
add_definitions(-DDUMP_MEM)
|
|
endif()
|
|
|
|
if(NOT CMAKE_TOOLCHAIN_FILE)
|
|
include(toolchains/native.toolchain.cmake)
|
|
endif()
|
|
|
|
if (BUILDING_RUNTIME)
|
|
option(ENABLE_VULKAN_RUNTIME "Enable Vulkan runtime" OFF)
|
|
option(ENABLE_K210_RUNTIME "Enable k210 runtime" OFF)
|
|
option(DEFAULT_BUILTIN_RUNTIMES "Use default builtin runtimes" ON)
|
|
option(DEFAULT_SHARED_RUNTIME_TENSOR_PLATFORM_IMPL "Use default shared memory platform impl" ON)
|
|
endif()
|
|
|
|
include(cmake/configure-conan.cmake)
|
|
include(cmake/conan.cmake)
|
|
|
|
if(NOT CONAN_EXPORTED)
|
|
conan_check()
|
|
conan_add_remote(NAME sunnycase URL https://conan.sunnycase.moe INDEX 0)
|
|
endif()
|
|
|
|
if(CONAN_EXPORTED) # in conan local cache
|
|
message(STATUS "Standard Conan Installation")
|
|
else() # in user space
|
|
message(STATUS "Auto Cmake Conan Installation")
|
|
include(${CMAKE_SOURCE_DIR}/cmake/conan.cmake)
|
|
conan_cmake_run(CONANFILE conanfile.py
|
|
BASIC_SETUP
|
|
OPTIONS ${CONAN_OPTS}
|
|
SETTINGS ${CONAN_SETTINGS}
|
|
BUILD missing)
|
|
endif()
|
|
|
|
include(${CMAKE_BINARY_DIR}/conan_paths.cmake)
|
|
include(cmake/dependencies.cmake)
|
|
|
|
if (BUILDING_RUNTIME)
|
|
set(NNCASE_MAIN_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/src/Native/include)
|
|
set(NNCASE_MAIN_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/src/Native/include)
|
|
set(NNCASE_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/src/Native/include)
|
|
set(THIRD_PARTY ${CMAKE_CURRENT_LIST_DIR}/third_party)
|
|
set_property(GLOBAL PROPERTY POSITION_INDEPENDENT_CODE ON)
|
|
|
|
if (MSVC)
|
|
add_definitions(/D_CRT_SECURE_NO_WARNINGS /DNOMINMAX)
|
|
add_compile_options(/wd4267 /wd4251 /wd4244 /FC /utf-8 /W3 /WX /wd4297 -Wno-unused-function -Wno-unused-command-line-argument)
|
|
else()
|
|
add_compile_options(-Wall -Wextra -pedantic -Werror -Wno-multichar -Wno-missing-field-initializers -Wno-unused-function -Wno-type-limits)
|
|
if (APPLE)
|
|
add_compile_options(-Wno-four-char-constants -Wno-sometimes-uninitialized)
|
|
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
|
add_compile_options(-Wno-uninitialized -Wno-unused-private-field)
|
|
else()
|
|
add_compile_options(-Wno-maybe-uninitialized -Wno-attributes)
|
|
if (CMAKE_CXX_COMPILER_VERSION GREATER_EQUAL 9)
|
|
add_compile_options(-Wno-unused-private-field)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
include_directories(${NNCASE_MAIN_INCLUDE_DIR})
|
|
include_directories(${NNCASE_INCLUDE_DIR})
|
|
|
|
add_subdirectory(src/Native/include/nncase)
|
|
# add_subdirectory(src/Native/src/kernels)
|
|
# add_subdirectory(src/Native/src/runtime)
|
|
add_subdirectory(src/Native/src)
|
|
# add_subdirectory(src/Native/src/functional)
|
|
if(BUILD_BENCHMARK)
|
|
# add_subdirectory(benchmark)
|
|
endif()
|
|
|
|
# Python binding
|
|
if(BUILD_PYTHON_BINDING)
|
|
# add_subdirectory(python/nncaseruntime/native)
|
|
endif()
|
|
|
|
install(DIRECTORY ${NNCASE_INCLUDE_DIR}/nncase
|
|
DESTINATION include
|
|
COMPONENT nncase-headers
|
|
FILES_MATCHING
|
|
PATTERN "*.def"
|
|
PATTERN "*.h"
|
|
PATTERN "*version.h"
|
|
PATTERN "CMakeFiles" EXCLUDE
|
|
)
|
|
|
|
install(DIRECTORY src/Native/include/nncase/
|
|
DESTINATION include/nncase
|
|
COMPONENT nncase-headers
|
|
FILES_MATCHING
|
|
PATTERN "*.def"
|
|
PATTERN "*.h"
|
|
PATTERN "*version.h"
|
|
PATTERN "CMakeFiles" EXCLUDE
|
|
)
|
|
|
|
install(DIRECTORY src/Native/include/nncase/kernels
|
|
DESTINATION include/nncase
|
|
COMPONENT nncase-headers
|
|
FILES_MATCHING
|
|
PATTERN "*.def"
|
|
PATTERN "*.h"
|
|
PATTERN "*.hpp"
|
|
PATTERN "*.td"
|
|
PATTERN "*.inc"
|
|
PATTERN "LICENSE.TXT"
|
|
)
|
|
|
|
install(DIRECTORY src/Native/include/nncase/runtime
|
|
DESTINATION include/nncase
|
|
COMPONENT nncase-headers
|
|
FILES_MATCHING
|
|
PATTERN "*.def"
|
|
PATTERN "*.h"
|
|
PATTERN "*.hpp"
|
|
PATTERN "*.td"
|
|
PATTERN "*.inc"
|
|
PATTERN "LICENSE.TXT"
|
|
)
|
|
else()
|
|
set(CMAKE_SKIP_RPATH OFF)
|
|
|
|
set(NNCASE_MAIN_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/src/Native/include)
|
|
set(NNCASE_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/src/Native/include)
|
|
set(THIRD_PARTY ${CMAKE_CURRENT_LIST_DIR}/third_party)
|
|
set_property(GLOBAL PROPERTY POSITION_INDEPENDENT_CODE ON)
|
|
if (APPLE)
|
|
set(CMAKE_MACOSX_RPATH TRUE)
|
|
set(CMAKE_INSTALL_RPATH "@loader_path")
|
|
set(CMAKE_INSTALL_NAME_DIR "@rpath")
|
|
else ()
|
|
set(CMAKE_INSTALL_RPATH "$ORIGIN")
|
|
endif()
|
|
|
|
if (MSVC)
|
|
add_definitions(/D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS /D_CRT_SECURE_NO_WARNINGS /DNOMINMAX)
|
|
add_compile_options(/wd4267 /wd4251 /wd4244 /FC /utf-8 /W3 /WX -Wno-unused-function -Wno-unused-command-line-argument)
|
|
set(PYBIND11_CPP_STANDARD "/std:c++latest")
|
|
else()
|
|
add_compile_options(-fvisibility=hidden)
|
|
add_compile_options(-Wall -Wextra -pedantic -Werror -Wno-multichar -Wno-missing-field-initializers -Wno-unused-function -Wno-type-limits -Wno-unused-local-typedefs -Wno-sign-compare)
|
|
if (APPLE)
|
|
add_compile_options(-Wno-four-char-constants -Wno-sometimes-uninitialized -Wno-deprecated)
|
|
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
|
add_compile_options(-Wno-uninitialized -Wno-gnu-zero-variadic-macro-arguments)
|
|
else ()
|
|
add_compile_options(-Wno-maybe-uninitialized -Wno-deprecated-copy)
|
|
add_link_options(-Wl,--exclude-libs,ALL)
|
|
endif()
|
|
endif()
|
|
|
|
include_directories(${NNCASE_MAIN_INCLUDE_DIR})
|
|
include_directories(${NNCASE_INCLUDE_DIR})
|
|
|
|
add_subdirectory(src/Native/include/nncase)
|
|
add_subdirectory(src/Native/src)
|
|
|
|
# Python binding
|
|
if(BUILD_PYTHON_BINDING)
|
|
add_subdirectory(python/nncase/native)
|
|
endif()
|
|
|
|
# Csharp binding
|
|
if(BUILD_CSHARP_BINDING)
|
|
#add_subdirectory(csharp)
|
|
endif()
|
|
|
|
# Thrid party
|
|
# add_subdirectory(third_party/onnx)
|
|
|
|
install(DIRECTORY src/Native/include/nncase
|
|
DESTINATION include
|
|
COMPONENT nncase-headers
|
|
FILES_MATCHING
|
|
PATTERN "*.def"
|
|
PATTERN "*.h"
|
|
PATTERN "*.hpp"
|
|
PATTERN "*.td"
|
|
PATTERN "*.inc"
|
|
PATTERN "LICENSE.TXT"
|
|
PATTERN "*.h"
|
|
)
|
|
|
|
install(DIRECTORY ${NNCASE_INCLUDE_DIR}/nncase
|
|
DESTINATION include
|
|
COMPONENT nncase-headers
|
|
FILES_MATCHING
|
|
PATTERN "*.def"
|
|
PATTERN "*.h"
|
|
PATTERN "*.hpp"
|
|
PATTERN "*.td"
|
|
PATTERN "*.inc"
|
|
PATTERN "CMakeFiles" EXCLUDE
|
|
PATTERN "config.h" EXCLUDE
|
|
PATTERN "*.h"
|
|
)
|
|
|
|
install(DIRECTORY python/nncase
|
|
DESTINATION python
|
|
COMPONENT nncase-python
|
|
FILES_MATCHING
|
|
PATTERN "*.py"
|
|
)
|
|
|
|
# Targets
|
|
#add_subdirectory(targets/cpu)
|
|
#add_subdirectory(targets/k210)
|
|
#add_subdirectory(targets/vulkan)
|
|
endif()
|
|
|
|
if(BUILD_TESTING)
|
|
add_subdirectory(tests/kernels)
|
|
endif()
|
|
|
|
# Modules
|
|
|
|
#add_subdirectory(modules/vulkan)
|