160 lines
5.4 KiB
CMake
160 lines
5.4 KiB
CMake
cmake_minimum_required(VERSION 3.0...3.31)
|
|
|
|
# automagically detect if we should cross-compile
|
|
if(DEFINED ENV{TOOLCHAIN})
|
|
set(CMAKE_C_COMPILER $ENV{TOOLCHAIN}gcc)
|
|
set(CMAKE_CXX_COMPILER $ENV{TOOLCHAIN}g++)
|
|
set(CMAKE_AR "$ENV{TOOLCHAIN}ar" CACHE FILEPATH "CW archiver" FORCE)
|
|
endif()
|
|
|
|
project(lib60870-C)
|
|
ENABLE_TESTING()
|
|
|
|
set(LIB_VERSION_MAJOR "2")
|
|
set(LIB_VERSION_MINOR "4")
|
|
set(LIB_VERSION_PATCH "0")
|
|
|
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/third_party/cmake/modules/")
|
|
|
|
macro(ADD_C_FLAGS flags)
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flags}")
|
|
endmacro()
|
|
|
|
# feature checks
|
|
include(CheckLibraryExists)
|
|
|
|
# check if we are on a little or a big endian
|
|
include (TestBigEndian)
|
|
test_big_endian(PLATFORM_IS_BIGENDIAN)
|
|
|
|
option(BUILD_HAL "Build the platform abstraction layer (HAL)" ON)
|
|
option(BUILD_COMMON "Build common code (shared with other libraries - e.g. libiec61850)" ON)
|
|
|
|
option(BUILD_EXAMPLES "Build the examples" ON)
|
|
option(BUILD_TESTS "Build the tests" ON)
|
|
|
|
if(BUILD_HAL)
|
|
|
|
## Detect mbedtls dependency folders. Accept folder names with patch/minor suffixes
|
|
set(MBEDTLS_DIR "")
|
|
file(GLOB MBEDTLS_2_28_CANDIDATES "${CMAKE_CURRENT_LIST_DIR}/dependencies/mbedtls-2.28*")
|
|
file(GLOB MBEDTLS_3_6_CANDIDATES "${CMAKE_CURRENT_LIST_DIR}/dependencies/mbedtls-3.6*")
|
|
|
|
if(MBEDTLS_2_28_CANDIDATES)
|
|
list(GET MBEDTLS_2_28_CANDIDATES 0 MBEDTLS_DIR)
|
|
set(WITH_MBEDTLS 1)
|
|
set(WITH_SEC_AUTH 1)
|
|
add_definitions(-DWITH_MBEDTLS=1)
|
|
message("mbedtls 2.28 found: ${MBEDTLS_DIR}")
|
|
elseif(MBEDTLS_3_6_CANDIDATES)
|
|
list(GET MBEDTLS_3_6_CANDIDATES 0 MBEDTLS_DIR)
|
|
set(WITH_MBEDTLS3 1)
|
|
set(WITH_SEC_AUTH 1)
|
|
add_definitions(-DWITH_MBEDTLS3=1)
|
|
message("mbedtls 3.6 found: ${MBEDTLS_DIR}")
|
|
else()
|
|
message("NOTE: mbedtls 2.28 or 3.6 is required for TLS support and secure authentication!")
|
|
endif()
|
|
|
|
endif(BUILD_HAL)
|
|
|
|
include_directories(
|
|
${CMAKE_CURRENT_LIST_DIR}/config
|
|
${CMAKE_CURRENT_LIST_DIR}/src/file-service
|
|
${CMAKE_CURRENT_LIST_DIR}/src/inc/api
|
|
${CMAKE_CURRENT_LIST_DIR}/src/inc/internal
|
|
${CMAKE_CURRENT_LIST_DIR}/src/common/inc
|
|
${CMAKE_CURRENT_LIST_DIR}/src/hal/inc
|
|
)
|
|
|
|
if(MBEDTLS_DIR)
|
|
# choose appropriate HAL adapter (mbedtls vs mbedtls3)
|
|
if(WITH_MBEDTLS3)
|
|
include_directories(
|
|
${CMAKE_CURRENT_LIST_DIR}/src/hal/tls/mbedtls3
|
|
${MBEDTLS_DIR}/include
|
|
)
|
|
file(GLOB tls_SRCS ${MBEDTLS_DIR}/library/*.c)
|
|
else()
|
|
include_directories(
|
|
${CMAKE_CURRENT_LIST_DIR}/src/hal/tls/mbedtls
|
|
${MBEDTLS_DIR}/include
|
|
)
|
|
file(GLOB tls_SRCS ${MBEDTLS_DIR}/library/*.c)
|
|
endif()
|
|
|
|
add_definitions(-DCONFIG_CS104_SUPPORT_TLS=1)
|
|
add_definitions(-DMBEDTLS_CONFIG_FILE="mbedtls_config.h")
|
|
endif()
|
|
|
|
|
|
set(API_HEADERS
|
|
${CMAKE_CURRENT_LIST_DIR}/src/hal/inc/hal_time.h
|
|
${CMAKE_CURRENT_LIST_DIR}/src/hal/inc/hal_thread.h
|
|
${CMAKE_CURRENT_LIST_DIR}/src/hal/inc/hal_socket.h
|
|
${CMAKE_CURRENT_LIST_DIR}/src/hal/inc/hal_serial.h
|
|
${CMAKE_CURRENT_LIST_DIR}/src/hal/inc/hal_base.h
|
|
${CMAKE_CURRENT_LIST_DIR}/src/hal/inc/tls_config.h
|
|
${CMAKE_CURRENT_LIST_DIR}/src/hal/inc/tls_ciphers.h
|
|
${CMAKE_CURRENT_LIST_DIR}/src/common/inc/linked_list.h
|
|
${CMAKE_CURRENT_LIST_DIR}/src/inc/api/cs101_master.h
|
|
${CMAKE_CURRENT_LIST_DIR}/src/inc/api/cs101_slave.h
|
|
${CMAKE_CURRENT_LIST_DIR}/src/inc/api/cs104_slave.h
|
|
${CMAKE_CURRENT_LIST_DIR}/src/inc/api/iec60870_master.h
|
|
${CMAKE_CURRENT_LIST_DIR}/src/inc/api/iec60870_slave.h
|
|
${CMAKE_CURRENT_LIST_DIR}/src/inc/api/iec60870_common.h
|
|
${CMAKE_CURRENT_LIST_DIR}/src/inc/api/cs101_information_objects.h
|
|
${CMAKE_CURRENT_LIST_DIR}/src/inc/api/cs104_connection.h
|
|
${CMAKE_CURRENT_LIST_DIR}/src/inc/api/link_layer_parameters.h
|
|
${CMAKE_CURRENT_LIST_DIR}/src/file-service/cs101_file_service.h
|
|
)
|
|
|
|
include(CheckCCompilerFlag)
|
|
|
|
check_c_compiler_flag("-Wredundant-decls" SUPPORT_REDUNDANT_DECLS)
|
|
if (SUPPORT_REDUNDANT_DECLS)
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wredundant-decls")
|
|
endif(SUPPORT_REDUNDANT_DECLS)
|
|
|
|
# write the detected stuff to this file
|
|
# configure_file(config/lib60870_config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config/lib60870_config.h)
|
|
|
|
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/src)
|
|
|
|
if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/modules/sec-auth)
|
|
|
|
add_compile_definitions(SEC_AUTH_60870_5_7)
|
|
|
|
include(${CMAKE_CURRENT_LIST_DIR}/modules/sec-auth/CMakeLists.txt)
|
|
|
|
endif(EXISTS ${CMAKE_CURRENT_LIST_DIR}/modules/sec-auth)
|
|
|
|
if(BUILD_EXAMPLES)
|
|
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/examples)
|
|
endif(BUILD_EXAMPLES)
|
|
|
|
if(BUILD_TESTS)
|
|
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/tests)
|
|
endif(BUILD_TESTS)
|
|
|
|
INSTALL(FILES ${API_HEADERS} DESTINATION include/lib60870 COMPONENT Development)
|
|
|
|
IF(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")
|
|
INCLUDE(InstallRequiredSystemLibraries)
|
|
|
|
SET(CPACK_PACKAGE_DESCRIPTION "IEC 60870-5-101/104 master/slave library")
|
|
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "IEC 60870-5-101/104 master/slave library")
|
|
SET(CPACK_PACKAGE_VENDOR "MZ Automation GmbH")
|
|
SET(CPACK_PACKAGE_CONTACT "info@mz-automation.de")
|
|
SET(CPACK_PACKAGE_VERSION_MAJOR "${LIB_VERSION_MAJOR}")
|
|
SET(CPACK_PACKAGE_VERSION_MINOR "${LIB_VERSION_MINOR}")
|
|
SET(CPACK_PACKAGE_VERSION_PATCH "${LIB_VERSION_PATCH}")
|
|
SET(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}_${LIB_VERSION_MAJOR}.${LIB_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}_${CMAKE_SYSTEM_PROCESSOR}")
|
|
SET(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}_${LIB_VERSION_MAJOR}.${LIB_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
|
|
|
|
SET(CPACK_COMPONENTS_ALL Libraries Development Applications)
|
|
#set(CPACK_PACKAGE_INSTALL_DIRECTORY "${CMAKE_PROJECT_NAME}")
|
|
INCLUDE(CPack)
|
|
|
|
ENDIF(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")
|