Adds the project's compilation files

This commit is contained in:
Sylvain Schneider
2026-03-12 16:30:08 +01:00
parent 8178b750b8
commit 0601326e2b
2 changed files with 274 additions and 0 deletions

215
CMakeLists.txt Normal file
View File

@@ -0,0 +1,215 @@
cmake_minimum_required (VERSION 3.20)
project ("kwa.fr")
set(CMAKE_C_STANDARD 23)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF) # Ensure only standard features are enabled (forces ISO C23, not GNU23)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF) # Ensure only standard features are enabled (forces ISO C++23, not GNU++23)
if(MSVC)
string(APPEND CMAKE_C_FLAGS " /W3 /GR")
string(APPEND CMAKE_CXX_FLAGS " /W3 /GR")
string(APPEND CMAKE_C_FLAGS_DEBUG " /MDd /RTC1")
string(APPEND CMAKE_CXX_FLAGS_DEBUG " /MDd /RTC1")
string(APPEND CMAKE_C_FLAGS_RELEASE " /MD")
string(APPEND CMAKE_CXX_FLAGS_RELEASE " /MD")
endif()
# Set default build type to Release if not specified
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type (Debug or Release)" FORCE)
endif()
# Global library environment variable
if(DEFINED ENV{DEV_LIB})
set(DEV_LIB $ENV{DEV_LIB})
else()
message(FATAL_ERROR "DEV_LIB environment variable must be defined")
endif()
# Project Headers
set(PROJECT_INCLUDES
"src"
#"src/misc/SQLite3"
)
# Third-Party Headers (SYSTEM)
list(APPEND SYSTEM_INCLUDES
"src"
"sdi_toolBox_1.0.x/toolBox"
"${DEV_LIB}/wxWidgets-3.2.7/include/msvc"
"${DEV_LIB}/wxWidgets-3.2.7/include"
"${DEV_LIB}/boost_1_87_0"
"${DEV_LIB}/openssl-3.5.0/include"
)
# Libraries directories
#$(OutDir);
link_directories("${DEV_LIB}/wxWidgets-3.2.7/lib/vc_x64_lib")
link_directories("${DEV_LIB}/boost_1_87_0/stage/lib")
link_directories("${DEV_LIB}/openssl-3.5.0/lib")
# Preprocessor definitions
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
list(APPEND PREPROCESSOR_DEFINITIONS
"_CRT_SECURE_NO_DEPRECATE"
"_CRT_NONSTDC_NO_DEPRECATE"
"_DEBUG"
"_UNICODE"
"_WINDOWS"
"DEBUG"
"NOMINMAX"
"UNICODE"
"WIN32"
"WIN32_LEAN_AND_MEAN"
"WXDEBUG"
)
elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
list(APPEND PREPROCESSOR_DEFINITIONS
"_CRT_SECURE_NO_DEPRECATE"
"_CRT_NONSTDC_NO_DEPRECATE"
"_UNICODE"
"_WINDOWS"
"NDEBUG"
"NOMINMAX"
"UNICODE"
"WIN32"
"WIN32_LEAN_AND_MEAN"
)
else()
message(FATAL_ERROR "Invalid build type")
endif()
# External libraries
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(EXTERNAL_LIB
"libssl.lib"
"libcrypto.lib"
)
list(APPEND EXTERNAL_BIN
# "${CMAKE_SOURCE_DIR}/dependencies/Debug/thromboSoft_lib.dll"
)
elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
set(EXTERNAL_LIB
"libssl.lib"
"libcrypto.lib"
)
list(APPEND EXTERNAL_BIN
# "${CMAKE_SOURCE_DIR}/dependencies/Release/thromboSoft_lib.dll"
)
else()
message(FATAL_ERROR "Invalid build type")
endif()
list(APPEND EXTERNAL_BIN
"${DEV_LIB}/openssl-3.5.0/bin/libcrypto-3-x64.dll"
"${DEV_LIB}/openssl-3.5.0/bin/libssl-3-x64.dll"
)
# External resources
set(RESOURCE_FILES "src/kwaFr.rc")
# Activez Rechargement à chaud pour les compilateurs MSVC si cela est pris en charge.
if (POLICY CMP0141)
cmake_policy(SET CMP0141 NEW)
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<IF:$<AND:$<C_COMPILER_ID:MSVC>,$<CXX_COMPILER_ID:MSVC>>,$<$<CONFIG:Debug,RelWithDebInfo>:EditAndContinue>,$<$<CONFIG:Debug,RelWithDebInfo>:ProgramDatabase>>")
endif()
#------------------------------
#--- Project files
#---------------
file(GLOB_RECURSE SOURCES_C "src/*.c")
file(GLOB_RECURSE SOURCES_CPP "src/*.cpp")
if(NOT DEFINED TESTS_MODE)
add_executable (${PROJECT_NAME} WIN32 ${SOURCES_C} ${SOURCES_CPP} ${RESOURCE_FILES})
elseif(TESTS_MODE STREQUAL "True")
add_executable (${PROJECT_NAME} ${SOURCES_C} ${SOURCES_CPP} ${RESOURCE_FILES})
else()
message(FATAL_ERROR "Invalid build type")
endif()
target_compile_definitions(${PROJECT_NAME} PRIVATE ${PREPROCESSOR_DEFINITIONS})
target_link_libraries(${PROJECT_NAME} PRIVATE ${EXTERNAL_LIB})
target_link_options(${PROJECT_NAME} PRIVATE "/ignore:4099")
target_include_directories(${PROJECT_NAME} PRIVATE ${PROJECT_INCLUDES})
target_include_directories(${PROJECT_NAME} SYSTEM PRIVATE ${SYSTEM_INCLUDES})
# Copy required DLL
foreach(DLL ${EXTERNAL_BIN})
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${DLL}"
"${CMAKE_BINARY_DIR}"
)
endforeach()
if(MSVC)
target_compile_options(${PROJECT_NAME} PRIVATE /MP)
target_link_options(${PROJECT_NAME} PRIVATE /PROFILE)
endif()
#----------------------------------------------
#--- Compiler specific information ------------
#----------------------------------------------
message(STATUS "--------------------------------------------------------")
message(STATUS "┏(-_-)┛┗(-_-)┓┗(-_-)┛┏(-_-)┓┏(-_-)┓┗(-_-)┛┏(-_-)┛┗(-_-)┓")
message(STATUS "--------------------------------------------------------")
message(STATUS "--- Platform Information -------------------------------")
message(STATUS "System Name: ${CMAKE_SYSTEM_NAME}")
message(STATUS "Processor: ${CMAKE_SYSTEM_PROCESSOR}")
message(STATUS "CMake Version: ${CMAKE_VERSION}")
message(STATUS "CMake Generator: ${CMAKE_GENERATOR}")
#message(STATUS "Install Prefix: ${CMAKE_INSTALL_PREFIX}")
message(STATUS "--------------------------------------------------------")
message(STATUS "--- Compiler/Language Settings -------------------------")
message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
message(STATUS "C Standard: ${CMAKE_C_STANDARD}")
message(STATUS "C Compiler ID: ${CMAKE_C_COMPILER_ID}")
message(STATUS "C Common Compiler Flags: ${CMAKE_C_FLAGS}")
message(STATUS "C Debug Compiler Flags: ${CMAKE_C_FLAGS_DEBUG}")
message(STATUS "C Release Compiler Flags: ${CMAKE_C_FLAGS_RELEASE}")
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
message(STATUS "C++ Compiler ID: ${CMAKE_CXX_COMPILER_ID}")
message(STATUS "C++ Common Compiler Flags: ${CMAKE_CXX_FLAGS}")
message(STATUS "C++ Debug Compiler Flags: ${CMAKE_CXX_FLAGS_DEBUG}")
message(STATUS "C++ Release Compiler Flags: ${CMAKE_CXX_FLAGS_RELEASE}")
message(STATUS "Common Linker Flags: ${CMAKE_EXE_LINKER_FLAGS}")
message(STATUS "Debug Linker Flags: ${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
message(STATUS "Release Linker Flags: ${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
message(STATUS "--------------------------------------------------------")
message(STATUS "--- Path Information -----------------------------------")
message(STATUS "Source Dir: ${CMAKE_CURRENT_SOURCE_DIR}")
message(STATUS "Binary Dir: ${CMAKE_CURRENT_BINARY_DIR}")
if(MSVC)
message(STATUS "--------------------------------------------------------")
message(STATUS "--- Microsoft Visual C++ (MSVC) Information ------------")
# Check the major compiler version
if(MSVC_VERSION GREATER_EQUAL 1950)
message(STATUS "MSVC Compiler Version: ${MSVC_VERSION} (Visual Studio 2026 or newer)")
elseif(MSVC_VERSION GREATER_EQUAL 1930)
message(STATUS "MSVC Compiler Version: ${MSVC_VERSION} (Visual Studio 2022)")
endif()
message(STATUS "MSVC Toolset Version: ${MSVC_TOOLSET_VERSION}")
message(STATUS "CPP Compiler Version: ${CMAKE_CXX_COMPILER_VERSION}")
message(STATUS "C Compiler Version: ${CMAKE_C_COMPILER_VERSION}")
endif()
message(STATUS "--------------------------------------------------------")
message(STATUS "--- Project Information --------------------------------")
message(STATUS "Project Name: ${PROJECT_NAME}")
message(STATUS "Preset Name: ${PRESET_NAME}")
message(STATUS "--------------------------------------------------------")
message(STATUS "┏(-_-)┛┗(-_-)┓┗(-_-)┛┏(-_-)┓┏(-_-)┓┗(-_-)┛┏(-_-)┛┗(-_-)┓")
message(STATUS "--------------------------------------------------------")

59
CMakePresets.json Normal file
View File

@@ -0,0 +1,59 @@
{
"version": 3,
"configurePresets": [
{
"name": "windows-base",
"hidden": true,
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"installDir": "${sourceDir}/out/install/${presetName}",
"cacheVariables": {
"CMAKE_C_COMPILER": "cl.exe",
"CMAKE_CXX_COMPILER": "cl.exe"
},
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Windows"
}
},
{
"name": "x64-debug",
"displayName": "x64 Debug",
"inherits": "windows-base",
"architecture": {
"value": "x64",
"strategy": "external"
},
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "x64-release",
"displayName": "x64 Release",
"inherits": "x64-debug",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
},
{
"name": "x64-debug-tests",
"displayName": "x64 Debug Test",
"inherits": "x64-debug",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"TESTS_MODE": "True"
}
},
{
"name": "x64-release-tests",
"displayName": "x64 Release Test",
"inherits": "x64-debug",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"TESTS_MODE": "True"
}
}
]
}