This revision was automatically updated to reflect the committed changes. Closed by commit rG846439dd97d4: [Flang] Generate documentation for compiler flags (authored by DylanFleming-arm).
Changed prior to commit: https://reviews.llvm.org/D129864?vs=446840&id=446889#toc Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D129864/new/ https://reviews.llvm.org/D129864 Files: clang/utils/TableGen/ClangOptionDocEmitter.cpp flang/docs/CMakeLists.txt flang/docs/index.md flang/include/flang/FlangOptionsDocs.td
Index: flang/include/flang/FlangOptionsDocs.td =================================================================== --- /dev/null +++ flang/include/flang/FlangOptionsDocs.td @@ -0,0 +1,35 @@ +//==--- FlangOptionDocs.td - Option documentation -------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +def GlobalDocumentation { + code Intro =[{.. + ------------------------------------------------------------------- + NOTE: This file is automatically generated by running clang-tblgen + -gen-opt-docs. Do not edit this file by hand!! + ------------------------------------------------------------------- + +===================================== +Flang command line argument reference +===================================== +.. contents:: + :local: + +Introduction +============ + +}]; + + string Program = "flang"; + + list<string> ExcludedFlags = []; + list<string> IncludedFlags = ["FlangOption"]; + +} + + +include "../../../clang/include/clang/Driver/Options.td" Index: flang/docs/index.md =================================================================== --- flang/docs/index.md +++ flang/docs/index.md @@ -45,6 +45,7 @@ DoConcurrent Extensions FIRLangRef + FlangCommandLineReference FlangDriver FortranIR FortranLLVMTestSuite Index: flang/docs/CMakeLists.txt =================================================================== --- flang/docs/CMakeLists.txt +++ flang/docs/CMakeLists.txt @@ -91,6 +91,16 @@ endif() endif() +function (gen_rst_file_from_td output_file td_option source docs_target) + if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${source}") + message(FATAL_ERROR "Cannot find source file: ${source} in ${CMAKE_CURRENT_SOURCE_DIR}") + endif() + get_filename_component(TABLEGEN_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${source}" DIRECTORY) + list(APPEND LLVM_TABLEGEN_FLAGS "-I${TABLEGEN_INCLUDE_DIR}") + clang_tablegen(Source/${output_file} ${td_option} SOURCE ${source} TARGET "gen-${output_file}") + add_dependencies(${docs_target} "gen-${output_file}") +endfunction() + if (LLVM_ENABLE_SPHINX) include(AddSphinxTarget) if (SPHINX_FOUND) @@ -108,12 +118,15 @@ "${CMAKE_CURRENT_BINARY_DIR}/Source" DEPENDS flang-doc) - # Runs a python script prior to HTML generation to prepend a header to FIRLangRef, - # Without the header, the page is incorrectly formatted, as it assumes the first entry is the page title. - add_custom_command(TARGET copy-flang-src-docs - COMMAND "${Python3_EXECUTABLE}" - ARGS ${CMAKE_CURRENT_BINARY_DIR}/Source/FIR/CreateFIRLangRef.py) + # Runs a python script prior to HTML generation to prepend a header to FIRLangRef, + # Without the header, the page is incorrectly formatted, as it assumes the first entry is the page title. + add_custom_command(TARGET copy-flang-src-docs + COMMAND "${Python3_EXECUTABLE}" + ARGS ${CMAKE_CURRENT_BINARY_DIR}/Source/FIR/CreateFIRLangRef.py) + # CLANG_TABLEGEN_EXE variable needs to be set for clang_tablegen to run without error + set(CLANG_TABLEGEN_EXE clang-tblgen) + gen_rst_file_from_td(FlangCommandLineReference.rst -gen-opt-docs ../include/flang/FlangOptionsDocs.td docs-flang-html) endif() if (${SPHINX_OUTPUT_MAN}) add_sphinx_target(man flang) Index: clang/utils/TableGen/ClangOptionDocEmitter.cpp =================================================================== --- clang/utils/TableGen/ClangOptionDocEmitter.cpp +++ clang/utils/TableGen/ClangOptionDocEmitter.cpp @@ -168,6 +168,29 @@ return false; } +bool isIncluded(const Record *OptionOrGroup, const Record *DocInfo) { + assert(DocInfo->getValue("IncludedFlags") && "Missing includeFlags"); + for (StringRef Inclusion : DocInfo->getValueAsListOfStrings("IncludedFlags")) + if (hasFlag(OptionOrGroup, Inclusion)) + return true; + return false; +} + +bool isGroupIncluded(const DocumentedGroup &Group, const Record *DocInfo) { + if (isIncluded(Group.Group, DocInfo)) + return true; + for (auto &O : Group.Options) + if (isIncluded(O.Option, DocInfo)) + return true; + for (auto &G : Group.Groups) { + if (isIncluded(G.Group, DocInfo)) + return true; + if (isGroupIncluded(G, DocInfo)) + return true; + } + return false; +} + bool isExcluded(const Record *OptionOrGroup, const Record *DocInfo) { // FIXME: Provide a flag to specify the set of exclusions. for (StringRef Exclusion : DocInfo->getValueAsListOfStrings("ExcludedFlags")) @@ -304,6 +327,8 @@ raw_ostream &OS) { if (isExcluded(Option.Option, DocInfo)) return; + if (DocInfo->getValue("IncludedFlags") && !isIncluded(Option.Option, DocInfo)) + return; if (Option.Option->getValueAsDef("Kind")->getName() == "KIND_UNKNOWN" || Option.Option->getValueAsDef("Kind")->getName() == "KIND_INPUT") return; @@ -379,6 +404,9 @@ if (isExcluded(Group.Group, DocInfo)) return; + if (DocInfo->getValue("IncludedFlags") && !isGroupIncluded(Group, DocInfo)) + return; + emitHeading(Depth, getRSTStringWithTextFallback(Group.Group, "DocName", "Name"), OS);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits