cmake_minimum_required(VERSION 3.5) project("Based" LANGUAGES C ASM) # ============================================= # Options # ============================================= #unset(DOCUMENTATION CACHE) #unset(INTERNAL_DOC, CACHE) #unset(BUILD_EXAMPLES, CACHE) option(DOCUMENTATION "Enable to generate ducumentation." OFF) option(INTERNAL_DOC "Enable to generate internal & public documentaion. Disable to only generate public documentation" OFF) option(BUILD_EXAMPLES "Build tests." OFF) # ============================================= # Policies # ============================================= cmake_policy(SET CMP0076 NEW) # ============================================= # Compiler # ============================================= set(CMAKE_BUILD_TYPE Debug) 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 "$<$:-s;-O3;-DNDEBUG>" "$<$:-O0;-g>" "$<$:-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 "$<$:/MDd;/Zi;/Ob0;/Od>" ) endif() # ============================================= # Directories # ============================================= set(PROJ_BUILD_DIR ${CMAKE_SOURCE_DIR}/build) 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 ${PROJ_BUILD_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 ${PROJ_BUILD_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) add_subdirectory(src) add_subdirectory(include) if (BUILD_EXAMPLES) add_subdirectory(examples) endif(BUILD_EXAMPLES) if (DOCUMENTATION) add_subdirectory(doc) endif(DOCUMENTATION)