cmake_minimum_required(VERSION 3.25)
project(MSCL CXX)
file(GLOB_RECURSE SOURCE_FILES MSCL/source/*.cpp)
file(GLOB_RECURSE HEADER_FILES MSCL/source/*.h)
list(REMOVE_ITEM SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/MSCL/source/mscl/Communication/WsdaFinder.cpp)
list(REMOVE_ITEM HEADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/MSCL/source/mscl/Communication/WsdaFinder.h)
list(REMOVE_ITEM HEADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/MSCL/source/stdafx.h)
if (UNIX)
list(REMOVE_ITEM SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/MSCL/source/mscl/Communication/UpnpDeviceFinderCallback.cpp)
list(REMOVE_ITEM HEADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/MSCL/source/mscl/Communication/UpnpDeviceFinderCallback.h)
list(REMOVE_ITEM SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/MSCL/source/mscl/Communication/UpnpService.cpp)
list(REMOVE_ITEM HEADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/MSCL/source/mscl/Communication/UpnpService.h)
endif ()
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX "Source Files" FILES
${SOURCE_FILES}
${HEADER_FILES}
MSCL/source/stdafx.h
)
add_library(${PROJECT_NAME} SHARED)
target_sources(${PROJECT_NAME}
PRIVATE ${SOURCE_FILES} MSCL/source/stdafx.h
PUBLIC FILE_SET HEADERS
BASE_DIRS MSCL/source
FILES ${HEADER_FILES}
)
target_precompile_headers(${PROJECT_NAME} PRIVATE MSCL/source/stdafx.h)
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 17)
set_target_properties(${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON)
if (WIN32)
set_target_properties(${PROJECT_NAME} PROPERTIES UNITY_BUILD ON)
set_target_properties(${PROJECT_NAME} PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS true)
endif ()
target_compile_definitions(${PROJECT_NAME} PUBLIC $<$<CXX_COMPILER_ID:MSVC>:NOMINMAX _USE_MATH_DEFINES UNICODE _UNICODE>)
target_compile_definitions(${PROJECT_NAME} PUBLIC $<$<CXX_COMPILER_ID:MSVC>:_WIN32_WINNT=0x0601>)
target_compile_definitions(${PROJECT_NAME} PUBLIC UNIX_BUILD)
target_compile_options(${PROJECT_NAME} PUBLIC
$<$<CXX_COMPILER_ID:MSVC>:/W4 /MP /permissive- /bigobj>
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wall -Wextra -Wpedantic>
)
target_include_directories(${PROJECT_NAME} PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/MSCL/source>
$<INSTALL_INTERFACE:include>
)
find_package(Boost REQUIRED COMPONENTS system filesystem)
target_link_libraries(${PROJECT_NAME} PUBLIC Boost::filesystem Boost::system)
find_package(OpenSSL REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE OpenSSL::SSL OpenSSL::Crypto)
install(
TARGETS ${PROJECT_NAME}
EXPORT ${PROJECT_NAME}
FILE_SET HEADERS
DESTINATION include
)
install(
EXPORT ${PROJECT_NAME}
NAMESPACE mscl::
DESTINATION share
)