diff options
author | Saleem Abdulrasool <compnerd@compnerd.org> | 2019-12-22 10:21:35 -0800 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2019-12-22 10:21:35 -0800 |
commit | b6ffaca93e2b539ec407aeb4fd588c7f9441e7a9 (patch) | |
tree | 31cb04a0d78220223413b021cb00255a9fe6db5b /CMakeLists.txt | |
parent | 1880e6535e335f143f9547494def01c13f2f331b (diff) |
build: cleanup CMake (#319)
* build: inline a variable
* build: use `LINKER_LANGUAGE` property for C++ runtime
Rather than explicitly name the C++ runtime, use the `LINKER_LANGUAGE`
property to use the driver to spell the C++ runtime appropriately.
* build: use CMake to control C standard
Rather than use compiler specific flags to control the language
standard, indicate to CMake the desired standard.
* build: use the correct variable
These flags are being applied to the *C* compiler, check the C compiler,
not the C++ compiler.
* build: loosen the compiler check
This loosens the compiler identifier check to enable matching AppleClang
which is the identifier for the Xcode compiler.
* build: hoist shared flags to top-level CMakeLists
This hoists the common shared flags handling to the top-level CMakeLists
from sub-layers. This prevents the duplication of the handling.
* build: remove duplicated flags
This is unnecessary, `/TP` is forced on all MSVC builds, no need to
duplicate the flag for older versions.
* build: loosen C compiler identifier check
Loosen the check to a match rather than equality check, this allows it
to match AppleClang which is the identifier for the Apple vended clang
compiler part of Xcode.
* build: use `add_compile_options`
Use `add_compile_options` rather than modify `CMAKE_C_FLAGS`. The
latter is meant to be only modified by the user, not the package
developer.
* build: hoist sanitizer flags to global state
This moves the CMAKE_C_FLAGS handling to the top-level and uses
`add_compile_options` rather than modifying the user controlled flags.
* build: hoist `-fvisibilty` flags to top-level
These are global settings, hoist them to the top level.
* build: hoist the debug flag handling
Use a generator expression and hoist the flag handling for the debug
build.
* build: hoist the profile flag handling
This is a global flag, hoist it to the top level and use
`add_compile_options` rather than modify the user controlled flags.
* build: remove incorrect variable handling
This seemed to be attempting to set the linker not the linker flags for
the profile configuration. This variable is not used, do not set it.
* build: remove unused CMake includes
Diffstat (limited to 'CMakeLists.txt')
-rwxr-xr-x | CMakeLists.txt | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index d9488dd..0d90eb1 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,6 +12,16 @@ option(CMARK_STATIC "Build static libcmark library" ON) option(CMARK_SHARED "Build shared libcmark library" ON) option(CMARK_LIB_FUZZER "Build libFuzzer fuzzing harness" OFF) +if(NOT MSVC) + set(CMAKE_C_STANDARD 99) + set(CMAKE_C_STANDARD_REQUIRED YES) + set(CMAKE_C_EXTENSIONS NO) +endif() + +# -fvisibility=hidden +set(CMAKE_C_VISIBILITY_PRESET hidden) +set(CMAKE_VISIBILITY_INLINES_HIDDEN 1) + # The Linux modules distributed with CMake add "-rdynamic" to the build flags # which is incompatible with static linking under certain configurations. # Unsetting CMAKE_SHARED_LIBRARY_LINK_C_FLAGS ensures this does not happen. @@ -19,6 +29,31 @@ if(CMARK_STATIC AND "${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS) endif() +# Compiler flags +if(MSVC) + # Force to always compile with W4 + add_compile_options($<$<COMPILE_LANGUAGE:C>:/W4>) + add_compile_options($<$<COMPILE_LANGUAGE:C>:/wd4706>) + add_compile_options($<$<COMPILE_LANGUAGE:C>:/TP>) + add_compile_definitions($<$<COMPILE_LANGUAGE:C>:/D_CRT_SECURE_NO_WARNINGS>) +elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES Clang) + add_compile_options($<$<COMPILE_LANGUAGE:C>:-Wall>) + add_compile_options($<$<COMPILE_LANGUAGE:C>:-Wextra>) + add_compile_options($<$<COMPILE_LANGUAGE:C>:-pedantic>) +endif() + +# Check integrity of node structure when compiled as debug +add_compile_definitions($<$<CONFIG:Debug>:CMARK_DEBUG_NODES>) + +add_compile_options($<$<AND:$<CONFIG:PROFILE>,$<COMPILE_LANGUAGE:C>>:-pg>) + +if(CMAKE_BUILD_TYPE STREQUAL Ubsan) + add_compile_options($<$<COMPILE_LANGUAGE:C>:-fsanitize=undefined>) +endif() +if(CMARK_LIB_FUZZER) + add_compile_options($<$<COMPILE_LANGUAGE:C>:-fsanitize-coverage=trace-pc-guard>) +endif() + add_subdirectory(src) if(CMARK_TESTS AND (CMARK_SHARED OR CMARK_STATIC)) add_subdirectory(api_test) |