based/CMakeLists.txt
2023-07-15 19:52:58 +02:00

60 lines
2.2 KiB
CMake
Executable File

cmake_minimum_required(VERSION 3.5)
project("Based" LANGUAGES C ASM)
# =============================================
# Options
# =============================================
#unset(DOCUMENTATION CACHE)
#unset(INTERNAL_DOC, CACHE)
option(DOCUMENTATION "Enable to generate ducumentation." OFF)
option(INTERNAL_DOC "Enable to generate internal & public documentaion. Disable to only generate public documentation" OFF)
# =============================================
# Policies
# =============================================
cmake_policy(SET CMP0076 NEW)
# =============================================
# Compiler
# =============================================
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
# =============================================
set(PROJ_BUILD_DIR ${CMAKE_BINARY_DIR})
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)
set(PROJ_REL_BUILD_DIR ${CMAKE_BINARY_DIR}/release)
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)
set(PROJ_DEB_BUILD_DIR ${CMAKE_BINARY_DIR}/debug)
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)
if (DOCUMENTATION)
add_subdirectory(doc)
endif(DOCUMENTATION)
add_subdirectory(src)