You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
422 lines
12 KiB
CMake
422 lines
12 KiB
CMake
if(WITH_MBEDTLS3)
|
|
include_directories(
|
|
${CMAKE_CURRENT_LIST_DIR}/tls/mbedtls3
|
|
${MBEDTLS_INCLUDE_DIR}
|
|
)
|
|
else()
|
|
if(WITH_MBEDTLS)
|
|
include_directories(
|
|
${CMAKE_CURRENT_LIST_DIR}/tls/mbedtls
|
|
${MBEDTLS_INCLUDE_DIR}
|
|
)
|
|
endif(WITH_MBEDTLS)
|
|
endif(WITH_MBEDTLS3)
|
|
|
|
set (lib_common_SRCS
|
|
./common/string_map.c
|
|
./common/map.c
|
|
./common/linked_list.c
|
|
./common/byte_buffer.c
|
|
./common/string_utilities.c
|
|
./common/buffer_chain.c
|
|
./common/conversions.c
|
|
./common/mem_alloc_linked_list.c
|
|
./common/simple_allocator.c
|
|
./mms/iso_server/iso_connection.c
|
|
./mms/iso_server/iso_server.c
|
|
./mms/iso_acse/acse.c
|
|
./mms/iso_mms/common/mms_type_spec.c
|
|
./mms/iso_mms/common/mms_value.c
|
|
./mms/iso_mms/common/mms_common_msg.c
|
|
./mms/iso_mms/client/mms_client_initiate.c
|
|
./mms/iso_mms/client/mms_client_write.c
|
|
./mms/iso_mms/client/mms_client_identify.c
|
|
./mms/iso_mms/client/mms_client_status.c
|
|
./mms/iso_mms/client/mms_client_named_variable_list.c
|
|
./mms/iso_mms/client/mms_client_connection.c
|
|
./mms/iso_mms/client/mms_client_files.c
|
|
./mms/iso_mms/client/mms_client_get_namelist.c
|
|
./mms/iso_mms/client/mms_client_get_var_access.c
|
|
./mms/iso_mms/client/mms_client_common.c
|
|
./mms/iso_mms/client/mms_client_read.c
|
|
./mms/iso_mms/client/mms_client_journals.c
|
|
./mms/iso_mms/server/mms_read_service.c
|
|
./mms/iso_mms/server/mms_file_service.c
|
|
./mms/iso_mms/server/mms_association_service.c
|
|
./mms/iso_mms/server/mms_identify_service.c
|
|
./mms/iso_mms/server/mms_status_service.c
|
|
./mms/iso_mms/server/mms_named_variable_list_service.c
|
|
./mms/iso_mms/server/mms_value_cache.c
|
|
./mms/iso_mms/server/mms_get_namelist_service.c
|
|
./mms/iso_mms/server/mms_access_result.c
|
|
./mms/iso_mms/server/mms_server.c
|
|
./mms/iso_mms/server/mms_server_common.c
|
|
./mms/iso_mms/server/mms_named_variable_list.c
|
|
./mms/iso_mms/server/mms_domain.c
|
|
./mms/iso_mms/server/mms_device.c
|
|
./mms/iso_mms/server/mms_information_report.c
|
|
./mms/iso_mms/server/mms_journal.c
|
|
./mms/iso_mms/server/mms_journal_service.c
|
|
./mms/iso_mms/server/mms_server_connection.c
|
|
./mms/iso_mms/server/mms_write_service.c
|
|
./mms/iso_mms/server/mms_get_var_access_service.c
|
|
./mms/iso_cotp/cotp.c
|
|
./mms/iso_presentation/iso_presentation.c
|
|
./mms/asn1/ber_decode.c
|
|
./mms/asn1/asn1_ber_primitive_value.c
|
|
./mms/asn1/ber_encoder.c
|
|
./mms/asn1/ber_integer.c
|
|
./mms/iso_client/iso_client_connection.c
|
|
./mms/iso_common/iso_connection_parameters.c
|
|
./mms/iso_session/iso_session.c
|
|
./iec61850/client/client_control.c
|
|
./iec61850/client/client_report_control.c
|
|
./iec61850/client/client_goose_control.c
|
|
./iec61850/client/client_sv_control.c
|
|
./iec61850/client/client_report.c
|
|
./iec61850/client/ied_connection.c
|
|
./iec61850/common/iec61850_common.c
|
|
./iec61850/server/impl/ied_server.c
|
|
./iec61850/server/impl/ied_server_config.c
|
|
./iec61850/server/impl/client_connection.c
|
|
./iec61850/server/model/model.c
|
|
./iec61850/server/model/dynamic_model.c
|
|
./iec61850/server/model/cdc.c
|
|
./iec61850/server/model/config_file_parser.c
|
|
./iec61850/server/mms_mapping/control.c
|
|
./iec61850/server/mms_mapping/mms_mapping.c
|
|
./iec61850/server/mms_mapping/reporting.c
|
|
./iec61850/server/mms_mapping/mms_goose.c
|
|
./iec61850/server/mms_mapping/mms_sv.c
|
|
./iec61850/server/mms_mapping/logging.c
|
|
./logging/log_storage.c
|
|
)
|
|
|
|
if(FOUND_SQLITE3_SOURCE)
|
|
message("sqlite3 source -> adding to lib source")
|
|
set (lib_common_SRCS
|
|
${lib_common_SRCS}
|
|
./logging/drivers/sqlite/log_storage_sqlite.c
|
|
./../third_party/sqlite/sqlite3.c
|
|
)
|
|
endif(FOUND_SQLITE3_SOURCE)
|
|
|
|
set (lib_asn1c_SRCS
|
|
./mms/iso_mms/asn1c/DataAccessError.c
|
|
./mms/iso_mms/asn1c/DeleteNamedVariableListRequest.c
|
|
./mms/iso_mms/asn1c/constr_SET_OF.c
|
|
./mms/iso_mms/asn1c/MmsPdu.c
|
|
./mms/iso_mms/asn1c/GetNamedVariableListAttributesResponse.c
|
|
./mms/iso_mms/asn1c/BIT_STRING.c
|
|
./mms/iso_mms/asn1c/ber_tlv_tag.c
|
|
./mms/iso_mms/asn1c/constr_SEQUENCE_OF.c
|
|
./mms/iso_mms/asn1c/asn_SET_OF.c
|
|
./mms/iso_mms/asn1c/ReadResponse.c
|
|
./mms/iso_mms/asn1c/InformationReport.c
|
|
./mms/iso_mms/asn1c/ConfirmedServiceRequest.c
|
|
./mms/iso_mms/asn1c/DeleteNamedVariableListResponse.c
|
|
./mms/iso_mms/asn1c/asn_SEQUENCE_OF.c
|
|
./mms/iso_mms/asn1c/VariableAccessSpecification.c
|
|
./mms/iso_mms/asn1c/GetVariableAccessAttributesRequest.c
|
|
./mms/iso_mms/asn1c/xer_support.c
|
|
./mms/iso_mms/asn1c/ObjectName.c
|
|
./mms/iso_mms/asn1c/NativeEnumerated.c
|
|
./mms/iso_mms/asn1c/per_encoder.c
|
|
./mms/iso_mms/asn1c/constr_SEQUENCE.c
|
|
./mms/iso_mms/asn1c/GetNameListResponse.c
|
|
./mms/iso_mms/asn1c/MMSString.c
|
|
./mms/iso_mms/asn1c/InitiateErrorPdu.c
|
|
./mms/iso_mms/asn1c/IndexRangeSeq.c
|
|
./mms/iso_mms/asn1c/ConfirmedErrorPDU.c
|
|
./mms/iso_mms/asn1c/UnconfirmedService.c
|
|
./mms/iso_mms/asn1c/UTF8String.c
|
|
./mms/iso_mms/asn1c/ServiceError.c
|
|
./mms/iso_mms/asn1c/TimeOfDay.c
|
|
./mms/iso_mms/asn1c/GetNameListRequest.c
|
|
./mms/iso_mms/asn1c/asn_codecs_prim.c
|
|
./mms/iso_mms/asn1c/Data.c
|
|
./mms/iso_mms/asn1c/ScatteredAccessDescription.c
|
|
./mms/iso_mms/asn1c/ReadRequest.c
|
|
./mms/iso_mms/asn1c/per_decoder.c
|
|
./mms/iso_mms/asn1c/Identifier.c
|
|
./mms/iso_mms/asn1c/ServiceSupportOptions.c
|
|
./mms/iso_mms/asn1c/Integer8.c
|
|
./mms/iso_mms/asn1c/ConfirmedServiceResponse.c
|
|
./mms/iso_mms/asn1c/ParameterSupportOptions.c
|
|
./mms/iso_mms/asn1c/Integer16.c
|
|
./mms/iso_mms/asn1c/ber_tlv_length.c
|
|
./mms/iso_mms/asn1c/OCTET_STRING.c
|
|
./mms/iso_mms/asn1c/DefineNamedVariableListRequest.c
|
|
./mms/iso_mms/asn1c/FloatingPoint.c
|
|
./mms/iso_mms/asn1c/xer_encoder.c
|
|
./mms/iso_mms/asn1c/Unsigned8.c
|
|
./mms/iso_mms/asn1c/BOOLEAN.c
|
|
./mms/iso_mms/asn1c/INTEGER.c
|
|
./mms/iso_mms/asn1c/UnconfirmedPDU.c
|
|
./mms/iso_mms/asn1c/DataSequence.c
|
|
./mms/iso_mms/asn1c/constraints.c
|
|
./mms/iso_mms/asn1c/der_encoder.c
|
|
./mms/iso_mms/asn1c/VisibleString.c
|
|
./mms/iso_mms/asn1c/InitiateResponsePdu.c
|
|
./mms/iso_mms/asn1c/StructComponent.c
|
|
./mms/iso_mms/asn1c/Address.c
|
|
./mms/iso_mms/asn1c/Unsigned16.c
|
|
./mms/iso_mms/asn1c/ber_decoder.c
|
|
./mms/iso_mms/asn1c/per_support.c
|
|
./mms/iso_mms/asn1c/WriteResponse.c
|
|
./mms/iso_mms/asn1c/InitRequestDetail.c
|
|
./mms/iso_mms/asn1c/InitiateRequestPdu.c
|
|
./mms/iso_mms/asn1c/DefineNamedVariableListResponse.c
|
|
./mms/iso_mms/asn1c/NULL.c
|
|
./mms/iso_mms/asn1c/ListOfVariableSeq.c
|
|
./mms/iso_mms/asn1c/UtcTime.c
|
|
./mms/iso_mms/asn1c/ConcludeResponsePDU.c
|
|
./mms/iso_mms/asn1c/AccessResult.c
|
|
./mms/iso_mms/asn1c/Integer32.c
|
|
./mms/iso_mms/asn1c/GetNamedVariableListAttributesRequest.c
|
|
./mms/iso_mms/asn1c/VariableSpecification.c
|
|
./mms/iso_mms/asn1c/Unsigned32.c
|
|
./mms/iso_mms/asn1c/constr_CHOICE.c
|
|
./mms/iso_mms/asn1c/AlternateAccess.c
|
|
./mms/iso_mms/asn1c/ObjectClass.c
|
|
./mms/iso_mms/asn1c/InitResponseDetail.c
|
|
./mms/iso_mms/asn1c/ConfirmedResponsePdu.c
|
|
./mms/iso_mms/asn1c/GetVariableAccessAttributesResponse.c
|
|
./mms/iso_mms/asn1c/NativeInteger.c
|
|
./mms/iso_mms/asn1c/xer_decoder.c
|
|
./mms/iso_mms/asn1c/AlternateAccessSelection.c
|
|
./mms/iso_mms/asn1c/ConfirmedRequestPdu.c
|
|
./mms/iso_mms/asn1c/ConcludeRequestPDU.c
|
|
./mms/iso_mms/asn1c/WriteRequest.c
|
|
./mms/iso_mms/asn1c/RejectPDU.c
|
|
./mms/iso_mms/asn1c/TypeSpecification.c
|
|
./mms/iso_mms/asn1c/constr_TYPE.c
|
|
./mms/iso_mms/asn1c/GeneralizedTime.c
|
|
)
|
|
|
|
set (lib_goose_SRCS
|
|
./goose/goose_subscriber.c
|
|
./goose/goose_receiver.c
|
|
./goose/goose_publisher.c
|
|
)
|
|
|
|
set (lib_sv_SRCS
|
|
./sampled_values/sv_subscriber.c
|
|
./sampled_values/sv_publisher.c
|
|
)
|
|
|
|
if((WITH_MBEDTLS OR WITH_MBEDTLS3) AND (CONFIG_IEC61850_R_GOOSE OR CONFIG_IEC61850_R_SMV))
|
|
set (lib_rsession_SRCS
|
|
./r_session/r_session.c
|
|
./r_session/r_session_crypto_mbedtls.c
|
|
)
|
|
else()
|
|
set (lib_rsession_SRCS
|
|
)
|
|
endif()
|
|
|
|
if(CONFIG_IEC61850_SNTP_CLIENT)
|
|
set (lib_sntp_SRCS
|
|
./sntp/sntp_client.c
|
|
)
|
|
else()
|
|
set (lib_sntp_SRCS
|
|
)
|
|
endif()
|
|
|
|
set (lib_linux_SRCS
|
|
)
|
|
|
|
set (lib_windows_SRCS
|
|
)
|
|
|
|
set (lib_bsd_SRCS
|
|
)
|
|
|
|
IF(WIN32)
|
|
|
|
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/winpcap/Lib/wpcap.lib")
|
|
message("Found winpcap -> can compile with L2 GOOSE/SMV support")
|
|
set(WITH_WPCAP 1)
|
|
endif()
|
|
|
|
set_source_files_properties(${lib_asn1c_SRCS}
|
|
PROPERTIES LANGUAGE C)
|
|
|
|
IF(WITH_WPCAP)
|
|
ELSE()
|
|
add_definitions(-DEXCLUDE_ETHERNET_WINDOWS)
|
|
ENDIF()
|
|
|
|
include_directories(
|
|
../third_party/winpcap/include
|
|
)
|
|
|
|
include_directories(
|
|
../third_party/sqlite
|
|
)
|
|
|
|
IF(WITH_WPCAP OR CONFIG_IEC61850_R_GOOSE OR CONFIG_IEC61850_R_SMV)
|
|
set (library_SRCS
|
|
${lib_common_SRCS}
|
|
${lib_asn1c_SRCS}
|
|
${lib_goose_SRCS}
|
|
${lib_sv_SRCS}
|
|
${lib_rsession_SRCS}
|
|
${lib_windows_SRCS}
|
|
${lib_sntp_SRCS}
|
|
)
|
|
|
|
ELSE()
|
|
set (library_SRCS
|
|
${lib_common_SRCS}
|
|
${lib_asn1c_SRCS}
|
|
${lib_windows_SRCS}
|
|
${lib_sntp_SRCS}
|
|
)
|
|
|
|
ENDIF(WITH_WPCAP OR CONFIG_IEC61850_R_GOOSE OR CONFIG_IEC61850_R_SMV)
|
|
|
|
ELSEIF(UNIX)
|
|
IF(APPLE)
|
|
set (library_SRCS
|
|
${lib_common_SRCS}
|
|
${lib_asn1c_SRCS}
|
|
${lib_goose_SRCS}
|
|
${lib_sv_SRCS}
|
|
${lib_rsession_SRCS}
|
|
${lib_sntp_SRCS}
|
|
${lib_bsd_SRCS}
|
|
)
|
|
ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
|
|
set (library_SRCS
|
|
${lib_common_SRCS}
|
|
${lib_asn1c_SRCS}
|
|
${lib_goose_SRCS}
|
|
${lib_sv_SRCS}
|
|
${lib_rsession_SRCS}
|
|
${lib_sntp_SRCS}
|
|
${lib_bsd_SRCS}
|
|
)
|
|
ELSE()
|
|
set (library_SRCS
|
|
${lib_common_SRCS}
|
|
${lib_asn1c_SRCS}
|
|
${lib_goose_SRCS}
|
|
${lib_sv_SRCS}
|
|
${lib_rsession_SRCS}
|
|
${lib_sntp_SRCS}
|
|
${lib_linux_SRCS}
|
|
)
|
|
ENDIF(APPLE)
|
|
ENDIF(WIN32)
|
|
|
|
|
|
include (GenerateExportHeader)
|
|
|
|
set(RES_FILES "")
|
|
if ( WIN32 )
|
|
# Adding RC resource file for adding information to the archive
|
|
set(RES_FILES "${CMAKE_CURRENT_BINARY_DIR}/version.rc")
|
|
message(STATUS "Generating RC file : ${RES_FILES}")
|
|
configure_file(
|
|
${CMAKE_CURRENT_SOURCE_DIR}/version.rc.in
|
|
${RES_FILES}
|
|
@ONLY)
|
|
if( MINGW )
|
|
set(CMAKE_RC_COMPILER_INIT windres)
|
|
ENABLE_LANGUAGE(RC)
|
|
SET(CMAKE_RC_COMPILE_OBJECT
|
|
"<CMAKE_RC_COMPILER> <FLAGS> -O coff <DEFINES> -i <SOURCE> -o <OBJECT>")
|
|
endif(MINGW)
|
|
set(library_SRCS ${library_SRCS} ${RES_FILES})
|
|
endif( WIN32 )
|
|
|
|
add_library (iec61850-shared SHARED ${library_SRCS} )
|
|
|
|
set_target_properties(iec61850-shared PROPERTIES
|
|
OUTPUT_NAME iec61850
|
|
SOVERSION "${LIB_VERSION_MAJOR}.${LIB_VERSION_MINOR}.${LIB_VERSION_PATCH}"
|
|
)
|
|
|
|
target_compile_definitions(iec61850-shared PRIVATE EXPORT_FUNCTIONS_FOR_DLL)
|
|
|
|
target_link_libraries(iec61850-shared
|
|
hal-shared
|
|
)
|
|
|
|
GENERATE_EXPORT_HEADER(iec61850-shared
|
|
BASE_NAME iec61850-shared
|
|
EXPORT_MACRO_NAME iec61850-shared_EXPORT
|
|
EXPORT_FILE_NAME iec61850-shared_export.h
|
|
STATIC_DEFINE iec61850-shared_BUILT_AS_STATIC
|
|
)
|
|
|
|
add_library (iec61850 STATIC ${library_SRCS})
|
|
|
|
target_link_libraries(iec61850
|
|
hal
|
|
)
|
|
|
|
IF(UNIX)
|
|
IF (CONFIG_SYSTEM_HAS_CLOCK_GETTIME)
|
|
target_link_libraries (iec61850
|
|
-lpthread
|
|
-lm
|
|
-lrt
|
|
)
|
|
ELSE ()
|
|
target_link_libraries (iec61850
|
|
-lpthread
|
|
-lm
|
|
)
|
|
ENDIF (CONFIG_SYSTEM_HAS_CLOCK_GETTIME)
|
|
ENDIF(UNIX)
|
|
IF(MINGW)
|
|
target_link_libraries(iec61850-shared ws2_32 iphlpapi bcrypt)
|
|
target_link_libraries(iec61850 ws2_32 iphlpapi)
|
|
ENDIF(MINGW)
|
|
|
|
iF(WITH_WPCAP)
|
|
target_link_libraries(iec61850
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../third_party/winpcap/lib/wpcap.lib
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../third_party/winpcap/lib/packet.lib
|
|
)
|
|
target_link_libraries(iec61850-shared
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../third_party/winpcap/lib/wpcap.lib
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../third_party/winpcap/lib/packet.lib
|
|
)
|
|
|
|
ENDIF(WITH_WPCAP)
|
|
find_package(Doxygen)
|
|
if(DOXYGEN_FOUND)
|
|
configure_file(Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
|
|
add_custom_target(doc ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "Generating API documentation with Doxygen" VERBATIM)
|
|
|
|
configure_file(doxygen/Doxyfile.NET.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile.NET @ONLY)
|
|
add_custom_target(doc-net ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile.NET WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "Generating API documentation with Doxygen" VERBATIM)
|
|
|
|
endif(DOXYGEN_FOUND)
|
|
|
|
set(BINDIR "bin")
|
|
set(LIBDIR "lib")
|
|
if(UNIX)
|
|
# GNUInstallDirs is required for Debian multiarch
|
|
include(GNUInstallDirs)
|
|
set(LIBDIR ${CMAKE_INSTALL_LIBDIR})
|
|
set(BINDIR ${CMAKE_INSTALL_BINDIR})
|
|
|
|
configure_file(
|
|
${CMAKE_CURRENT_LIST_DIR}/libiec61850.pc.in
|
|
${CMAKE_CURRENT_BINARY_DIR}/libiec61850.pc @ONLY
|
|
)
|
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libiec61850.pc" DESTINATION "${CMAKE_INSTALL_PREFIX}/share/pkgconfig")
|
|
endif()
|
|
|
|
install (TARGETS iec61850 iec61850-shared
|
|
RUNTIME DESTINATION ${BINDIR} COMPONENT Applications
|
|
ARCHIVE DESTINATION ${LIBDIR} COMPONENT Libraries
|
|
LIBRARY DESTINATION ${LIBDIR} COMPONENT Libraries
|
|
)
|
|
|