2023-07-15 19:52:58 +02:00
|
|
|
cmake_minimum_required(VERSION 3.5)
|
|
|
|
|
|
|
|
project("Based" LANGUAGES C ASM)
|
|
|
|
|
|
|
|
# =============================================
|
|
|
|
# Options
|
|
|
|
# =============================================
|
|
|
|
#unset(DOCUMENTATION CACHE)
|
|
|
|
#unset(INTERNAL_DOC, CACHE)
|
2023-11-20 15:56:38 +01:00
|
|
|
#unset(BUILD_EXAMPLES, CACHE)
|
2023-07-15 19:52:58 +02:00
|
|
|
option(DOCUMENTATION "Enable to generate ducumentation." OFF)
|
|
|
|
option(INTERNAL_DOC "Enable to generate internal & public documentaion. Disable to only generate public documentation" OFF)
|
2023-11-20 15:56:38 +01:00
|
|
|
option(BUILD_EXAMPLES "Build tests." OFF)
|
2023-07-15 19:52:58 +02:00
|
|
|
|
|
|
|
# =============================================
|
|
|
|
# Policies
|
|
|
|
# =============================================
|
|
|
|
cmake_policy(SET CMP0076 NEW)
|
|
|
|
|
|
|
|
# =============================================
|
|
|
|
# Compiler
|
|
|
|
# =============================================
|
2023-11-20 15:56:38 +01:00
|
|
|
set(CMAKE_BUILD_TYPE Debug)
|
2023-07-15 19:52:58 +02:00
|
|
|
if(CMAKE_C_COMPILER_ID STREQUAL "GNU") # GNUCC
|
|
|
|
# Add linker options.
|
|
|
|
add_link_options(-nostdlib -nodefaultlibs -nostdinc -lgcc) # -z noexecstack
|
|
|
|
add_compile_options(
|
|
|
|
-Wall -Wextra -Wshadow -Wfloat-equal -Wpointer-arith -fPIC -fno-builtin
|
|
|
|
"$<$<CONFIG:RELEASE>:-s;-O3;-DNDEBUG>"
|
|
|
|
"$<$<CONFIG:DEBUG>:-O0;-g>"
|
|
|
|
"$<$<CONFIG:RELWITHDEBINFO>:-O2;-g;-DNDEBUG>")
|
|
|
|
|
|
|
|
elseif(CMAKE_C_COMPILER_ID STREQUAL "MSVC") # MSVC
|
|
|
|
#We use a stack of 1MiB, it is cleaner to implement the chkstk function to check if we need to init more pages.
|
|
|
|
add_link_options(/NODEFAULTLIB /STACK:0x100000,0x100000)
|
|
|
|
add_compile_options(
|
|
|
|
/DWIN32 /D_WINDOWS /W3 /Zl /GS- /Gs9999999 /c
|
|
|
|
"$<$<CONFIG:DEBUG>:/MDd;/Zi;/Ob0;/Od>"
|
|
|
|
)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
# =============================================
|
|
|
|
# Directories
|
|
|
|
# =============================================
|
2023-11-20 15:56:38 +01:00
|
|
|
set(PROJ_BUILD_DIR ${CMAKE_SOURCE_DIR}/build)
|
2023-07-15 19:52:58 +02:00
|
|
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJ_BUILD_DIR}/lib)
|
|
|
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJ_BUILD_DIR}/bin)
|
|
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJ_BUILD_DIR}/bin)
|
|
|
|
|
2023-11-20 15:56:38 +01:00
|
|
|
set(PROJ_REL_BUILD_DIR ${PROJ_BUILD_DIR}/release)
|
2023-07-15 19:52:58 +02:00
|
|
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${PROJ_REL_BUILD_DIR}/lib)
|
|
|
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${PROJ_REL_BUILD_DIR}/bin)
|
|
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJ_REL_BUILD_DIR}/bin)
|
|
|
|
|
2023-11-20 15:56:38 +01:00
|
|
|
set(PROJ_DEB_BUILD_DIR ${PROJ_BUILD_DIR}/debug)
|
2023-07-15 19:52:58 +02:00
|
|
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${PROJ_DEB_BUILD_DIR}/lib)
|
|
|
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${PROJ_DEB_BUILD_DIR}/bin)
|
|
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${PROJ_DEB_BUILD_DIR}/bin)
|
|
|
|
|
2023-11-20 02:50:12 +01:00
|
|
|
add_subdirectory(src)
|
|
|
|
add_subdirectory(include)
|
|
|
|
|
2023-11-20 15:56:38 +01:00
|
|
|
if (BUILD_EXAMPLES)
|
|
|
|
add_subdirectory(examples)
|
|
|
|
endif(BUILD_EXAMPLES)
|
2023-07-15 19:52:58 +02:00
|
|
|
if (DOCUMENTATION)
|
2023-11-20 02:50:12 +01:00
|
|
|
add_subdirectory(doc)
|
|
|
|
endif(DOCUMENTATION)
|