From c28f1c7eeb460d14ee0428f42db0bb08835edb0b Mon Sep 17 00:00:00 2001 From: Charles Tytler Date: Tue, 13 Jan 2026 22:36:25 -0800 Subject: [PATCH 01/21] Autogenerated conversion of .sln to cmake using cmake_converter --- Sources/backend-cpp/ElgatoSD/CMakeLists.txt | 132 ++++++++++ .../SimulatorInterface/CMakeLists.txt | 132 ++++++++++ .../StreamdeckContext/CMakeLists.txt | 135 ++++++++++ .../StreamdeckInterface/CMakeLists.txt | 169 +++++++++++++ Sources/backend-cpp/Test/CMakeLists.txt | 157 ++++++++++++ Sources/backend-cpp/Utilities/CMakeLists.txt | 129 ++++++++++ .../backend-cpp/Windows/CMake/Default.cmake | 65 +++++ .../Windows/CMake/DefaultCXX.cmake | 12 + .../Windows/CMake/DefaultFortran.cmake | 12 + Sources/backend-cpp/Windows/CMake/Utils.cmake | 234 ++++++++++++++++++ Sources/backend-cpp/Windows/CMakeLists.txt | 89 +++++++ Tools/SocketTester/CMakeLists.txt | 149 +++++++++++ 12 files changed, 1415 insertions(+) create mode 100644 Sources/backend-cpp/ElgatoSD/CMakeLists.txt create mode 100644 Sources/backend-cpp/SimulatorInterface/CMakeLists.txt create mode 100644 Sources/backend-cpp/StreamdeckContext/CMakeLists.txt create mode 100644 Sources/backend-cpp/StreamdeckInterface/CMakeLists.txt create mode 100644 Sources/backend-cpp/Test/CMakeLists.txt create mode 100644 Sources/backend-cpp/Utilities/CMakeLists.txt create mode 100644 Sources/backend-cpp/Windows/CMake/Default.cmake create mode 100644 Sources/backend-cpp/Windows/CMake/DefaultCXX.cmake create mode 100644 Sources/backend-cpp/Windows/CMake/DefaultFortran.cmake create mode 100644 Sources/backend-cpp/Windows/CMake/Utils.cmake create mode 100644 Sources/backend-cpp/Windows/CMakeLists.txt create mode 100644 Tools/SocketTester/CMakeLists.txt diff --git a/Sources/backend-cpp/ElgatoSD/CMakeLists.txt b/Sources/backend-cpp/ElgatoSD/CMakeLists.txt new file mode 100644 index 00000000..be510556 --- /dev/null +++ b/Sources/backend-cpp/ElgatoSD/CMakeLists.txt @@ -0,0 +1,132 @@ +set(PROJECT_NAME ElgatoSD) + +################################################################################ +# Source groups +################################################################################ +set(Sources + "@(_WildCardClCompile)" +) +source_group("Sources" FILES ${Sources}) + +set(ALL_FILES + ${Sources} +) + +################################################################################ +# Target +################################################################################ +add_library(${PROJECT_NAME} STATIC ${ALL_FILES}) + +use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}") +set(ROOT_NAMESPACE ElgatoSD) + +set_target_properties(${PROJECT_NAME} PROPERTIES + VS_GLOBAL_KEYWORD "Win32Proj" +) +################################################################################ +# Output directory +################################################################################ +if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + set_target_properties(${PROJECT_NAME} PROPERTIES + OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}/${CMAKE_VS_PLATFORM_NAME}/$/" + OUTPUT_DIRECTORY_RELEASE "${CMAKE_SOURCE_DIR}/${CMAKE_VS_PLATFORM_NAME}/$/" + ) +endif() +if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + set_target_properties(${PROJECT_NAME} PROPERTIES + INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE" + ) +elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + set_target_properties(${PROJECT_NAME} PROPERTIES + INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE" + ) +endif() +################################################################################ +# Compile definitions +################################################################################ +if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + target_compile_definitions(${PROJECT_NAME} PRIVATE + "$<$:" + "_DEBUG" + ">" + "$<$:" + "NDEBUG" + ">" + "_CONSOLE;" + "UNICODE;" + "_UNICODE" + ) +elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + target_compile_definitions(${PROJECT_NAME} PRIVATE + "$<$:" + "_DEBUG" + ">" + "$<$:" + "NDEBUG" + ">" + "WIN32;" + "_CONSOLE;" + "UNICODE;" + "_UNICODE" + ) +endif() + +################################################################################ +# Compile and link options +################################################################################ +if(MSVC) + if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + target_compile_options(${PROJECT_NAME} PRIVATE + $<$: + /Oi; + /Gy + > + /permissive-; + /std:c++17; + /sdl; + /W3; + ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; + /Zc:__cplusplus; + ${DEFAULT_CXX_EXCEPTION_HANDLING}; + /Y- + ) + elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + target_compile_options(${PROJECT_NAME} PRIVATE + $<$: + /Oi; + /Gy + > + /permissive-; + /std:c++17; + /sdl; + /W3; + ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; + /Zc:__cplusplus; + ${DEFAULT_CXX_EXCEPTION_HANDLING}; + /Y- + ) + endif() + if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + target_link_options(${PROJECT_NAME} PRIVATE + $<$: + /OPT:REF; + /OPT:ICF + > + /SUBSYSTEM:CONSOLE + ) + elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + target_link_options(${PROJECT_NAME} PRIVATE + $<$: + /OPT:REF; + /OPT:ICF + > + /SUBSYSTEM:CONSOLE + ) + endif() +endif() + +################################################################################ +# Dependencies +################################################################################ +use_package(${PROJECT_NAME} Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn 1.8.1.7) +use_package(${PROJECT_NAME} nlohmann.json 3.11.2) diff --git a/Sources/backend-cpp/SimulatorInterface/CMakeLists.txt b/Sources/backend-cpp/SimulatorInterface/CMakeLists.txt new file mode 100644 index 00000000..7fbb68b5 --- /dev/null +++ b/Sources/backend-cpp/SimulatorInterface/CMakeLists.txt @@ -0,0 +1,132 @@ +set(PROJECT_NAME SimulatorInterface) + +################################################################################ +# Source groups +################################################################################ +set(Sources + "@(_WildCardClCompile)" +) +source_group("Sources" FILES ${Sources}) + +set(ALL_FILES + ${Sources} +) + +################################################################################ +# Target +################################################################################ +add_library(${PROJECT_NAME} STATIC ${ALL_FILES}) + +use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}") +set(ROOT_NAMESPACE SimulatorInterface) + +set_target_properties(${PROJECT_NAME} PROPERTIES + VS_GLOBAL_KEYWORD "Win32Proj" +) +################################################################################ +# Output directory +################################################################################ +if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + set_target_properties(${PROJECT_NAME} PROPERTIES + OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}/${CMAKE_VS_PLATFORM_NAME}/$/" + OUTPUT_DIRECTORY_RELEASE "${CMAKE_SOURCE_DIR}/${CMAKE_VS_PLATFORM_NAME}/$/" + ) +endif() +if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + set_target_properties(${PROJECT_NAME} PROPERTIES + INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE" + ) +elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + set_target_properties(${PROJECT_NAME} PROPERTIES + INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE" + ) +endif() +################################################################################ +# Compile definitions +################################################################################ +if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + target_compile_definitions(${PROJECT_NAME} PRIVATE + "$<$:" + "_DEBUG" + ">" + "$<$:" + "NDEBUG" + ">" + "_CONSOLE;" + "UNICODE;" + "_UNICODE" + ) +elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + target_compile_definitions(${PROJECT_NAME} PRIVATE + "$<$:" + "_DEBUG" + ">" + "$<$:" + "NDEBUG" + ">" + "WIN32;" + "_CONSOLE;" + "UNICODE;" + "_UNICODE" + ) +endif() + +################################################################################ +# Compile and link options +################################################################################ +if(MSVC) + if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + target_compile_options(${PROJECT_NAME} PRIVATE + $<$: + /Oi; + /Gy + > + /permissive-; + /std:c++17; + /sdl; + /W3; + ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; + ${DEFAULT_CXX_EXCEPTION_HANDLING} + ) + elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + target_compile_options(${PROJECT_NAME} PRIVATE + $<$: + /Oi; + /Gy + > + /permissive-; + /std:c++17; + /sdl; + /W3; + ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; + ${DEFAULT_CXX_EXCEPTION_HANDLING} + ) + endif() + if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + target_link_options(${PROJECT_NAME} PRIVATE + $<$: + /OPT:REF; + /OPT:ICF + > + /SUBSYSTEM:CONSOLE + ) + elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + target_link_options(${PROJECT_NAME} PRIVATE + $<$: + /OPT:REF; + /OPT:ICF + > + /SUBSYSTEM:CONSOLE + ) + endif() +endif() + +################################################################################ +# Dependencies +################################################################################ +add_dependencies(${PROJECT_NAME} + Utilities +) + +use_package(${PROJECT_NAME} Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn 1.8.1.7) +use_package(${PROJECT_NAME} nlohmann.json 3.11.2) diff --git a/Sources/backend-cpp/StreamdeckContext/CMakeLists.txt b/Sources/backend-cpp/StreamdeckContext/CMakeLists.txt new file mode 100644 index 00000000..3f5fa51e --- /dev/null +++ b/Sources/backend-cpp/StreamdeckContext/CMakeLists.txt @@ -0,0 +1,135 @@ +set(PROJECT_NAME StreamdeckContext) + +################################################################################ +# Source groups +################################################################################ +set(Sources + "@(_WildCardClCompile)" +) +source_group("Sources" FILES ${Sources}) + +set(ALL_FILES + ${Sources} +) + +################################################################################ +# Target +################################################################################ +add_library(${PROJECT_NAME} STATIC ${ALL_FILES}) + +use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}") +set(ROOT_NAMESPACE StreamdeckContext) + +set_target_properties(${PROJECT_NAME} PROPERTIES + VS_GLOBAL_KEYWORD "Win32Proj" +) +################################################################################ +# Output directory +################################################################################ +if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + set_target_properties(${PROJECT_NAME} PROPERTIES + OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}/${CMAKE_VS_PLATFORM_NAME}/$/" + OUTPUT_DIRECTORY_RELEASE "${CMAKE_SOURCE_DIR}/${CMAKE_VS_PLATFORM_NAME}/$/" + ) +endif() +if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + set_target_properties(${PROJECT_NAME} PROPERTIES + INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE" + ) +elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + set_target_properties(${PROJECT_NAME} PROPERTIES + INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE" + ) +endif() +################################################################################ +# Compile definitions +################################################################################ +if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + target_compile_definitions(${PROJECT_NAME} PRIVATE + "$<$:" + "_DEBUG" + ">" + "$<$:" + "NDEBUG" + ">" + "_CONSOLE;" + "UNICODE;" + "_UNICODE" + ) +elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + target_compile_definitions(${PROJECT_NAME} PRIVATE + "$<$:" + "_DEBUG" + ">" + "$<$:" + "NDEBUG" + ">" + "WIN32;" + "_CONSOLE;" + "UNICODE;" + "_UNICODE" + ) +endif() + +################################################################################ +# Compile and link options +################################################################################ +if(MSVC) + if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + target_compile_options(${PROJECT_NAME} PRIVATE + $<$: + /Oi; + /Gy + > + /permissive-; + /std:c++17; + /sdl; + /W3; + ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; + /Zc:__cplusplus; + ${DEFAULT_CXX_EXCEPTION_HANDLING} + ) + elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + target_compile_options(${PROJECT_NAME} PRIVATE + $<$: + /Oi; + /Gy + > + /permissive-; + /std:c++17; + /sdl; + /W3; + ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; + ${DEFAULT_CXX_EXCEPTION_HANDLING} + ) + endif() + if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + target_link_options(${PROJECT_NAME} PRIVATE + $<$: + /OPT:REF; + /OPT:ICF + > + /SUBSYSTEM:CONSOLE + ) + elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + target_link_options(${PROJECT_NAME} PRIVATE + $<$: + /OPT:REF; + /OPT:ICF + > + /SUBSYSTEM:CONSOLE + ) + endif() +endif() + +################################################################################ +# Dependencies +################################################################################ +add_dependencies(${PROJECT_NAME} + ElgatoSD + SimulatorInterface + Utilities +) + +use_package(${PROJECT_NAME} Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn 1.8.1.7) +use_package(${PROJECT_NAME} nlohmann.json 3.11.2) diff --git a/Sources/backend-cpp/StreamdeckInterface/CMakeLists.txt b/Sources/backend-cpp/StreamdeckInterface/CMakeLists.txt new file mode 100644 index 00000000..698cfe0d --- /dev/null +++ b/Sources/backend-cpp/StreamdeckInterface/CMakeLists.txt @@ -0,0 +1,169 @@ +set(PROJECT_NAME StreamdeckInterface) + +################################################################################ +# Source groups +################################################################################ +set(Sources + "@(_WildCardClCompile)" +) +source_group("Sources" FILES ${Sources}) + +set(ALL_FILES + ${Sources} +) + +################################################################################ +# Target +################################################################################ +add_executable(${PROJECT_NAME} ${ALL_FILES}) + +use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}") +set(ROOT_NAMESPACE StreamdeckInterface) + +set_target_properties(${PROJECT_NAME} PROPERTIES + VS_GLOBAL_KEYWORD "Win32Proj" +) +################################################################################ +# Target name +################################################################################ +if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + set_target_properties(${PROJECT_NAME} PROPERTIES + TARGET_NAME_DEBUG "streamdeck_dcs_interface" + TARGET_NAME_RELEASE "streamdeck_dcs_interface" + ) +elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + set_target_properties(${PROJECT_NAME} PROPERTIES + TARGET_NAME_DEBUG "streamdeck_dcs_interface" + TARGET_NAME_RELEASE "streamdeck_dcs_interface" + ) +endif() +################################################################################ +# Output directory +################################################################################ +if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + set_target_properties(${PROJECT_NAME} PROPERTIES + OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}/${CMAKE_VS_PLATFORM_NAME}/$/" + OUTPUT_DIRECTORY_RELEASE "${CMAKE_SOURCE_DIR}/${CMAKE_VS_PLATFORM_NAME}/$/" + ) +endif() +if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + set_target_properties(${PROJECT_NAME} PROPERTIES + INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE" + ) +elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + set_target_properties(${PROJECT_NAME} PROPERTIES + INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE" + ) +endif() +################################################################################ +# Compile definitions +################################################################################ +if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + target_compile_definitions(${PROJECT_NAME} PRIVATE + "$<$:" + "_DEBUG" + ">" + "$<$:" + "NDEBUG" + ">" + "_CONSOLE;" + "UNICODE;" + "_UNICODE" + ) +elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + target_compile_definitions(${PROJECT_NAME} PRIVATE + "$<$:" + "_DEBUG" + ">" + "$<$:" + "NDEBUG" + ">" + "WIN32;" + "_CONSOLE;" + "UNICODE;" + "_UNICODE" + ) +endif() + +################################################################################ +# Compile and link options +################################################################################ +if(MSVC) + if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + target_compile_options(${PROJECT_NAME} PRIVATE + $<$: + /O2 + > + $<$: + /Oi; + /Gy + > + /permissive-; + /std:c++17; + /sdl; + /W3; + ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; + /Zc:__cplusplus; + ${DEFAULT_CXX_EXCEPTION_HANDLING} + ) + elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + target_compile_options(${PROJECT_NAME} PRIVATE + $<$: + /O2 + > + $<$: + /Oi; + /Gy + > + /permissive-; + /std:c++17; + /sdl; + /W3; + ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; + /Zc:__cplusplus; + ${DEFAULT_CXX_EXCEPTION_HANDLING} + ) + endif() + if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + target_link_options(${PROJECT_NAME} PRIVATE + $<$: + /INCREMENTAL + > + $<$: + /OPT:REF; + /OPT:ICF; + /INCREMENTAL:NO + > + /DEBUG; + /SUBSYSTEM:CONSOLE + ) + elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + target_link_options(${PROJECT_NAME} PRIVATE + $<$: + /INCREMENTAL + > + $<$: + /OPT:REF; + /OPT:ICF; + /INCREMENTAL:NO + > + /DEBUG; + /SUBSYSTEM:CONSOLE + ) + endif() +endif() + +################################################################################ +# Dependencies +################################################################################ +# Link with other targets. +target_link_libraries(${PROJECT_NAME} PRIVATE + SimulatorInterface + ElgatoSD + StreamdeckContext + Utilities +) + +use_package(${PROJECT_NAME} Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn 1.8.1.7) +use_package(${PROJECT_NAME} nlohmann.json 3.11.2) +use_package(${PROJECT_NAME} lua 5.4.6) diff --git a/Sources/backend-cpp/Test/CMakeLists.txt b/Sources/backend-cpp/Test/CMakeLists.txt new file mode 100644 index 00000000..243eda5d --- /dev/null +++ b/Sources/backend-cpp/Test/CMakeLists.txt @@ -0,0 +1,157 @@ +set(PROJECT_NAME Test) + +################################################################################ +# Source groups +################################################################################ +set(Headers + "MockESDConnectionManager.h" +) +source_group("Headers" FILES ${Headers}) + +set(Sources + "@(_WildCardClCompile)" +) +source_group("Sources" FILES ${Sources}) + +set(ALL_FILES + ${Headers} + ${Sources} +) + +################################################################################ +# Target +################################################################################ + +use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}") +set_target_properties(${PROJECT_NAME} PROPERTIES + VS_GLOBAL_KEYWORD "Win32Proj" +) +################################################################################ +# MSVC runtime library +################################################################################ +get_property(MSVC_RUNTIME_LIBRARY_DEFAULT TARGET ${PROJECT_NAME} PROPERTY MSVC_RUNTIME_LIBRARY) +if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + string(CONCAT "MSVC_RUNTIME_LIBRARY_STR" + $<$: + MultiThreadedDebugDLL + > + $<$: + MultiThreadedDLL + > + $<$,$>>:${MSVC_RUNTIME_LIBRARY_DEFAULT}> + ) +elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + string(CONCAT "MSVC_RUNTIME_LIBRARY_STR" + $<$: + MultiThreadedDebugDLL + > + $<$: + MultiThreadedDLL + > + $<$,$>>:${MSVC_RUNTIME_LIBRARY_DEFAULT}> + ) +endif() +set_target_properties(${PROJECT_NAME} PROPERTIES MSVC_RUNTIME_LIBRARY ${MSVC_RUNTIME_LIBRARY_STR}) + +################################################################################ +# Compile definitions +################################################################################ +target_compile_definitions(${PROJECT_NAME} PRIVATE + "UNICODE;" + "_UNICODE" +) +if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + target_compile_definitions(${PROJECT_NAME} PRIVATE + "$<$:" + "_DEBUG" + ">" + "$<$:" + "NDEBUG" + ">" + "X64;" + "_CONSOLE" + ) +elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + target_compile_definitions(${PROJECT_NAME} PRIVATE + "$<$:" + "_DEBUG" + ">" + "$<$:" + "NDEBUG" + ">" + "WIN32;" + "_CONSOLE" + ) +endif() + +################################################################################ +# Compile and link options +################################################################################ +if(MSVC) + if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + target_compile_options(${PROJECT_NAME} PRIVATE + $<$: + /Od; + /RTC1; + ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT} + > + $<$: + /Zi + > + /std:c++17; + /W3; + /Zc:__cplusplus; + ${DEFAULT_CXX_EXCEPTION_HANDLING}; + /Y- + ) + elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + target_compile_options(${PROJECT_NAME} PRIVATE + $<$: + /Od; + /RTC1; + ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT} + > + $<$: + /Zi + > + /W3; + /Zc:__cplusplus; + ${DEFAULT_CXX_EXCEPTION_HANDLING}; + /Y- + ) + endif() + if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + target_link_options(${PROJECT_NAME} PRIVATE + $<$: + /OPT:REF; + /OPT:ICF + > + /DEBUG; + /SUBSYSTEM:CONSOLE + ) + elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + target_link_options(${PROJECT_NAME} PRIVATE + $<$: + /OPT:REF; + /OPT:ICF + > + /DEBUG; + /SUBSYSTEM:CONSOLE + ) + endif() +endif() + +################################################################################ +# Dependencies +################################################################################ +# Link with other targets. +target_link_libraries(${PROJECT_NAME} PUBLIC + SimulatorInterface + ElgatoSD + StreamdeckContext + Utilities +) + +use_package(${PROJECT_NAME} lua 5.4.6) +use_package(${PROJECT_NAME} nlohmann.json 3.11.2) +use_package(${PROJECT_NAME} Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn 1.8.1.7) diff --git a/Sources/backend-cpp/Utilities/CMakeLists.txt b/Sources/backend-cpp/Utilities/CMakeLists.txt new file mode 100644 index 00000000..c49947c7 --- /dev/null +++ b/Sources/backend-cpp/Utilities/CMakeLists.txt @@ -0,0 +1,129 @@ +set(PROJECT_NAME Utilities) + +################################################################################ +# Source groups +################################################################################ +set(Sources + "@(_WildCardClCompile)" +) +source_group("Sources" FILES ${Sources}) + +set(ALL_FILES + ${Sources} +) + +################################################################################ +# Target +################################################################################ +add_library(${PROJECT_NAME} STATIC ${ALL_FILES}) + +use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}") +set(ROOT_NAMESPACE Utilities) + +set_target_properties(${PROJECT_NAME} PROPERTIES + VS_GLOBAL_KEYWORD "Win32Proj" +) +################################################################################ +# Output directory +################################################################################ +if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + set_target_properties(${PROJECT_NAME} PROPERTIES + OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}/${CMAKE_VS_PLATFORM_NAME}/$/" + OUTPUT_DIRECTORY_RELEASE "${CMAKE_SOURCE_DIR}/${CMAKE_VS_PLATFORM_NAME}/$/" + ) +endif() +if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + set_target_properties(${PROJECT_NAME} PROPERTIES + INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE" + ) +elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + set_target_properties(${PROJECT_NAME} PROPERTIES + INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE" + ) +endif() +################################################################################ +# Compile definitions +################################################################################ +if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + target_compile_definitions(${PROJECT_NAME} PRIVATE + "$<$:" + "_DEBUG" + ">" + "$<$:" + "NDEBUG" + ">" + "_CONSOLE;" + "UNICODE;" + "_UNICODE" + ) +elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + target_compile_definitions(${PROJECT_NAME} PRIVATE + "$<$:" + "_DEBUG" + ">" + "$<$:" + "NDEBUG" + ">" + "WIN32;" + "_CONSOLE;" + "UNICODE;" + "_UNICODE" + ) +endif() + +################################################################################ +# Compile and link options +################################################################################ +if(MSVC) + if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + target_compile_options(${PROJECT_NAME} PRIVATE + $<$: + /Oi; + /Gy + > + /permissive-; + /std:c++17; + /sdl; + /W3; + ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; + ${DEFAULT_CXX_EXCEPTION_HANDLING} + ) + elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + target_compile_options(${PROJECT_NAME} PRIVATE + $<$: + /Oi; + /Gy + > + /permissive-; + /std:c++17; + /sdl; + /W3; + ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; + ${DEFAULT_CXX_EXCEPTION_HANDLING} + ) + endif() + if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + target_link_options(${PROJECT_NAME} PRIVATE + $<$: + /OPT:REF; + /OPT:ICF + > + /SUBSYSTEM:CONSOLE + ) + elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + target_link_options(${PROJECT_NAME} PRIVATE + $<$: + /OPT:REF; + /OPT:ICF + > + /SUBSYSTEM:CONSOLE + ) + endif() +endif() + +################################################################################ +# Dependencies +################################################################################ +use_package(${PROJECT_NAME} lua 5.4.6) +use_package(${PROJECT_NAME} Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn 1.8.1.7) +use_package(${PROJECT_NAME} nlohmann.json 3.11.2) diff --git a/Sources/backend-cpp/Windows/CMake/Default.cmake b/Sources/backend-cpp/Windows/CMake/Default.cmake new file mode 100644 index 00000000..70bfa903 --- /dev/null +++ b/Sources/backend-cpp/Windows/CMake/Default.cmake @@ -0,0 +1,65 @@ +################################################################################ +# Command for variable_watch. This command issues error message, if a variable +# is changed. If variable PROPERTY_READER_GUARD_DISABLED is TRUE nothing happens +# variable_watch( property_reader_guard) +################################################################################ +function(property_reader_guard VARIABLE ACCESS VALUE CURRENT_LIST_FILE STACK) + if("${PROPERTY_READER_GUARD_DISABLED}") + return() + endif() + + if("${ACCESS}" STREQUAL "MODIFIED_ACCESS") + message(FATAL_ERROR + " Variable ${VARIABLE} is not supposed to be changed.\n" + " It is used only for reading target property ${VARIABLE}.\n" + " Use\n" + " set_target_properties(\"\" PROPERTIES \"${VARIABLE}\" \"\")\n" + " or\n" + " set_target_properties(\"\" PROPERTIES \"${VARIABLE}_\" \"\")\n" + " instead.\n") + endif() +endfunction() + +################################################################################ +# Create variable with generator expression that expands to value of +# target property _. If property is empty or not set then property +# is used instead. Variable has watcher property_reader_guard that +# doesn't allow to edit it. +# create_property_reader() +# Input: +# name - Name of watched property and output variable +################################################################################ +function(create_property_reader NAME) + set(PROPERTY_READER_GUARD_DISABLED TRUE) + set(CONFIG_VALUE "$>>>") + set(IS_CONFIG_VALUE_EMPTY "$") + set(GENERAL_VALUE "$>") + set("${NAME}" "$" PARENT_SCOPE) + variable_watch("${NAME}" property_reader_guard) +endfunction() + +################################################################################ +# Set property $_${PROPS_CONFIG_U} of ${PROPS_TARGET} to +# set_config_specific_property( ) +# Input: +# name - Prefix of property name +# value - New value +################################################################################ +function(set_config_specific_property NAME VALUE) + set_target_properties("${PROPS_TARGET}" PROPERTIES "${NAME}_${PROPS_CONFIG_U}" "${VALUE}") +endfunction() + +################################################################################ + +create_property_reader("TARGET_NAME") +create_property_reader("OUTPUT_DIRECTORY") + +set_config_specific_property("TARGET_NAME" "${PROPS_TARGET}") +set_config_specific_property("OUTPUT_NAME" "${TARGET_NAME}") +set_config_specific_property("ARCHIVE_OUTPUT_NAME" "${TARGET_NAME}") +set_config_specific_property("LIBRARY_OUTPUT_NAME" "${TARGET_NAME}") +set_config_specific_property("RUNTIME_OUTPUT_NAME" "${TARGET_NAME}") + +set_config_specific_property("ARCHIVE_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}") +set_config_specific_property("LIBRARY_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}") +set_config_specific_property("RUNTIME_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}") \ No newline at end of file diff --git a/Sources/backend-cpp/Windows/CMake/DefaultCXX.cmake b/Sources/backend-cpp/Windows/CMake/DefaultCXX.cmake new file mode 100644 index 00000000..eff0e569 --- /dev/null +++ b/Sources/backend-cpp/Windows/CMake/DefaultCXX.cmake @@ -0,0 +1,12 @@ +include("${CMAKE_CURRENT_LIST_DIR}/Default.cmake") + +set_config_specific_property("OUTPUT_DIRECTORY" "${CMAKE_SOURCE_DIR}$<$>:/${CMAKE_VS_PLATFORM_NAME}>/${PROPS_CONFIG}") + +if(MSVC) + create_property_reader("DEFAULT_CXX_EXCEPTION_HANDLING") + create_property_reader("DEFAULT_CXX_DEBUG_INFORMATION_FORMAT") + + set_target_properties("${PROPS_TARGET}" PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") + set_config_specific_property("DEFAULT_CXX_EXCEPTION_HANDLING" "/EHsc") + set_config_specific_property("DEFAULT_CXX_DEBUG_INFORMATION_FORMAT" "/Zi") +endif() diff --git a/Sources/backend-cpp/Windows/CMake/DefaultFortran.cmake b/Sources/backend-cpp/Windows/CMake/DefaultFortran.cmake new file mode 100644 index 00000000..3c16740e --- /dev/null +++ b/Sources/backend-cpp/Windows/CMake/DefaultFortran.cmake @@ -0,0 +1,12 @@ +include("${CMAKE_CURRENT_LIST_DIR}/Default.cmake") + +set_config_specific_property("OUTPUT_DIRECTORY" "${CMAKE_CURRENT_SOURCE_DIR}$<$>:/${CMAKE_VS_PLATFORM_NAME}>/${PROPS_CONFIG}") + +get_target_property(${PROPS_TARGET}_BINARY_DIR ${PROPS_TARGET} BINARY_DIR) +set(DEFAULT_FORTRAN_MODULES_DIR "${${PROPS_TARGET}_BINARY_DIR}/${PROPS_TARGET}.Modules.dir") +set_target_properties(${PROPS_TARGET} PROPERTIES Fortran_MODULE_DIRECTORY ${DEFAULT_FORTRAN_MODULES_DIR}) + +if(${CMAKE_GENERATOR} MATCHES "Visual Studio") + # Hack for visual studio generator (https://gitlab.kitware.com/cmake/cmake/issues/19552) + add_custom_command(TARGET ${PROPS_TARGET} PRE_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory $/${CMAKE_CFG_INTDIR}) +endif() \ No newline at end of file diff --git a/Sources/backend-cpp/Windows/CMake/Utils.cmake b/Sources/backend-cpp/Windows/CMake/Utils.cmake new file mode 100644 index 00000000..9e2f961e --- /dev/null +++ b/Sources/backend-cpp/Windows/CMake/Utils.cmake @@ -0,0 +1,234 @@ +# utils file for projects came from visual studio solution with cmake-converter. + +################################################################################ +# Wrap each token of the command with condition +################################################################################ +cmake_policy(PUSH) +cmake_policy(SET CMP0054 NEW) +macro(prepare_commands) + unset(TOKEN_ROLE) + unset(COMMANDS) + foreach(TOKEN ${ARG_COMMANDS}) + if("${TOKEN}" STREQUAL "COMMAND") + set(TOKEN_ROLE "KEYWORD") + elseif("${TOKEN_ROLE}" STREQUAL "KEYWORD") + set(TOKEN_ROLE "CONDITION") + elseif("${TOKEN_ROLE}" STREQUAL "CONDITION") + set(TOKEN_ROLE "COMMAND") + elseif("${TOKEN_ROLE}" STREQUAL "COMMAND") + set(TOKEN_ROLE "ARG") + endif() + + if("${TOKEN_ROLE}" STREQUAL "KEYWORD") + list(APPEND COMMANDS "${TOKEN}") + elseif("${TOKEN_ROLE}" STREQUAL "CONDITION") + set(CONDITION ${TOKEN}) + elseif("${TOKEN_ROLE}" STREQUAL "COMMAND") + list(APPEND COMMANDS "$<$:${DUMMY}>$<${CONDITION}:${TOKEN}>") + elseif("${TOKEN_ROLE}" STREQUAL "ARG") + list(APPEND COMMANDS "$<${CONDITION}:${TOKEN}>") + endif() + endforeach() +endmacro() +cmake_policy(POP) + +################################################################################ +# Transform all the tokens to absolute paths +################################################################################ +macro(prepare_output) + unset(OUTPUT) + foreach(TOKEN ${ARG_OUTPUT}) + if(IS_ABSOLUTE ${TOKEN}) + list(APPEND OUTPUT "${TOKEN}") + else() + list(APPEND OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/${TOKEN}") + endif() + endforeach() +endmacro() + +################################################################################ +# Parse add_custom_command_if args. +# +# Input: +# PRE_BUILD - Pre build event option +# PRE_LINK - Pre link event option +# POST_BUILD - Post build event option +# TARGET - Target +# OUTPUT - List of output files +# DEPENDS - List of files on which the command depends +# COMMANDS - List of commands(COMMAND condition1 commannd1 args1 COMMAND +# condition2 commannd2 args2 ...) +# Output: +# OUTPUT - Output files +# DEPENDS - Files on which the command depends +# COMMENT - Comment +# PRE_BUILD - TRUE/FALSE +# PRE_LINK - TRUE/FALSE +# POST_BUILD - TRUE/FALSE +# TARGET - Target name +# COMMANDS - Prepared commands(every token is wrapped in CONDITION) +# NAME - Unique name for custom target +# STEP - PRE_BUILD/PRE_LINK/POST_BUILD +################################################################################ +function(add_custom_command_if_parse_arguments) + cmake_parse_arguments("ARG" "PRE_BUILD;PRE_LINK;POST_BUILD" "TARGET;COMMENT" "DEPENDS;OUTPUT;COMMANDS" ${ARGN}) + + if(WIN32) + set(DUMMY "cd.") + elseif(UNIX) + set(DUMMY "true") + endif() + + prepare_commands() + prepare_output() + + set(DEPENDS "${ARG_DEPENDS}") + set(COMMENT "${ARG_COMMENT}") + set(PRE_BUILD "${ARG_PRE_BUILD}") + set(PRE_LINK "${ARG_PRE_LINK}") + set(POST_BUILD "${ARG_POST_BUILD}") + set(TARGET "${ARG_TARGET}") + if(PRE_BUILD) + set(STEP "PRE_BUILD") + elseif(PRE_LINK) + set(STEP "PRE_LINK") + elseif(POST_BUILD) + set(STEP "POST_BUILD") + endif() + set(NAME "${TARGET}_${STEP}") + + set(OUTPUT "${OUTPUT}" PARENT_SCOPE) + set(DEPENDS "${DEPENDS}" PARENT_SCOPE) + set(COMMENT "${COMMENT}" PARENT_SCOPE) + set(PRE_BUILD "${PRE_BUILD}" PARENT_SCOPE) + set(PRE_LINK "${PRE_LINK}" PARENT_SCOPE) + set(POST_BUILD "${POST_BUILD}" PARENT_SCOPE) + set(TARGET "${TARGET}" PARENT_SCOPE) + set(COMMANDS "${COMMANDS}" PARENT_SCOPE) + set(STEP "${STEP}" PARENT_SCOPE) + set(NAME "${NAME}" PARENT_SCOPE) +endfunction() + +################################################################################ +# Add conditional custom command +# +# Generating Files +# The first signature is for adding a custom command to produce an output: +# add_custom_command_if( +# +# +# +# [COMMAND condition command2 [args2...]] +# [DEPENDS [depends...]] +# [COMMENT comment] +# +# Build Events +# add_custom_command_if( +# +# +# +# [COMMAND condition command2 [args2...]] +# [COMMENT comment] +# +# Input: +# output - Output files the command is expected to produce +# condition - Generator expression for wrapping the command +# command - Command-line(s) to execute at build time. +# args - Command`s args +# depends - Files on which the command depends +# comment - Display the given message before the commands are executed at +# build time. +# PRE_BUILD - Run before any other rules are executed within the target +# PRE_LINK - Run after sources have been compiled but before linking the +# binary +# POST_BUILD - Run after all other rules within the target have been +# executed +################################################################################ +function(add_custom_command_if) + add_custom_command_if_parse_arguments(${ARGN}) + + if(OUTPUT AND TARGET) + message(FATAL_ERROR "Wrong syntax. A TARGET and OUTPUT can not both be specified.") + endif() + + if(OUTPUT) + add_custom_command(OUTPUT ${OUTPUT} + ${COMMANDS} + DEPENDS ${DEPENDS} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT ${COMMENT}) + elseif(TARGET) + if(PRE_BUILD AND NOT ${CMAKE_GENERATOR} MATCHES "Visual Studio") + add_custom_target( + ${NAME} + ${COMMANDS} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT ${COMMENT}) + add_dependencies(${TARGET} ${NAME}) + else() + add_custom_command( + TARGET ${TARGET} + ${STEP} + ${COMMANDS} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT ${COMMENT}) + endif() + else() + message(FATAL_ERROR "Wrong syntax. A TARGET or OUTPUT must be specified.") + endif() +endfunction() + +################################################################################ +# Use props file for a target and configs +# use_props( ) +# Inside there are following variables: +# PROPS_TARGET - +# PROPS_CONFIG - One of +# PROPS_CONFIG_U - Uppercase PROPS_CONFIG +# Input: +# target - Target to apply props file +# configs - Build configurations to apply props file +# props_file - CMake script +################################################################################ +macro(use_props TARGET CONFIGS PROPS_FILE) + set(PROPS_TARGET "${TARGET}") + foreach(PROPS_CONFIG ${CONFIGS}) + string(TOUPPER "${PROPS_CONFIG}" PROPS_CONFIG_U) + + get_filename_component(ABSOLUTE_PROPS_FILE "${PROPS_FILE}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_LIST_DIR}") + if(EXISTS "${ABSOLUTE_PROPS_FILE}") + include("${ABSOLUTE_PROPS_FILE}") + else() + message(WARNING "Corresponding cmake file from props \"${ABSOLUTE_PROPS_FILE}\" doesn't exist") + endif() + endforeach() +endmacro() + +################################################################################ +# Add compile options to source file +# source_file_compile_options( [compile_options...]) +# Input: +# source_file - Source file +# compile_options - Options to add to COMPILE_FLAGS property +################################################################################ +function(source_file_compile_options SOURCE_FILE) + if("${ARGC}" LESS_EQUAL "1") + return() + endif() + + get_source_file_property(COMPILE_OPTIONS "${SOURCE_FILE}" COMPILE_OPTIONS) + + if(COMPILE_OPTIONS) + list(APPEND COMPILE_OPTIONS ${ARGN}) + else() + set(COMPILE_OPTIONS "${ARGN}") + endif() + + set_source_files_properties("${SOURCE_FILE}" PROPERTIES COMPILE_OPTIONS "${COMPILE_OPTIONS}") +endfunction() + +################################################################################ +# Default properties of visual studio projects +################################################################################ +set(DEFAULT_CXX_PROPS "${CMAKE_CURRENT_LIST_DIR}/DefaultCXX.cmake") +set(DEFAULT_Fortran_PROPS "${CMAKE_CURRENT_LIST_DIR}/DefaultFortran.cmake") diff --git a/Sources/backend-cpp/Windows/CMakeLists.txt b/Sources/backend-cpp/Windows/CMakeLists.txt new file mode 100644 index 00000000..11bc06f8 --- /dev/null +++ b/Sources/backend-cpp/Windows/CMakeLists.txt @@ -0,0 +1,89 @@ +cmake_minimum_required(VERSION 3.16.0 FATAL_ERROR) + +set(CMAKE_SYSTEM_VERSION 10.0 CACHE STRING "" FORCE) + +project(com.ctytler.dcs.sdPlugin ) + +################################################################################ +# Set target arch type if empty. Visual studio solution generator provides it. +################################################################################ +if(NOT CMAKE_VS_PLATFORM_NAME) + set(CMAKE_VS_PLATFORM_NAME "x64") +endif() +message("${CMAKE_VS_PLATFORM_NAME} architecture in use") + +if(NOT ("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64" + OR "${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86")) + message(FATAL_ERROR "${CMAKE_VS_PLATFORM_NAME} arch is not supported!") +endif() + +################################################################################ +# Global configuration types +################################################################################ +set(CMAKE_CONFIGURATION_TYPES + "Debug" + "Release" + CACHE STRING "" FORCE +) + +################################################################################ +# Global compiler options +################################################################################ +if(MSVC) + # remove default flags provided with CMake for MSVC +endif() + +################################################################################ +# Global linker options +################################################################################ +if(MSVC) + # remove default flags provided with CMake for MSVC + set(CMAKE_EXE_LINKER_FLAGS "") + set(CMAKE_MODULE_LINKER_FLAGS "") + set(CMAKE_SHARED_LINKER_FLAGS "") + set(CMAKE_STATIC_LINKER_FLAGS "") + set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS}") + set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS}") + set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS}") + set(CMAKE_STATIC_LINKER_FLAGS_DEBUG "${CMAKE_STATIC_LINKER_FLAGS}") + set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS}") + set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS}") + set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS}") + set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS}") +endif() + +################################################################################ +# Nuget packages function stub. +################################################################################ +function(use_package TARGET PACKAGE VERSION) + message(WARNING "No implementation of use_package. Create yours. " + "Package \"${PACKAGE}\" with version \"${VERSION}\" " + "for target \"${TARGET}\" is ignored!") +endfunction() + +################################################################################ +# Common utils +################################################################################ +include(CMake/Utils.cmake) + +################################################################################ +# Additional Global Settings(add specific info there) +################################################################################ +include(CMake/GlobalSettingsInclude.cmake OPTIONAL) + +################################################################################ +# Use solution folders feature +################################################################################ +set_property(GLOBAL PROPERTY USE_FOLDERS ON) + +################################################################################ +# Sub-projects +################################################################################ +add_subdirectory(../../../Tools/SocketTester ${CMAKE_BINARY_DIR}/SocketTester) +add_subdirectory(../ElgatoSD ${CMAKE_BINARY_DIR}/ElgatoSD) +add_subdirectory(../SimulatorInterface ${CMAKE_BINARY_DIR}/SimulatorInterface) +add_subdirectory(../StreamdeckContext ${CMAKE_BINARY_DIR}/StreamdeckContext) +add_subdirectory(../StreamdeckInterface ${CMAKE_BINARY_DIR}/StreamdeckInterface) +add_subdirectory(../Test ${CMAKE_BINARY_DIR}/Test) +add_subdirectory(../Utilities ${CMAKE_BINARY_DIR}/Utilities) + diff --git a/Tools/SocketTester/CMakeLists.txt b/Tools/SocketTester/CMakeLists.txt new file mode 100644 index 00000000..bf700235 --- /dev/null +++ b/Tools/SocketTester/CMakeLists.txt @@ -0,0 +1,149 @@ +set(PROJECT_NAME SocketTester) + +################################################################################ +# Source groups +################################################################################ +set(Sources + "@(_WildCardClCompile)" +) +source_group("Sources" FILES ${Sources}) + +set(ALL_FILES + ${Sources} +) + +################################################################################ +# Target +################################################################################ +add_executable(${PROJECT_NAME} ${ALL_FILES}) + +use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}") +set(ROOT_NAMESPACE SocketTester) + +set_target_properties(${PROJECT_NAME} PROPERTIES + VS_GLOBAL_KEYWORD "Win32Proj" +) +################################################################################ +# Output directory +################################################################################ +if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + set_target_properties(${PROJECT_NAME} PROPERTIES + OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_SOURCE_DIR}/bin/" + OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/bin/" + ) +elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + set_target_properties(${PROJECT_NAME} PROPERTIES + OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_SOURCE_DIR}/bin/" + OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/bin/" + ) +endif() +if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + set_target_properties(${PROJECT_NAME} PROPERTIES + INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE" + ) +elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + set_target_properties(${PROJECT_NAME} PROPERTIES + INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE" + ) +endif() +################################################################################ +# Compile definitions +################################################################################ +if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + target_compile_definitions(${PROJECT_NAME} PRIVATE + "$<$:" + "_DEBUG" + ">" + "$<$:" + "NDEBUG" + ">" + "_CONSOLE;" + "UNICODE;" + "_UNICODE" + ) +elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + target_compile_definitions(${PROJECT_NAME} PRIVATE + "$<$:" + "_DEBUG" + ">" + "$<$:" + "NDEBUG" + ">" + "WIN32;" + "_CONSOLE;" + "UNICODE;" + "_UNICODE" + ) +endif() + +################################################################################ +# Compile and link options +################################################################################ +if(MSVC) + if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + target_compile_options(${PROJECT_NAME} PRIVATE + $<$: + /Oi; + /Gy + > + /permissive-; + /std:c++17; + /sdl; + /W3; + ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; + ${DEFAULT_CXX_EXCEPTION_HANDLING} + ) + elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + target_compile_options(${PROJECT_NAME} PRIVATE + $<$: + /Oi; + /Gy + > + /permissive-; + /std:c++17; + /sdl; + /W3; + ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; + ${DEFAULT_CXX_EXCEPTION_HANDLING} + ) + endif() + if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + target_link_options(${PROJECT_NAME} PRIVATE + $<$: + /INCREMENTAL + > + $<$: + /OPT:REF; + /OPT:ICF; + /INCREMENTAL:NO + > + /DEBUG; + /SUBSYSTEM:CONSOLE; + /LTCG + ) + elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") + target_link_options(${PROJECT_NAME} PRIVATE + $<$: + /INCREMENTAL + > + $<$: + /OPT:REF; + /OPT:ICF; + /INCREMENTAL:NO + > + /DEBUG; + /SUBSYSTEM:CONSOLE; + /LTCG + ) + endif() +endif() + +################################################################################ +# Dependencies +################################################################################ +# Link with other targets. +target_link_libraries(${PROJECT_NAME} PRIVATE + Utilities +) + +use_package(${PROJECT_NAME} Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn 1.8.1.7) From 26c0ca82966bfccf6e64b9fe6f67c3cfa7a38fad Mon Sep 17 00:00:00 2001 From: Charles Tytler Date: Wed, 14 Jan 2026 11:47:36 -0800 Subject: [PATCH 02/21] Update gitignore for Cmake and cleanup old VS+Nuget options --- .gitignore | 63 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 43 insertions(+), 20 deletions(-) diff --git a/.gitignore b/.gitignore index 6fef6475..78a4a450 100644 --- a/.gitignore +++ b/.gitignore @@ -1,25 +1,48 @@ -x64/ -x86/ -[Aa][Rr][Mm]/ -[Aa][Rr][Mm]64/ +# Project-specific Ignore List settingsUI/ + +# --- CMake Artifacts --- +# Ignore the entire build directory (assuming you name it 'build' or 'out') +build/ +out/ + +# If you accidentally build in the root directory (In-Source Build), +# these lines will catch the mess: +CMakeFiles/ +CMakeCache.txt +CMakeScripts/ +cmake_install.cmake +install_manifest.txt +compile_commands.json +_deps/ + +# --- CMake Presets --- +# CMakePresets.json IS usually committed (it shares build configs with the team) +# CMakeUserPresets.json is NOT committed (it contains your personal paths) +CMakeUserPresets.json + +# --- IDE Specifics --- +# Visual Studio +.vs/ +*.sln +*.vcxproj +*.vcxproj.filters +*.user +*.suo + +# VS Code +.vscode/ +!.vscode/extensions.json # Keep this if you want to suggest extensions + +# --- Output Binaries --- *.exe +*.dll *.pdb +*.lib +*.obj +*.ilk +*.exp + +# --- Log Files --- *.log -.vs/ -.vscode -*.user -# NuGet Packages -*.nupkg -# NuGet Symbol Packages -*.snupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets \ No newline at end of file From 6300f5a40e2fe92b23e49a3a09c8dd65ab783fd5 Mon Sep 17 00:00:00 2001 From: Charles Tytler Date: Wed, 14 Jan 2026 22:56:31 -0800 Subject: [PATCH 03/21] Include json, lua-5.4.8, google test as vendored/fetched code instead of via package manager --- Sources/backend-cpp/Vendor/CMakeLists.txt | 36 +++++++++++++++++++ .../backend-cpp/Vendor/googletest/README.md | 4 +++ .../Vendor/lua-5.4.8/CMakeLists.txt | 22 ++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 Sources/backend-cpp/Vendor/CMakeLists.txt create mode 100644 Sources/backend-cpp/Vendor/googletest/README.md create mode 100644 Sources/backend-cpp/Vendor/lua-5.4.8/CMakeLists.txt diff --git a/Sources/backend-cpp/Vendor/CMakeLists.txt b/Sources/backend-cpp/Vendor/CMakeLists.txt new file mode 100644 index 00000000..2f216069 --- /dev/null +++ b/Sources/backend-cpp/Vendor/CMakeLists.txt @@ -0,0 +1,36 @@ +cmake_minimum_required(VERSION 3.16) +project(Vendor) + +# --- JSON --- +add_library(nlohmann_json INTERFACE) +target_include_directories(nlohmann_json INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/nlohmann") + +# --- ASIO --- +add_library(asio INTERFACE) +target_include_directories(asio INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/asio/include") +target_compile_definitions(asio INTERFACE ASIO_STANDALONE) + +# --- Websocketpp --- +add_library(websocketpp INTERFACE) +target_include_directories(websocketpp INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/websocketpp") +target_link_libraries(websocketpp INTERFACE asio) + +# --- Lua --- +add_subdirectory(lua-5.4.8) + +# --- Google Test --- +include(FetchContent) +FetchContent_Declare( + googletest + # Release 1.17.0 (04/23/2025) + URL https://github.com/google/googletest/archive/52eb8108c5bdec04579160ae17225d66034bd723.zip + DOWNLOAD_EXTRACT_TIMESTAMP TRUE +) +# For Windows: Prevent overriding the parent project's compiler/linker settings +set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) +FetchContent_MakeAvailable(googletest) + +# Now simply link against gtest or gtest_main as needed. Eg +# add_executable(example example.cpp) +# target_link_libraries(example gtest_main) +# add_test(NAME example_test COMMAND example) diff --git a/Sources/backend-cpp/Vendor/googletest/README.md b/Sources/backend-cpp/Vendor/googletest/README.md new file mode 100644 index 00000000..5d9d4298 --- /dev/null +++ b/Sources/backend-cpp/Vendor/googletest/README.md @@ -0,0 +1,4 @@ +# Google Test + +Google Test code is fetched and compiled by cmake, see Vendor/CMakeLists.txt + diff --git a/Sources/backend-cpp/Vendor/lua-5.4.8/CMakeLists.txt b/Sources/backend-cpp/Vendor/lua-5.4.8/CMakeLists.txt new file mode 100644 index 00000000..f0e5e27f --- /dev/null +++ b/Sources/backend-cpp/Vendor/lua-5.4.8/CMakeLists.txt @@ -0,0 +1,22 @@ +cmake_minimum_required(VERSION 3.16) +project(lua LANGUAGES C) + +file(GLOB LUA_SOURCES "src/*.c") + +# IMPORTANT: Remove the standalone interpreter and compiler files +# These have their own 'main()' functions and will cause linker errors. +list(REMOVE_ITEM LUA_SOURCES + "${CMAKE_CURRENT_SOURCE_DIR}/src/lua.c" + "${CMAKE_CURRENT_SOURCE_DIR}/src/luac.c" +) + +add_library(lua STATIC ${LUA_SOURCES}) + +# Set include directory so others can find lua.h and lua.hpp +target_include_directories(lua PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/src") + +# MSVC specific security and compatibility fixes +# (Avoids warnings from using standard C functions as opposed to "secure" ones) +if(MSVC) + target_compile_definitions(lua PRIVATE _CRT_SECURE_NO_WARNINGS) +endif() From 5bc56c6f130cbdd076e5a45ae5b407d7a8212dd2 Mon Sep 17 00:00:00 2001 From: Charles Tytler Date: Wed, 14 Jan 2026 23:31:30 -0800 Subject: [PATCH 04/21] Add root CMakeLists.txt with placeholders for subdirectories --- Sources/backend-cpp/CMakeLists.txt | 52 ++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 Sources/backend-cpp/CMakeLists.txt diff --git a/Sources/backend-cpp/CMakeLists.txt b/Sources/backend-cpp/CMakeLists.txt new file mode 100644 index 00000000..8c105ec9 --- /dev/null +++ b/Sources/backend-cpp/CMakeLists.txt @@ -0,0 +1,52 @@ +cmake_minimum_required(VERSION 3.15) +project(StreamdeckPluginBackend LANGUAGES CXX) + +# TODO: Delete this if not desired +# Enforce Windows x64 MSVC +# if(NOT MSVC OR NOT CMAKE_SIZEOF_VOID_P EQUAL 8) +# message(FATAL_ERROR "This project requires MSVC x64.") +# endif() + +# Global C++ Settings +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +# TODO: Consider /W4 or /Wall +if(MSVC) + add_compile_options( + /W3 # Warning Level 3 + /WX # Treat Warning As Error + /sdl # Enable Security Checks + /MP # Multi-processor compilation + /Zc:__cplusplus # Correct __cplusplus macro + ) +endif() + +add_compile_definitions( + UNICODE + _UNICODE + _CONSOLE +) +# TODO: If you are using _CONSOLE, you might see a black command prompt +# window pop up when your plugin starts. If you eventually want your +# plugin to run silently in the background without that window, +# you would change your project type to a Windows Application and use +# _WINDOWS instead of _CONSOLE, but for development and debugging, +# using _CONSOLE is much easier because you can see your log output. + + +# Vendored dependencies +add_subdirectory(Vendor) + +# Enable testing for the whole project (Gtest) +# enable_testing() + +# Static Libraries +# add_subdirectory(Utilities) +# add_subdirectory(ElgatoSD) +# add_subdirectory(SimulatorInterface) +# add_subdirectory(StreamdeckContext) + +# Executable +# add_subdirectory(StreamdeckInterface) From 5e0d11426eaa98a20aaf73070f9a724add9eb609 Mon Sep 17 00:00:00 2001 From: Charles Tytler Date: Wed, 14 Jan 2026 23:33:53 -0800 Subject: [PATCH 05/21] CMakeLists.txt added for ElgatoSD static library --- Sources/backend-cpp/CMakeLists.txt | 2 +- Sources/backend-cpp/ElgatoSD/CMakeLists.txt | 143 +++--------------- Sources/backend-cpp/ElgatoSD/EPLJSONUtils.h | 2 +- Sources/backend-cpp/ElgatoSD/ESDBasePlugin.h | 2 +- .../ElgatoSD/ESDConnectionManager.h | 10 +- Sources/backend-cpp/Vendor/CMakeLists.txt | 5 +- 6 files changed, 29 insertions(+), 135 deletions(-) diff --git a/Sources/backend-cpp/CMakeLists.txt b/Sources/backend-cpp/CMakeLists.txt index 8c105ec9..2048d5ee 100644 --- a/Sources/backend-cpp/CMakeLists.txt +++ b/Sources/backend-cpp/CMakeLists.txt @@ -44,7 +44,7 @@ add_subdirectory(Vendor) # Static Libraries # add_subdirectory(Utilities) -# add_subdirectory(ElgatoSD) +add_subdirectory(ElgatoSD) # add_subdirectory(SimulatorInterface) # add_subdirectory(StreamdeckContext) diff --git a/Sources/backend-cpp/ElgatoSD/CMakeLists.txt b/Sources/backend-cpp/ElgatoSD/CMakeLists.txt index be510556..ff22e565 100644 --- a/Sources/backend-cpp/ElgatoSD/CMakeLists.txt +++ b/Sources/backend-cpp/ElgatoSD/CMakeLists.txt @@ -1,132 +1,27 @@ -set(PROJECT_NAME ElgatoSD) - -################################################################################ -# Source groups -################################################################################ -set(Sources - "@(_WildCardClCompile)" +set(SOURCES + ESDConnectionManager.cpp + ESDLocalizer.cpp + ESDUtilitiesWindows.cpp + pch.cpp ) -source_group("Sources" FILES ${Sources}) -set(ALL_FILES - ${Sources} +set(HEADERS + EPLJSONUtils.h + ESDBasePlugin.h + ESDConnectionManager.h + ESDLocalizer.h + ESDSDKDefines.h + ESDUtilities.h + pch.h ) -################################################################################ -# Target -################################################################################ -add_library(${PROJECT_NAME} STATIC ${ALL_FILES}) +# TODO: Consider deleting the pch.* files, as they are not used as precompiled headers -use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}") -set(ROOT_NAMESPACE ElgatoSD) +add_library(ElgatoSD STATIC ${SOURCES} ${HEADERS}) -set_target_properties(${PROJECT_NAME} PROPERTIES - VS_GLOBAL_KEYWORD "Win32Proj" +target_link_libraries(ElgatoSD + PRIVATE + nlohmann_json + websocketpp ) -################################################################################ -# Output directory -################################################################################ -if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - set_target_properties(${PROJECT_NAME} PROPERTIES - OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}/${CMAKE_VS_PLATFORM_NAME}/$/" - OUTPUT_DIRECTORY_RELEASE "${CMAKE_SOURCE_DIR}/${CMAKE_VS_PLATFORM_NAME}/$/" - ) -endif() -if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - set_target_properties(${PROJECT_NAME} PROPERTIES - INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE" - ) -elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - set_target_properties(${PROJECT_NAME} PROPERTIES - INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE" - ) -endif() -################################################################################ -# Compile definitions -################################################################################ -if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - target_compile_definitions(${PROJECT_NAME} PRIVATE - "$<$:" - "_DEBUG" - ">" - "$<$:" - "NDEBUG" - ">" - "_CONSOLE;" - "UNICODE;" - "_UNICODE" - ) -elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - target_compile_definitions(${PROJECT_NAME} PRIVATE - "$<$:" - "_DEBUG" - ">" - "$<$:" - "NDEBUG" - ">" - "WIN32;" - "_CONSOLE;" - "UNICODE;" - "_UNICODE" - ) -endif() - -################################################################################ -# Compile and link options -################################################################################ -if(MSVC) - if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - target_compile_options(${PROJECT_NAME} PRIVATE - $<$: - /Oi; - /Gy - > - /permissive-; - /std:c++17; - /sdl; - /W3; - ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; - /Zc:__cplusplus; - ${DEFAULT_CXX_EXCEPTION_HANDLING}; - /Y- - ) - elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - target_compile_options(${PROJECT_NAME} PRIVATE - $<$: - /Oi; - /Gy - > - /permissive-; - /std:c++17; - /sdl; - /W3; - ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; - /Zc:__cplusplus; - ${DEFAULT_CXX_EXCEPTION_HANDLING}; - /Y- - ) - endif() - if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - target_link_options(${PROJECT_NAME} PRIVATE - $<$: - /OPT:REF; - /OPT:ICF - > - /SUBSYSTEM:CONSOLE - ) - elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - target_link_options(${PROJECT_NAME} PRIVATE - $<$: - /OPT:REF; - /OPT:ICF - > - /SUBSYSTEM:CONSOLE - ) - endif() -endif() -################################################################################ -# Dependencies -################################################################################ -use_package(${PROJECT_NAME} Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn 1.8.1.7) -use_package(${PROJECT_NAME} nlohmann.json 3.11.2) diff --git a/Sources/backend-cpp/ElgatoSD/EPLJSONUtils.h b/Sources/backend-cpp/ElgatoSD/EPLJSONUtils.h index aad98bf4..b6ec0368 100644 --- a/Sources/backend-cpp/ElgatoSD/EPLJSONUtils.h +++ b/Sources/backend-cpp/ElgatoSD/EPLJSONUtils.h @@ -17,7 +17,7 @@ // Includes //------------------------------------------------------------------------------ -#include "nlohmann/json.hpp" +#include using json = nlohmann::json; class EPLJSONUtils diff --git a/Sources/backend-cpp/ElgatoSD/ESDBasePlugin.h b/Sources/backend-cpp/ElgatoSD/ESDBasePlugin.h index 0454bce6..c9f17f7e 100644 --- a/Sources/backend-cpp/ElgatoSD/ESDBasePlugin.h +++ b/Sources/backend-cpp/ElgatoSD/ESDBasePlugin.h @@ -12,7 +12,7 @@ #pragma once -#include "nlohmann/json.hpp" +#include using json = nlohmann::json; class ESDConnectionManager; diff --git a/Sources/backend-cpp/ElgatoSD/ESDConnectionManager.h b/Sources/backend-cpp/ElgatoSD/ESDConnectionManager.h index e3e90741..697ac604 100644 --- a/Sources/backend-cpp/ElgatoSD/ESDConnectionManager.h +++ b/Sources/backend-cpp/ElgatoSD/ESDConnectionManager.h @@ -15,11 +15,13 @@ #include "ESDBasePlugin.h" #include "ESDSDKDefines.h" +#ifndef ASIO_STANDALONE #define ASIO_STANDALONE -#include -#include -#include -#include +#endif +#include +#include +#include +#include typedef websocketpp::config::asio_client::message_type::ptr message_ptr; typedef websocketpp::client WebsocketClient; diff --git a/Sources/backend-cpp/Vendor/CMakeLists.txt b/Sources/backend-cpp/Vendor/CMakeLists.txt index 2f216069..8edd4feb 100644 --- a/Sources/backend-cpp/Vendor/CMakeLists.txt +++ b/Sources/backend-cpp/Vendor/CMakeLists.txt @@ -1,9 +1,6 @@ -cmake_minimum_required(VERSION 3.16) -project(Vendor) - # --- JSON --- add_library(nlohmann_json INTERFACE) -target_include_directories(nlohmann_json INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/nlohmann") +target_include_directories(nlohmann_json INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}") # --- ASIO --- add_library(asio INTERFACE) From 51a7db4f158e24c361288519d3e47c2ae2b6bb73 Mon Sep 17 00:00:00 2001 From: Charles Tytler Date: Thu, 15 Jan 2026 10:37:47 -0800 Subject: [PATCH 06/21] CMakeLists.txt added for Utilities static library --- Sources/backend-cpp/CMakeLists.txt | 4 +- Sources/backend-cpp/Utilities/CMakeLists.txt | 145 +++--------------- Sources/backend-cpp/Utilities/JsonReader.h | 2 +- Sources/backend-cpp/Utilities/LuaReader.cpp | 2 +- Sources/backend-cpp/Utilities/LuaReader.h | 4 +- .../Vendor/lua-5.4.8/CMakeLists.txt | 9 +- 6 files changed, 30 insertions(+), 136 deletions(-) diff --git a/Sources/backend-cpp/CMakeLists.txt b/Sources/backend-cpp/CMakeLists.txt index 2048d5ee..7feb15bf 100644 --- a/Sources/backend-cpp/CMakeLists.txt +++ b/Sources/backend-cpp/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.15) +cmake_minimum_required(VERSION 3.23) project(StreamdeckPluginBackend LANGUAGES CXX) # TODO: Delete this if not desired @@ -43,7 +43,7 @@ add_subdirectory(Vendor) # enable_testing() # Static Libraries -# add_subdirectory(Utilities) +add_subdirectory(Utilities) add_subdirectory(ElgatoSD) # add_subdirectory(SimulatorInterface) # add_subdirectory(StreamdeckContext) diff --git a/Sources/backend-cpp/Utilities/CMakeLists.txt b/Sources/backend-cpp/Utilities/CMakeLists.txt index c49947c7..94d26660 100644 --- a/Sources/backend-cpp/Utilities/CMakeLists.txt +++ b/Sources/backend-cpp/Utilities/CMakeLists.txt @@ -1,129 +1,26 @@ -set(PROJECT_NAME Utilities) +add_library(Utilities STATIC) -################################################################################ -# Source groups -################################################################################ -set(Sources - "@(_WildCardClCompile)" +target_sources(Utilities + PRIVATE + Decimal.cpp + JsonReader.cpp + LuaReader.cpp + StringUtilities.cpp + UdpSocket.cpp + PUBLIC FILE_SET HEADERS + BASE_DIRS ../ # Include from backend-cpp/ root. + FILES + Decimal.h + JsonReader.h + LuaReader.h + StringUtilities.h + UdpSocket.h ) -source_group("Sources" FILES ${Sources}) -set(ALL_FILES - ${Sources} +target_link_libraries(Utilities + PUBLIC + nlohmann_json + PRIVATE + lua-5.4.8 ) -################################################################################ -# Target -################################################################################ -add_library(${PROJECT_NAME} STATIC ${ALL_FILES}) - -use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}") -set(ROOT_NAMESPACE Utilities) - -set_target_properties(${PROJECT_NAME} PROPERTIES - VS_GLOBAL_KEYWORD "Win32Proj" -) -################################################################################ -# Output directory -################################################################################ -if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - set_target_properties(${PROJECT_NAME} PROPERTIES - OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}/${CMAKE_VS_PLATFORM_NAME}/$/" - OUTPUT_DIRECTORY_RELEASE "${CMAKE_SOURCE_DIR}/${CMAKE_VS_PLATFORM_NAME}/$/" - ) -endif() -if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - set_target_properties(${PROJECT_NAME} PROPERTIES - INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE" - ) -elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - set_target_properties(${PROJECT_NAME} PROPERTIES - INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE" - ) -endif() -################################################################################ -# Compile definitions -################################################################################ -if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - target_compile_definitions(${PROJECT_NAME} PRIVATE - "$<$:" - "_DEBUG" - ">" - "$<$:" - "NDEBUG" - ">" - "_CONSOLE;" - "UNICODE;" - "_UNICODE" - ) -elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - target_compile_definitions(${PROJECT_NAME} PRIVATE - "$<$:" - "_DEBUG" - ">" - "$<$:" - "NDEBUG" - ">" - "WIN32;" - "_CONSOLE;" - "UNICODE;" - "_UNICODE" - ) -endif() - -################################################################################ -# Compile and link options -################################################################################ -if(MSVC) - if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - target_compile_options(${PROJECT_NAME} PRIVATE - $<$: - /Oi; - /Gy - > - /permissive-; - /std:c++17; - /sdl; - /W3; - ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; - ${DEFAULT_CXX_EXCEPTION_HANDLING} - ) - elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - target_compile_options(${PROJECT_NAME} PRIVATE - $<$: - /Oi; - /Gy - > - /permissive-; - /std:c++17; - /sdl; - /W3; - ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; - ${DEFAULT_CXX_EXCEPTION_HANDLING} - ) - endif() - if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - target_link_options(${PROJECT_NAME} PRIVATE - $<$: - /OPT:REF; - /OPT:ICF - > - /SUBSYSTEM:CONSOLE - ) - elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - target_link_options(${PROJECT_NAME} PRIVATE - $<$: - /OPT:REF; - /OPT:ICF - > - /SUBSYSTEM:CONSOLE - ) - endif() -endif() - -################################################################################ -# Dependencies -################################################################################ -use_package(${PROJECT_NAME} lua 5.4.6) -use_package(${PROJECT_NAME} Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn 1.8.1.7) -use_package(${PROJECT_NAME} nlohmann.json 3.11.2) diff --git a/Sources/backend-cpp/Utilities/JsonReader.h b/Sources/backend-cpp/Utilities/JsonReader.h index e6404e3e..03d9669e 100644 --- a/Sources/backend-cpp/Utilities/JsonReader.h +++ b/Sources/backend-cpp/Utilities/JsonReader.h @@ -5,7 +5,7 @@ #include #include -#include "nlohmann\json.hpp" +#include using json = nlohmann::json; std::optional get_module_list(const std::string &path); diff --git a/Sources/backend-cpp/Utilities/LuaReader.cpp b/Sources/backend-cpp/Utilities/LuaReader.cpp index 2a4af4e5..99005f70 100644 --- a/Sources/backend-cpp/Utilities/LuaReader.cpp +++ b/Sources/backend-cpp/Utilities/LuaReader.cpp @@ -2,7 +2,7 @@ #include "LuaReader.h" -#include "lua.hpp" +#include #include #include diff --git a/Sources/backend-cpp/Utilities/LuaReader.h b/Sources/backend-cpp/Utilities/LuaReader.h index a1068a8d..23781859 100644 --- a/Sources/backend-cpp/Utilities/LuaReader.h +++ b/Sources/backend-cpp/Utilities/LuaReader.h @@ -2,7 +2,7 @@ #pragma once -#include "nlohmann/json.hpp" +#include using json = nlohmann::json; @@ -25,4 +25,4 @@ json get_installed_modules(const std::string &dcs_install_path, const std::strin */ json get_clickabledata(const std::string &dcs_install_path, const std::string &module_name, - const std::string &lua_script); \ No newline at end of file + const std::string &lua_script); diff --git a/Sources/backend-cpp/Vendor/lua-5.4.8/CMakeLists.txt b/Sources/backend-cpp/Vendor/lua-5.4.8/CMakeLists.txt index f0e5e27f..62b0e41b 100644 --- a/Sources/backend-cpp/Vendor/lua-5.4.8/CMakeLists.txt +++ b/Sources/backend-cpp/Vendor/lua-5.4.8/CMakeLists.txt @@ -1,6 +1,3 @@ -cmake_minimum_required(VERSION 3.16) -project(lua LANGUAGES C) - file(GLOB LUA_SOURCES "src/*.c") # IMPORTANT: Remove the standalone interpreter and compiler files @@ -10,13 +7,13 @@ list(REMOVE_ITEM LUA_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/luac.c" ) -add_library(lua STATIC ${LUA_SOURCES}) +add_library(lua-5.4.8 STATIC ${LUA_SOURCES}) # Set include directory so others can find lua.h and lua.hpp -target_include_directories(lua PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/src") +target_include_directories(lua-5.4.8 PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/src") # MSVC specific security and compatibility fixes # (Avoids warnings from using standard C functions as opposed to "secure" ones) if(MSVC) - target_compile_definitions(lua PRIVATE _CRT_SECURE_NO_WARNINGS) + target_compile_definitions(lua-5.4.8 PRIVATE _CRT_SECURE_NO_WARNINGS) endif() From 7d4d03f5eed0724a484ef827ff887aaebe5952b0 Mon Sep 17 00:00:00 2001 From: Charles Tytler Date: Thu, 15 Jan 2026 11:25:40 -0800 Subject: [PATCH 07/21] CMakeLists.txt added for SimulatorInterface static library --- Sources/backend-cpp/CMakeLists.txt | 2 +- .../SimulatorInterface/CMakeLists.txt | 144 ++---------------- .../SimulatorInterface/SimulatorInterface.h | 2 +- 3 files changed, 18 insertions(+), 130 deletions(-) diff --git a/Sources/backend-cpp/CMakeLists.txt b/Sources/backend-cpp/CMakeLists.txt index 7feb15bf..a2864632 100644 --- a/Sources/backend-cpp/CMakeLists.txt +++ b/Sources/backend-cpp/CMakeLists.txt @@ -45,7 +45,7 @@ add_subdirectory(Vendor) # Static Libraries add_subdirectory(Utilities) add_subdirectory(ElgatoSD) -# add_subdirectory(SimulatorInterface) +add_subdirectory(SimulatorInterface) # add_subdirectory(StreamdeckContext) # Executable diff --git a/Sources/backend-cpp/SimulatorInterface/CMakeLists.txt b/Sources/backend-cpp/SimulatorInterface/CMakeLists.txt index 7fbb68b5..dd0ddb0b 100644 --- a/Sources/backend-cpp/SimulatorInterface/CMakeLists.txt +++ b/Sources/backend-cpp/SimulatorInterface/CMakeLists.txt @@ -1,132 +1,20 @@ -set(PROJECT_NAME SimulatorInterface) - -################################################################################ -# Source groups -################################################################################ -set(Sources - "@(_WildCardClCompile)" -) -source_group("Sources" FILES ${Sources}) - -set(ALL_FILES - ${Sources} -) - -################################################################################ -# Target -################################################################################ -add_library(${PROJECT_NAME} STATIC ${ALL_FILES}) - -use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}") -set(ROOT_NAMESPACE SimulatorInterface) - -set_target_properties(${PROJECT_NAME} PROPERTIES - VS_GLOBAL_KEYWORD "Win32Proj" +add_library(SimulatorInterface STATIC) + +target_sources(SimulatorInterface + PRIVATE + SimConnectionManager.cpp + SimulatorInterface.cpp + PUBLIC FILE_SET HEADERS + BASE_DIRS .. # Include from backend-cpp/ root. + FILES + SimConnectionManager.h + SimulatorInterface.h + SimulatorInterfaceParameters.h + SimulatorProtocolTypes.h ) -################################################################################ -# Output directory -################################################################################ -if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - set_target_properties(${PROJECT_NAME} PROPERTIES - OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}/${CMAKE_VS_PLATFORM_NAME}/$/" - OUTPUT_DIRECTORY_RELEASE "${CMAKE_SOURCE_DIR}/${CMAKE_VS_PLATFORM_NAME}/$/" - ) -endif() -if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - set_target_properties(${PROJECT_NAME} PROPERTIES - INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE" - ) -elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - set_target_properties(${PROJECT_NAME} PROPERTIES - INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE" - ) -endif() -################################################################################ -# Compile definitions -################################################################################ -if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - target_compile_definitions(${PROJECT_NAME} PRIVATE - "$<$:" - "_DEBUG" - ">" - "$<$:" - "NDEBUG" - ">" - "_CONSOLE;" - "UNICODE;" - "_UNICODE" - ) -elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - target_compile_definitions(${PROJECT_NAME} PRIVATE - "$<$:" - "_DEBUG" - ">" - "$<$:" - "NDEBUG" - ">" - "WIN32;" - "_CONSOLE;" - "UNICODE;" - "_UNICODE" - ) -endif() - -################################################################################ -# Compile and link options -################################################################################ -if(MSVC) - if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - target_compile_options(${PROJECT_NAME} PRIVATE - $<$: - /Oi; - /Gy - > - /permissive-; - /std:c++17; - /sdl; - /W3; - ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; - ${DEFAULT_CXX_EXCEPTION_HANDLING} - ) - elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - target_compile_options(${PROJECT_NAME} PRIVATE - $<$: - /Oi; - /Gy - > - /permissive-; - /std:c++17; - /sdl; - /W3; - ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; - ${DEFAULT_CXX_EXCEPTION_HANDLING} - ) - endif() - if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - target_link_options(${PROJECT_NAME} PRIVATE - $<$: - /OPT:REF; - /OPT:ICF - > - /SUBSYSTEM:CONSOLE - ) - elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - target_link_options(${PROJECT_NAME} PRIVATE - $<$: - /OPT:REF; - /OPT:ICF - > - /SUBSYSTEM:CONSOLE - ) - endif() -endif() -################################################################################ -# Dependencies -################################################################################ -add_dependencies(${PROJECT_NAME} - Utilities +target_link_libraries(SimulatorInterface + PUBLIC + Utilities ) -use_package(${PROJECT_NAME} Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn 1.8.1.7) -use_package(${PROJECT_NAME} nlohmann.json 3.11.2) diff --git a/Sources/backend-cpp/SimulatorInterface/SimulatorInterface.h b/Sources/backend-cpp/SimulatorInterface/SimulatorInterface.h index 79b9e4a2..7d340632 100644 --- a/Sources/backend-cpp/SimulatorInterface/SimulatorInterface.h +++ b/Sources/backend-cpp/SimulatorInterface/SimulatorInterface.h @@ -4,7 +4,7 @@ #include "Utilities/Decimal.h" #include "Utilities/UdpSocket.h" -#include "nlohmann/json.hpp" +#include using json = nlohmann::json; #include From 7a329a96f5a51617de9e062a5c7ed4657d5f666a Mon Sep 17 00:00:00 2001 From: Charles Tytler Date: Thu, 15 Jan 2026 11:31:34 -0800 Subject: [PATCH 08/21] CMakeLists.txt added for StreamdeckContext static library --- Sources/backend-cpp/CMakeLists.txt | 2 +- Sources/backend-cpp/ElgatoSD/CMakeLists.txt | 2 +- .../StreamdeckContext/CMakeLists.txt | 166 ++++-------------- .../StreamdeckContext/test/CMakeLists.txt | 17 ++ 4 files changed, 54 insertions(+), 133 deletions(-) create mode 100644 Sources/backend-cpp/StreamdeckContext/test/CMakeLists.txt diff --git a/Sources/backend-cpp/CMakeLists.txt b/Sources/backend-cpp/CMakeLists.txt index a2864632..30ae9c78 100644 --- a/Sources/backend-cpp/CMakeLists.txt +++ b/Sources/backend-cpp/CMakeLists.txt @@ -46,7 +46,7 @@ add_subdirectory(Vendor) add_subdirectory(Utilities) add_subdirectory(ElgatoSD) add_subdirectory(SimulatorInterface) -# add_subdirectory(StreamdeckContext) +add_subdirectory(StreamdeckContext) # Executable # add_subdirectory(StreamdeckInterface) diff --git a/Sources/backend-cpp/ElgatoSD/CMakeLists.txt b/Sources/backend-cpp/ElgatoSD/CMakeLists.txt index ff22e565..32be6cf5 100644 --- a/Sources/backend-cpp/ElgatoSD/CMakeLists.txt +++ b/Sources/backend-cpp/ElgatoSD/CMakeLists.txt @@ -20,7 +20,7 @@ set(HEADERS add_library(ElgatoSD STATIC ${SOURCES} ${HEADERS}) target_link_libraries(ElgatoSD - PRIVATE + PUBLIC nlohmann_json websocketpp ) diff --git a/Sources/backend-cpp/StreamdeckContext/CMakeLists.txt b/Sources/backend-cpp/StreamdeckContext/CMakeLists.txt index 3f5fa51e..facd86b8 100644 --- a/Sources/backend-cpp/StreamdeckContext/CMakeLists.txt +++ b/Sources/backend-cpp/StreamdeckContext/CMakeLists.txt @@ -1,135 +1,39 @@ -set(PROJECT_NAME StreamdeckContext) - -################################################################################ -# Source groups -################################################################################ -set(Sources - "@(_WildCardClCompile)" -) -source_group("Sources" FILES ${Sources}) - -set(ALL_FILES - ${Sources} -) - -################################################################################ -# Target -################################################################################ -add_library(${PROJECT_NAME} STATIC ${ALL_FILES}) - -use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}") -set(ROOT_NAMESPACE StreamdeckContext) - -set_target_properties(${PROJECT_NAME} PROPERTIES - VS_GLOBAL_KEYWORD "Win32Proj" +add_library(StreamdeckContext STATIC) + +target_sources(StreamdeckContext + PRIVATE + BackwardsCompatibilityHandler.cpp + StreamdeckContext.cpp + + ExportMonitors/ImageStateMonitor.cpp + ExportMonitors/ImageStateMonitor.h + ExportMonitors/IncrementMonitor.cpp + ExportMonitors/IncrementMonitor.h + ExportMonitors/TitleMonitor.cpp + ExportMonitors/TitleMonitor.h + + SendActions/IncrementAction.cpp + SendActions/IncrementAction.h + SendActions/MomentaryAction.cpp + SendActions/MomentaryAction.h + SendActions/SendActionFactory.cpp + SendActions/SendActionFactory.h + SendActions/SendActionInterface.h + SendActions/SwitchAction.cpp + SendActions/SwitchAction.h + + PUBLIC FILE_SET HEADERS + BASE_DIRS .. # Include from backend-cpp/ root. + FILES + BackwardsCompatibilityHandler.h + StreamdeckContext.h ) -################################################################################ -# Output directory -################################################################################ -if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - set_target_properties(${PROJECT_NAME} PROPERTIES - OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}/${CMAKE_VS_PLATFORM_NAME}/$/" - OUTPUT_DIRECTORY_RELEASE "${CMAKE_SOURCE_DIR}/${CMAKE_VS_PLATFORM_NAME}/$/" - ) -endif() -if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - set_target_properties(${PROJECT_NAME} PROPERTIES - INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE" - ) -elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - set_target_properties(${PROJECT_NAME} PROPERTIES - INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE" - ) -endif() -################################################################################ -# Compile definitions -################################################################################ -if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - target_compile_definitions(${PROJECT_NAME} PRIVATE - "$<$:" - "_DEBUG" - ">" - "$<$:" - "NDEBUG" - ">" - "_CONSOLE;" - "UNICODE;" - "_UNICODE" - ) -elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - target_compile_definitions(${PROJECT_NAME} PRIVATE - "$<$:" - "_DEBUG" - ">" - "$<$:" - "NDEBUG" - ">" - "WIN32;" - "_CONSOLE;" - "UNICODE;" - "_UNICODE" - ) -endif() - -################################################################################ -# Compile and link options -################################################################################ -if(MSVC) - if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - target_compile_options(${PROJECT_NAME} PRIVATE - $<$: - /Oi; - /Gy - > - /permissive-; - /std:c++17; - /sdl; - /W3; - ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; - /Zc:__cplusplus; - ${DEFAULT_CXX_EXCEPTION_HANDLING} - ) - elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - target_compile_options(${PROJECT_NAME} PRIVATE - $<$: - /Oi; - /Gy - > - /permissive-; - /std:c++17; - /sdl; - /W3; - ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; - ${DEFAULT_CXX_EXCEPTION_HANDLING} - ) - endif() - if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - target_link_options(${PROJECT_NAME} PRIVATE - $<$: - /OPT:REF; - /OPT:ICF - > - /SUBSYSTEM:CONSOLE - ) - elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - target_link_options(${PROJECT_NAME} PRIVATE - $<$: - /OPT:REF; - /OPT:ICF - > - /SUBSYSTEM:CONSOLE - ) - endif() -endif() -################################################################################ -# Dependencies -################################################################################ -add_dependencies(${PROJECT_NAME} - ElgatoSD - SimulatorInterface - Utilities +target_link_libraries(StreamdeckContext + PUBLIC + ElgatoSD + nlohmann_json + SimulatorInterface + Utilities ) -use_package(${PROJECT_NAME} Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn 1.8.1.7) -use_package(${PROJECT_NAME} nlohmann.json 3.11.2) diff --git a/Sources/backend-cpp/StreamdeckContext/test/CMakeLists.txt b/Sources/backend-cpp/StreamdeckContext/test/CMakeLists.txt new file mode 100644 index 00000000..5c916abe --- /dev/null +++ b/Sources/backend-cpp/StreamdeckContext/test/CMakeLists.txt @@ -0,0 +1,17 @@ +find_package(GTest REQUIRED) +include(GoogleTest) + +set(SOURCES + BackwardsCompatibilityHandlerTest.cpp + StreamdeckContextTest.cpp +) + +add_executable(test_StreamdeckContext ${SOURCES}) + +# Link to the library being tested + GTest +target_link_libraries(test_StreamdeckContext PRIVATE + StreamdeckContext + GTest::gtest_main +) + +gtest_discover_tests(test_StreamdeckContext) From 7d822cedd5b2b9183683ce88873fc75c5a5216b0 Mon Sep 17 00:00:00 2001 From: Charles Tytler Date: Thu, 15 Jan 2026 13:38:36 -0800 Subject: [PATCH 09/21] Cleanup static library CMake files to common style --- Sources/backend-cpp/ElgatoSD/CMakeLists.txt | 35 +++++++++--------- .../SimulatorInterface/CMakeLists.txt | 6 ++++ Sources/backend-cpp/Vendor/CMakeLists.txt | 16 --------- .../Vendor/lua-5.4.8/CMakeLists.txt | 36 ++++++++++++++----- 4 files changed, 51 insertions(+), 42 deletions(-) diff --git a/Sources/backend-cpp/ElgatoSD/CMakeLists.txt b/Sources/backend-cpp/ElgatoSD/CMakeLists.txt index 32be6cf5..79d74410 100644 --- a/Sources/backend-cpp/ElgatoSD/CMakeLists.txt +++ b/Sources/backend-cpp/ElgatoSD/CMakeLists.txt @@ -1,23 +1,24 @@ -set(SOURCES - ESDConnectionManager.cpp - ESDLocalizer.cpp - ESDUtilitiesWindows.cpp - pch.cpp -) +add_library(ElgatoSD STATIC) -set(HEADERS - EPLJSONUtils.h - ESDBasePlugin.h - ESDConnectionManager.h - ESDLocalizer.h - ESDSDKDefines.h - ESDUtilities.h - pch.h -) +target_sources(ElgatoSD + PRIVATE + ESDConnectionManager.cpp + ESDLocalizer.cpp + ESDUtilitiesWindows.cpp + pch.cpp + PUBLIC FILE_SET HEADERS + BASE_DIRS .. # Include from backend-cpp/ root. + FILES + EPLJSONUtils.h + ESDBasePlugin.h + ESDConnectionManager.h + ESDLocalizer.h + ESDSDKDefines.h + ESDUtilities.h + pch.h # TODO: Consider deleting the pch.* files, as they are not used as precompiled headers - -add_library(ElgatoSD STATIC ${SOURCES} ${HEADERS}) +) target_link_libraries(ElgatoSD PUBLIC diff --git a/Sources/backend-cpp/SimulatorInterface/CMakeLists.txt b/Sources/backend-cpp/SimulatorInterface/CMakeLists.txt index dd0ddb0b..f6d6b726 100644 --- a/Sources/backend-cpp/SimulatorInterface/CMakeLists.txt +++ b/Sources/backend-cpp/SimulatorInterface/CMakeLists.txt @@ -4,6 +4,12 @@ target_sources(SimulatorInterface PRIVATE SimConnectionManager.cpp SimulatorInterface.cpp + Protocols/DcsBiosProtocol.cpp + Protocols/DcsBiosProtocol.h + Protocols/DcsBiosStreamParser.cpp + Protocols/DcsBiosStreamParser.h + Protocols/DcsExportScriptProtocol.cpp + Protocols/DcsExportScriptProtocol.h PUBLIC FILE_SET HEADERS BASE_DIRS .. # Include from backend-cpp/ root. FILES diff --git a/Sources/backend-cpp/Vendor/CMakeLists.txt b/Sources/backend-cpp/Vendor/CMakeLists.txt index 8edd4feb..e3d0dadf 100644 --- a/Sources/backend-cpp/Vendor/CMakeLists.txt +++ b/Sources/backend-cpp/Vendor/CMakeLists.txt @@ -15,19 +15,3 @@ target_link_libraries(websocketpp INTERFACE asio) # --- Lua --- add_subdirectory(lua-5.4.8) -# --- Google Test --- -include(FetchContent) -FetchContent_Declare( - googletest - # Release 1.17.0 (04/23/2025) - URL https://github.com/google/googletest/archive/52eb8108c5bdec04579160ae17225d66034bd723.zip - DOWNLOAD_EXTRACT_TIMESTAMP TRUE -) -# For Windows: Prevent overriding the parent project's compiler/linker settings -set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) -FetchContent_MakeAvailable(googletest) - -# Now simply link against gtest or gtest_main as needed. Eg -# add_executable(example example.cpp) -# target_link_libraries(example gtest_main) -# add_test(NAME example_test COMMAND example) diff --git a/Sources/backend-cpp/Vendor/lua-5.4.8/CMakeLists.txt b/Sources/backend-cpp/Vendor/lua-5.4.8/CMakeLists.txt index 62b0e41b..5ef565a2 100644 --- a/Sources/backend-cpp/Vendor/lua-5.4.8/CMakeLists.txt +++ b/Sources/backend-cpp/Vendor/lua-5.4.8/CMakeLists.txt @@ -1,16 +1,34 @@ -file(GLOB LUA_SOURCES "src/*.c") +add_library(lua-5.4.8 STATIC) +# set_target_properties(lua-5.4.8 PROPERTIES LINKER_LANGUAGE C) -# IMPORTANT: Remove the standalone interpreter and compiler files -# These have their own 'main()' functions and will cause linker errors. -list(REMOVE_ITEM LUA_SOURCES - "${CMAKE_CURRENT_SOURCE_DIR}/src/lua.c" - "${CMAKE_CURRENT_SOURCE_DIR}/src/luac.c" +target_sources(lua-5.4.8 + PUBLIC FILE_SET HEADERS + BASE_DIRS src/ # Include lua.hpp directly + FILES + src/lua.hpp + src/lua.h + src/lualib.h + src/lauxlib.h ) -add_library(lua-5.4.8 STATIC ${LUA_SOURCES}) +target_sources(lua-5.4.8 + PRIVATE + src/lapi.c src/lauxlib.c src/lbaselib.c src/lcode.c src/lcorolib.c + src/lctype.c src/ldblib.c src/ldebug.c src/ldo.c src/ldump.c + src/lfunc.c src/lgc.c src/linit.c src/liolib.c src/llex.c + src/lmathlib.c src/lmem.c src/loadlib.c src/lobject.c src/lopcodes.c + src/loslib.c src/lparser.c src/lstate.c src/lstring.c src/lstrlib.c + src/ltable.c src/ltablib.c src/ltm.c src/lundump.c src/lutf8lib.c + src/lvm.c src/lzio.c + # Standalone files lua.c and luac.c are excluded as + # they have their own 'main()' functions -# Set include directory so others can find lua.h and lua.hpp -target_include_directories(lua-5.4.8 PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/src") + src/lapi.h src/lcode.h src/lctype.h src/ldebug.h src/ldo.h src/lfunc.h + src/lgc.h src/ljumptab.h src/llex.h src/llimits.h src/lmem.h + src/lobject.h src/lopcodes.h src/lopnames.h src/lparser.h src/lprefix.h + src/lstate.h src/lstring.h src/ltable.h src/ltm.h src/luaconf.h + src/lundump.h src/lvm.h src/lzio.h +) # MSVC specific security and compatibility fixes # (Avoids warnings from using standard C functions as opposed to "secure" ones) From 30f99cf66441c221c11ff221ae805931079a7eb8 Mon Sep 17 00:00:00 2001 From: Charles Tytler Date: Thu, 15 Jan 2026 13:39:13 -0800 Subject: [PATCH 10/21] Add executable StreamdeckInterface to CMake files --- Sources/backend-cpp/CMakeLists.txt | 10 +- .../StreamdeckInterface/CMakeLists.txt | 181 ++---------------- 2 files changed, 24 insertions(+), 167 deletions(-) diff --git a/Sources/backend-cpp/CMakeLists.txt b/Sources/backend-cpp/CMakeLists.txt index 30ae9c78..7fcb3a1a 100644 --- a/Sources/backend-cpp/CMakeLists.txt +++ b/Sources/backend-cpp/CMakeLists.txt @@ -1,5 +1,7 @@ cmake_minimum_required(VERSION 3.23) -project(StreamdeckPluginBackend LANGUAGES CXX) + +# Note: C is included because of the lua-5.4.8 C library +project(StreamdeckPluginBackend LANGUAGES C CXX) # TODO: Delete this if not desired # Enforce Windows x64 MSVC @@ -7,6 +9,10 @@ project(StreamdeckPluginBackend LANGUAGES CXX) # message(FATAL_ERROR "This project requires MSVC x64.") # endif() +# Force the use of the Dynamic Runtime (/MD and /MDd) across the whole project +# This is added to align with the Vendored websocketpp library +set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") + # Global C++ Settings set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) @@ -49,4 +55,4 @@ add_subdirectory(SimulatorInterface) add_subdirectory(StreamdeckContext) # Executable -# add_subdirectory(StreamdeckInterface) +add_subdirectory(StreamdeckInterface) diff --git a/Sources/backend-cpp/StreamdeckInterface/CMakeLists.txt b/Sources/backend-cpp/StreamdeckInterface/CMakeLists.txt index 698cfe0d..5cc0734f 100644 --- a/Sources/backend-cpp/StreamdeckInterface/CMakeLists.txt +++ b/Sources/backend-cpp/StreamdeckInterface/CMakeLists.txt @@ -1,169 +1,20 @@ -set(PROJECT_NAME StreamdeckInterface) - -################################################################################ -# Source groups -################################################################################ -set(Sources - "@(_WildCardClCompile)" -) -source_group("Sources" FILES ${Sources}) - -set(ALL_FILES - ${Sources} -) - -################################################################################ -# Target -################################################################################ -add_executable(${PROJECT_NAME} ${ALL_FILES}) - -use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}") -set(ROOT_NAMESPACE StreamdeckInterface) - -set_target_properties(${PROJECT_NAME} PROPERTIES - VS_GLOBAL_KEYWORD "Win32Proj" +add_executable(StreamdeckInterface) + +target_sources(StreamdeckInterface + PRIVATE + main.cpp + StreamdeckInterface.cpp + PUBLIC FILE_SET HEADERS + BASE_DIRS .. # Include from backend-cpp/ root. + FILES + StreamdeckInterface.h ) -################################################################################ -# Target name -################################################################################ -if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - set_target_properties(${PROJECT_NAME} PROPERTIES - TARGET_NAME_DEBUG "streamdeck_dcs_interface" - TARGET_NAME_RELEASE "streamdeck_dcs_interface" - ) -elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - set_target_properties(${PROJECT_NAME} PROPERTIES - TARGET_NAME_DEBUG "streamdeck_dcs_interface" - TARGET_NAME_RELEASE "streamdeck_dcs_interface" - ) -endif() -################################################################################ -# Output directory -################################################################################ -if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - set_target_properties(${PROJECT_NAME} PROPERTIES - OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}/${CMAKE_VS_PLATFORM_NAME}/$/" - OUTPUT_DIRECTORY_RELEASE "${CMAKE_SOURCE_DIR}/${CMAKE_VS_PLATFORM_NAME}/$/" - ) -endif() -if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - set_target_properties(${PROJECT_NAME} PROPERTIES - INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE" - ) -elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - set_target_properties(${PROJECT_NAME} PROPERTIES - INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE" - ) -endif() -################################################################################ -# Compile definitions -################################################################################ -if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - target_compile_definitions(${PROJECT_NAME} PRIVATE - "$<$:" - "_DEBUG" - ">" - "$<$:" - "NDEBUG" - ">" - "_CONSOLE;" - "UNICODE;" - "_UNICODE" - ) -elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - target_compile_definitions(${PROJECT_NAME} PRIVATE - "$<$:" - "_DEBUG" - ">" - "$<$:" - "NDEBUG" - ">" - "WIN32;" - "_CONSOLE;" - "UNICODE;" - "_UNICODE" - ) -endif() - -################################################################################ -# Compile and link options -################################################################################ -if(MSVC) - if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - target_compile_options(${PROJECT_NAME} PRIVATE - $<$: - /O2 - > - $<$: - /Oi; - /Gy - > - /permissive-; - /std:c++17; - /sdl; - /W3; - ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; - /Zc:__cplusplus; - ${DEFAULT_CXX_EXCEPTION_HANDLING} - ) - elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - target_compile_options(${PROJECT_NAME} PRIVATE - $<$: - /O2 - > - $<$: - /Oi; - /Gy - > - /permissive-; - /std:c++17; - /sdl; - /W3; - ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; - /Zc:__cplusplus; - ${DEFAULT_CXX_EXCEPTION_HANDLING} - ) - endif() - if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - target_link_options(${PROJECT_NAME} PRIVATE - $<$: - /INCREMENTAL - > - $<$: - /OPT:REF; - /OPT:ICF; - /INCREMENTAL:NO - > - /DEBUG; - /SUBSYSTEM:CONSOLE - ) - elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - target_link_options(${PROJECT_NAME} PRIVATE - $<$: - /INCREMENTAL - > - $<$: - /OPT:REF; - /OPT:ICF; - /INCREMENTAL:NO - > - /DEBUG; - /SUBSYSTEM:CONSOLE - ) - endif() -endif() -################################################################################ -# Dependencies -################################################################################ -# Link with other targets. -target_link_libraries(${PROJECT_NAME} PRIVATE - SimulatorInterface - ElgatoSD - StreamdeckContext - Utilities +target_link_libraries(StreamdeckInterface + PRIVATE + ElgatoSD + SimulatorInterface + StreamdeckContext + Utilities ) -use_package(${PROJECT_NAME} Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn 1.8.1.7) -use_package(${PROJECT_NAME} nlohmann.json 3.11.2) -use_package(${PROJECT_NAME} lua 5.4.6) From a31e5cfcccad8060c1421537200088e5bfe47da4 Mon Sep 17 00:00:00 2001 From: Charles Tytler Date: Thu, 15 Jan 2026 15:22:00 -0800 Subject: [PATCH 11/21] Include google test in CMake project with one library's tests - Utilties --- Sources/backend-cpp/CMakeLists.txt | 32 +++++++++++-------- Sources/backend-cpp/Utilities/CMakeLists.txt | 4 +++ .../backend-cpp/Utilities/test/CMakeLists.txt | 24 ++++++++++++++ .../Utilities/test/JsonReaderTest.cpp | 20 ++++++------ 4 files changed, 57 insertions(+), 23 deletions(-) create mode 100644 Sources/backend-cpp/Utilities/test/CMakeLists.txt diff --git a/Sources/backend-cpp/CMakeLists.txt b/Sources/backend-cpp/CMakeLists.txt index 7fcb3a1a..5010389d 100644 --- a/Sources/backend-cpp/CMakeLists.txt +++ b/Sources/backend-cpp/CMakeLists.txt @@ -1,14 +1,8 @@ cmake_minimum_required(VERSION 3.23) -# Note: C is included because of the lua-5.4.8 C library +# Note: C is included because of the Vendor/lua-5.4.8 C library project(StreamdeckPluginBackend LANGUAGES C CXX) -# TODO: Delete this if not desired -# Enforce Windows x64 MSVC -# if(NOT MSVC OR NOT CMAKE_SIZEOF_VOID_P EQUAL 8) -# message(FATAL_ERROR "This project requires MSVC x64.") -# endif() - # Force the use of the Dynamic Runtime (/MD and /MDd) across the whole project # This is added to align with the Vendored websocketpp library set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") @@ -18,7 +12,6 @@ set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) -# TODO: Consider /W4 or /Wall if(MSVC) add_compile_options( /W3 # Warning Level 3 @@ -41,14 +34,27 @@ add_compile_definitions( # _WINDOWS instead of _CONSOLE, but for development and debugging, # using _CONSOLE is much easier because you can see your log output. +# Testing +include(CTest) -# Vendored dependencies -add_subdirectory(Vendor) +if(BUILD_TESTING) + include(FetchContent) + + FetchContent_Declare( + googletest + GIT_REPOSITORY https://github.com/google/googletest + GIT_TAG v1.17.0 + DOWNLOAD_EXTRACT_TIMESTAMP TRUE + ) -# Enable testing for the whole project (Gtest) -# enable_testing() + # For Windows: Prevent overriding the parent project's compiler/linker settings + set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) -# Static Libraries + FetchContent_MakeAvailable(googletest) +endif() + +# Libraries +add_subdirectory(Vendor) add_subdirectory(Utilities) add_subdirectory(ElgatoSD) add_subdirectory(SimulatorInterface) diff --git a/Sources/backend-cpp/Utilities/CMakeLists.txt b/Sources/backend-cpp/Utilities/CMakeLists.txt index 94d26660..8b7768b6 100644 --- a/Sources/backend-cpp/Utilities/CMakeLists.txt +++ b/Sources/backend-cpp/Utilities/CMakeLists.txt @@ -24,3 +24,7 @@ target_link_libraries(Utilities lua-5.4.8 ) +if(BUILD_TESTING) + add_subdirectory(test) +endif() + diff --git a/Sources/backend-cpp/Utilities/test/CMakeLists.txt b/Sources/backend-cpp/Utilities/test/CMakeLists.txt new file mode 100644 index 00000000..1fbb6d35 --- /dev/null +++ b/Sources/backend-cpp/Utilities/test/CMakeLists.txt @@ -0,0 +1,24 @@ +add_executable(UtilitiesTest) + +target_sources(UtilitiesTest + PRIVATE + DecimalTest.cpp + JsonReaderTest.cpp + LuaReaderTest.cpp + StringUtilitiesTest.cpp + UdpSocketTest.cpp + sample.json +) + +target_link_libraries(UtilitiesTest + PRIVATE + Utilities + GTest::gtest_main +) + +include(GoogleTest) + +gtest_discover_tests(UtilitiesTest + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../../ +) + diff --git a/Sources/backend-cpp/Utilities/test/JsonReaderTest.cpp b/Sources/backend-cpp/Utilities/test/JsonReaderTest.cpp index c30d8881..e495502f 100644 --- a/Sources/backend-cpp/Utilities/test/JsonReaderTest.cpp +++ b/Sources/backend-cpp/Utilities/test/JsonReaderTest.cpp @@ -15,42 +15,42 @@ TEST(JsonReaderTest, getModuleListNonexistantPath) TEST(JsonReaderTest, getModuleTestPath) { - const std::string path = "Sources\\backend-cpp\\Utilities\\test"; + const std::string path = "Utilities\\test"; const auto maybe_module_list = get_module_list(path); ASSERT_TRUE(maybe_module_list); const auto module_list = maybe_module_list.value(); EXPECT_EQ(module_list.size(), 1); - EXPECT_EQ(module_list[0], "Sources\\backend-cpp\\Utilities\\test\\sample.json"); + EXPECT_EQ(module_list[0], "Utilities\\test\\sample.json"); } TEST(JsonReaderTest, getModuleUnderRecursiveTestPath) { - const std::string path = "Sources\\backend-cpp\\Utilities\\"; + const std::string path = "Utilities\\"; const auto maybe_module_list = get_module_list(path); ASSERT_TRUE(maybe_module_list); const auto module_list = maybe_module_list.value(); EXPECT_EQ(module_list.size(), 1); - EXPECT_EQ(module_list[0], "Sources\\backend-cpp\\Utilities\\test\\sample.json"); + EXPECT_EQ(module_list[0], "Utilities\\test\\sample.json"); } TEST(JsonReaderTest, getModuleTestPathWithForwardSlashes) { - const std::string path = "Sources/backend-cpp/Utilities/test"; + const std::string path = "Utilities/test"; const auto maybe_module_list = get_module_list(path); ASSERT_TRUE(maybe_module_list); const auto module_list = maybe_module_list.value(); EXPECT_EQ(module_list.size(), 1); - EXPECT_EQ(module_list[0], "Sources/backend-cpp/Utilities/test\\sample.json"); + EXPECT_EQ(module_list[0], "Utilities/test\\sample.json"); } TEST(JsonReaderTest, getModuleTestPathWithForwardSlashesTrailing) { - const std::string path = "Sources/backend-cpp/Utilities/test/"; + const std::string path = "Utilities/test/"; const auto maybe_module_list = get_module_list(path); ASSERT_TRUE(maybe_module_list); const auto module_list = maybe_module_list.value(); EXPECT_EQ(module_list.size(), 1); - EXPECT_EQ(module_list[0], "Sources/backend-cpp/Utilities/test/sample.json"); + EXPECT_EQ(module_list[0], "Utilities/test/sample.json"); } TEST(JsonReaderTest, nonexistantJsonFile) @@ -62,7 +62,7 @@ TEST(JsonReaderTest, nonexistantJsonFile) TEST(JsonReaderTest, readSampleJsonFile) { - const std::string json_file = "Sources/backend-cpp/Utilities/test/sample.json"; + const std::string json_file = "Utilities/test/sample.json"; const auto maybe_json = read_json_file(json_file); ASSERT_TRUE(maybe_json); const auto json_obj = maybe_json.value(); @@ -70,4 +70,4 @@ TEST(JsonReaderTest, readSampleJsonFile) EXPECT_EQ(json_obj["field2"]["d"], 4); } -} // namespace test \ No newline at end of file +} // namespace test From 27355fbbbc7b6203b3f5321a4efe53434b39c2b0 Mon Sep 17 00:00:00 2001 From: Charles Tytler Date: Thu, 15 Jan 2026 20:46:26 -0800 Subject: [PATCH 12/21] Update gitignore for ctest outputs --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 78a4a450..6eebe191 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ settingsUI/ # Ignore the entire build directory (assuming you name it 'build' or 'out') build/ out/ +Testing/ # If you accidentally build in the root directory (In-Source Build), # these lines will catch the mess: @@ -29,6 +30,9 @@ CMakeUserPresets.json *.vcxproj.filters *.user *.suo +packages/ +x64/ +x86/ # VS Code .vscode/ From 97f132b0e1d215bb243cfaa2222bb4661a728437 Mon Sep 17 00:00:00 2001 From: Charles Tytler Date: Thu, 15 Jan 2026 22:09:37 -0800 Subject: [PATCH 13/21] Test CMakeLists.txt files for all other library test directories --- .../SimulatorInterface/CMakeLists.txt | 5 ++++ .../Protocols/test/CMakeLists.txt | 19 ++++++++++++++ .../SimulatorInterface/test/CMakeLists.txt | 18 +++++++++++++ .../StreamdeckContext/CMakeLists.txt | 6 +++++ .../ExportMonitors/test/CMakeLists.txt | 19 ++++++++++++++ .../SendActions/test/CMakeLists.txt | 20 +++++++++++++++ .../StreamdeckContext/test/CMakeLists.txt | 25 ++++++++++--------- .../backend-cpp/Vendor/googletest/README.md | 4 --- 8 files changed, 100 insertions(+), 16 deletions(-) create mode 100644 Sources/backend-cpp/SimulatorInterface/Protocols/test/CMakeLists.txt create mode 100644 Sources/backend-cpp/SimulatorInterface/test/CMakeLists.txt create mode 100644 Sources/backend-cpp/StreamdeckContext/ExportMonitors/test/CMakeLists.txt create mode 100644 Sources/backend-cpp/StreamdeckContext/SendActions/test/CMakeLists.txt delete mode 100644 Sources/backend-cpp/Vendor/googletest/README.md diff --git a/Sources/backend-cpp/SimulatorInterface/CMakeLists.txt b/Sources/backend-cpp/SimulatorInterface/CMakeLists.txt index f6d6b726..213d8a44 100644 --- a/Sources/backend-cpp/SimulatorInterface/CMakeLists.txt +++ b/Sources/backend-cpp/SimulatorInterface/CMakeLists.txt @@ -24,3 +24,8 @@ target_link_libraries(SimulatorInterface Utilities ) +if(BUILD_TESTING) + add_subdirectory(test) + add_subdirectory(Protocols/test) +endif() + diff --git a/Sources/backend-cpp/SimulatorInterface/Protocols/test/CMakeLists.txt b/Sources/backend-cpp/SimulatorInterface/Protocols/test/CMakeLists.txt new file mode 100644 index 00000000..e0f91ba4 --- /dev/null +++ b/Sources/backend-cpp/SimulatorInterface/Protocols/test/CMakeLists.txt @@ -0,0 +1,19 @@ +add_executable(ProtocolsTest) + +target_sources(ProtocolsTest + PRIVATE + DcsBiosProtocolTest.cpp + DcsBiosStreamParserTest.cpp + DcsExportScriptProtocolTest.cpp +) + +target_link_libraries(ProtocolsTest + PRIVATE + SimulatorInterface + GTest::gtest_main +) + +include(GoogleTest) + +gtest_discover_tests(ProtocolsTest) + diff --git a/Sources/backend-cpp/SimulatorInterface/test/CMakeLists.txt b/Sources/backend-cpp/SimulatorInterface/test/CMakeLists.txt new file mode 100644 index 00000000..f0878813 --- /dev/null +++ b/Sources/backend-cpp/SimulatorInterface/test/CMakeLists.txt @@ -0,0 +1,18 @@ +add_executable(SimulatorInterfaceTest) + +target_sources(SimulatorInterfaceTest + PRIVATE + SimConnectionManagerTest.cpp + SimulatorInterfaceTest.cpp +) + +target_link_libraries(SimulatorInterfaceTest + PRIVATE + SimulatorInterface + GTest::gtest_main +) + +include(GoogleTest) + +gtest_discover_tests(SimulatorInterfaceTest) + diff --git a/Sources/backend-cpp/StreamdeckContext/CMakeLists.txt b/Sources/backend-cpp/StreamdeckContext/CMakeLists.txt index facd86b8..4cb7bd65 100644 --- a/Sources/backend-cpp/StreamdeckContext/CMakeLists.txt +++ b/Sources/backend-cpp/StreamdeckContext/CMakeLists.txt @@ -37,3 +37,9 @@ target_link_libraries(StreamdeckContext Utilities ) +if(BUILD_TESTING) + add_subdirectory(test) + add_subdirectory(ExportMonitors/test) + add_subdirectory(SendActions/test) +endif() + diff --git a/Sources/backend-cpp/StreamdeckContext/ExportMonitors/test/CMakeLists.txt b/Sources/backend-cpp/StreamdeckContext/ExportMonitors/test/CMakeLists.txt new file mode 100644 index 00000000..5bd94319 --- /dev/null +++ b/Sources/backend-cpp/StreamdeckContext/ExportMonitors/test/CMakeLists.txt @@ -0,0 +1,19 @@ +add_executable(ExportMonitorsTest) + +target_sources(ExportMonitorsTest + PRIVATE + ImageStateMonitorTest.cpp + IncrementMonitorTest.cpp + TitleMonitorTest.cpp +) + +target_link_libraries(ExportMonitorsTest + PRIVATE + StreamdeckContext + GTest::gtest_main +) + +include(GoogleTest) + +gtest_discover_tests(ExportMonitorsTest) + diff --git a/Sources/backend-cpp/StreamdeckContext/SendActions/test/CMakeLists.txt b/Sources/backend-cpp/StreamdeckContext/SendActions/test/CMakeLists.txt new file mode 100644 index 00000000..185dfaad --- /dev/null +++ b/Sources/backend-cpp/StreamdeckContext/SendActions/test/CMakeLists.txt @@ -0,0 +1,20 @@ +add_executable(SendActionsTest) + +target_sources(SendActionsTest + PRIVATE + IncrementActionTest.cpp + MomentaryActionTest.cpp + SendActionFactoryTest.cpp + SwitchActionTest.cpp +) + +target_link_libraries(SendActionsTest + PRIVATE + StreamdeckContext + GTest::gtest_main +) + +include(GoogleTest) + +gtest_discover_tests(SendActionsTest) + diff --git a/Sources/backend-cpp/StreamdeckContext/test/CMakeLists.txt b/Sources/backend-cpp/StreamdeckContext/test/CMakeLists.txt index 5c916abe..14a05355 100644 --- a/Sources/backend-cpp/StreamdeckContext/test/CMakeLists.txt +++ b/Sources/backend-cpp/StreamdeckContext/test/CMakeLists.txt @@ -1,17 +1,18 @@ -find_package(GTest REQUIRED) -include(GoogleTest) +add_executable(StreamdeckContextTest) -set(SOURCES - BackwardsCompatibilityHandlerTest.cpp - StreamdeckContextTest.cpp +target_sources(StreamdeckContextTest + PRIVATE + BackwardsCompatibilityHandlerTest.cpp + StreamdeckContextTest.cpp ) -add_executable(test_StreamdeckContext ${SOURCES}) - -# Link to the library being tested + GTest -target_link_libraries(test_StreamdeckContext PRIVATE - StreamdeckContext - GTest::gtest_main +target_link_libraries(StreamdeckContextTest + PRIVATE + StreamdeckContext + GTest::gtest_main ) -gtest_discover_tests(test_StreamdeckContext) +include(GoogleTest) + +gtest_discover_tests(StreamdeckContextTest) + diff --git a/Sources/backend-cpp/Vendor/googletest/README.md b/Sources/backend-cpp/Vendor/googletest/README.md deleted file mode 100644 index 5d9d4298..00000000 --- a/Sources/backend-cpp/Vendor/googletest/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# Google Test - -Google Test code is fetched and compiled by cmake, see Vendor/CMakeLists.txt - From 2b21c329b8477705a7f4ab3b605d290ba823519f Mon Sep 17 00:00:00 2001 From: Charles Tytler Date: Thu, 15 Jan 2026 22:29:33 -0800 Subject: [PATCH 14/21] Create MockESDConnectionManager test cmake target --- Sources/backend-cpp/ElgatoSD/CMakeLists.txt | 4 + .../backend-cpp/ElgatoSD/test/CMakeLists.txt | 10 ++ .../ElgatoSD/test/MockESDConnectionManager.h | 109 ++++++++++++++++++ .../SendActions/test/CMakeLists.txt | 1 + .../SendActions/test/IncrementActionTest.cpp | 2 +- .../SendActions/test/MomentaryActionTest.cpp | 2 +- .../SendActions/test/SwitchActionTest.cpp | 2 +- .../StreamdeckContext/test/CMakeLists.txt | 1 + .../test/StreamdeckContextTest.cpp | 2 +- 9 files changed, 129 insertions(+), 4 deletions(-) create mode 100644 Sources/backend-cpp/ElgatoSD/test/CMakeLists.txt create mode 100644 Sources/backend-cpp/ElgatoSD/test/MockESDConnectionManager.h diff --git a/Sources/backend-cpp/ElgatoSD/CMakeLists.txt b/Sources/backend-cpp/ElgatoSD/CMakeLists.txt index 79d74410..715e281e 100644 --- a/Sources/backend-cpp/ElgatoSD/CMakeLists.txt +++ b/Sources/backend-cpp/ElgatoSD/CMakeLists.txt @@ -26,3 +26,7 @@ target_link_libraries(ElgatoSD websocketpp ) +if(BUILD_TESTING) + add_subdirectory(test) +endif() + diff --git a/Sources/backend-cpp/ElgatoSD/test/CMakeLists.txt b/Sources/backend-cpp/ElgatoSD/test/CMakeLists.txt new file mode 100644 index 00000000..45f1cd12 --- /dev/null +++ b/Sources/backend-cpp/ElgatoSD/test/CMakeLists.txt @@ -0,0 +1,10 @@ +add_library(MockESDConnectionManager INTERFACE) + +target_sources(MockESDConnectionManager INTERFACE + MockESDConnectionManager.h +) + +target_include_directories(MockESDConnectionManager INTERFACE + ${CMAKE_CURRENT_SOURCE_DIR} +) + diff --git a/Sources/backend-cpp/ElgatoSD/test/MockESDConnectionManager.h b/Sources/backend-cpp/ElgatoSD/test/MockESDConnectionManager.h new file mode 100644 index 00000000..d2ea07af --- /dev/null +++ b/Sources/backend-cpp/ElgatoSD/test/MockESDConnectionManager.h @@ -0,0 +1,109 @@ +// Copyright 2021 Charles Tytler + +/*** + * + * This file holds Mock classes of Elgato Streamdeck code that can be passed to plugin code for unit testing Streamdeck + * context management. The mocked ESDConnectionManager prevents actual websockets to the Streamdeck from being opened in + * the unit tests and instead allows output commands to be inspected. + * + ***/ + +#pragma once + +#include "ElgatoSD/ESDBasePlugin.h" +#include "ElgatoSD/ESDConnectionManager.h" + +class MockPlugin : public ESDBasePlugin +{ + public: + MockPlugin() {} + virtual ~MockPlugin() {} + + void SetConnectionManager(ESDConnectionManager *inConnectionManager) { mConnectionManager = inConnectionManager; } + + virtual void KeyDownForAction(const std::string &inAction, + const std::string &inContext, + const json &inPayload, + const std::string &inDeviceID) + { + } + virtual void KeyUpForAction(const std::string &inAction, + const std::string &inContext, + const json &inPayload, + const std::string &inDeviceID) + { + } + + virtual void WillAppearForAction(const std::string &inAction, + const std::string &inContext, + const json &inPayload, + const std::string &inDeviceID) + { + } + virtual void WillDisappearForAction(const std::string &inAction, + const std::string &inContext, + const json &inPayload, + const std::string &inDeviceID) + { + } + + virtual void DeviceDidConnect(const std::string &inDeviceID, const json &inDeviceInfo) {} + virtual void DeviceDidDisconnect(const std::string &inDeviceID) {} + + virtual void DidReceiveGlobalSettings(const json &inPayload) {} + + virtual void SendToPlugin(const std::string &inAction, + const std::string &inContext, + const json &inPayload, + const std::string &inDeviceID) + { + } +}; + +class MockESDConnectionManager : public ESDConnectionManager +{ + public: + // MOCK_METHOD(void, SetState, (int state, std::string context), (override)); + // MOCK_METHOD(void, SetTitle, (std::string title, std::string context, int flag), (override)); + MockESDConnectionManager() : ESDConnectionManager(0, "", "", "", &plugin_) {} + // ESDBasePlugin *inPlugin) {} + + void SetState(int inState, const std::string &inContext) + { + context_ = inContext; + state_ = inState; + num_calls_to_SetState++; + } + + void SetImage(const std::string &inBase64ImageString, const std::string &inContext, ESDSDKTarget inTarget) + { + context_ = inContext; + base64_image_string_ = inBase64ImageString; + num_calls_to_SetImage++; + } + + void SetTitle(const std::string &inTitle, const std::string &inContext, ESDSDKTarget inTarget) + { + context_ = inContext; + title_ = inTitle; + num_calls_to_SetTitle++; + } + + // Only in mock class: + void clear_buffer() + { + context_ = ""; + state_ = 0; + title_ = ""; + } + + MockPlugin plugin_; + std::string context_ = ""; + int state_ = 0; + std::string base64_image_string_ = ""; + std::string title_ = ""; + + int num_calls_to_SetState = 0; + int num_calls_to_SetImage = 0; + int num_calls_to_SetTitle = 0; +}; diff --git a/Sources/backend-cpp/StreamdeckContext/SendActions/test/CMakeLists.txt b/Sources/backend-cpp/StreamdeckContext/SendActions/test/CMakeLists.txt index 185dfaad..207a0f49 100644 --- a/Sources/backend-cpp/StreamdeckContext/SendActions/test/CMakeLists.txt +++ b/Sources/backend-cpp/StreamdeckContext/SendActions/test/CMakeLists.txt @@ -11,6 +11,7 @@ target_sources(SendActionsTest target_link_libraries(SendActionsTest PRIVATE StreamdeckContext + MockESDConnectionManager GTest::gtest_main ) diff --git a/Sources/backend-cpp/StreamdeckContext/SendActions/test/IncrementActionTest.cpp b/Sources/backend-cpp/StreamdeckContext/SendActions/test/IncrementActionTest.cpp index 791f41b0..000ac419 100644 --- a/Sources/backend-cpp/StreamdeckContext/SendActions/test/IncrementActionTest.cpp +++ b/Sources/backend-cpp/StreamdeckContext/SendActions/test/IncrementActionTest.cpp @@ -5,7 +5,7 @@ #include "SimulatorInterface/SimConnectionManager.h" #include "StreamdeckContext/SendActions/IncrementAction.h" -#include "Test/MockESDConnectionManager.h" +#include "MockESDConnectionManager.h" namespace test { diff --git a/Sources/backend-cpp/StreamdeckContext/SendActions/test/MomentaryActionTest.cpp b/Sources/backend-cpp/StreamdeckContext/SendActions/test/MomentaryActionTest.cpp index c476b2b8..91087488 100644 --- a/Sources/backend-cpp/StreamdeckContext/SendActions/test/MomentaryActionTest.cpp +++ b/Sources/backend-cpp/StreamdeckContext/SendActions/test/MomentaryActionTest.cpp @@ -5,7 +5,7 @@ #include "SimulatorInterface/SimConnectionManager.h" #include "StreamdeckContext/SendActions/MomentaryAction.h" -#include "Test/MockESDConnectionManager.h" +#include "MockESDConnectionManager.h" namespace test { diff --git a/Sources/backend-cpp/StreamdeckContext/SendActions/test/SwitchActionTest.cpp b/Sources/backend-cpp/StreamdeckContext/SendActions/test/SwitchActionTest.cpp index bc473081..01f03889 100644 --- a/Sources/backend-cpp/StreamdeckContext/SendActions/test/SwitchActionTest.cpp +++ b/Sources/backend-cpp/StreamdeckContext/SendActions/test/SwitchActionTest.cpp @@ -4,8 +4,8 @@ #include "StreamdeckContext/SendActions/SwitchAction.h" +#include "MockESDConnectionManager.h" #include "SimulatorInterface/SimConnectionManager.h" -#include "Test/MockESDConnectionManager.h" namespace test { diff --git a/Sources/backend-cpp/StreamdeckContext/test/CMakeLists.txt b/Sources/backend-cpp/StreamdeckContext/test/CMakeLists.txt index 14a05355..596dc38f 100644 --- a/Sources/backend-cpp/StreamdeckContext/test/CMakeLists.txt +++ b/Sources/backend-cpp/StreamdeckContext/test/CMakeLists.txt @@ -9,6 +9,7 @@ target_sources(StreamdeckContextTest target_link_libraries(StreamdeckContextTest PRIVATE StreamdeckContext + MockESDConnectionManager GTest::gtest_main ) diff --git a/Sources/backend-cpp/StreamdeckContext/test/StreamdeckContextTest.cpp b/Sources/backend-cpp/StreamdeckContext/test/StreamdeckContextTest.cpp index ee247ca7..6373c198 100644 --- a/Sources/backend-cpp/StreamdeckContext/test/StreamdeckContextTest.cpp +++ b/Sources/backend-cpp/StreamdeckContext/test/StreamdeckContextTest.cpp @@ -3,7 +3,7 @@ #include "gtest/gtest.h" #include -#include "Test/MockESDConnectionManager.h" // Must be called before other includes +#include "MockESDConnectionManager.h" // Must be called before other includes #include "SimulatorInterface/SimConnectionManager.h" #include "StreamdeckContext/StreamdeckContext.h" From 2c6333fca9baedaeaa1415202bc41d598df848ce Mon Sep 17 00:00:00 2001 From: Charles Tytler Date: Thu, 15 Jan 2026 23:00:07 -0800 Subject: [PATCH 15/21] Format cmake files with gersemi --- Sources/backend-cpp/CMakeLists.txt | 24 ++- Sources/backend-cpp/ElgatoSD/CMakeLists.txt | 35 ++-- .../backend-cpp/ElgatoSD/test/CMakeLists.txt | 10 +- .../SimulatorInterface/CMakeLists.txt | 25 ++- .../Protocols/test/CMakeLists.txt | 11 +- .../SimulatorInterface/test/CMakeLists.txt | 15 +- .../StreamdeckContext/CMakeLists.txt | 26 ++- .../ExportMonitors/test/CMakeLists.txt | 11 +- .../SendActions/test/CMakeLists.txt | 12 +- .../StreamdeckContext/test/CMakeLists.txt | 16 +- .../StreamdeckInterface/CMakeLists.txt | 26 ++- Sources/backend-cpp/Test/CMakeLists.txt | 153 +++++++++--------- Sources/backend-cpp/Utilities/CMakeLists.txt | 29 ++-- .../backend-cpp/Utilities/test/CMakeLists.txt | 13 +- Sources/backend-cpp/Vendor/CMakeLists.txt | 16 +- .../Vendor/lua-5.4.8/CMakeLists.txt | 89 +++++++--- 16 files changed, 266 insertions(+), 245 deletions(-) diff --git a/Sources/backend-cpp/CMakeLists.txt b/Sources/backend-cpp/CMakeLists.txt index 5010389d..64ceba49 100644 --- a/Sources/backend-cpp/CMakeLists.txt +++ b/Sources/backend-cpp/CMakeLists.txt @@ -14,19 +14,15 @@ set(CMAKE_CXX_EXTENSIONS OFF) if(MSVC) add_compile_options( - /W3 # Warning Level 3 - /WX # Treat Warning As Error - /sdl # Enable Security Checks - /MP # Multi-processor compilation - /Zc:__cplusplus # Correct __cplusplus macro + /W3 # Warning Level 3 + /WX # Treat Warning As Error + /sdl # Enable Security Checks + /MP # Multi-processor compilation + /Zc:__cplusplus # Correct __cplusplus macro ) endif() -add_compile_definitions( - UNICODE - _UNICODE - _CONSOLE -) +add_compile_definitions(UNICODE _UNICODE _CONSOLE) # TODO: If you are using _CONSOLE, you might see a black command prompt # window pop up when your plugin starts. If you eventually want your # plugin to run silently in the background without that window, @@ -41,10 +37,10 @@ if(BUILD_TESTING) include(FetchContent) FetchContent_Declare( - googletest - GIT_REPOSITORY https://github.com/google/googletest - GIT_TAG v1.17.0 - DOWNLOAD_EXTRACT_TIMESTAMP TRUE + googletest + GIT_REPOSITORY https://github.com/google/googletest + GIT_TAG v1.17.0 + DOWNLOAD_EXTRACT_TIMESTAMP TRUE ) # For Windows: Prevent overriding the parent project's compiler/linker settings diff --git a/Sources/backend-cpp/ElgatoSD/CMakeLists.txt b/Sources/backend-cpp/ElgatoSD/CMakeLists.txt index 715e281e..011a0d50 100644 --- a/Sources/backend-cpp/ElgatoSD/CMakeLists.txt +++ b/Sources/backend-cpp/ElgatoSD/CMakeLists.txt @@ -1,32 +1,29 @@ add_library(ElgatoSD STATIC) -target_sources(ElgatoSD +target_sources( + ElgatoSD PRIVATE ESDConnectionManager.cpp ESDLocalizer.cpp ESDUtilitiesWindows.cpp pch.cpp - - PUBLIC FILE_SET HEADERS - BASE_DIRS .. # Include from backend-cpp/ root. - FILES - EPLJSONUtils.h - ESDBasePlugin.h - ESDConnectionManager.h - ESDLocalizer.h - ESDSDKDefines.h - ESDUtilities.h - pch.h -# TODO: Consider deleting the pch.* files, as they are not used as precompiled headers + PUBLIC + FILE_SET HEADERS + BASE_DIRS + .. # Include from backend-cpp/ root. + FILES + EPLJSONUtils.h + ESDBasePlugin.h + ESDConnectionManager.h + ESDLocalizer.h + ESDSDKDefines.h + ESDUtilities.h + pch.h + # TODO: Consider deleting the pch.* files, as they are not used as precompiled headers ) -target_link_libraries(ElgatoSD - PUBLIC - nlohmann_json - websocketpp -) +target_link_libraries(ElgatoSD PUBLIC nlohmann_json websocketpp) if(BUILD_TESTING) add_subdirectory(test) endif() - diff --git a/Sources/backend-cpp/ElgatoSD/test/CMakeLists.txt b/Sources/backend-cpp/ElgatoSD/test/CMakeLists.txt index 45f1cd12..f0cbb509 100644 --- a/Sources/backend-cpp/ElgatoSD/test/CMakeLists.txt +++ b/Sources/backend-cpp/ElgatoSD/test/CMakeLists.txt @@ -1,10 +1,8 @@ add_library(MockESDConnectionManager INTERFACE) -target_sources(MockESDConnectionManager INTERFACE - MockESDConnectionManager.h -) +target_sources(MockESDConnectionManager INTERFACE MockESDConnectionManager.h) -target_include_directories(MockESDConnectionManager INTERFACE - ${CMAKE_CURRENT_SOURCE_DIR} +target_include_directories( + MockESDConnectionManager + INTERFACE ${CMAKE_CURRENT_SOURCE_DIR} ) - diff --git a/Sources/backend-cpp/SimulatorInterface/CMakeLists.txt b/Sources/backend-cpp/SimulatorInterface/CMakeLists.txt index 213d8a44..48314eb5 100644 --- a/Sources/backend-cpp/SimulatorInterface/CMakeLists.txt +++ b/Sources/backend-cpp/SimulatorInterface/CMakeLists.txt @@ -1,6 +1,7 @@ add_library(SimulatorInterface STATIC) -target_sources(SimulatorInterface +target_sources( + SimulatorInterface PRIVATE SimConnectionManager.cpp SimulatorInterface.cpp @@ -10,22 +11,20 @@ target_sources(SimulatorInterface Protocols/DcsBiosStreamParser.h Protocols/DcsExportScriptProtocol.cpp Protocols/DcsExportScriptProtocol.h - PUBLIC FILE_SET HEADERS - BASE_DIRS .. # Include from backend-cpp/ root. - FILES - SimConnectionManager.h - SimulatorInterface.h - SimulatorInterfaceParameters.h - SimulatorProtocolTypes.h + PUBLIC + FILE_SET HEADERS + BASE_DIRS + .. # Include from backend-cpp/ root. + FILES + SimConnectionManager.h + SimulatorInterface.h + SimulatorInterfaceParameters.h + SimulatorProtocolTypes.h ) -target_link_libraries(SimulatorInterface - PUBLIC - Utilities -) +target_link_libraries(SimulatorInterface PUBLIC Utilities) if(BUILD_TESTING) add_subdirectory(test) add_subdirectory(Protocols/test) endif() - diff --git a/Sources/backend-cpp/SimulatorInterface/Protocols/test/CMakeLists.txt b/Sources/backend-cpp/SimulatorInterface/Protocols/test/CMakeLists.txt index e0f91ba4..5538c117 100644 --- a/Sources/backend-cpp/SimulatorInterface/Protocols/test/CMakeLists.txt +++ b/Sources/backend-cpp/SimulatorInterface/Protocols/test/CMakeLists.txt @@ -1,19 +1,18 @@ add_executable(ProtocolsTest) -target_sources(ProtocolsTest +target_sources( + ProtocolsTest PRIVATE DcsBiosProtocolTest.cpp DcsBiosStreamParserTest.cpp DcsExportScriptProtocolTest.cpp ) -target_link_libraries(ProtocolsTest - PRIVATE - SimulatorInterface - GTest::gtest_main +target_link_libraries( + ProtocolsTest + PRIVATE SimulatorInterface GTest::gtest_main ) include(GoogleTest) gtest_discover_tests(ProtocolsTest) - diff --git a/Sources/backend-cpp/SimulatorInterface/test/CMakeLists.txt b/Sources/backend-cpp/SimulatorInterface/test/CMakeLists.txt index f0878813..69207418 100644 --- a/Sources/backend-cpp/SimulatorInterface/test/CMakeLists.txt +++ b/Sources/backend-cpp/SimulatorInterface/test/CMakeLists.txt @@ -1,18 +1,15 @@ add_executable(SimulatorInterfaceTest) -target_sources(SimulatorInterfaceTest - PRIVATE - SimConnectionManagerTest.cpp - SimulatorInterfaceTest.cpp +target_sources( + SimulatorInterfaceTest + PRIVATE SimConnectionManagerTest.cpp SimulatorInterfaceTest.cpp ) -target_link_libraries(SimulatorInterfaceTest - PRIVATE - SimulatorInterface - GTest::gtest_main +target_link_libraries( + SimulatorInterfaceTest + PRIVATE SimulatorInterface GTest::gtest_main ) include(GoogleTest) gtest_discover_tests(SimulatorInterfaceTest) - diff --git a/Sources/backend-cpp/StreamdeckContext/CMakeLists.txt b/Sources/backend-cpp/StreamdeckContext/CMakeLists.txt index 4cb7bd65..47abc05f 100644 --- a/Sources/backend-cpp/StreamdeckContext/CMakeLists.txt +++ b/Sources/backend-cpp/StreamdeckContext/CMakeLists.txt @@ -1,17 +1,16 @@ add_library(StreamdeckContext STATIC) -target_sources(StreamdeckContext +target_sources( + StreamdeckContext PRIVATE BackwardsCompatibilityHandler.cpp StreamdeckContext.cpp - ExportMonitors/ImageStateMonitor.cpp ExportMonitors/ImageStateMonitor.h ExportMonitors/IncrementMonitor.cpp ExportMonitors/IncrementMonitor.h ExportMonitors/TitleMonitor.cpp ExportMonitors/TitleMonitor.h - SendActions/IncrementAction.cpp SendActions/IncrementAction.h SendActions/MomentaryAction.cpp @@ -21,20 +20,16 @@ target_sources(StreamdeckContext SendActions/SendActionInterface.h SendActions/SwitchAction.cpp SendActions/SwitchAction.h - - PUBLIC FILE_SET HEADERS - BASE_DIRS .. # Include from backend-cpp/ root. - FILES - BackwardsCompatibilityHandler.h - StreamdeckContext.h + PUBLIC + FILE_SET HEADERS + BASE_DIRS + .. # Include from backend-cpp/ root. + FILES BackwardsCompatibilityHandler.h StreamdeckContext.h ) -target_link_libraries(StreamdeckContext - PUBLIC - ElgatoSD - nlohmann_json - SimulatorInterface - Utilities +target_link_libraries( + StreamdeckContext + PUBLIC ElgatoSD nlohmann_json SimulatorInterface Utilities ) if(BUILD_TESTING) @@ -42,4 +37,3 @@ if(BUILD_TESTING) add_subdirectory(ExportMonitors/test) add_subdirectory(SendActions/test) endif() - diff --git a/Sources/backend-cpp/StreamdeckContext/ExportMonitors/test/CMakeLists.txt b/Sources/backend-cpp/StreamdeckContext/ExportMonitors/test/CMakeLists.txt index 5bd94319..823936ff 100644 --- a/Sources/backend-cpp/StreamdeckContext/ExportMonitors/test/CMakeLists.txt +++ b/Sources/backend-cpp/StreamdeckContext/ExportMonitors/test/CMakeLists.txt @@ -1,19 +1,18 @@ add_executable(ExportMonitorsTest) -target_sources(ExportMonitorsTest +target_sources( + ExportMonitorsTest PRIVATE ImageStateMonitorTest.cpp IncrementMonitorTest.cpp TitleMonitorTest.cpp ) -target_link_libraries(ExportMonitorsTest - PRIVATE - StreamdeckContext - GTest::gtest_main +target_link_libraries( + ExportMonitorsTest + PRIVATE StreamdeckContext GTest::gtest_main ) include(GoogleTest) gtest_discover_tests(ExportMonitorsTest) - diff --git a/Sources/backend-cpp/StreamdeckContext/SendActions/test/CMakeLists.txt b/Sources/backend-cpp/StreamdeckContext/SendActions/test/CMakeLists.txt index 207a0f49..02652bcf 100644 --- a/Sources/backend-cpp/StreamdeckContext/SendActions/test/CMakeLists.txt +++ b/Sources/backend-cpp/StreamdeckContext/SendActions/test/CMakeLists.txt @@ -1,6 +1,7 @@ add_executable(SendActionsTest) -target_sources(SendActionsTest +target_sources( + SendActionsTest PRIVATE IncrementActionTest.cpp MomentaryActionTest.cpp @@ -8,14 +9,11 @@ target_sources(SendActionsTest SwitchActionTest.cpp ) -target_link_libraries(SendActionsTest - PRIVATE - StreamdeckContext - MockESDConnectionManager - GTest::gtest_main +target_link_libraries( + SendActionsTest + PRIVATE StreamdeckContext MockESDConnectionManager GTest::gtest_main ) include(GoogleTest) gtest_discover_tests(SendActionsTest) - diff --git a/Sources/backend-cpp/StreamdeckContext/test/CMakeLists.txt b/Sources/backend-cpp/StreamdeckContext/test/CMakeLists.txt index 596dc38f..acc074f7 100644 --- a/Sources/backend-cpp/StreamdeckContext/test/CMakeLists.txt +++ b/Sources/backend-cpp/StreamdeckContext/test/CMakeLists.txt @@ -1,19 +1,15 @@ add_executable(StreamdeckContextTest) -target_sources(StreamdeckContextTest - PRIVATE - BackwardsCompatibilityHandlerTest.cpp - StreamdeckContextTest.cpp +target_sources( + StreamdeckContextTest + PRIVATE BackwardsCompatibilityHandlerTest.cpp StreamdeckContextTest.cpp ) -target_link_libraries(StreamdeckContextTest - PRIVATE - StreamdeckContext - MockESDConnectionManager - GTest::gtest_main +target_link_libraries( + StreamdeckContextTest + PRIVATE StreamdeckContext MockESDConnectionManager GTest::gtest_main ) include(GoogleTest) gtest_discover_tests(StreamdeckContextTest) - diff --git a/Sources/backend-cpp/StreamdeckInterface/CMakeLists.txt b/Sources/backend-cpp/StreamdeckInterface/CMakeLists.txt index 5cc0734f..35de0a58 100644 --- a/Sources/backend-cpp/StreamdeckInterface/CMakeLists.txt +++ b/Sources/backend-cpp/StreamdeckInterface/CMakeLists.txt @@ -1,20 +1,16 @@ add_executable(StreamdeckInterface) -target_sources(StreamdeckInterface - PRIVATE - main.cpp - StreamdeckInterface.cpp - PUBLIC FILE_SET HEADERS - BASE_DIRS .. # Include from backend-cpp/ root. - FILES - StreamdeckInterface.h +target_sources( + StreamdeckInterface + PRIVATE main.cpp StreamdeckInterface.cpp + PUBLIC + FILE_SET HEADERS + BASE_DIRS + .. # Include from backend-cpp/ root. + FILES StreamdeckInterface.h ) -target_link_libraries(StreamdeckInterface - PRIVATE - ElgatoSD - SimulatorInterface - StreamdeckContext - Utilities +target_link_libraries( + StreamdeckInterface + PRIVATE ElgatoSD SimulatorInterface StreamdeckContext Utilities ) - diff --git a/Sources/backend-cpp/Test/CMakeLists.txt b/Sources/backend-cpp/Test/CMakeLists.txt index 243eda5d..e1fe2826 100644 --- a/Sources/backend-cpp/Test/CMakeLists.txt +++ b/Sources/backend-cpp/Test/CMakeLists.txt @@ -3,84 +3,85 @@ set(PROJECT_NAME Test) ################################################################################ # Source groups ################################################################################ -set(Headers - "MockESDConnectionManager.h" -) +set(Headers "MockESDConnectionManager.h") source_group("Headers" FILES ${Headers}) -set(Sources - "@(_WildCardClCompile)" -) +set(Sources "@(_WildCardClCompile)") source_group("Sources" FILES ${Sources}) -set(ALL_FILES - ${Headers} - ${Sources} -) +set(ALL_FILES ${Headers} ${Sources}) ################################################################################ # Target ################################################################################ use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}") -set_target_properties(${PROJECT_NAME} PROPERTIES - VS_GLOBAL_KEYWORD "Win32Proj" -) +set_target_properties(${PROJECT_NAME} PROPERTIES VS_GLOBAL_KEYWORD "Win32Proj") ################################################################################ # MSVC runtime library ################################################################################ -get_property(MSVC_RUNTIME_LIBRARY_DEFAULT TARGET ${PROJECT_NAME} PROPERTY MSVC_RUNTIME_LIBRARY) +get_property( + MSVC_RUNTIME_LIBRARY_DEFAULT + TARGET ${PROJECT_NAME} + PROPERTY MSVC_RUNTIME_LIBRARY +) if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - string(CONCAT "MSVC_RUNTIME_LIBRARY_STR" + string( + CONCAT "MSVC_RUNTIME_LIBRARY_STR" $<$: - MultiThreadedDebugDLL + MultiThreadedDebugDLL > $<$: - MultiThreadedDLL + MultiThreadedDLL > $<$,$>>:${MSVC_RUNTIME_LIBRARY_DEFAULT}> ) elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - string(CONCAT "MSVC_RUNTIME_LIBRARY_STR" + string( + CONCAT "MSVC_RUNTIME_LIBRARY_STR" $<$: - MultiThreadedDebugDLL + MultiThreadedDebugDLL > $<$: - MultiThreadedDLL + MultiThreadedDLL > $<$,$>>:${MSVC_RUNTIME_LIBRARY_DEFAULT}> ) endif() -set_target_properties(${PROJECT_NAME} PROPERTIES MSVC_RUNTIME_LIBRARY ${MSVC_RUNTIME_LIBRARY_STR}) +set_target_properties( + ${PROJECT_NAME} + PROPERTIES MSVC_RUNTIME_LIBRARY ${MSVC_RUNTIME_LIBRARY_STR} +) ################################################################################ # Compile definitions ################################################################################ -target_compile_definitions(${PROJECT_NAME} PRIVATE - "UNICODE;" - "_UNICODE" -) +target_compile_definitions(${PROJECT_NAME} PRIVATE "UNICODE;" "_UNICODE") if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - target_compile_definitions(${PROJECT_NAME} PRIVATE - "$<$:" + target_compile_definitions( + ${PROJECT_NAME} + PRIVATE + "$<$:" "_DEBUG" - ">" - "$<$:" + ">" + "$<$:" "NDEBUG" - ">" - "X64;" - "_CONSOLE" + ">" + "X64;" + "_CONSOLE" ) elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - target_compile_definitions(${PROJECT_NAME} PRIVATE - "$<$:" + target_compile_definitions( + ${PROJECT_NAME} + PRIVATE + "$<$:" "_DEBUG" - ">" - "$<$:" + ">" + "$<$:" "NDEBUG" - ">" - "WIN32;" - "_CONSOLE" + ">" + "WIN32;" + "_CONSOLE" ) endif() @@ -89,54 +90,62 @@ endif() ################################################################################ if(MSVC) if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - target_compile_options(${PROJECT_NAME} PRIVATE - $<$: + target_compile_options( + ${PROJECT_NAME} + PRIVATE + $<$: /Od; /RTC1; ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT} - > - $<$: + > + $<$: /Zi - > - /std:c++17; - /W3; - /Zc:__cplusplus; - ${DEFAULT_CXX_EXCEPTION_HANDLING}; - /Y- + > + /std:c++17; + /W3; + /Zc:__cplusplus; + ${DEFAULT_CXX_EXCEPTION_HANDLING}; + /Y- ) elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - target_compile_options(${PROJECT_NAME} PRIVATE - $<$: + target_compile_options( + ${PROJECT_NAME} + PRIVATE + $<$: /Od; /RTC1; ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT} - > - $<$: + > + $<$: /Zi - > - /W3; - /Zc:__cplusplus; - ${DEFAULT_CXX_EXCEPTION_HANDLING}; - /Y- + > + /W3; + /Zc:__cplusplus; + ${DEFAULT_CXX_EXCEPTION_HANDLING}; + /Y- ) endif() if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - target_link_options(${PROJECT_NAME} PRIVATE - $<$: + target_link_options( + ${PROJECT_NAME} + PRIVATE + $<$: /OPT:REF; /OPT:ICF - > - /DEBUG; - /SUBSYSTEM:CONSOLE + > + /DEBUG; + /SUBSYSTEM:CONSOLE ) elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - target_link_options(${PROJECT_NAME} PRIVATE - $<$: + target_link_options( + ${PROJECT_NAME} + PRIVATE + $<$: /OPT:REF; /OPT:ICF - > - /DEBUG; - /SUBSYSTEM:CONSOLE + > + /DEBUG; + /SUBSYSTEM:CONSOLE ) endif() endif() @@ -145,11 +154,9 @@ endif() # Dependencies ################################################################################ # Link with other targets. -target_link_libraries(${PROJECT_NAME} PUBLIC - SimulatorInterface - ElgatoSD - StreamdeckContext - Utilities +target_link_libraries( + ${PROJECT_NAME} + PUBLIC SimulatorInterface ElgatoSD StreamdeckContext Utilities ) use_package(${PROJECT_NAME} lua 5.4.6) diff --git a/Sources/backend-cpp/Utilities/CMakeLists.txt b/Sources/backend-cpp/Utilities/CMakeLists.txt index 8b7768b6..2f06b314 100644 --- a/Sources/backend-cpp/Utilities/CMakeLists.txt +++ b/Sources/backend-cpp/Utilities/CMakeLists.txt @@ -1,30 +1,27 @@ add_library(Utilities STATIC) -target_sources(Utilities +target_sources( + Utilities PRIVATE Decimal.cpp JsonReader.cpp LuaReader.cpp StringUtilities.cpp UdpSocket.cpp - PUBLIC FILE_SET HEADERS - BASE_DIRS ../ # Include from backend-cpp/ root. - FILES - Decimal.h - JsonReader.h - LuaReader.h - StringUtilities.h - UdpSocket.h -) - -target_link_libraries(Utilities PUBLIC - nlohmann_json - PRIVATE - lua-5.4.8 + FILE_SET HEADERS + BASE_DIRS + ../ # Include from backend-cpp/ root. + FILES + Decimal.h + JsonReader.h + LuaReader.h + StringUtilities.h + UdpSocket.h ) +target_link_libraries(Utilities PUBLIC nlohmann_json PRIVATE lua-5.4.8) + if(BUILD_TESTING) add_subdirectory(test) endif() - diff --git a/Sources/backend-cpp/Utilities/test/CMakeLists.txt b/Sources/backend-cpp/Utilities/test/CMakeLists.txt index 1fbb6d35..ac0a18ad 100644 --- a/Sources/backend-cpp/Utilities/test/CMakeLists.txt +++ b/Sources/backend-cpp/Utilities/test/CMakeLists.txt @@ -1,6 +1,7 @@ add_executable(UtilitiesTest) -target_sources(UtilitiesTest +target_sources( + UtilitiesTest PRIVATE DecimalTest.cpp JsonReaderTest.cpp @@ -10,15 +11,11 @@ target_sources(UtilitiesTest sample.json ) -target_link_libraries(UtilitiesTest - PRIVATE - Utilities - GTest::gtest_main -) +target_link_libraries(UtilitiesTest PRIVATE Utilities GTest::gtest_main) include(GoogleTest) -gtest_discover_tests(UtilitiesTest +gtest_discover_tests( + UtilitiesTest WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../../ ) - diff --git a/Sources/backend-cpp/Vendor/CMakeLists.txt b/Sources/backend-cpp/Vendor/CMakeLists.txt index e3d0dadf..ff2050a2 100644 --- a/Sources/backend-cpp/Vendor/CMakeLists.txt +++ b/Sources/backend-cpp/Vendor/CMakeLists.txt @@ -1,17 +1,25 @@ # --- JSON --- add_library(nlohmann_json INTERFACE) -target_include_directories(nlohmann_json INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}") +target_include_directories( + nlohmann_json + INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}" +) # --- ASIO --- add_library(asio INTERFACE) -target_include_directories(asio INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/asio/include") +target_include_directories( + asio + INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/asio/include" +) target_compile_definitions(asio INTERFACE ASIO_STANDALONE) # --- Websocketpp --- add_library(websocketpp INTERFACE) -target_include_directories(websocketpp INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/websocketpp") +target_include_directories( + websocketpp + INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/websocketpp" +) target_link_libraries(websocketpp INTERFACE asio) # --- Lua --- add_subdirectory(lua-5.4.8) - diff --git a/Sources/backend-cpp/Vendor/lua-5.4.8/CMakeLists.txt b/Sources/backend-cpp/Vendor/lua-5.4.8/CMakeLists.txt index 5ef565a2..95b1dc0d 100644 --- a/Sources/backend-cpp/Vendor/lua-5.4.8/CMakeLists.txt +++ b/Sources/backend-cpp/Vendor/lua-5.4.8/CMakeLists.txt @@ -1,33 +1,76 @@ add_library(lua-5.4.8 STATIC) # set_target_properties(lua-5.4.8 PROPERTIES LINKER_LANGUAGE C) -target_sources(lua-5.4.8 - PUBLIC FILE_SET HEADERS - BASE_DIRS src/ # Include lua.hpp directly - FILES - src/lua.hpp - src/lua.h - src/lualib.h - src/lauxlib.h +target_sources( + lua-5.4.8 + PUBLIC + FILE_SET HEADERS + BASE_DIRS + src/ # Include lua.hpp directly + FILES src/lua.hpp src/lua.h src/lualib.h src/lauxlib.h ) -target_sources(lua-5.4.8 +target_sources( + lua-5.4.8 PRIVATE - src/lapi.c src/lauxlib.c src/lbaselib.c src/lcode.c src/lcorolib.c - src/lctype.c src/ldblib.c src/ldebug.c src/ldo.c src/ldump.c - src/lfunc.c src/lgc.c src/linit.c src/liolib.c src/llex.c - src/lmathlib.c src/lmem.c src/loadlib.c src/lobject.c src/lopcodes.c - src/loslib.c src/lparser.c src/lstate.c src/lstring.c src/lstrlib.c - src/ltable.c src/ltablib.c src/ltm.c src/lundump.c src/lutf8lib.c - src/lvm.c src/lzio.c - # Standalone files lua.c and luac.c are excluded as + src/lapi.c + src/lauxlib.c + src/lbaselib.c + src/lcode.c + src/lcorolib.c + src/lctype.c + src/ldblib.c + src/ldebug.c + src/ldo.c + src/ldump.c + src/lfunc.c + src/lgc.c + src/linit.c + src/liolib.c + src/llex.c + src/lmathlib.c + src/lmem.c + src/loadlib.c + src/lobject.c + src/lopcodes.c + src/loslib.c + src/lparser.c + src/lstate.c + src/lstring.c + src/lstrlib.c + src/ltable.c + src/ltablib.c + src/ltm.c + src/lundump.c + src/lutf8lib.c + src/lvm.c + src/lzio.c + # Standalone files lua.c and luac.c are excluded as # they have their own 'main()' functions - - src/lapi.h src/lcode.h src/lctype.h src/ldebug.h src/ldo.h src/lfunc.h - src/lgc.h src/ljumptab.h src/llex.h src/llimits.h src/lmem.h - src/lobject.h src/lopcodes.h src/lopnames.h src/lparser.h src/lprefix.h - src/lstate.h src/lstring.h src/ltable.h src/ltm.h src/luaconf.h - src/lundump.h src/lvm.h src/lzio.h + src/lapi.h + src/lcode.h + src/lctype.h + src/ldebug.h + src/ldo.h + src/lfunc.h + src/lgc.h + src/ljumptab.h + src/llex.h + src/llimits.h + src/lmem.h + src/lobject.h + src/lopcodes.h + src/lopnames.h + src/lparser.h + src/lprefix.h + src/lstate.h + src/lstring.h + src/ltable.h + src/ltm.h + src/luaconf.h + src/lundump.h + src/lvm.h + src/lzio.h ) # MSVC specific security and compatibility fixes From 649949a2e93253709285366622e192d9a2d275ba Mon Sep 17 00:00:00 2001 From: Charles Tytler Date: Fri, 16 Jan 2026 16:20:10 -0800 Subject: [PATCH 16/21] Use CMAKE_SOURCE_DIR (backend-cpp/) as include root in cmake libraries --- Sources/backend-cpp/ElgatoSD/CMakeLists.txt | 6 +++--- Sources/backend-cpp/SimulatorInterface/CMakeLists.txt | 3 +-- Sources/backend-cpp/StreamdeckContext/CMakeLists.txt | 3 +-- Sources/backend-cpp/StreamdeckInterface/CMakeLists.txt | 3 +-- Sources/backend-cpp/Utilities/CMakeLists.txt | 3 +-- Sources/backend-cpp/Utilities/test/CMakeLists.txt | 5 +---- 6 files changed, 8 insertions(+), 15 deletions(-) diff --git a/Sources/backend-cpp/ElgatoSD/CMakeLists.txt b/Sources/backend-cpp/ElgatoSD/CMakeLists.txt index 011a0d50..dcc495fe 100644 --- a/Sources/backend-cpp/ElgatoSD/CMakeLists.txt +++ b/Sources/backend-cpp/ElgatoSD/CMakeLists.txt @@ -9,8 +9,7 @@ target_sources( pch.cpp PUBLIC FILE_SET HEADERS - BASE_DIRS - .. # Include from backend-cpp/ root. + BASE_DIRS ${CMAKE_SOURCE_DIR} FILES EPLJSONUtils.h ESDBasePlugin.h @@ -19,7 +18,8 @@ target_sources( ESDSDKDefines.h ESDUtilities.h pch.h - # TODO: Consider deleting the pch.* files, as they are not used as precompiled headers + # TODO: Consider deleting the pch.* files, + # as they are not used as precompiled headers ) target_link_libraries(ElgatoSD PUBLIC nlohmann_json websocketpp) diff --git a/Sources/backend-cpp/SimulatorInterface/CMakeLists.txt b/Sources/backend-cpp/SimulatorInterface/CMakeLists.txt index 48314eb5..2dd61bde 100644 --- a/Sources/backend-cpp/SimulatorInterface/CMakeLists.txt +++ b/Sources/backend-cpp/SimulatorInterface/CMakeLists.txt @@ -13,8 +13,7 @@ target_sources( Protocols/DcsExportScriptProtocol.h PUBLIC FILE_SET HEADERS - BASE_DIRS - .. # Include from backend-cpp/ root. + BASE_DIRS ${CMAKE_SOURCE_DIR} FILES SimConnectionManager.h SimulatorInterface.h diff --git a/Sources/backend-cpp/StreamdeckContext/CMakeLists.txt b/Sources/backend-cpp/StreamdeckContext/CMakeLists.txt index 47abc05f..ac8a6c30 100644 --- a/Sources/backend-cpp/StreamdeckContext/CMakeLists.txt +++ b/Sources/backend-cpp/StreamdeckContext/CMakeLists.txt @@ -22,8 +22,7 @@ target_sources( SendActions/SwitchAction.h PUBLIC FILE_SET HEADERS - BASE_DIRS - .. # Include from backend-cpp/ root. + BASE_DIRS ${CMAKE_SOURCE_DIR} FILES BackwardsCompatibilityHandler.h StreamdeckContext.h ) diff --git a/Sources/backend-cpp/StreamdeckInterface/CMakeLists.txt b/Sources/backend-cpp/StreamdeckInterface/CMakeLists.txt index 35de0a58..149b3709 100644 --- a/Sources/backend-cpp/StreamdeckInterface/CMakeLists.txt +++ b/Sources/backend-cpp/StreamdeckInterface/CMakeLists.txt @@ -5,8 +5,7 @@ target_sources( PRIVATE main.cpp StreamdeckInterface.cpp PUBLIC FILE_SET HEADERS - BASE_DIRS - .. # Include from backend-cpp/ root. + BASE_DIRS ${CMAKE_SOURCE_DIR} FILES StreamdeckInterface.h ) diff --git a/Sources/backend-cpp/Utilities/CMakeLists.txt b/Sources/backend-cpp/Utilities/CMakeLists.txt index 2f06b314..4a8c7e08 100644 --- a/Sources/backend-cpp/Utilities/CMakeLists.txt +++ b/Sources/backend-cpp/Utilities/CMakeLists.txt @@ -10,8 +10,7 @@ target_sources( UdpSocket.cpp PUBLIC FILE_SET HEADERS - BASE_DIRS - ../ # Include from backend-cpp/ root. + BASE_DIRS ${CMAKE_SOURCE_DIR} FILES Decimal.h JsonReader.h diff --git a/Sources/backend-cpp/Utilities/test/CMakeLists.txt b/Sources/backend-cpp/Utilities/test/CMakeLists.txt index ac0a18ad..15f72ee2 100644 --- a/Sources/backend-cpp/Utilities/test/CMakeLists.txt +++ b/Sources/backend-cpp/Utilities/test/CMakeLists.txt @@ -15,7 +15,4 @@ target_link_libraries(UtilitiesTest PRIVATE Utilities GTest::gtest_main) include(GoogleTest) -gtest_discover_tests( - UtilitiesTest - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../../ -) +gtest_discover_tests(UtilitiesTest WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) From 9bdd4a75b6cd24946028b16be9567fb7f4242a89 Mon Sep 17 00:00:00 2001 From: Charles Tytler Date: Sat, 17 Jan 2026 12:46:55 -0800 Subject: [PATCH 17/21] Cleanup autogen files and undo include changes (save for later PR) --- Sources/backend-cpp/ElgatoSD/EPLJSONUtils.h | 2 +- Sources/backend-cpp/ElgatoSD/ESDBasePlugin.h | 2 +- .../SimulatorInterface/SimulatorInterface.h | 2 +- Sources/backend-cpp/Test/CMakeLists.txt | 164 ------------ Sources/backend-cpp/Utilities/JsonReader.h | 2 +- Sources/backend-cpp/Utilities/LuaReader.cpp | 2 +- Sources/backend-cpp/Utilities/LuaReader.h | 4 +- .../backend-cpp/Windows/CMake/Default.cmake | 65 ----- .../Windows/CMake/DefaultCXX.cmake | 12 - .../Windows/CMake/DefaultFortran.cmake | 12 - Sources/backend-cpp/Windows/CMake/Utils.cmake | 234 ------------------ Sources/backend-cpp/Windows/CMakeLists.txt | 89 ------- Tools/SocketTester/CMakeLists.txt | 149 ----------- 13 files changed, 7 insertions(+), 732 deletions(-) delete mode 100644 Sources/backend-cpp/Test/CMakeLists.txt delete mode 100644 Sources/backend-cpp/Windows/CMake/Default.cmake delete mode 100644 Sources/backend-cpp/Windows/CMake/DefaultCXX.cmake delete mode 100644 Sources/backend-cpp/Windows/CMake/DefaultFortran.cmake delete mode 100644 Sources/backend-cpp/Windows/CMake/Utils.cmake delete mode 100644 Sources/backend-cpp/Windows/CMakeLists.txt delete mode 100644 Tools/SocketTester/CMakeLists.txt diff --git a/Sources/backend-cpp/ElgatoSD/EPLJSONUtils.h b/Sources/backend-cpp/ElgatoSD/EPLJSONUtils.h index b6ec0368..aad98bf4 100644 --- a/Sources/backend-cpp/ElgatoSD/EPLJSONUtils.h +++ b/Sources/backend-cpp/ElgatoSD/EPLJSONUtils.h @@ -17,7 +17,7 @@ // Includes //------------------------------------------------------------------------------ -#include +#include "nlohmann/json.hpp" using json = nlohmann::json; class EPLJSONUtils diff --git a/Sources/backend-cpp/ElgatoSD/ESDBasePlugin.h b/Sources/backend-cpp/ElgatoSD/ESDBasePlugin.h index c9f17f7e..0454bce6 100644 --- a/Sources/backend-cpp/ElgatoSD/ESDBasePlugin.h +++ b/Sources/backend-cpp/ElgatoSD/ESDBasePlugin.h @@ -12,7 +12,7 @@ #pragma once -#include +#include "nlohmann/json.hpp" using json = nlohmann::json; class ESDConnectionManager; diff --git a/Sources/backend-cpp/SimulatorInterface/SimulatorInterface.h b/Sources/backend-cpp/SimulatorInterface/SimulatorInterface.h index 7d340632..79b9e4a2 100644 --- a/Sources/backend-cpp/SimulatorInterface/SimulatorInterface.h +++ b/Sources/backend-cpp/SimulatorInterface/SimulatorInterface.h @@ -4,7 +4,7 @@ #include "Utilities/Decimal.h" #include "Utilities/UdpSocket.h" -#include +#include "nlohmann/json.hpp" using json = nlohmann::json; #include diff --git a/Sources/backend-cpp/Test/CMakeLists.txt b/Sources/backend-cpp/Test/CMakeLists.txt deleted file mode 100644 index e1fe2826..00000000 --- a/Sources/backend-cpp/Test/CMakeLists.txt +++ /dev/null @@ -1,164 +0,0 @@ -set(PROJECT_NAME Test) - -################################################################################ -# Source groups -################################################################################ -set(Headers "MockESDConnectionManager.h") -source_group("Headers" FILES ${Headers}) - -set(Sources "@(_WildCardClCompile)") -source_group("Sources" FILES ${Sources}) - -set(ALL_FILES ${Headers} ${Sources}) - -################################################################################ -# Target -################################################################################ - -use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}") -set_target_properties(${PROJECT_NAME} PROPERTIES VS_GLOBAL_KEYWORD "Win32Proj") -################################################################################ -# MSVC runtime library -################################################################################ -get_property( - MSVC_RUNTIME_LIBRARY_DEFAULT - TARGET ${PROJECT_NAME} - PROPERTY MSVC_RUNTIME_LIBRARY -) -if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - string( - CONCAT "MSVC_RUNTIME_LIBRARY_STR" - $<$: - MultiThreadedDebugDLL - > - $<$: - MultiThreadedDLL - > - $<$,$>>:${MSVC_RUNTIME_LIBRARY_DEFAULT}> - ) -elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - string( - CONCAT "MSVC_RUNTIME_LIBRARY_STR" - $<$: - MultiThreadedDebugDLL - > - $<$: - MultiThreadedDLL - > - $<$,$>>:${MSVC_RUNTIME_LIBRARY_DEFAULT}> - ) -endif() -set_target_properties( - ${PROJECT_NAME} - PROPERTIES MSVC_RUNTIME_LIBRARY ${MSVC_RUNTIME_LIBRARY_STR} -) - -################################################################################ -# Compile definitions -################################################################################ -target_compile_definitions(${PROJECT_NAME} PRIVATE "UNICODE;" "_UNICODE") -if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - target_compile_definitions( - ${PROJECT_NAME} - PRIVATE - "$<$:" - "_DEBUG" - ">" - "$<$:" - "NDEBUG" - ">" - "X64;" - "_CONSOLE" - ) -elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - target_compile_definitions( - ${PROJECT_NAME} - PRIVATE - "$<$:" - "_DEBUG" - ">" - "$<$:" - "NDEBUG" - ">" - "WIN32;" - "_CONSOLE" - ) -endif() - -################################################################################ -# Compile and link options -################################################################################ -if(MSVC) - if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - target_compile_options( - ${PROJECT_NAME} - PRIVATE - $<$: - /Od; - /RTC1; - ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT} - > - $<$: - /Zi - > - /std:c++17; - /W3; - /Zc:__cplusplus; - ${DEFAULT_CXX_EXCEPTION_HANDLING}; - /Y- - ) - elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - target_compile_options( - ${PROJECT_NAME} - PRIVATE - $<$: - /Od; - /RTC1; - ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT} - > - $<$: - /Zi - > - /W3; - /Zc:__cplusplus; - ${DEFAULT_CXX_EXCEPTION_HANDLING}; - /Y- - ) - endif() - if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - target_link_options( - ${PROJECT_NAME} - PRIVATE - $<$: - /OPT:REF; - /OPT:ICF - > - /DEBUG; - /SUBSYSTEM:CONSOLE - ) - elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - target_link_options( - ${PROJECT_NAME} - PRIVATE - $<$: - /OPT:REF; - /OPT:ICF - > - /DEBUG; - /SUBSYSTEM:CONSOLE - ) - endif() -endif() - -################################################################################ -# Dependencies -################################################################################ -# Link with other targets. -target_link_libraries( - ${PROJECT_NAME} - PUBLIC SimulatorInterface ElgatoSD StreamdeckContext Utilities -) - -use_package(${PROJECT_NAME} lua 5.4.6) -use_package(${PROJECT_NAME} nlohmann.json 3.11.2) -use_package(${PROJECT_NAME} Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn 1.8.1.7) diff --git a/Sources/backend-cpp/Utilities/JsonReader.h b/Sources/backend-cpp/Utilities/JsonReader.h index 03d9669e..e6404e3e 100644 --- a/Sources/backend-cpp/Utilities/JsonReader.h +++ b/Sources/backend-cpp/Utilities/JsonReader.h @@ -5,7 +5,7 @@ #include #include -#include +#include "nlohmann\json.hpp" using json = nlohmann::json; std::optional get_module_list(const std::string &path); diff --git a/Sources/backend-cpp/Utilities/LuaReader.cpp b/Sources/backend-cpp/Utilities/LuaReader.cpp index 99005f70..2a4af4e5 100644 --- a/Sources/backend-cpp/Utilities/LuaReader.cpp +++ b/Sources/backend-cpp/Utilities/LuaReader.cpp @@ -2,7 +2,7 @@ #include "LuaReader.h" -#include +#include "lua.hpp" #include #include diff --git a/Sources/backend-cpp/Utilities/LuaReader.h b/Sources/backend-cpp/Utilities/LuaReader.h index 23781859..a1068a8d 100644 --- a/Sources/backend-cpp/Utilities/LuaReader.h +++ b/Sources/backend-cpp/Utilities/LuaReader.h @@ -2,7 +2,7 @@ #pragma once -#include +#include "nlohmann/json.hpp" using json = nlohmann::json; @@ -25,4 +25,4 @@ json get_installed_modules(const std::string &dcs_install_path, const std::strin */ json get_clickabledata(const std::string &dcs_install_path, const std::string &module_name, - const std::string &lua_script); + const std::string &lua_script); \ No newline at end of file diff --git a/Sources/backend-cpp/Windows/CMake/Default.cmake b/Sources/backend-cpp/Windows/CMake/Default.cmake deleted file mode 100644 index 70bfa903..00000000 --- a/Sources/backend-cpp/Windows/CMake/Default.cmake +++ /dev/null @@ -1,65 +0,0 @@ -################################################################################ -# Command for variable_watch. This command issues error message, if a variable -# is changed. If variable PROPERTY_READER_GUARD_DISABLED is TRUE nothing happens -# variable_watch( property_reader_guard) -################################################################################ -function(property_reader_guard VARIABLE ACCESS VALUE CURRENT_LIST_FILE STACK) - if("${PROPERTY_READER_GUARD_DISABLED}") - return() - endif() - - if("${ACCESS}" STREQUAL "MODIFIED_ACCESS") - message(FATAL_ERROR - " Variable ${VARIABLE} is not supposed to be changed.\n" - " It is used only for reading target property ${VARIABLE}.\n" - " Use\n" - " set_target_properties(\"\" PROPERTIES \"${VARIABLE}\" \"\")\n" - " or\n" - " set_target_properties(\"\" PROPERTIES \"${VARIABLE}_\" \"\")\n" - " instead.\n") - endif() -endfunction() - -################################################################################ -# Create variable with generator expression that expands to value of -# target property _. If property is empty or not set then property -# is used instead. Variable has watcher property_reader_guard that -# doesn't allow to edit it. -# create_property_reader() -# Input: -# name - Name of watched property and output variable -################################################################################ -function(create_property_reader NAME) - set(PROPERTY_READER_GUARD_DISABLED TRUE) - set(CONFIG_VALUE "$>>>") - set(IS_CONFIG_VALUE_EMPTY "$") - set(GENERAL_VALUE "$>") - set("${NAME}" "$" PARENT_SCOPE) - variable_watch("${NAME}" property_reader_guard) -endfunction() - -################################################################################ -# Set property $_${PROPS_CONFIG_U} of ${PROPS_TARGET} to -# set_config_specific_property( ) -# Input: -# name - Prefix of property name -# value - New value -################################################################################ -function(set_config_specific_property NAME VALUE) - set_target_properties("${PROPS_TARGET}" PROPERTIES "${NAME}_${PROPS_CONFIG_U}" "${VALUE}") -endfunction() - -################################################################################ - -create_property_reader("TARGET_NAME") -create_property_reader("OUTPUT_DIRECTORY") - -set_config_specific_property("TARGET_NAME" "${PROPS_TARGET}") -set_config_specific_property("OUTPUT_NAME" "${TARGET_NAME}") -set_config_specific_property("ARCHIVE_OUTPUT_NAME" "${TARGET_NAME}") -set_config_specific_property("LIBRARY_OUTPUT_NAME" "${TARGET_NAME}") -set_config_specific_property("RUNTIME_OUTPUT_NAME" "${TARGET_NAME}") - -set_config_specific_property("ARCHIVE_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}") -set_config_specific_property("LIBRARY_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}") -set_config_specific_property("RUNTIME_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}") \ No newline at end of file diff --git a/Sources/backend-cpp/Windows/CMake/DefaultCXX.cmake b/Sources/backend-cpp/Windows/CMake/DefaultCXX.cmake deleted file mode 100644 index eff0e569..00000000 --- a/Sources/backend-cpp/Windows/CMake/DefaultCXX.cmake +++ /dev/null @@ -1,12 +0,0 @@ -include("${CMAKE_CURRENT_LIST_DIR}/Default.cmake") - -set_config_specific_property("OUTPUT_DIRECTORY" "${CMAKE_SOURCE_DIR}$<$>:/${CMAKE_VS_PLATFORM_NAME}>/${PROPS_CONFIG}") - -if(MSVC) - create_property_reader("DEFAULT_CXX_EXCEPTION_HANDLING") - create_property_reader("DEFAULT_CXX_DEBUG_INFORMATION_FORMAT") - - set_target_properties("${PROPS_TARGET}" PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") - set_config_specific_property("DEFAULT_CXX_EXCEPTION_HANDLING" "/EHsc") - set_config_specific_property("DEFAULT_CXX_DEBUG_INFORMATION_FORMAT" "/Zi") -endif() diff --git a/Sources/backend-cpp/Windows/CMake/DefaultFortran.cmake b/Sources/backend-cpp/Windows/CMake/DefaultFortran.cmake deleted file mode 100644 index 3c16740e..00000000 --- a/Sources/backend-cpp/Windows/CMake/DefaultFortran.cmake +++ /dev/null @@ -1,12 +0,0 @@ -include("${CMAKE_CURRENT_LIST_DIR}/Default.cmake") - -set_config_specific_property("OUTPUT_DIRECTORY" "${CMAKE_CURRENT_SOURCE_DIR}$<$>:/${CMAKE_VS_PLATFORM_NAME}>/${PROPS_CONFIG}") - -get_target_property(${PROPS_TARGET}_BINARY_DIR ${PROPS_TARGET} BINARY_DIR) -set(DEFAULT_FORTRAN_MODULES_DIR "${${PROPS_TARGET}_BINARY_DIR}/${PROPS_TARGET}.Modules.dir") -set_target_properties(${PROPS_TARGET} PROPERTIES Fortran_MODULE_DIRECTORY ${DEFAULT_FORTRAN_MODULES_DIR}) - -if(${CMAKE_GENERATOR} MATCHES "Visual Studio") - # Hack for visual studio generator (https://gitlab.kitware.com/cmake/cmake/issues/19552) - add_custom_command(TARGET ${PROPS_TARGET} PRE_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory $/${CMAKE_CFG_INTDIR}) -endif() \ No newline at end of file diff --git a/Sources/backend-cpp/Windows/CMake/Utils.cmake b/Sources/backend-cpp/Windows/CMake/Utils.cmake deleted file mode 100644 index 9e2f961e..00000000 --- a/Sources/backend-cpp/Windows/CMake/Utils.cmake +++ /dev/null @@ -1,234 +0,0 @@ -# utils file for projects came from visual studio solution with cmake-converter. - -################################################################################ -# Wrap each token of the command with condition -################################################################################ -cmake_policy(PUSH) -cmake_policy(SET CMP0054 NEW) -macro(prepare_commands) - unset(TOKEN_ROLE) - unset(COMMANDS) - foreach(TOKEN ${ARG_COMMANDS}) - if("${TOKEN}" STREQUAL "COMMAND") - set(TOKEN_ROLE "KEYWORD") - elseif("${TOKEN_ROLE}" STREQUAL "KEYWORD") - set(TOKEN_ROLE "CONDITION") - elseif("${TOKEN_ROLE}" STREQUAL "CONDITION") - set(TOKEN_ROLE "COMMAND") - elseif("${TOKEN_ROLE}" STREQUAL "COMMAND") - set(TOKEN_ROLE "ARG") - endif() - - if("${TOKEN_ROLE}" STREQUAL "KEYWORD") - list(APPEND COMMANDS "${TOKEN}") - elseif("${TOKEN_ROLE}" STREQUAL "CONDITION") - set(CONDITION ${TOKEN}) - elseif("${TOKEN_ROLE}" STREQUAL "COMMAND") - list(APPEND COMMANDS "$<$:${DUMMY}>$<${CONDITION}:${TOKEN}>") - elseif("${TOKEN_ROLE}" STREQUAL "ARG") - list(APPEND COMMANDS "$<${CONDITION}:${TOKEN}>") - endif() - endforeach() -endmacro() -cmake_policy(POP) - -################################################################################ -# Transform all the tokens to absolute paths -################################################################################ -macro(prepare_output) - unset(OUTPUT) - foreach(TOKEN ${ARG_OUTPUT}) - if(IS_ABSOLUTE ${TOKEN}) - list(APPEND OUTPUT "${TOKEN}") - else() - list(APPEND OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/${TOKEN}") - endif() - endforeach() -endmacro() - -################################################################################ -# Parse add_custom_command_if args. -# -# Input: -# PRE_BUILD - Pre build event option -# PRE_LINK - Pre link event option -# POST_BUILD - Post build event option -# TARGET - Target -# OUTPUT - List of output files -# DEPENDS - List of files on which the command depends -# COMMANDS - List of commands(COMMAND condition1 commannd1 args1 COMMAND -# condition2 commannd2 args2 ...) -# Output: -# OUTPUT - Output files -# DEPENDS - Files on which the command depends -# COMMENT - Comment -# PRE_BUILD - TRUE/FALSE -# PRE_LINK - TRUE/FALSE -# POST_BUILD - TRUE/FALSE -# TARGET - Target name -# COMMANDS - Prepared commands(every token is wrapped in CONDITION) -# NAME - Unique name for custom target -# STEP - PRE_BUILD/PRE_LINK/POST_BUILD -################################################################################ -function(add_custom_command_if_parse_arguments) - cmake_parse_arguments("ARG" "PRE_BUILD;PRE_LINK;POST_BUILD" "TARGET;COMMENT" "DEPENDS;OUTPUT;COMMANDS" ${ARGN}) - - if(WIN32) - set(DUMMY "cd.") - elseif(UNIX) - set(DUMMY "true") - endif() - - prepare_commands() - prepare_output() - - set(DEPENDS "${ARG_DEPENDS}") - set(COMMENT "${ARG_COMMENT}") - set(PRE_BUILD "${ARG_PRE_BUILD}") - set(PRE_LINK "${ARG_PRE_LINK}") - set(POST_BUILD "${ARG_POST_BUILD}") - set(TARGET "${ARG_TARGET}") - if(PRE_BUILD) - set(STEP "PRE_BUILD") - elseif(PRE_LINK) - set(STEP "PRE_LINK") - elseif(POST_BUILD) - set(STEP "POST_BUILD") - endif() - set(NAME "${TARGET}_${STEP}") - - set(OUTPUT "${OUTPUT}" PARENT_SCOPE) - set(DEPENDS "${DEPENDS}" PARENT_SCOPE) - set(COMMENT "${COMMENT}" PARENT_SCOPE) - set(PRE_BUILD "${PRE_BUILD}" PARENT_SCOPE) - set(PRE_LINK "${PRE_LINK}" PARENT_SCOPE) - set(POST_BUILD "${POST_BUILD}" PARENT_SCOPE) - set(TARGET "${TARGET}" PARENT_SCOPE) - set(COMMANDS "${COMMANDS}" PARENT_SCOPE) - set(STEP "${STEP}" PARENT_SCOPE) - set(NAME "${NAME}" PARENT_SCOPE) -endfunction() - -################################################################################ -# Add conditional custom command -# -# Generating Files -# The first signature is for adding a custom command to produce an output: -# add_custom_command_if( -# -# -# -# [COMMAND condition command2 [args2...]] -# [DEPENDS [depends...]] -# [COMMENT comment] -# -# Build Events -# add_custom_command_if( -# -# -# -# [COMMAND condition command2 [args2...]] -# [COMMENT comment] -# -# Input: -# output - Output files the command is expected to produce -# condition - Generator expression for wrapping the command -# command - Command-line(s) to execute at build time. -# args - Command`s args -# depends - Files on which the command depends -# comment - Display the given message before the commands are executed at -# build time. -# PRE_BUILD - Run before any other rules are executed within the target -# PRE_LINK - Run after sources have been compiled but before linking the -# binary -# POST_BUILD - Run after all other rules within the target have been -# executed -################################################################################ -function(add_custom_command_if) - add_custom_command_if_parse_arguments(${ARGN}) - - if(OUTPUT AND TARGET) - message(FATAL_ERROR "Wrong syntax. A TARGET and OUTPUT can not both be specified.") - endif() - - if(OUTPUT) - add_custom_command(OUTPUT ${OUTPUT} - ${COMMANDS} - DEPENDS ${DEPENDS} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMENT ${COMMENT}) - elseif(TARGET) - if(PRE_BUILD AND NOT ${CMAKE_GENERATOR} MATCHES "Visual Studio") - add_custom_target( - ${NAME} - ${COMMANDS} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMENT ${COMMENT}) - add_dependencies(${TARGET} ${NAME}) - else() - add_custom_command( - TARGET ${TARGET} - ${STEP} - ${COMMANDS} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMENT ${COMMENT}) - endif() - else() - message(FATAL_ERROR "Wrong syntax. A TARGET or OUTPUT must be specified.") - endif() -endfunction() - -################################################################################ -# Use props file for a target and configs -# use_props( ) -# Inside there are following variables: -# PROPS_TARGET - -# PROPS_CONFIG - One of -# PROPS_CONFIG_U - Uppercase PROPS_CONFIG -# Input: -# target - Target to apply props file -# configs - Build configurations to apply props file -# props_file - CMake script -################################################################################ -macro(use_props TARGET CONFIGS PROPS_FILE) - set(PROPS_TARGET "${TARGET}") - foreach(PROPS_CONFIG ${CONFIGS}) - string(TOUPPER "${PROPS_CONFIG}" PROPS_CONFIG_U) - - get_filename_component(ABSOLUTE_PROPS_FILE "${PROPS_FILE}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_LIST_DIR}") - if(EXISTS "${ABSOLUTE_PROPS_FILE}") - include("${ABSOLUTE_PROPS_FILE}") - else() - message(WARNING "Corresponding cmake file from props \"${ABSOLUTE_PROPS_FILE}\" doesn't exist") - endif() - endforeach() -endmacro() - -################################################################################ -# Add compile options to source file -# source_file_compile_options( [compile_options...]) -# Input: -# source_file - Source file -# compile_options - Options to add to COMPILE_FLAGS property -################################################################################ -function(source_file_compile_options SOURCE_FILE) - if("${ARGC}" LESS_EQUAL "1") - return() - endif() - - get_source_file_property(COMPILE_OPTIONS "${SOURCE_FILE}" COMPILE_OPTIONS) - - if(COMPILE_OPTIONS) - list(APPEND COMPILE_OPTIONS ${ARGN}) - else() - set(COMPILE_OPTIONS "${ARGN}") - endif() - - set_source_files_properties("${SOURCE_FILE}" PROPERTIES COMPILE_OPTIONS "${COMPILE_OPTIONS}") -endfunction() - -################################################################################ -# Default properties of visual studio projects -################################################################################ -set(DEFAULT_CXX_PROPS "${CMAKE_CURRENT_LIST_DIR}/DefaultCXX.cmake") -set(DEFAULT_Fortran_PROPS "${CMAKE_CURRENT_LIST_DIR}/DefaultFortran.cmake") diff --git a/Sources/backend-cpp/Windows/CMakeLists.txt b/Sources/backend-cpp/Windows/CMakeLists.txt deleted file mode 100644 index 11bc06f8..00000000 --- a/Sources/backend-cpp/Windows/CMakeLists.txt +++ /dev/null @@ -1,89 +0,0 @@ -cmake_minimum_required(VERSION 3.16.0 FATAL_ERROR) - -set(CMAKE_SYSTEM_VERSION 10.0 CACHE STRING "" FORCE) - -project(com.ctytler.dcs.sdPlugin ) - -################################################################################ -# Set target arch type if empty. Visual studio solution generator provides it. -################################################################################ -if(NOT CMAKE_VS_PLATFORM_NAME) - set(CMAKE_VS_PLATFORM_NAME "x64") -endif() -message("${CMAKE_VS_PLATFORM_NAME} architecture in use") - -if(NOT ("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64" - OR "${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86")) - message(FATAL_ERROR "${CMAKE_VS_PLATFORM_NAME} arch is not supported!") -endif() - -################################################################################ -# Global configuration types -################################################################################ -set(CMAKE_CONFIGURATION_TYPES - "Debug" - "Release" - CACHE STRING "" FORCE -) - -################################################################################ -# Global compiler options -################################################################################ -if(MSVC) - # remove default flags provided with CMake for MSVC -endif() - -################################################################################ -# Global linker options -################################################################################ -if(MSVC) - # remove default flags provided with CMake for MSVC - set(CMAKE_EXE_LINKER_FLAGS "") - set(CMAKE_MODULE_LINKER_FLAGS "") - set(CMAKE_SHARED_LINKER_FLAGS "") - set(CMAKE_STATIC_LINKER_FLAGS "") - set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS}") - set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS}") - set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS}") - set(CMAKE_STATIC_LINKER_FLAGS_DEBUG "${CMAKE_STATIC_LINKER_FLAGS}") - set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS}") - set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS}") - set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS}") - set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS}") -endif() - -################################################################################ -# Nuget packages function stub. -################################################################################ -function(use_package TARGET PACKAGE VERSION) - message(WARNING "No implementation of use_package. Create yours. " - "Package \"${PACKAGE}\" with version \"${VERSION}\" " - "for target \"${TARGET}\" is ignored!") -endfunction() - -################################################################################ -# Common utils -################################################################################ -include(CMake/Utils.cmake) - -################################################################################ -# Additional Global Settings(add specific info there) -################################################################################ -include(CMake/GlobalSettingsInclude.cmake OPTIONAL) - -################################################################################ -# Use solution folders feature -################################################################################ -set_property(GLOBAL PROPERTY USE_FOLDERS ON) - -################################################################################ -# Sub-projects -################################################################################ -add_subdirectory(../../../Tools/SocketTester ${CMAKE_BINARY_DIR}/SocketTester) -add_subdirectory(../ElgatoSD ${CMAKE_BINARY_DIR}/ElgatoSD) -add_subdirectory(../SimulatorInterface ${CMAKE_BINARY_DIR}/SimulatorInterface) -add_subdirectory(../StreamdeckContext ${CMAKE_BINARY_DIR}/StreamdeckContext) -add_subdirectory(../StreamdeckInterface ${CMAKE_BINARY_DIR}/StreamdeckInterface) -add_subdirectory(../Test ${CMAKE_BINARY_DIR}/Test) -add_subdirectory(../Utilities ${CMAKE_BINARY_DIR}/Utilities) - diff --git a/Tools/SocketTester/CMakeLists.txt b/Tools/SocketTester/CMakeLists.txt deleted file mode 100644 index bf700235..00000000 --- a/Tools/SocketTester/CMakeLists.txt +++ /dev/null @@ -1,149 +0,0 @@ -set(PROJECT_NAME SocketTester) - -################################################################################ -# Source groups -################################################################################ -set(Sources - "@(_WildCardClCompile)" -) -source_group("Sources" FILES ${Sources}) - -set(ALL_FILES - ${Sources} -) - -################################################################################ -# Target -################################################################################ -add_executable(${PROJECT_NAME} ${ALL_FILES}) - -use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}") -set(ROOT_NAMESPACE SocketTester) - -set_target_properties(${PROJECT_NAME} PROPERTIES - VS_GLOBAL_KEYWORD "Win32Proj" -) -################################################################################ -# Output directory -################################################################################ -if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - set_target_properties(${PROJECT_NAME} PROPERTIES - OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_SOURCE_DIR}/bin/" - OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/bin/" - ) -elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - set_target_properties(${PROJECT_NAME} PROPERTIES - OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_SOURCE_DIR}/bin/" - OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/bin/" - ) -endif() -if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - set_target_properties(${PROJECT_NAME} PROPERTIES - INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE" - ) -elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - set_target_properties(${PROJECT_NAME} PROPERTIES - INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE" - ) -endif() -################################################################################ -# Compile definitions -################################################################################ -if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - target_compile_definitions(${PROJECT_NAME} PRIVATE - "$<$:" - "_DEBUG" - ">" - "$<$:" - "NDEBUG" - ">" - "_CONSOLE;" - "UNICODE;" - "_UNICODE" - ) -elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - target_compile_definitions(${PROJECT_NAME} PRIVATE - "$<$:" - "_DEBUG" - ">" - "$<$:" - "NDEBUG" - ">" - "WIN32;" - "_CONSOLE;" - "UNICODE;" - "_UNICODE" - ) -endif() - -################################################################################ -# Compile and link options -################################################################################ -if(MSVC) - if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - target_compile_options(${PROJECT_NAME} PRIVATE - $<$: - /Oi; - /Gy - > - /permissive-; - /std:c++17; - /sdl; - /W3; - ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; - ${DEFAULT_CXX_EXCEPTION_HANDLING} - ) - elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - target_compile_options(${PROJECT_NAME} PRIVATE - $<$: - /Oi; - /Gy - > - /permissive-; - /std:c++17; - /sdl; - /W3; - ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; - ${DEFAULT_CXX_EXCEPTION_HANDLING} - ) - endif() - if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - target_link_options(${PROJECT_NAME} PRIVATE - $<$: - /INCREMENTAL - > - $<$: - /OPT:REF; - /OPT:ICF; - /INCREMENTAL:NO - > - /DEBUG; - /SUBSYSTEM:CONSOLE; - /LTCG - ) - elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86") - target_link_options(${PROJECT_NAME} PRIVATE - $<$: - /INCREMENTAL - > - $<$: - /OPT:REF; - /OPT:ICF; - /INCREMENTAL:NO - > - /DEBUG; - /SUBSYSTEM:CONSOLE; - /LTCG - ) - endif() -endif() - -################################################################################ -# Dependencies -################################################################################ -# Link with other targets. -target_link_libraries(${PROJECT_NAME} PRIVATE - Utilities -) - -use_package(${PROJECT_NAME} Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn 1.8.1.7) From e09378ee51de6fd6e20ac8cec08b07348554f7c3 Mon Sep 17 00:00:00 2001 From: Charles Tytler Date: Sat, 17 Jan 2026 13:29:46 -0800 Subject: [PATCH 18/21] Specify exe output dir and copy necessary runtime DLLs to same location --- .../StreamdeckInterface/CMakeLists.txt | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Sources/backend-cpp/StreamdeckInterface/CMakeLists.txt b/Sources/backend-cpp/StreamdeckInterface/CMakeLists.txt index 149b3709..3ae89bfc 100644 --- a/Sources/backend-cpp/StreamdeckInterface/CMakeLists.txt +++ b/Sources/backend-cpp/StreamdeckInterface/CMakeLists.txt @@ -13,3 +13,27 @@ target_link_libraries( StreamdeckInterface PRIVATE ElgatoSD SimulatorInterface StreamdeckContext Utilities ) + +set_target_properties( + StreamdeckInterface + PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELEASE ON +) + +set_target_properties( + StreamdeckInterface + PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" +) + +include(InstallRequiredSystemLibraries) + +if(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS) + add_custom_command( + TARGET StreamdeckInterface + POST_BUILD + COMMAND + ${CMAKE_COMMAND} -E copy_if_different + ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} + "$" + COMMENT "Copying system runtime DLLs to output directory..." + ) +endif() From a0fafba5d017fba881cc86c615e450af397e9ce4 Mon Sep 17 00:00:00 2001 From: Charles Tytler Date: Sat, 17 Jan 2026 13:30:16 -0800 Subject: [PATCH 19/21] Update gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 6eebe191..ba8e8b7b 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ cmake_install.cmake install_manifest.txt compile_commands.json _deps/ +*.cmake # --- CMake Presets --- # CMakePresets.json IS usually committed (it shares build configs with the team) From dec586f58ee69934426c01ff8d8f1e3d43e5d99f Mon Sep 17 00:00:00 2001 From: Charles Tytler Date: Sat, 17 Jan 2026 15:46:45 -0800 Subject: [PATCH 20/21] Update build scripts to use cmake --- .github/workflows/cpp-tests.yml | 36 +++++++++++++++++---------------- Tools/build_plugin.bat | 13 +++++------- 2 files changed, 24 insertions(+), 25 deletions(-) diff --git a/.github/workflows/cpp-tests.yml b/.github/workflows/cpp-tests.yml index 5055b946..c57e9276 100644 --- a/.github/workflows/cpp-tests.yml +++ b/.github/workflows/cpp-tests.yml @@ -12,13 +12,8 @@ on: workflow_dispatch: env: - # Path to the solution file relative to the root of the project. - SOLUTION_FILE_PATH: ./Sources/backend-cpp/Windows/com.ctytler.dcs.sdPlugin.sln - - # Configuration type to build. - # You can convert this to a build matrix if you need coverage of multiple configuration types. - # https://docs.github.com/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix - BUILD_CONFIGURATION: Release + SOURCE_DIR: ./Sources/backend-cpp + BUILD_DIR: ./Sources/backend-cpp/build jobs: build: @@ -26,20 +21,16 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Add MSBuild to PATH - uses: microsoft/setup-msbuild@v1.1 + uses: microsoft/setup-msbuild@v2 - - name: Restore NuGet packages - working-directory: ${{env.GITHUB_WORKSPACE}} - run: nuget restore ${{env.SOLUTION_FILE_PATH}} + - name: CMake + run: cmake -S ${{env.SOURCE_DIR}} -B ${{env.BUILD_DIR}} -A x64 -DBUILD_TESTING=ON - name: Build - working-directory: ${{env.GITHUB_WORKSPACE}} - # Add additional options to the MSBuild command line here (like platform or verbosity level). - # See https://docs.microsoft.com/visualstudio/msbuild/msbuild-command-line-reference - run: msbuild /m /p:Configuration=${{env.BUILD_CONFIGURATION}} ${{env.SOLUTION_FILE_PATH}} + run: cmake --build ${{env.BUILD_DIR}} --config RelWithDebInfo - name: Setup OpenCppCoverage and add to PATH id: setup_opencppcoverage @@ -50,7 +41,16 @@ jobs: - name: Run C++ Unit Tests and Generate Coverage Report id: generate_test_report shell: cmd - run: OpenCppCoverage.exe --sources Sources\backend-cpp --excluded_sources Vendor --excluded_sources Windows --export_type cobertura:StreamdeckDcsInterfaceCov.xml .\Sources\backend-cpp\Windows\x64\Release\Test.exe + run: | + OpenCppCoverage.exe ^ + --quiet ^ + --sources Sources\backend-cpp ^ + --excluded_sources Vendor ^ + --excluded_sources Windows ^ + --excluded_sources Tools ^ + --export_type cobertura:StreamdeckDcsInterfaceCov.xml ^ + --cover_children ^ + -- ctest --test-dir ./${{env.BUILD_DIR}} -C RelWithDebInfo --output-on-failure - name: Upload Report to Codecov uses: codecov/codecov-action@v5 @@ -58,3 +58,5 @@ jobs: token: ${{ secrets.CODECOV_TOKEN }} files: ./StreamdeckDcsInterfaceCov.xml flags: Cpp + disable_search: true + diff --git a/Tools/build_plugin.bat b/Tools/build_plugin.bat index 422b2179..25719984 100644 --- a/Tools/build_plugin.bat +++ b/Tools/build_plugin.bat @@ -5,22 +5,19 @@ :: Change directory to the project root (directory above this batch file location) cd /D "%~dp0"\.. -:: Restore NuGet packages -MSBuild.exe .\Sources\backend-cpp\Windows\com.ctytler.dcs.sdPlugin.sln /t:Restore /p:RestorePackagesConfig=true -if %errorlevel% neq 0 echo "Canceling plugin build due to failure to restore NuGet packages" && pause && exit /b %errorlevel% - :: Build C++ executable: -MSBuild.exe .\Sources\backend-cpp\Windows\com.ctytler.dcs.sdPlugin.sln /p:Configuration="Release" +cmake -S ./Sources/backend-cpp -B ./Sources/backend-cpp/build +cmake --build ./Sources/backend-cpp/build --config Release if %errorlevel% neq 0 echo "Canceling plugin build due to failed backend build" && pause && exit /b %errorlevel% :: Run unit tests, only continue if all tests pass -Sources\backend-cpp\Windows\x64\Release\Test.exe +ctest --test-dir ./Sources/backend-cpp/build --output-on-failure if %errorlevel% neq 0 echo "Canceling plugin build due to failed unit tests" && pause && exit /b %errorlevel% :: Copy C++ executable and DLLs to StreamDeck Plugin package: echo. && echo *** C++ binary compilation complete, published to Sources/com.ctytler.dcs.sdPlugin/bin/ *** && echo. -copy Sources\backend-cpp\Windows\x64\Release\streamdeck_dcs_interface.exe Sources\com.ctytler.dcs.sdPlugin\bin\ -copy Sources\backend-cpp\Windows\x64\Release\*.dll Sources\com.ctytler.dcs.sdPlugin\bin\ +copy Sources\backend-cpp\build\bin\Release\StreamdeckInterface.exe Sources\com.ctytler.dcs.sdPlugin\bin\streamdeck_dcs_interface.exe +copy Sources\backend-cpp\build\bin\Release\*.dll Sources\com.ctytler.dcs.sdPlugin\bin\ :: Remove any prior build of the Plugin: echo. && echo *** Removing any previous builds of com.ctytler.dcs.streamDeckPlugin from Release/ *** From 621149b0de94e9cd7112abd077ee7c854f7d96f1 Mon Sep 17 00:00:00 2001 From: Charles Tytler Date: Sat, 17 Jan 2026 21:26:04 -0800 Subject: [PATCH 21/21] Update outdated codecov.yml --- codecov.yml | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/codecov.yml b/codecov.yml index a7ee2619..f679c028 100644 --- a/codecov.yml +++ b/codecov.yml @@ -1,15 +1,24 @@ +codecov: + require_ci_to_pass: true + notify: + after_n_builds: 2 + coverage: status: - default_rules: project: - default: - target: auto - threshold: 1% + cpp: + informational: true flags: - Cpp + + react: + informational: true + flags: - ReactJS -codecov: - notify: - after_n_builds: 2 + patch: + default: + informational: true + comment: after_n_builds: 2 +