aboutsummaryrefslogtreecommitdiffstats
path: root/cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake')
-rw-r--r--cmake/BuildDeps.cmake54
1 files changed, 42 insertions, 12 deletions
diff --git a/cmake/BuildDeps.cmake b/cmake/BuildDeps.cmake
index 890da57..b402510 100644
--- a/cmake/BuildDeps.cmake
+++ b/cmake/BuildDeps.cmake
@@ -32,7 +32,14 @@ endif()
# ======================================
# open62541
# ======================================
-if(NOT EXISTS "${OPEN62541_INSTALL_DIR}/lib/libopen62541.so")
+
+if(WIN32)
+ set(open62541_lib "open62541.lib")
+else()
+ set(open62541_lib "libopen62541.so")
+endif()
+
+if(NOT EXISTS "${OPEN62541_INSTALL_DIR}/lib/${open62541_lib}")
message(STATUS "Configuring open62541 in ${OPEN62541_BUILD_DIR}...")
set(_cmd
@@ -43,6 +50,7 @@ if(NOT EXISTS "${OPEN62541_INSTALL_DIR}/lib/libopen62541.so")
"${OPEN62541_BUILD_DIR}"
-G
Ninja
+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DCMAKE_INSTALL_PREFIX=${OPEN62541_INSTALL_DIR}
-DBUILD_SHARED_LIBS=ON
-DUA_ENABLE_ENCRYPTION=OPENSSL
@@ -77,9 +85,15 @@ endif()
# QtOpcUa
# ======================================
-find_program(QT_CMAKE_COMMAND bin/qt-cmake REQUIRED)
+find_program(QT_CMAKE_COMMAND NAMES qt-cmake qt-cmake.bat PATHS ${CMAKE_PREFIX_PATH} PATH_SUFFIXES bin REQUIRED)
-if(NOT EXISTS "${QTOPCUA_INSTALL_DIR}/lib/libQt6OpcUa.so")
+if(WIN32)
+ set(qtopcua_lib "Qt6OpcUa.lib")
+else()
+ set(qtopcua_lib "libQt6OpcUa.so")
+endif()
+
+if(NOT EXISTS "${QTOPCUA_INSTALL_DIR}/lib/${qtopcua_lib}")
message(STATUS "Configuring qtopcua in ${QTOPCUA_BUILD_DIR}...")
set(_cmd
@@ -90,10 +104,15 @@ if(NOT EXISTS "${QTOPCUA_INSTALL_DIR}/lib/libQt6OpcUa.so")
"${QTOPCUA_BUILD_DIR}"
-G
Ninja
+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DCMAKE_INSTALL_PREFIX=${QTOPCUA_INSTALL_DIR}
# Use our locally-built open62541, not the bundled copy
-DINPUT_open62541=system
-DCMAKE_PREFIX_PATH=${OPEN62541_INSTALL_DIR})
+ if(WIN32)
+ # Install with: winget install ShiningLight.OpenSSL.Dev
+ list(APPEND _cmd -DOPENSSL_ROOT_DIR:PATH="C:/Program Files/OpenSSL-Win64")
+ endif()
execute_process(COMMAND ${_cmd} RESULT_VARIABLE _result)
if(_result)
list(JOIN _cmd " " _cmd_str)
@@ -120,12 +139,23 @@ else()
message(STATUS "qtopcua already built, skipping")
endif()
-# The QtOpcUa backend plugin uses $ORIGIN-relative RUNPATH that resolves to
-# qtopcua-install/lib/. Symlink the open62541 libs there so dlopen finds them.
-file(GLOB _open62541_libs "${OPEN62541_INSTALL_DIR}/lib/libopen62541*")
-foreach(_lib ${_open62541_libs})
- get_filename_component(_name ${_lib} NAME)
- if(NOT EXISTS "${QTOPCUA_INSTALL_DIR}/lib/${_name}")
- file(CREATE_LINK ${_lib} "${QTOPCUA_INSTALL_DIR}/lib/${_name}" SYMBOLIC)
- endif()
-endforeach()
+if (WIN32)
+ # On Windows DLLs must be next to the .exe (no RPATH). Copy them to bin/.
+ file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
+ file(GLOB _dep_dlls
+ "${OPEN62541_INSTALL_DIR}/bin/*.dll"
+ "${QTOPCUA_INSTALL_DIR}/bin/*.dll")
+ foreach(_dll ${_dep_dlls})
+ file(COPY "${_dll}" DESTINATION "${CMAKE_BINARY_DIR}/bin")
+ endforeach()
+else()
+ # The QtOpcUa backend plugin uses $ORIGIN-relative RUNPATH that resolves to
+ # qtopcua-install/lib/. Symlink the open62541 libs there so dlopen finds them.
+ file(GLOB _open62541_libs "${OPEN62541_INSTALL_DIR}/lib/libopen62541*")
+ foreach(_lib ${_open62541_libs})
+ get_filename_component(_name ${_lib} NAME)
+ if(NOT EXISTS "${QTOPCUA_INSTALL_DIR}/lib/${_name}")
+ file(CREATE_LINK ${_lib} "${QTOPCUA_INSTALL_DIR}/lib/${_name}" SYMBOLIC)
+ endif()
+ endforeach()
+endif()