diff options
-rwxr-xr-x | CMakeLists.txt | 35 | ||||
-rw-r--r-- | api_test/CMakeLists.txt | 14 | ||||
-rw-r--r-- | src/CMakeLists.txt | 46 |
3 files changed, 40 insertions, 55 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) diff --git a/api_test/CMakeLists.txt b/api_test/CMakeLists.txt index 2701abb..b1c8499 100644 --- a/api_test/CMakeLists.txt +++ b/api_test/CMakeLists.txt @@ -13,17 +13,3 @@ if(CMARK_SHARED) else() target_link_libraries(api_test libcmark_static) endif() - -# Compiler flags -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") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /TP") -elseif(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -std=c99 -pedantic") -endif() 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() |