cmake_minimum_required(VERSION 3.1) project(moonlight-common-c LANGUAGES C) set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) option(USE_MBEDTLS "Use MbedTLS instead of OpenSSL" OFF) option(CODE_ANALYSIS "Run code analysis during compilation" OFF) SET(CMAKE_C_STANDARD 11) set(CMAKE_POSITION_INDEPENDENT_CODE_BACKUP ${CMAKE_POSITION_INDEPENDENT_CODE}) set(CMAKE_POSITION_INDEPENDENT_CODE ON) add_subdirectory(enet) set(CMAKE_POSITION_INDEPENDENT_CODE ${CMAKE_POSITION_INDEPENDENT_CODE_BACKUP}) unset(CMAKE_POSITION_INDEPENDENT_CODE_BACKUP) aux_source_directory(src SRC_LIST) aux_source_directory(reedsolomon SRC_LIST) # Build shared library by default, but allows user override if (NOT DEFINED BUILD_SHARED_LIBS) set(BUILD_SHARED_LIBS ON) set(BUILD_SHARED_LIBS_OVERRIDE ON) endif() add_library(moonlight-common-c ${SRC_LIST}) if (BUILD_SHARED_LIBS_OVERRIDE) unset(BUILD_SHARED_LIBS) unset(BUILD_SHARED_LIBS_OVERRIDE) endif() target_link_libraries(moonlight-common-c PRIVATE enet) if(MSVC) target_compile_options(moonlight-common-c PRIVATE /W3 /wd4100 /wd4232 /wd5105 /WX) target_link_libraries(moonlight-common-c PRIVATE ws2_32.lib winmm.lib) elseif(MINGW) target_link_libraries(moonlight-common-c PRIVATE -lws2_32 -lwinmm) else() target_compile_options(moonlight-common-c PRIVATE -Wall -Wextra -Wno-unused-parameter -Werror) if (CODE_ANALYSIS AND CMAKE_C_COMPILER_ID STREQUAL "GNU") target_compile_options(moonlight-common-c PRIVATE -fanalyzer) endif() endif() if (USE_MBEDTLS) target_compile_definitions(moonlight-common-c PRIVATE USE_MBEDTLS) find_package(MbedTLS QUIET) if (MBEDTLS_FOUND) target_link_libraries(moonlight-common-c PRIVATE ${MBEDCRYPTO_LIBRARY}) target_include_directories(moonlight-common-c SYSTEM PRIVATE ${MBEDTLS_INCLUDE_DIRS}) else() # For sub project added via CMake target_link_libraries(moonlight-common-c PRIVATE mbedcrypto) endif() else() find_package(OpenSSL 1.0.2 REQUIRED) target_link_libraries(moonlight-common-c PRIVATE ${OPENSSL_CRYPTO_LIBRARY}) target_include_directories(moonlight-common-c SYSTEM PRIVATE ${OPENSSL_INCLUDE_DIR}) endif() string(TOUPPER "x${CMAKE_BUILD_TYPE}" BUILD_TYPE) if("${BUILD_TYPE}" STREQUAL "XDEBUG") target_compile_definitions(moonlight-common-c PRIVATE LC_DEBUG) else() target_compile_definitions(moonlight-common-c PRIVATE NDEBUG) # Avoid false "maybe uninitialized" warning generated by old GCC versions # when building with -O2 if(CMAKE_C_COMPILER_ID STREQUAL "GNU") target_compile_options(moonlight-common-c PRIVATE -Wno-maybe-uninitialized) endif() endif() target_include_directories(moonlight-common-c SYSTEM PUBLIC src) target_include_directories(moonlight-common-c PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/reedsolomon ) target_compile_definitions(moonlight-common-c PRIVATE HAS_SOCKLEN_T)