This repository has been archived on 2023-11-05. You can view files and clone it, but cannot push or open issues or pull requests.
CloudEdge/CMakeLists.txt

132 lines
3.9 KiB
CMake

cmake_minimum_required(VERSION 3.24)
project(CloudEdge LANGUAGES C CXX)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
#########
# flags #
#########
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fmacro-prefix-map=${CMAKE_SOURCE_DIR}=.")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fmacro-prefix-map=${CMAKE_SOURCE_DIR}=.")
option(CE_ENABLE_COV "Enable coverage" OFF)
if (CE_ENABLE_COV)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-instr-generate -fcoverage-mapping")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-instr-generate -fcoverage-mapping")
endif ()
option(CE_USE_MOLD "Use mold linker" ON)
if (CE_USE_MOLD)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fuse-ld=mold -Wno-unused-command-line-argument")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=mold -Wno-unused-command-line-argument")
endif ()
###########
# version #
###########
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/version.c
${CMAKE_CURRENT_BINARY_DIR}/_version.c # dummy file to force re-run
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/version.cmake
)
#############
# 3rd party #
#############
include(deps.cmake)
########
# Misc #
########
option(CE_ENABLE_SANITIZER "Enable sanitizer" OFF)
if (CE_SANITIZER)
message(STATUS "Enable sanitizer")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g -fsanitize=address,undefined -fno-sanitize=alignment")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address,undefined -fno-sanitize=alignment")
endif ()
########
# main #
########
# dev mode
option(CE_DEV_MODE "Enable dev mode" OFF)
if (CE_DEV_MODE)
# will disable sentry...
add_definitions(-DCE_DEV_MODE)
endif ()
# common
set(BASE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
set(BASE_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
set(BASE_LIBS sentry::sentry spdlog::spdlog nlohmann_json::nlohmann_json magic_enum::magic_enum)
if (NOT CE_NO_TRACE)
list(APPEND BASE_LIBS perfetto)
endif ()
set(BASE_TARGET CloudEdge)
include(lib.cmake)
include(utils.cmake)
# hal
set(HAL_SRC hal/api.h)
option(CE_PLATFORM "Platform" "linux")
if (CE_PLATFORM STREQUAL "linux")
file(GLOB_RECURSE HAL_LINUX_SRC hal/linux/*.cpp)
list(APPEND HAL_SRC ${HAL_LINUX_SRC})
endif ()
# main
set(
UTILS_SRC
common.cpp
${CMAKE_CURRENT_BINARY_DIR}/version.c
utils/backtrace.cpp utils/backtrace.h
utils/cap.cpp utils/cap.h
utils/chan.h
utils/config.cpp utils/config.h
utils/fs.cpp utils/fs.h
utils/gadgets.h
utils/list.h
utils/rand.cpp utils/rand.h
utils/sentry.h
utils/trace.h
utils/utils.h
${HAL_SRC}
)
add_executable(CloudEdge main.cpp runner.cpp ${UTILS_SRC})
target_include_directories(CloudEdge PRIVATE .)
# components - the order matters!
add_subdirectory(tests)
add_subdirectory(proto)
add_subdirectory(offload)
add_subdirectory(rt)
add_subdirectory(state)
# include
get_property(COMPONENT_INCLUDES GLOBAL PROPERTY CE_INCLUDES)
target_include_directories(CloudEdge PRIVATE ${COMPONENT_INCLUDES})
# link
set(MAIN_LIB ${_REFLECTION} ${_GRPC_GRPCPP} ${_PROTOBUF_LIBPROTOBUF} sgnl::sgnl absl::flags absl::flags_parse)
if (WAMR_BUILD_WASI_NN)
list(APPEND MAIN_LIB tensorflowlite)
endif ()
get_property(COMPONENT_LIBS GLOBAL PROPERTY CE_LIBS)
target_link_libraries(CloudEdge PRIVATE ${MAIN_LIB} ${COMPONENT_LIBS} ${BASE_LIBS})
# tool
add_executable(tool tool.cpp ${UTILS_SRC})
target_include_directories(tool PRIVATE .)
target_include_directories(tool PRIVATE ${COMPONENT_INCLUDES})
target_link_libraries(tool PRIVATE ${MAIN_LIB} ${COMPONENT_LIBS} ${BASE_LIBS})
# deps
add_custom_target(build-deps-graphviz ALL
mkdir -p graph && cd graph && ${CMAKE_COMMAND} --graphviz=dependencies_graph.dot .. && dot -Tsvg -o deps.svg dependencies_graph.dot
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}")