llvm-project/libc/docs/CMakeLists.txt
Michael Jones 6cc208cd3c
[libc] Add maintainers file (#133471)
Based on #133297 by jhuber.

LLVM-libc needs a maintainers file, this patch adds an initial set.
The file is based on `clang/maintainers.rst` and
https://llvm.org/docs/DeveloperPolicy.html#maintainers.
2025-03-28 16:50:19 -07:00

97 lines
3.0 KiB
CMake

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}"
COMMAND "${CMAKE_COMMAND}" -E copy_if_different
"${CMAKE_CURRENT_SOURCE_DIR}/../Maintainers.rst"
"${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
cpio
ctype
dirent
endian
errno
fenv
float
glob
inttypes
locale
net/if
netinet/in
# TODO: https://github.com/llvm/llvm-project/issues/123821
# pthread
setjmp
signal
stdbit
stdio
stdlib
string
strings
sys/mman
sys/resource
sys/stat
sys/statvfs
sys/time
sys/utsname
sys/wait
termios
threads
uchar
unistd
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()