Skip to content

Commit 3904ef8

Browse files
committed
Leverage LSLCMake.cmake
1 parent 30c3c07 commit 3904ef8

1 file changed

Lines changed: 22 additions & 149 deletions

File tree

CMakeLists.txt

Lines changed: 22 additions & 149 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ if(LSL_SOURCE_DIR)
5252
add_library(LSL::lsl ALIAS lsl)
5353
endif()
5454
set(LSL_FOUND TRUE)
55+
include("${LSL_SOURCE_DIR}/cmake/LSLCMake.cmake")
5556
else()
5657
# Priority 2 & 3: Try to find installed liblsl
5758
set(_lsl_hints)
@@ -60,6 +61,9 @@ else()
6061
endif()
6162
# Common development layout hints (including CLion cmake-build-* directories)
6263
string(TOLOWER "${CMAKE_BUILD_TYPE}" _build_type_lower)
64+
if(NOT _build_type_lower)
65+
set(_build_type_lower "release")
66+
endif()
6367
if(MSVC)
6468
set(_clion_build_dir "cmake-build-${_build_type_lower}-visual-studio")
6569
else()
@@ -94,6 +98,7 @@ else()
9498

9599
if(LSL_FOUND)
96100
message(STATUS "Found installed liblsl: ${LSL_DIR}")
101+
include("${LSL_DIR}/LSLCMake.cmake")
97102
elseif(LSL_FETCH_IF_MISSING)
98103
# Priority 4: Fetch from GitHub
99104
message(STATUS "liblsl not found locally, fetching ${LSL_FETCH_REF} from GitHub...")
@@ -113,6 +118,7 @@ else()
113118
add_library(LSL::lsl ALIAS lsl)
114119
endif()
115120
set(LSL_FOUND TRUE)
121+
include("${liblsl_SOURCE_DIR}/cmake/LSLCMake.cmake")
116122
message(STATUS "liblsl fetched and configured")
117123
else()
118124
message(FATAL_ERROR
@@ -151,12 +157,7 @@ find_package(Threads REQUIRED)
151157
# =============================================================================
152158
# RPATH Configuration (must be set before targets are created)
153159
# =============================================================================
154-
if(APPLE)
155-
set(CMAKE_INSTALL_RPATH "@executable_path/../Frameworks")
156-
elseif(UNIX AND NOT ANDROID)
157-
set(CMAKE_INSTALL_RPATH "$ORIGIN;$ORIGIN/../lib")
158-
endif()
159-
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
160+
LSL_configure_rpath()
160161

161162
# =============================================================================
162163
# Application Target
@@ -247,171 +248,43 @@ install(TARGETS ${PROJECT_NAME}
247248
# =============================================================================
248249
# Bundle liblsl with the application
249250
# =============================================================================
250-
# Detect if liblsl is from FetchContent (regular target) or find_package (imported)
251-
set(_lsl_is_fetched FALSE)
252-
if(TARGET lsl)
253-
get_target_property(_lsl_imported lsl IMPORTED)
254-
if(NOT _lsl_imported)
255-
set(_lsl_is_fetched TRUE)
256-
endif()
257-
endif()
258-
259-
if(APPLE)
260-
# macOS: Install framework into app bundle
261-
install(CODE "
262-
set(_lsl_binary \"$<TARGET_FILE:LSL::lsl>\")
263-
cmake_path(GET _lsl_binary PARENT_PATH _lsl_fw_dir) # Versions/A
264-
cmake_path(GET _lsl_fw_dir PARENT_PATH _lsl_fw_dir) # Versions
265-
cmake_path(GET _lsl_fw_dir PARENT_PATH _lsl_fw_dir) # lsl.framework
266-
message(STATUS \"Bundling lsl.framework from: \${_lsl_fw_dir}\")
267-
file(COPY \"\${_lsl_fw_dir}\"
268-
DESTINATION \"\${CMAKE_INSTALL_PREFIX}/${INSTALL_BINDIR}/${PROJECT_NAME}.app/Contents/Frameworks\"
269-
USE_SOURCE_PERMISSIONS
270-
)
271-
")
272-
elseif(WIN32)
273-
if(_lsl_is_fetched)
274-
install(TARGETS lsl RUNTIME DESTINATION "${INSTALL_BINDIR}")
275-
else()
276-
install(IMPORTED_RUNTIME_ARTIFACTS LSL::lsl RUNTIME DESTINATION "${INSTALL_BINDIR}")
277-
endif()
278-
else()
279-
# Linux: Use modern CMake install commands that handle symlinks properly
280-
if(_lsl_is_fetched)
281-
install(TARGETS lsl LIBRARY DESTINATION "${INSTALL_LIBDIR}")
282-
else()
283-
install(IMPORTED_RUNTIME_ARTIFACTS LSL::lsl LIBRARY DESTINATION "${INSTALL_LIBDIR}")
284-
endif()
285-
endif()
251+
LSL_install_liblsl(
252+
DESTINATION "${INSTALL_LIBDIR}"
253+
FRAMEWORK_DESTINATION "${INSTALL_BINDIR}/${PROJECT_NAME}.app/Contents/Frameworks"
254+
)
286255

287256
# =============================================================================
288257
# Qt Deployment
289258
# =============================================================================
290-
get_target_property(QT_QMAKE_EXECUTABLE Qt6::qmake IMPORTED_LOCATION)
291-
get_filename_component(QT_BIN_DIR "${QT_QMAKE_EXECUTABLE}" DIRECTORY)
292-
293-
if(WIN32)
294-
find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${QT_BIN_DIR}")
295-
if(WINDEPLOYQT_EXECUTABLE)
296-
install(CODE "
297-
message(STATUS \"Running windeployqt...\")
298-
execute_process(
299-
COMMAND \"${WINDEPLOYQT_EXECUTABLE}\"
300-
--no-translations
301-
--no-system-d3d-compiler
302-
--no-opengl-sw
303-
--no-compiler-runtime
304-
--dir \"\${CMAKE_INSTALL_PREFIX}/${INSTALL_BINDIR}\"
305-
\"\${CMAKE_INSTALL_PREFIX}/${INSTALL_BINDIR}/${PROJECT_NAME}.exe\"
306-
)
307-
")
308-
endif()
309-
elseif(APPLE)
310-
find_program(MACDEPLOYQT_EXECUTABLE macdeployqt HINTS "${QT_BIN_DIR}")
311-
if(MACDEPLOYQT_EXECUTABLE)
312-
install(CODE "
313-
message(STATUS \"Running macdeployqt...\")
314-
execute_process(
315-
COMMAND \"${MACDEPLOYQT_EXECUTABLE}\"
316-
\"\${CMAKE_INSTALL_PREFIX}/${INSTALL_BINDIR}/${PROJECT_NAME}.app\"
317-
-verbose=0
318-
-always-overwrite
319-
RESULT_VARIABLE _deploy_result
320-
ERROR_QUIET
321-
)
322-
if(NOT _deploy_result EQUAL 0)
323-
message(WARNING \"macdeployqt returned \${_deploy_result}\")
324-
endif()
325-
")
326-
endif()
327-
endif()
259+
LSL_deploy_qt(TARGET "${PROJECT_NAME}" DESTINATION "${INSTALL_BINDIR}")
328260

329261
# =============================================================================
330262
# MinGW Runtime Deployment
331-
# Copy MinGW runtime DLLs so executables work outside the build environment
332263
# =============================================================================
333-
if(MINGW)
334-
get_filename_component(MINGW_BIN_DIR "${CMAKE_CXX_COMPILER}" DIRECTORY)
335-
set(MINGW_RUNTIME_DLLS
336-
"${MINGW_BIN_DIR}/libgcc_s_seh-1.dll"
337-
"${MINGW_BIN_DIR}/libstdc++-6.dll"
338-
"${MINGW_BIN_DIR}/libwinpthread-1.dll"
339-
)
340-
foreach(_dll ${MINGW_RUNTIME_DLLS})
341-
if(EXISTS "${_dll}")
342-
install(FILES "${_dll}" DESTINATION "${INSTALL_BINDIR}")
343-
endif()
344-
endforeach()
345-
endif()
264+
LSL_install_mingw_runtime(DESTINATION "${INSTALL_BINDIR}")
346265

347266
# =============================================================================
348267
# macOS Code Signing
349268
# =============================================================================
350-
if(APPLE)
351-
install(CODE "
352-
set(_app \"\${CMAKE_INSTALL_PREFIX}/${INSTALL_BINDIR}/${PROJECT_NAME}.app\")
353-
set(_ent \"${CMAKE_CURRENT_SOURCE_DIR}/app.entitlements\")
354-
355-
message(STATUS \"Signing app bundle...\")
356-
execute_process(
357-
COMMAND codesign --force --deep --sign - --entitlements \"\${_ent}\" \"\${_app}\"
358-
RESULT_VARIABLE _sign_result
359-
)
360-
361-
execute_process(COMMAND codesign --verify --verbose \"\${_app}\" RESULT_VARIABLE _verify_result)
362-
if(_verify_result EQUAL 0)
363-
message(STATUS \"App bundle signature verified successfully\")
364-
else()
365-
message(WARNING \"App bundle signature verification failed!\")
366-
endif()
367-
")
368-
endif()
269+
LSL_codesign(
270+
TARGET "${PROJECT_NAME}"
271+
DESTINATION "${INSTALL_BINDIR}"
272+
ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/app.entitlements"
273+
BUNDLE
274+
)
369275

370276
# =============================================================================
371277
# CPack Configuration
372278
# =============================================================================
373-
374-
# Detect target architecture
375-
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64|ARM64)")
376-
set(PACKAGE_ARCH "arm64")
377-
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|amd64|AMD64)")
378-
set(PACKAGE_ARCH "amd64")
379-
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv7|arm)")
380-
set(PACKAGE_ARCH "armhf")
381-
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(i.86|x86)")
382-
set(PACKAGE_ARCH "i386")
383-
else()
384-
set(PACKAGE_ARCH "${CMAKE_SYSTEM_PROCESSOR}")
385-
endif()
386-
387-
# Detect OS for package naming
388-
if(APPLE)
389-
set(PACKAGE_OS "macOS")
390-
elseif(WIN32)
391-
set(PACKAGE_OS "Win")
392-
else()
393-
find_program(LSB_RELEASE lsb_release)
394-
if(LSB_RELEASE)
395-
execute_process(COMMAND ${LSB_RELEASE} -cs
396-
OUTPUT_VARIABLE _codename
397-
OUTPUT_STRIP_TRAILING_WHITESPACE
398-
ERROR_QUIET)
399-
if(_codename AND NOT _codename STREQUAL "n/a")
400-
set(PACKAGE_OS "${_codename}")
401-
else()
402-
set(PACKAGE_OS "Linux")
403-
endif()
404-
else()
405-
set(PACKAGE_OS "Linux")
406-
endif()
407-
endif()
279+
LSL_get_target_arch()
280+
LSL_get_os_name()
408281

409282
set(CPACK_PACKAGE_NAME "${PROJECT_NAME}")
410283
set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}")
411284
set(CPACK_PACKAGE_VENDOR "Labstreaminglayer")
412285
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_DESCRIPTION}")
413286
set(CPACK_PACKAGE_HOMEPAGE_URL "${PROJECT_HOMEPAGE_URL}")
414-
set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}-${PACKAGE_OS}_${PACKAGE_ARCH}")
287+
set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}-${LSL_OS}_${LSL_ARCH}")
415288
set(CPACK_STRIP_FILES ON)
416289

417290
if(WIN32)

0 commit comments

Comments
 (0)