blob: a001e3401d9210791bbe82bd62909d0498bb3b77 [file] [log] [blame]
#*******************************************************************************************
# Copyright (c) 2015-2016 Florian Froschermeier <florian.froschermeier@tum.de>, fortiss GmbH
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License 2.0 which is available at
# http://www.eclipse.org/legal/epl-2.0.
#
# SPDX-License-Identifier: EPL-2.0
#
# Contributors:
# Florian Froschermeier
# - initial integration of OPC Unified Architecture into FORTE
# Stefan Profanter
# - refactoring and adaption to new concept
# ******************************************************************************************
#############################################################################
# OPC Unified Architecture (UA) integration.
# For integration the open-source OPC-UA communication stack/library
# from (open62541 - http://open62541.org/) was used.
#############################################################################
# option to enable OPC UA with cmake
forte_add_network_layer(OPC_UA OFF "opc_ua" COPC_UA_Layer opcua_layer "Enable OPC UA communication layer")
forte_add_include_directories(${CMAKE_CURRENT_SOURCE_DIR})
if (FORTE_COM_OPC_UA)
forte_add_sourcefile_with_path_cpp(${CMAKE_BINARY_DIR}/com/opc_ua/opcua_nodesets.cpp) # created file
forte_add_sourcefile_with_path_cpp(${CMAKE_BINARY_DIR}/com/opc_ua/opcua_types.cpp) # created file
SET(FORTE_COM_OPC_UA_PORT 4840 CACHE STRING "Port where the OPC_UA server will listen")
SET(FORTE_COM_OPC_UA_SERVER_PUB_INTERVAL 100.0 CACHE STRING "OPC UA Server publishing interval in ms")
SET(FORTE_COM_OPC_UA_CLIENT_PUB_INTERVAL 100.0 CACHE STRING "OPC UA Client requested publishing interval via OPC UA data subscription in ms")
SET(FORTE_COM_OPC_UA_MULTICAST OFF CACHE BOOL "Enable multicast support for OPC UA and registering with LDS")
SET(FORTE_COM_OPC_UA_INCLUDE_DIR "" CACHE PATH "ABSOLUTE path to open62541.h file in the OPC UA project")
SET(FORTE_COM_OPC_UA_LIB_DIR "" CACHE PATH "ABSOLUTE path to OPC UA folder with object library FORTE_COM_OPC_UA_LIB")
SET(FORTE_COM_OPC_UA_CUSTOM_HOSTNAME CACHE STRING "Custom hostname which is used for the OPC UA app name and app uri")
SET(FORTE_COM_OPC_UA_ENCRYPTION OFF CACHE BOOL "The open62541 lilbrary was compiled using encryption")
# OPEN62541 library to be linked to forte
IF ("${FORTE_ARCHITECTURE}" STREQUAL "Win32")
SET(FORTE_COM_OPC_UA_LIB "open62541.lib" CACHE STRING "OPC_UA Library file in FORTE_COM_OPC_UA_DIR to be linked to forte (normally with name libopen62541 and a extension according to the type and OS)")
forte_add_link_library("Iphlpapi") #pubsub uses functions in this library
forte_add_definition("-DUA_ARCHITECTURE_WIN32")
ELSE ()
SET(FORTE_COM_OPC_UA_LIB "libopen62541.a" CACHE STRING "OPC_UA Library file in FORTE_COM_OPC_UA_DIR to be linked to forte (normally with name libopen62541 and a extension according to the type and OS)")
IF ("${FORTE_ARCHITECTURE}" STREQUAL "VxWorks")
forte_add_definition("-DUA_ARCHITECTURE_VXWORKS")
ELSEIF ("${FORTE_ARCHITECTURE}" STREQUAL "Nios2")
forte_add_definition("-DUA_ARCHITECTURE_ECOS")
ELSEIF ("${FORTE_ARCHITECTURE}" STREQUAL "FreeRTOSLwIP")
forte_add_definition("-DUA_ARCHITECTURE_FREERTOSLWIP")
ELSE()
forte_add_definition("-DUA_ARCHITECTURE_POSIX")
ENDIF("${FORTE_ARCHITECTURE}" STREQUAL "VxWorks")
ENDIF ("${FORTE_ARCHITECTURE}" STREQUAL "Win32")
forte_add_include_system_directories(${FORTE_COM_OPC_UA_INCLUDE_DIR})
forte_add_link_directories(${FORTE_COM_OPC_UA_LIB_DIR})
forte_add_link_library_beginning(${FORTE_COM_OPC_UA_LIB})
forte_add_handler(COPC_UA_Local_Handler opcua_local_handler)
forte_add_handler(COPC_UA_Remote_Handler opcua_remote_handler)
forte_add_sourcefile_hcpp(opcua_layer opcua_local_handler opcua_helper opcua_remote_handler opcua_handler_abstract opcua_client_information opcua_action_info
opcua_client_config_parser)
if (NOT EXISTS ${FORTE_COM_OPC_UA_INCLUDE_DIR})
message(SEND_ERROR "FORTE_COM_OPC_UA_INCLUDE_DIR not set or does not exist")
endif (NOT EXISTS ${FORTE_COM_OPC_UA_INCLUDE_DIR})
file(TO_CMAKE_PATH "${FORTE_COM_OPC_UA_LIB_DIR}/${FORTE_COM_OPC_UA_LIB}" FORTE_COM_OPC_UA_LIB_PATH)
if (NOT EXISTS ${FORTE_COM_OPC_UA_LIB} AND NOT EXISTS ${FORTE_COM_OPC_UA_LIB_PATH})
message(SEND_ERROR "OPC UA library not found '${FORTE_COM_OPC_UA_LIB}'. Check the value of FORTE_COM_OPC_UA_LIB_DIR and optionally define an absolute path for FORTE_COM_OPC_UA_LIB.")
endif()
forte_add_custom_configuration("#define FORTE_COM_OPC_UA_PORT ${FORTE_COM_OPC_UA_PORT}")
forte_add_custom_configuration("extern TForteUInt16 gOpcuaServerPort\;")
forte_add_custom_configuration("#include <string>")
forte_add_custom_configuration("extern std::string gOpcuaClientConfigFile\;")
forte_add_custom_configuration("#define FORTE_COM_OPC_UA_SERVER_PUB_INTERVAL ${FORTE_COM_OPC_UA_SERVER_PUB_INTERVAL}")
forte_add_custom_configuration("#define FORTE_COM_OPC_UA_CLIENT_PUB_INTERVAL ${FORTE_COM_OPC_UA_CLIENT_PUB_INTERVAL}")
forte_add_custom_configuration("#cmakedefine FORTE_COM_OPC_UA")
forte_add_custom_configuration("#cmakedefine FORTE_COM_OPC_UA_MULTICAST")
forte_add_custom_configuration("#cmakedefine FORTE_COM_OPC_UA_CUSTOM_HOSTNAME \"${FORTE_COM_OPC_UA_CUSTOM_HOSTNAME}\"")
forte_opcua_add_type(forte_localizedtext LocalizedText UA_TYPES_LOCALIZEDTEXT)
add_subdirectory(FBs)
add_subdirectory(types)
if(FORTE_COM_OPC_UA_ENCRYPTION)
SET(FORTE_COM_OPC_UA_ENCRYPTION_INCLUDE_DIR "" CACHE STRING "ABSOLUTE path to encryption headers")
SET(FORTE_COM_OPC_UA_ENCRYPTION_LIB_DIR "" CACHE STRING "ABSOLUTE path to encryption libraries")
forte_add_include_system_directories(${FORTE_COM_OPC_UA_ENCRYPTION_INCLUDE_DIR})
forte_add_link_directories(${FORTE_COM_OPC_UA_ENCRYPTION_LIB_DIR})
forte_add_link_library("libmbedcrypto.a")
forte_add_link_library("libmbedtls.a")
forte_add_link_library("libmbedx509.a")
endif()
endif (FORTE_COM_OPC_UA)