diff --git a/clang/docs/AttributeReference.rst b/clang/docs/AttributeReference.rst deleted file mode 100644 --- a/clang/docs/AttributeReference.rst +++ /dev/null @@ -1,13 +0,0 @@ -.. - ------------------------------------------------------------------- - NOTE: This file is automatically generated by running clang-tblgen - -gen-attr-docs. Do not edit this file by hand!! The contents for - this file are automatically generated by a server-side process. - - Please do not commit this file. The file exists for local testing - purposes only. - ------------------------------------------------------------------- - -=================== -Attributes in Clang -=================== \ No newline at end of file diff --git a/clang/docs/CMakeLists.txt b/clang/docs/CMakeLists.txt --- a/clang/docs/CMakeLists.txt +++ b/clang/docs/CMakeLists.txt @@ -90,15 +90,40 @@ endif() endif() +function (gen_rst_file output_file td_option source) + get_filename_component(TABLEGEN_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${source}" DIRECTORY) + list(APPEND LLVM_TABLEGEN_FLAGS "-I${TABLEGEN_INCLUDE_DIR}") + clang_tablegen(${output_file} ${td_option} SOURCE ${source} TARGET "gen-${output_file}") + add_dependencies(docs-clang-html "gen-${output_file}") +endfunction() + if (LLVM_ENABLE_SPHINX) include(AddSphinxTarget) if (SPHINX_FOUND) if (${SPHINX_OUTPUT_HTML}) - add_sphinx_target(html clang) + add_sphinx_target(html clang SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}) + + # Copy rst files to build directory before generating the html + # documentation. Some of the rst files are generated, so they + # only exist in the build directory. Sphinx needs all files in + # the same directory in order to genrate the html, so we need to + # copy all the non-gnerated rst files from the source to the build + # directory before we run sphinx. + add_custom_target(copy-clang-rst-docs + COMMAND ${CMAKE_COMMAND} -E copy_directory + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR}) + add_dependencies(docs-clang-html copy-clang-rst-docs) + add_custom_command(TARGET docs-clang-html POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/LibASTMatchersReference.html" "${CMAKE_CURRENT_BINARY_DIR}/html/LibASTMatchersReference.html") + + # Generated files + gen_rst_file(AttributeReference.rst -gen-attr-docs ../include/clang/Basic/Attr.td) + gen_rst_file(DiagnosticsReference.rst -gen-diag-docs ../include/clang/Basic/Diagnostic.td) + gen_rst_file(ClangCommandLineReference.rst -gen-opt-docs ../include/clang/Driver/ClangOptionDocs.td) endif() if (${SPHINX_OUTPUT_MAN}) add_sphinx_target(man clang) diff --git a/llvm/cmake/modules/AddSphinxTarget.cmake b/llvm/cmake/modules/AddSphinxTarget.cmake --- a/llvm/cmake/modules/AddSphinxTarget.cmake +++ b/llvm/cmake/modules/AddSphinxTarget.cmake @@ -18,6 +18,7 @@ # # ``project`` should be the project name function (add_sphinx_target builder project) + cmake_parse_arguments(ARG "" "SOURCE_DIR" "" ${ARGN}) set(SPHINX_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/${builder}") set(SPHINX_DOC_TREE_DIR "${CMAKE_CURRENT_BINARY_DIR}/_doctrees-${project}-${builder}") set(SPHINX_TARGET_NAME docs-${project}-${builder}) @@ -28,13 +29,17 @@ set(SPHINX_WARNINGS_AS_ERRORS_FLAG "") endif() + if (NOT ARG_SOURCE_DIR) + set(ARG_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") + endif() + add_custom_target(${SPHINX_TARGET_NAME} COMMAND ${SPHINX_EXECUTABLE} -b ${builder} -d "${SPHINX_DOC_TREE_DIR}" -q # Quiet: no output other than errors and warnings. ${SPHINX_WARNINGS_AS_ERRORS_FLAG} # Treat warnings as errors if requested - "${CMAKE_CURRENT_SOURCE_DIR}" # Source + "${ARG_SOURCE_DIR}" # Source "${SPHINX_BUILD_DIR}" # Output COMMENT "Generating ${builder} Sphinx documentation for ${project} into \"${SPHINX_BUILD_DIR}\"")