Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/cmake-multi-platform.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ jobs:
os: [ubuntu-latest, windows-latest]
build_type: [Release]
c_compiler: [gcc, clang, cl]
output_type: [STATIC, SHARED, SHARED_VERSIONED]
include:
# Windows + MSVC
- os: windows-latest
Expand Down Expand Up @@ -56,7 +57,7 @@ jobs:

- name: Configure CMake
# Single-line command works on both Windows (PowerShell) & Linux (Bash).
run: cmake -S . -B build -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -Dqualisys_cpp_sdk_BUILD_TESTS=ON
run: cmake -S . -B build -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -Dqualisys_cpp_sdk_OUTPUT_TYPE=${{ matrix.output_type}} -Dqualisys_cpp_sdk_BUILD_TESTS=ON

- name: Build
# On Windows + MSVC (multi-config generator), --config picks Release/Debug.
Expand Down
66 changes: 55 additions & 11 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,12 +1,32 @@
cmake_minimum_required(VERSION 3.8)
project(qualisys_cpp_sdk)
project(qualisys_cpp_sdk VERSION 1.0.0)

option(${PROJECT_NAME}_BUILD_EXAMPLES "Build examples" OFF)
option(${PROJECT_NAME}_BUILD_TESTS "Build tests" OFF)

if(NOT DEFINED ${PROJECT_NAME}_OUTPUT_TYPE)
set(${PROJECT_NAME}_OUTPUT_TYPE "STATIC")
endif()

if(${PROJECT_NAME}_OUTPUT_TYPE STREQUAL "STATIC")
message(STATUS "Building a static library.")
set(LIB_TYPE "STATIC")
set(CMAKE_POSITION_INDEPENDENT_CODE OFF)
elseif(${PROJECT_NAME}_OUTPUT_TYPE STREQUAL "SHARED")
message(STATUS "Building a shared library.")
set(LIB_TYPE "SHARED")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
elseif(${PROJECT_NAME}_OUTPUT_TYPE STREQUAL "SHARED_VERSIONED")
message(STATUS "Building a versioned shared library.")
set(LIB_TYPE "SHARED")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
else()
message(FATAL_ERROR "Invalid ${PROJECT_NAME}_OUTPUT_TYPE " ${${PROJECT_NAME}_OUTPUT_TYPE})
endif()

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")

add_library(${PROJECT_NAME}
add_library(${PROJECT_NAME} ${LIB_TYPE}
Network.cpp
RTPacket.cpp
RTProtocol.cpp
Expand All @@ -26,24 +46,47 @@ target_include_directories(${PROJECT_NAME}
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>/External/tinyxml2
)

if(WIN32)
target_link_libraries(${PROJECT_NAME}
PUBLIC
$<$<STREQUAL:"${CMAKE_CXX_COMPILER_ID}","MSVC">:ws2_32.lib iphlpapi.lib>
$<$<STREQUAL:"${CMAKE_CXX_COMPILER_ID}","GNU">:ws2_32 iphlpapi>
)
endif()

target_link_libraries(${PROJECT_NAME}
PUBLIC
$<$<STREQUAL:$<PLATFORM_ID>,Windows>:ws2_32>
$<$<STREQUAL:$<PLATFORM_ID>,Windows>:iphlpapi>
)

# Enable C++14
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_14)
set_target_properties(${PROJECT_NAME}
PROPERTIES
CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS OFF
DEBUG_POSTFIX "-d"
)

if(LIB_TYPE STREQUAL "SHARED")
if(WIN32)
set_target_properties(${PROJECT_NAME} PROPERTIES
WINDOWS_EXPORT_ALL_SYMBOLS ON
)
endif()

if(NOT MSVC)
set_target_properties(${PROJECT_NAME} PROPERTIES
CMAKE_CXX_VISIBILITY_PRESET hidden
VISIBILITY_INLINES_HIDDEN ON
)
endif()

if (UNIX)
set_target_properties(${PROJECT_NAME} PROPERTIES
BUILD_RPATH "$ORIGIN"
INSTALL_RPATH "$ORIGIN"
)
endif()
endif()

# Apply versioning suffix if shared and requested
if(${PROJECT_NAME}_OUTPUT_TYPE STREQUAL "SHARED_VERSIONED")
set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}-${PROJECT_VERSION}")
endif()

# ----------- INSTALL & EXPORT -----------

include(GNUInstallDirs)
Expand Down Expand Up @@ -98,4 +141,5 @@ endif ()
if(${PROJECT_NAME}_BUILD_TESTS)
enable_testing()
add_subdirectory(Tests)
set(${PROJECT_NAME}_OUTPUT_TYPE ${qualisys_cpp_sdk_OUTPUT_TYPE} CACHE BOOL "qualisys_cpp_sdk build type")
endif()
23 changes: 23 additions & 0 deletions Tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,29 @@ target_link_libraries(${PROJECT_NAME}
doctest::doctest
)

# Ensure if shared library, that it's found at runtime
if(NOT qualisys_cpp_sdk_OUTPUT_TYPE STREQUAL "STATIC")
target_compile_definitions(${PROJECT_NAME} PRIVATE QUALISYS_SDK_SHARED)

if (UNIX)
set_target_properties(${PROJECT_NAME} PROPERTIES
BUILD_RPATH "${CMAKE_BINARY_DIR}"
INSTALL_RPATH "$ORIGIN"
)
elseif(WIN32)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"$<TARGET_FILE:qualisys_cpp_sdk>"
"$<TARGET_FILE_DIR:${PROJECT_NAME}>"
)
else()
set_target_properties(${PROJECT_NAME} PROPERTIES
BUILD_RPATH "$ORIGIN"
INSTALL_RPATH "$ORIGIN"
)
endif()
endif()

target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_17)

if(MSVC)
Expand Down
Loading