Skip to content

Commit 3c4fd90

Browse files
committed
build: remove CMARK_SHARED and CMARK_STATIC
Prefer to use the standard `BUILD_SHARED_LIBS` option to control the library type that we are building. Build a single instance of the library. This allows for better control of the library usage in a larger project. See the following blog post for the recommendation: https://alexreinking.com/blog/building-a-dual-shared-and-static-library-with-cmake.html
1 parent 8a5ffa0 commit 3c4fd90

File tree

6 files changed

+139
-227
lines changed

6 files changed

+139
-227
lines changed

CMakeLists.txt

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,6 @@ if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
6464
message(FATAL_ERROR "Do not build in-source.\nPlease remove CMakeCache.txt and the CMakeFiles/ directory.\nThen: mkdir build ; cd build ; cmake .. ; make")
6565
endif()
6666

67-
option(CMARK_STATIC "Build static libcmark-gfm library" ON)
68-
option(CMARK_SHARED "Build shared libcmark-gfm library" ON)
6967
option(CMARK_LIB_FUZZER "Build libFuzzer fuzzing harness" OFF)
7068
option(CMARK_THREADING "Add locks around static accesses" OFF)
7169

@@ -105,24 +103,14 @@ if(NOT CMAKE_SYSTEM_NAME STREQUAL Windows)
105103
endif()
106104
if(BUILD_TESTING)
107105
add_subdirectory(test testdir)
108-
if(CMARK_SHARED OR CMARK_STATIC)
109-
add_subdirectory(api_test)
110-
endif()
106+
add_subdirectory(api_test)
111107
endif()
112108
if(CMARK_FUZZ_QUADRATIC)
113109
add_subdirectory(fuzz)
114110
endif()
115111

116-
set(CMARK_TARGETS)
117-
if(CMARK_SHARED)
118-
list(APPEND CMARK_TARGETS libcmark-gfm)
119-
list(APPEND CMARK_TARGETS libcmark-gfm-extensions)
120-
endif()
121-
if(CMARK_STATIC)
122-
list(APPEND CMARK_TARGETS libcmark-gfm_static)
123-
list(APPEND CMARK_TARGETS libcmark-gfm-extensions_static)
124-
endif()
125-
export(TARGETS ${CMARK_TARGETS} FILE cmark-gfmConfig.cmake)
112+
export(TARGETS libcmark-gfm libcmark-gfm-extensions
113+
FILE cmark-gfmConfig.cmake)
126114

127115
if(NOT CMAKE_BUILD_TYPE)
128116
set(CMAKE_BUILD_TYPE "Release" CACHE STRING

api_test/CMakeLists.txt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,12 @@ include_directories(
1010
${PROJECT_SOURCE_DIR}/extensions/include
1111
${PROJECT_BINARY_DIR}/extensions
1212
)
13-
if(CMARK_SHARED)
14-
target_link_libraries(api_test libcmark-gfm-extensions libcmark-gfm)
15-
else()
16-
target_link_libraries(api_test libcmark-gfm-extensions_static libcmark-gfm_static)
17-
endif()
13+
target_link_libraries(api_test PRIVATE
14+
libcmark-gfm
15+
libcmark-gfm-extensions)
1816

1917
add_test(NAME api_test COMMAND api_test)
20-
if(WIN32 AND CMARK_SHARED)
18+
if(WIN32 AND BUILD_SHARED_LIBS)
2119
set_tests_properties(api_test PROPERTIES
2220
ENVIRONMENT "PATH=$<TARGET_FILE_DIR:libcmark-gfm>;$<TARGET_FILE_DIR:libcmark-gfm-extensions>;$ENV{PATH}")
2321
endif()

extensions/CMakeLists.txt

Lines changed: 29 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,36 @@
11
set(LIBRARY "libcmark-gfm-extensions")
2-
set(STATICLIBRARY "libcmark-gfm-extensions_static")
3-
set(LIBRARY_SOURCES
4-
core-extensions.c
5-
table.c
6-
strikethrough.c
7-
autolink.c
8-
tagfilter.c
9-
ext_scanners.c
10-
ext_scanners.re
11-
ext_scanners.h
12-
tasklist.c
13-
)
142

153
include_directories(include)
164

17-
if (CMARK_SHARED)
18-
add_library(${LIBRARY} SHARED ${LIBRARY_SOURCES})
5+
add_library(${LIBRARY}
6+
autolink.c
7+
core-extensions.c
8+
ext_scanners.c
9+
ext_scanners.h
10+
ext_scanners.re
11+
strikethrough.c
12+
table.c
13+
tagfilter.c
14+
tasklist.c)
15+
target_compile_definitions(${LIBRARY} PUBLIC
16+
$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:CMARK_GFM_STATIC_DEFINE>)
1917

20-
set_target_properties(${LIBRARY} PROPERTIES
21-
OUTPUT_NAME "cmark-gfm-extensions"
22-
DEFINE_SYMBOL "libcmark_gfm_EXPORTS"
23-
SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}.gfm.${PROJECT_VERSION_GFM}
24-
VERSION ${PROJECT_VERSION})
18+
set_target_properties(${LIBRARY} PROPERTIES
19+
OUTPUT_NAME "cmark-gfm-extensions"
20+
DEFINE_SYMBOL "libcmark_gfm_EXPORTS"
21+
SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}.gfm.${PROJECT_VERSION_GFM}
22+
VERSION ${PROJECT_VERSION})
2523

26-
set_property(TARGET ${LIBRARY}
27-
APPEND PROPERTY MACOSX_RPATH true)
24+
set_property(TARGET ${LIBRARY}
25+
APPEND PROPERTY MACOSX_RPATH true)
2826

29-
# Avoid name clash between PROGRAM and LIBRARY pdb files.
30-
set_target_properties(${LIBRARY} PROPERTIES PDB_NAME cmark-gfm-extensions_dll)
27+
# Avoid name clash between PROGRAM and LIBRARY pdb files.
28+
set_target_properties(${LIBRARY} PROPERTIES PDB_NAME cmark-gfm-extensions_dll)
3129

32-
list(APPEND CMARK_INSTALL ${LIBRARY})
33-
target_link_libraries(${LIBRARY} libcmark-gfm)
30+
list(APPEND CMARK_INSTALL ${LIBRARY})
31+
target_link_libraries(${LIBRARY} libcmark-gfm)
3432

35-
endif()
3633

37-
if (CMARK_STATIC)
38-
add_library(${STATICLIBRARY} STATIC ${LIBRARY_SOURCES})
39-
target_compile_definitions(${STATICLIBRARY} PUBLIC
40-
CMARK_GFM_STATIC_DEFINE)
41-
target_link_libraries(${STATICLIBRARY} PRIVATE
42-
libcmark-gfm)
43-
44-
set_target_properties(${STATICLIBRARY} PROPERTIES
45-
POSITION_INDEPENDENT_CODE ON)
46-
47-
if (MSVC)
48-
set_target_properties(${STATICLIBRARY} PROPERTIES
49-
OUTPUT_NAME "cmark-gfm-extensions_static"
50-
VERSION ${PROJECT_VERSION})
51-
else()
52-
set_target_properties(${STATICLIBRARY} PROPERTIES
53-
OUTPUT_NAME "cmark-gfm-extensions"
54-
VERSION ${PROJECT_VERSION})
55-
endif(MSVC)
56-
57-
list(APPEND CMARK_INSTALL ${STATICLIBRARY})
58-
endif()
5934

6035
set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS ON)
6136

@@ -66,12 +41,10 @@ install(TARGETS ${CMARK_INSTALL}
6641
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
6742
)
6843

69-
if (CMARK_SHARED OR CMARK_STATIC)
70-
install(FILES
71-
${CMAKE_CURRENT_SOURCE_DIR}/include/cmark-gfm-core-extensions.h
72-
${CMAKE_CURRENT_SOURCE_DIR}/include/module.modulemap
73-
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/cmark_gfm_extensions)
44+
install(FILES
45+
${CMAKE_CURRENT_SOURCE_DIR}/include/cmark-gfm-core-extensions.h
46+
${CMAKE_CURRENT_SOURCE_DIR}/include/module.modulemap
47+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/cmark_gfm_extensions)
7448

75-
install(EXPORT cmark-gfm-extensions
76-
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake-gfm-extensions)
77-
endif()
49+
install(EXPORT cmark-gfm-extensions
50+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake-gfm-extensions)

fuzz/CMakeLists.txt

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,11 @@
1-
include_directories(
2-
${PROJECT_BINARY_DIR}/extensions
3-
${PROJECT_BINARY_DIR}/src
4-
../extensions
5-
../src
6-
)
7-
8-
macro(fuzzer name)
9-
add_executable(${name} ${name}.c)
10-
set_target_properties(${name}
11-
PROPERTIES
12-
COMPILE_FLAGS "-fsanitize=fuzzer"
13-
LINK_FLAGS "-fsanitize=fuzzer")
14-
if(CMARK_SHARED)
15-
target_link_libraries(${name} libcmark-gfm-extensions libcmark-gfm)
16-
elseif(CMARK_STATIC)
17-
target_link_libraries(${name} libcmark-gfm-extensions_static libcmark-gfm_static)
18-
endif()
19-
endmacro()
20-
21-
fuzzer(fuzz_quadratic)
22-
fuzzer(fuzz_quadratic_brackets)
1+
foreach(fuzzer fuzz_quadratic fuzz_quadratic_brackets)
2+
add_executable(${fuzzer}
3+
${fuzzer}.c)
4+
target_compile_options(${fuzzer} PRIVATE
5+
-fsanitize=fuzzer)
6+
target_link_options(${fuzzer} PRIVATE
7+
-fsanitize=fuzzer)
8+
target_link_libraries(${fuzzer} PRIVATE
9+
libcmark-gfm
10+
libcmark-gfm-extensions)
11+
endforeach()

0 commit comments

Comments
 (0)