132 lines
3.9 KiB
CMake
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}")
|