Skip to content

Commit 9c2585a

Browse files
committed
refactor project into lib, tool, and tests
1 parent aa5999a commit 9c2585a

31 files changed

+707
-302
lines changed

CMakeLists - Copy.txt

Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
#
2+
# Licensed under the Apache License v2.0 with LLVM Exceptions.
3+
# See https://llvm.org/LICENSE.txt for license information.
4+
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
5+
#
6+
# Copyright (c) 2023 Vinnie Falco ([email protected])
7+
#
8+
# Official repository: https://github.com/cppalliance/mrdox
9+
#
10+
11+
cmake_minimum_required(VERSION 3.25.2)
12+
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
13+
14+
set(CMAKE_MSVC_RUNTIME_LIBRARY
15+
"MultiThreadedDLL" CACHE STRING "")
16+
17+
#-------------------------------------------------
18+
19+
project(
20+
MrDox
21+
VERSION 1.0.0
22+
DESCRIPTION "C++ Documentation Tool"
23+
HOMEPAGE_URL "https://github.com/cppalliance/mrdox"
24+
LANGUAGES CXX
25+
)
26+
27+
#-------------------------------------------------
28+
#
29+
# Toolchain settings
30+
#
31+
#-------------------------------------------------
32+
33+
set(BUILD_SHARED_LIBS OFF CACHE STRING "")
34+
set(CMAKE_CXX_EXTENSIONS OFF CACHE STRING "")
35+
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE ON CACHE STRING "")
36+
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_MINSIZEREL ON CACHE STRING "")
37+
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO ON CACHE STRING "")
38+
39+
# Windows, Win64
40+
if(WIN32)
41+
add_definitions(
42+
-D_WIN32_WINNT=0x0601
43+
-D_CRT_SECURE_NO_WARNINGS
44+
-D_SILENCE_CXX20_CISO646_REMOVED_WARNING
45+
)
46+
endif()
47+
48+
# cl.exe
49+
if(MSVC)
50+
add_compile_options(
51+
/permissive- # strict C++
52+
/W4 # enable all warnings
53+
/MP # multi-processor compilation
54+
/EHsc # C++ Exception handling
55+
)
56+
add_definitions(
57+
-D_ITERATOR_DEBUG_LEVEL=0
58+
)
59+
endif()
60+
61+
#-------------------------------------------------
62+
63+
file(GLOB_RECURSE LIB_INCLUDES CONFIGURE_DEPENDS
64+
include/*.hpp
65+
)
66+
67+
file(GLOB_RECURSE LIB_SOURCES CONFIGURE_DEPENDS
68+
source/lib/*.h
69+
source/lib/*.hpp
70+
source/lib/*.cpp
71+
source/lib/*.natvis
72+
)
73+
74+
file(GLOB_RECURSE TOOL_SOURCES CONFIGURE_DEPENDS
75+
source/tool/mrdox.cpp
76+
)
77+
78+
file(GLOB_RECURSE TEST_SOURCES CONFIGURE_DEPENDS
79+
source/tests/*.cpp
80+
)
81+
82+
#-------------------------------------------------
83+
84+
set(CMAKE_FOLDER Dependencies)
85+
find_package(LLVM REQUIRED CONFIG)
86+
find_package(Clang REQUIRED CONFIG)
87+
list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}")
88+
include(HandleLLVMOptions)
89+
90+
add_definitions(${LLVM_DEFINITIONS})
91+
92+
llvm_map_components_to_libnames(llvm_libs)
93+
94+
unset(CMAKE_FOLDER)
95+
96+
#-------------------------------------------------
97+
#
98+
# Library
99+
#
100+
#-------------------------------------------------
101+
102+
add_library(
103+
mrdox_lib
104+
${LIB_INCLUDES}
105+
${LIB_SOURCES}
106+
)
107+
108+
target_compile_features(
109+
mrdox_lib
110+
PUBLIC
111+
cxx_std_20)
112+
113+
target_include_directories(
114+
mrdox_lib
115+
PUBLIC
116+
"$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/>"
117+
"$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/source/lib>" # VFALCO THIS IS HACK, FIX ASAP
118+
${LLVM_INCLUDE_DIRS} # VFALCO THIS SHOULD PROBABLY BE PRIVATE?
119+
${CLANG_INCLUDE_DIRS} # VFALCO THIS SHOULD PROBABLY BE PRIVATE?
120+
PRIVATE
121+
#${LLVM_INCLUDE_DIRS}
122+
#${CLANG_INCLUDE_DIRS}
123+
${PROJECT_SOURCE_DIR}/source/lib
124+
)
125+
126+
target_link_libraries(
127+
mrdox_lib
128+
PUBLIC
129+
${llvm_libs}
130+
clangAST
131+
clangBasic
132+
clangFrontend
133+
clangIndex
134+
clangTooling
135+
clangToolingCore
136+
clangToolingInclusions
137+
)
138+
139+
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX "" FILES CMakeLists.txt)
140+
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR}/include/mrdox PREFIX "" FILES ${LIB_INCLUDES})
141+
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR}/source/lib PREFIX "source" FILES ${LIB_SOURCES})
142+
143+
#-------------------------------------------------
144+
#
145+
# Tool
146+
#
147+
#-------------------------------------------------
148+
149+
add_executable(
150+
mrdox
151+
${TOOL_SOURCES})
152+
153+
target_link_libraries(
154+
mrdox
155+
PRIVATE
156+
mrdox_lib)
157+
158+
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX "" FILES CMakeLists.txt)
159+
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR}/source/tool PREFIX "" FILES ${TOOL_SOURCES})
160+
#set_property(TARGET mrdox PROPERTY OUTPUT_NAME mrdox)
161+
162+
#-------------------------------------------------
163+
164+
target_include_directories(
165+
mrdox
166+
PRIVATE
167+
# ${LLVM_INCLUDE_DIRS}
168+
# ${CLANG_INCLUDE_DIRS}
169+
${PROJECT_SOURCE_DIR}/include
170+
)
171+
172+
#-------------------------------------------------
173+
#
174+
# Tests
175+
#
176+
#-------------------------------------------------
177+
178+
add_executable(
179+
mrdox_tests
180+
${TEST_SOURCES}
181+
)
182+
183+
target_include_directories(
184+
mrdox_tests
185+
PRIVATE
186+
${LLVM_INCLUDE_DIRS}
187+
${CLANG_INCLUDE_DIRS}
188+
${PROJECT_SOURCE_DIR}/include
189+
${PROJECT_SOURCE_DIR}/source/tests
190+
)
191+
192+
#-------------------------------------------------

CMakeLists.txt

Lines changed: 97 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ set(CMAKE_MSVC_RUNTIME_LIBRARY
1717
#-------------------------------------------------
1818

1919
project(
20-
MrDox
21-
VERSION 1.0.0
22-
DESCRIPTION "C++ Javadoc Extraction Tool"
23-
HOMEPAGE_URL "https://github.com/cppalliance/mrdox"
24-
LANGUAGES CXX
20+
MrDox
21+
VERSION 1.0.0
22+
DESCRIPTION "C++ Documentation Tool"
23+
HOMEPAGE_URL "https://github.com/cppalliance/mrdox"
24+
LANGUAGES CXX
2525
)
2626

2727
#-------------------------------------------------
@@ -45,13 +45,6 @@ if(WIN32)
4545
)
4646
endif()
4747

48-
# x86
49-
#if("${CMAKE_GENERATOR_PLATFORM}" STREQUAL "Win32") # 32-bit
50-
# add_compile_options(
51-
# /arch:SSE2
52-
# )
53-
#endif()
54-
5548
# cl.exe
5649
if(MSVC)
5750
add_compile_options(
@@ -67,51 +60,72 @@ endif()
6760

6861
#-------------------------------------------------
6962

70-
file(GLOB_RECURSE HEADERS CONFIGURE_DEPENDS
71-
src/*.h
72-
src/*.hpp
73-
src/*.ipp
74-
src/*.natvis
63+
file(GLOB_RECURSE LIB_INCLUDES CONFIGURE_DEPENDS
64+
include/*.hpp
7565
)
7666

77-
file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS
78-
src/*.cpp
67+
file(GLOB_RECURSE LIB_SOURCES CONFIGURE_DEPENDS
68+
source/lib/*.h
69+
source/lib/*.hpp
70+
source/lib/*.cpp
71+
source/lib/*.natvis
7972
)
8073

81-
add_executable(
82-
mrdox
83-
${HEADERS}
84-
${SOURCES})
74+
file(GLOB_RECURSE TOOL_SOURCES CONFIGURE_DEPENDS
75+
source/mrdox/mrdox.cpp
76+
)
8577

86-
target_compile_definitions(
87-
mrdox
88-
PUBLIC
89-
)
78+
file(GLOB_RECURSE TEST_SOURCES CONFIGURE_DEPENDS
79+
source/tests/*.cpp
80+
)
9081

9182
#-------------------------------------------------
9283

9384
set(CMAKE_FOLDER Dependencies)
94-
9585
find_package(LLVM REQUIRED CONFIG)
9686
find_package(Clang REQUIRED CONFIG)
9787
list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}")
9888
include(HandleLLVMOptions)
89+
9990
add_definitions(${LLVM_DEFINITIONS})
10091

101-
llvm_map_components_to_libnames(llvm_libs
102-
)
92+
llvm_map_components_to_libnames(llvm_libs)
93+
94+
unset(CMAKE_FOLDER)
95+
96+
#-------------------------------------------------
97+
#
98+
# Library
99+
#
100+
#-------------------------------------------------
101+
102+
add_library(
103+
mrdox_lib
104+
${LIB_INCLUDES}
105+
${LIB_SOURCES}
106+
)
107+
108+
target_compile_features(
109+
mrdox_lib
110+
PUBLIC
111+
cxx_std_20)
103112

104113
target_include_directories(
105-
mrdox
114+
mrdox_lib
106115
PUBLIC
107-
"$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/>"
116+
"$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/>"
117+
"$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/source/lib>" # VFALCO THIS IS HACK, FIX ASAP
118+
${LLVM_INCLUDE_DIRS} # VFALCO THIS SHOULD PROBABLY BE PRIVATE?
119+
${CLANG_INCLUDE_DIRS} # VFALCO THIS SHOULD PROBABLY BE PRIVATE?
108120
PRIVATE
109-
${LLVM_INCLUDE_DIRS}
110-
${CLANG_INCLUDE_DIRS}
121+
#${LLVM_INCLUDE_DIRS}
122+
#${CLANG_INCLUDE_DIRS}
123+
${PROJECT_SOURCE_DIR}/source/lib
111124
)
112125

113-
target_link_libraries(mrdox
114-
PRIVATE
126+
target_link_libraries(
127+
mrdox_lib
128+
PUBLIC
115129
${llvm_libs}
116130
clangAST
117131
clangBasic
@@ -122,16 +136,57 @@ target_link_libraries(mrdox
122136
clangToolingInclusions
123137
)
124138

125-
unset(CMAKE_FOLDER)
139+
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX "" FILES CMakeLists.txt)
140+
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR}/include/mrdox PREFIX "" FILES ${LIB_INCLUDES})
141+
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR}/source/lib PREFIX "source" FILES ${LIB_SOURCES})
126142

143+
#-------------------------------------------------
144+
#
145+
# Tool
146+
#
127147
#-------------------------------------------------
128148

129-
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
149+
add_executable(
150+
mrdox
151+
${TOOL_SOURCES})
152+
153+
target_link_libraries(
154+
mrdox
155+
PRIVATE
156+
mrdox_lib)
157+
158+
target_include_directories(
159+
mrdox
160+
PRIVATE
161+
${PROJECT_SOURCE_DIR}/source/mrdox
162+
)
163+
130164
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX "" FILES CMakeLists.txt)
131-
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR}/src PREFIX "" FILES ${HEADERS} ${SOURCES})
165+
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR}/source/mrdox PREFIX "" FILES ${TOOL_SOURCES})
132166

133-
set_property(TARGET mrdox PROPERTY OUTPUT_NAME mrdox)
167+
#-------------------------------------------------
168+
#
169+
# Tests
170+
#
171+
#-------------------------------------------------
134172

135-
target_compile_features(mrdox
173+
add_executable(
174+
mrdox_tests
175+
${TEST_SOURCES}
176+
)
177+
178+
target_link_libraries(
179+
mrdox_tests
136180
PRIVATE
137-
cxx_std_20)
181+
mrdox_lib)
182+
183+
target_include_directories(
184+
mrdox_tests
185+
PRIVATE
186+
${PROJECT_SOURCE_DIR}/source/tests
187+
)
188+
189+
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX "" FILES CMakeLists.txt)
190+
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR}/source/tests PREFIX "" FILES ${TEST_SOURCES})
191+
192+
#-------------------------------------------------

0 commit comments

Comments
 (0)