mirror of
https://github.com/emqx/neuron.git
synced 2026-10-16 20:30:39 +08:00
213 lines
6.3 KiB
CMake
213 lines
6.3 KiB
CMake
cmake_minimum_required(VERSION 3.12)
|
|
project(neuron)
|
|
|
|
enable_testing()
|
|
|
|
enable_language(C)
|
|
set(CMAKE_C_STANDARD 99)
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
|
|
if(NOT CMAKE_BUILD_TYPE)
|
|
set(CMAKE_BUILD_TYPE "Debug")
|
|
endif()
|
|
|
|
if(NOT CMAKE_SYSTEM_NAME)
|
|
set(CMAKE_SYSTEM_NAME "Linux")
|
|
endif()
|
|
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
|
add_definitions(-DNEU_PLATFORM_LINUX)
|
|
|
|
elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
|
|
add_definitions(-DNEU_PLATFORM_DARWIN)
|
|
|
|
elseif(CMAKE_SYSTEM_NAME MATCHES "Windows")
|
|
add_definitions(-DNEU_PLATFORM_WINDOWS)
|
|
|
|
endif()
|
|
|
|
if(NOT DISABLE_WERROR)
|
|
set(CMAKE_C_FLAGS "$ENV{CFLAGS} -Werror")
|
|
endif()
|
|
|
|
if(USE_GCOV)
|
|
message(STATUS "using gcov")
|
|
SET(GCC_COVERAGE_COMPILE_FLAGS "-fprofile-arcs -ftest-coverage -O0")
|
|
SET(GCC_COVERAGE_LINK_FLAGS "-lgcov")
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")
|
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")
|
|
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}")
|
|
endif(USE_GCOV)
|
|
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -g")
|
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS} -O0")
|
|
|
|
if(NOT DISABLE_ASAN)
|
|
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS} -fsanitize=address")
|
|
set(CMAKE_CXX_FLAGS_DEBUG "-Wall -g -fsanitize=address")
|
|
endif()
|
|
|
|
|
|
add_custom_target(neuron-version
|
|
COMMAND ${CMAKE_COMMAND} -P
|
|
${CMAKE_CURRENT_SOURCE_DIR}/cmake/neuron-version.cmake)
|
|
|
|
find_package(nng CONFIG REQUIRED)
|
|
find_package(Threads)
|
|
|
|
if (CMAKE_STAGING_PREFIX)
|
|
include_directories(${CMAKE_STAGING_PREFIX}/include)
|
|
link_directories(${CMAKE_STAGING_PREFIX}/lib)
|
|
else()
|
|
include_directories(/usr/local/include)
|
|
link_directories(/usr/local/lib)
|
|
endif()
|
|
|
|
set(PERSIST_SOURCES
|
|
src/persist/persist.c
|
|
src/persist/sqlite.c
|
|
src/persist/json/persist_json_plugin.c)
|
|
aux_source_directory(src/parser NEURON_SRC_PARSE)
|
|
set(NEURON_BASE_SOURCES
|
|
src/base/tag.c
|
|
src/base/neu_plugin_common.c
|
|
src/base/tag_sort.c
|
|
src/base/group.c
|
|
src/base/metrics.c
|
|
src/base/msg.c
|
|
src/connection/connection.c
|
|
src/connection/connection_eth.c
|
|
src/connection/mqtt_client.c
|
|
src/event/event_linux.c
|
|
src/event/event_unix.c
|
|
src/utils/asprintf.c
|
|
src/utils/json.c
|
|
src/utils/http.c
|
|
src/utils/http_handler.c
|
|
src/utils/neu_jwt.c
|
|
src/utils/base64.c
|
|
src/utils/async_queue.c
|
|
src/utils/log.c
|
|
${PERSIST_SOURCES})
|
|
|
|
if (SMART_LINK)
|
|
message(STATUS "using smart link")
|
|
add_definitions(-DNEU_SMART_LINK)
|
|
set(NEURON_BASE_SOURCES ${NEURON_BASE_SOURCES} src/connection/smart_link.c)
|
|
endif()
|
|
|
|
if (CLIB)
|
|
message(STATUS "set clib")
|
|
add_definitions(-DNEU_CLIB=${CLIB})
|
|
endif()
|
|
|
|
if(CMAKE_BUILD_TYPE STREQUAL "Release")
|
|
message(STATUS "build release")
|
|
add_definitions(-DNEU_RELEASE)
|
|
endif()
|
|
|
|
|
|
add_library(neuron-base SHARED)
|
|
target_sources(neuron-base PRIVATE ${NEURON_BASE_SOURCES} ${NEURON_SRC_PARSE})
|
|
target_include_directories(neuron-base
|
|
PRIVATE include/neuron src)
|
|
target_link_libraries(neuron-base libssl.a libcrypto.a)
|
|
target_link_libraries(neuron-base nng libzlog.so jansson jwt
|
|
${CMAKE_THREAD_LIBS_INIT} -lm)
|
|
add_dependencies(neuron-base neuron-version)
|
|
|
|
# dependency imposed by nng
|
|
#find_package(MbedTLS)
|
|
target_link_libraries(neuron-base mbedtls mbedx509 mbedcrypto)
|
|
|
|
set(NEURON_SOURCES
|
|
src/main.c
|
|
src/argparse.c
|
|
src/daemon.c
|
|
src/core/manager_internal.c
|
|
src/core/manager.c
|
|
src/core/subscribe.c
|
|
src/core/plugin_manager.c
|
|
src/core/node_manager.c
|
|
src/core/storage.c
|
|
src/adapter/msg_q.c
|
|
src/adapter/storage.c
|
|
src/adapter/adapter.c
|
|
src/adapter/driver/cache.c
|
|
src/adapter/driver/driver.c
|
|
plugins/restful/handle.c
|
|
plugins/restful/log_handle.c
|
|
plugins/restful/metric_handle.c
|
|
plugins/restful/normal_handle.c
|
|
plugins/restful/rw_handle.c
|
|
plugins/restful/adapter_handle.c
|
|
plugins/restful/datatag_handle.c
|
|
plugins/restful/global_config_handle.c
|
|
plugins/restful/group_config_handle.c
|
|
plugins/restful/plugin_handle.c
|
|
plugins/restful/version_handle.c
|
|
plugins/restful/rest.c
|
|
plugins/restful/user.c)
|
|
|
|
set(CMAKE_BUILD_RPATH ./)
|
|
add_executable(neuron)
|
|
target_sources(neuron PRIVATE ${NEURON_SOURCES})
|
|
target_include_directories(neuron PRIVATE include/neuron src plugins)
|
|
target_link_libraries(neuron dl neuron-base sqlite3 -lm)
|
|
target_link_options(neuron PRIVATE "LINKER:--dynamic-list-data")
|
|
|
|
#copy file for run
|
|
file(COPY ${CMAKE_SOURCE_DIR}/zlog.conf DESTINATION ${CMAKE_BINARY_DIR}/config)
|
|
file(COPY ${CMAKE_SOURCE_DIR}/dev.conf DESTINATION ${CMAKE_BINARY_DIR}/config)
|
|
file(COPY ${CMAKE_SOURCE_DIR}/neuron.json DESTINATION ${CMAKE_BINARY_DIR}/config)
|
|
file(COPY ${CMAKE_SOURCE_DIR}/.gitkeep DESTINATION ${CMAKE_BINARY_DIR}/logs)
|
|
file(COPY ${CMAKE_SOURCE_DIR}/.gitkeep DESTINATION ${CMAKE_BINARY_DIR}/persistence)
|
|
file(COPY ${CMAKE_SOURCE_DIR}/neuron.key DESTINATION ${CMAKE_BINARY_DIR}/config)
|
|
file(COPY ${CMAKE_SOURCE_DIR}/neuron.pem DESTINATION ${CMAKE_BINARY_DIR}/config)
|
|
file(GLOB SQL_SCHEMAS ${CMAKE_SOURCE_DIR}/persistence/*.sql)
|
|
file(COPY ${SQL_SCHEMAS} DESTINATION ${CMAKE_BINARY_DIR}/config)
|
|
file(COPY ${CMAKE_SOURCE_DIR}/default_plugins.json DESTINATION ${CMAKE_BINARY_DIR}/config)
|
|
|
|
add_subdirectory(plugins/modbus)
|
|
add_subdirectory(plugins/mqtt)
|
|
add_subdirectory(plugins/mqtt-xinao)
|
|
add_subdirectory(plugins/ekuiper)
|
|
|
|
add_subdirectory(simulator)
|
|
|
|
if(NOT DISABLE_UT)
|
|
add_subdirectory(tests/ut)
|
|
endif()
|
|
|
|
add_subdirectory(tests/plugins/c1)
|
|
add_subdirectory(tests/plugins/s1)
|
|
add_subdirectory(tests/plugins/sc1)
|
|
|
|
# Set sane defaults for multi-lib linux systems
|
|
include(GNUInstallDirs)
|
|
if(UNIX)
|
|
mark_as_advanced(CLEAR
|
|
CMAKE_INSTALL_BINDIR
|
|
CMAKE_INSTALL_INCLUDEDIR
|
|
CMAKE_INSTALL_LIBDIR
|
|
CMAKE_INSTALL_SYSCONFDIR)
|
|
else()
|
|
set(CMAKE_INSTALL_BINDIR bin)
|
|
set(CMAKE_INSTALL_INCLUDEDIR include)
|
|
set(CMAKE_INSTALL_LIBDIR lib)
|
|
set(CMAKE_INSTALL_SYSCONFDIR etc)
|
|
endif()
|
|
|
|
# Should work, but CMake incorrectly prepends /usr to etc...
|
|
install(FILES "${CMAKE_SOURCE_DIR}/neuron.conf" DESTINATION etc/ld.so.conf.d)
|
|
install(DIRECTORY "${CMAKE_SOURCE_DIR}/include/"
|
|
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
|
FILES_MATCHING
|
|
PATTERN "*.h")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/cmake/neuron-config.cmake"
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/neuron)
|
|
install(TARGETS neuron neuron-base
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|