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 /src | |
| 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 'src')
| -rw-r--r-- | src/CMakeLists.txt | 46 | 
1 files changed, 5 insertions, 41 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0aa0ee2..5171cde 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -66,17 +66,6 @@ elseif (CMARK_SHARED)    target_link_libraries(${PROGRAM} ${LIBRARY})  endif() -# Check integrity of node structure when compiled as debug: -set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DCMARK_DEBUG_NODES") -set(CMAKE_LINKER_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG}") - -set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE} -pg") -set(CMAKE_LINKER_PROFILE "${CMAKE_LINKER_FLAGS_RELEASE} -pg") - -# -fvisibility=hidden -set(CMAKE_C_VISIBILITY_PRESET hidden) -set(CMAKE_VISIBILITY_INLINES_HIDDEN 1) -  if (CMARK_SHARED)    add_library(${LIBRARY} SHARED ${LIBRARY_SOURCES})    # Include minor version and patch level in soname for now. @@ -159,8 +148,6 @@ endif()  # Feature tests  include(CheckIncludeFile)  include(CheckCSourceCompiles) -include(CheckCSourceRuns) -include(CheckSymbolExists)  CHECK_INCLUDE_FILE(stdbool.h HAVE_STDBOOL_H)  CHECK_C_SOURCE_COMPILES(    "int main() { __builtin_expect(0,0); return 0; }" @@ -174,35 +161,12 @@ CONFIGURE_FILE(    ${CMAKE_CURRENT_SOURCE_DIR}/config.h.in    ${CMAKE_CURRENT_BINARY_DIR}/config.h) -# Always compile with warnings -if(MSVC) -  # Force to always compile with W4 -  if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]") -    string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") -  else() -    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4") -  endif() -  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4706 /D_CRT_SECURE_NO_WARNINGS") -elseif(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") -  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -std=c99 -pedantic") -endif() - -# Compile as C++ under MSVC older than 12.0 -if(MSVC AND MSVC_VERSION LESS 1800) -  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /TP") -endif() - -if(CMAKE_BUILD_TYPE STREQUAL "Ubsan") -  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined") -endif() -  if(CMARK_LIB_FUZZER) -  set(FUZZ_HARNESS "cmark-fuzz") -  add_executable(${FUZZ_HARNESS} ../test/cmark-fuzz.c ${LIBRARY_SOURCES}) -  target_link_libraries(${FUZZ_HARNESS} "${CMAKE_LIB_FUZZER_PATH}") -  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize-coverage=trace-pc-guard") +  add_executable(cmark-fuzz ../test/cmark-fuzz.c ${LIBRARY_SOURCES}) +  target_link_libraries(cmark-fuzz "${CMAKE_LIB_FUZZER_PATH}")    # cmark is written in C but the libFuzzer runtime is written in C++ which -  # needs to link against the C++ runtime. Explicitly link it into cmark-fuzz -  set_target_properties(${FUZZ_HARNESS} PROPERTIES LINK_FLAGS "-lstdc++") +  # needs to link against the C++ runtime. +  set_target_properties(cmark-fuzz PROPERTIES +    LINKER_LANGUAGE CXX)  endif()  | 
