File: CMakeLists.txt

package info (click to toggle)
llvm-toolchain-21 1%3A21.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 2,235,796 kB
  • sloc: cpp: 7,617,614; ansic: 1,433,901; asm: 1,058,726; python: 252,096; f90: 94,671; objc: 70,753; lisp: 42,813; pascal: 18,401; sh: 10,032; ml: 5,111; perl: 4,720; awk: 3,523; makefile: 3,401; javascript: 2,272; xml: 892; fortran: 770
file content (96 lines) | stat: -rw-r--r-- 3,073 bytes parent folder | download | duplicates (4)
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
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()