forked from llvm/llvm-project
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
80 lines (75 loc) · 2.63 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
if (LLVM_ENABLE_SPHINX)
include(AddSphinxTarget)
if (SPHINX_FOUND)
if (${SPHINX_OUTPUT_HTML})
# Similar to clang, we copy our static .rst files from libc/docs/ to the
# $build_dir/libc/docs/. That way, we can have a mix of both static
# (committed) .rst files, and dynamically generated .rst files. We don't
# want the dynamically generated .rst files to pollute the source tree.
add_custom_target(copy-libc-rst-docs
COMMAND "${CMAKE_COMMAND}" -E copy_directory
"${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}")
# For headers that are nested in directories, we need to
# `mkdir $build_dir/libc/docs/headers/$dir` since the above copy_directory
# command does not create such copies. Otherwise, the invocation of docgen
# below will fail since the output file would be placed in a directory that
# does not exist, leading to a `No such file or directory` error from the
# shell.
file(MAKE_DIRECTORY
"${CMAKE_CURRENT_BINARY_DIR}/headers/arpa/"
"${CMAKE_CURRENT_BINARY_DIR}/headers/net/"
"${CMAKE_CURRENT_BINARY_DIR}/headers/netinet/"
"${CMAKE_CURRENT_BINARY_DIR}/headers/sys/"
)
# Change sphinx to build from $build_dir/libc/docs/ rather than
# llvm-project/libc/docs/.
add_sphinx_target(html libc SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
# Depend on the copy target.
add_dependencies(docs-libc-html copy-libc-rst-docs)
# Maintain a list of headers for which we dynamically generate html docs
# for via docgen. For more complex docs (such as per arch support, a la
# math.h), those should be omitted and exist statically in
# libc/docs/headers/.
list(APPEND docgen_list
aio
arpa/inet
assert
ctype
errno
fenv
float
inttypes
locale
net/if
netinet/in
pthread
setjmp
signal
stdbit
stdio
stdlib
string
strings
sys/mman
sys/resource
sys/wait
threads
uchar
wchar
wctype
)
foreach(stem IN LISTS docgen_list)
# It is an error in cmake to have a target name that contains a "/", but
# docgen relies on the "/" to find headers nested under directories.
# Replace with underscore.
string(REPLACE "/" "_" stem_rst ${stem})
# docgen invocation.
add_custom_target(${stem_rst}
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/../utils/docgen/docgen.py ${stem}.h >
${CMAKE_CURRENT_BINARY_DIR}/headers/${stem}.rst)
# depend on the docgen invocation.
add_dependencies(docs-libc-html ${stem_rst})
endforeach()
endif()
endif()
endif()