Commit Graph

25 Commits

Author SHA1 Message Date
Carles Cufi 15fbf707ca doc: revert to copy files with extract_content.py directly
Adding ninja targets based on the files that are to be copied into the
build folder doesn't seem to speed up the build, so simplify the CMake
script by relying on extract_content.py to do the copy.

Numbers on my machine:

* master
  clean: 6m45.541s, 6m8.113s
  incremental: 1m24.233s, 1m32.720s

* revert
  clean: 6m25.221s, 6m19.751s
  incremental:1m20.893s, 1m20.337s

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2018-12-06 14:27:29 -05:00
Marti Bolivar d7dc113783 doc: avoid copying content twice
In a clean build, Ninja is creating copies of the extracted
documentation outputs regardless of whether they already exist or
not. I can't explain this behavior from the documentation of the build
command, but it's so, even if extract_content.py is patched to use
copyfile() instead of copy2() so that outputs (copied .rst files in
the build directory) have strictly newer mtimes than inputs (source
tree .rst files).

This extra copying doesn't happen for incremental builds, for some
reason.

To account for this behavior, add and use an extract_content.py option
that skips content extraction completely and leaves that all up to the
add_custom_command() which tracks each individual input->output build
command.

Reported-by: Carles Cufi <carles.cufi@nordicsemi.no>
Signed-off-by: Marti Bolivar <marti@foundries.io>
2018-10-16 15:10:18 -04:00
Marti Bolivar d9f512cbcf doc: add sphinx-html and sphinx-latex convenience targets
Most of time (i.e. when just writing to .rst files or editing images,
rather than editing Doxygen or Kconfig), a full rebuild of the docs
pipeline is not necessary.

This is unfortunate, because it takes over a minute to re-run doxygen
etc. (on my system), whereas an incremental sphinx-build run should
only take a few seconds.

As a band-aid to help developers who have already generated a docs
build and know the consequences of their actions, add "sphinx-html"
and "sphinx-latex" targets. These just re-extract content files into
the build directory and run sphinx-build. This makes for much faster
documentation edit/compile/read loops.

Add some extra COMMENTs while we're here, to make it more obvious
what's going on when the docs build system crunches on something.

A "proper" solution for changing "ninja html" to have similar
performance would need, at least, to:

- only re-run doxygen if any source files have changed
- only re-generate Kconfig if any of those files have changed

That's all left to future work, as this is good enough to make
rebuilding the docs bearable for me.

Signed-off-by: Marti Bolivar <marti@foundries.io>
2018-10-12 11:37:48 +02:00
Marti Bolivar 2952bf85d9 doc: add comment describing SPHINX_OUTPUT_DIR behavior
Explain the asymmetry with the situation when it is unset.

Signed-off-by: Marti Bolivar <marti@foundries.io>
2018-10-12 11:37:48 +02:00
Marti Bolivar 0913c296cf doc: fix extract_content.py dependency tracking
The logic which copies source documentation files into the build
directory could use some improvements to its dependency management, so
that when a source file changes, extract_content.py gets re-run.

Make these changes as follows:

- Add an --outputs flag to extract_content.py, so that the
  sources it depends on and generates can be saved into a file and
  thus made known to the build system

- Change the way the sources and destination are specified in the
  extract_content.py command line so that the entire job can be done
  in a single command, rather than multiple (to avoid having to
  collate multiple --outputs files in CMake)

- Extract the content at configure time with execute_process(),
  tracking all inputs and outputs within the build system itself. Use
  this information to make sure that each individual output depends on
  just its exact input file, ensuring updated inputs produce updated
  outputs without having to call extract_content.py again.

- Ensure that the "content" build system target depends on all the
  outputs, transitively triggering a rebuild any time an input
  file (e.g. .rst documentation file or included image/source file)
  changes.

Signed-off-by: Marti Bolivar <marti@foundries.io>
2018-10-12 11:37:48 +02:00
Marti Bolivar 0d4ca68051 doc: clean up extract_content.py use of environment variables
Minor cleanups:

- Allow the user to run extract.content.py -h with ZEPHYR_BASE unset
  without crashing
- Replace the use of the ZEPHYR_BUILD environment variable with an
  --ignore argument (that can be given multiple times) which specifies
  a path to a directory whose files should *not* be copied, and use
  it to ignore the build directory
- rename, reorder, and tweak get_files() arguments a bit to go from
  source to dest, with extra configuration at the end, getting rid of
  local shadowing of global built-in functions

Signed-off-by: Marti Bolivar <marti@foundries.io>
2018-10-12 11:37:48 +02:00
Carles Cufi 0698dba8e8 doc: cmake: Enable PDF build on Windows
In order to make PDF generation work on Windows, search for a generic
Latex package and use full quotes for the latexmk environment variable.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2018-10-02 18:48:26 +02:00
Sebastian Bøe 93230a52e1 doc: cmake: Change the format of KERNELVERSION to match Zephyr
The documentation has been setting the environment variable
KERNELVERSION to the PROJECT_VERSION of the documentation. But
PROJECT_VERSION is not set during the documentation build so this has
no effect.

Signed-off-by: Sebastian Bøe <sebastian.boe@nordicsemi.no>
2018-10-01 09:16:05 -04:00
Carles Cufi 7599fad178 doc: cmake: Do not use USES_TERMINAL on latex/pdf targets
The following error appeared on documentation builds when enabling the
USES_TERMINAL flag:

  USES_TERMINAL may not be specified without any COMMAND

This is because targets without a command should not be using the flag
at all, so remove its usage from those. Instead, use it in the
add_custom_command() that actualy invokes sphinx.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2018-09-26 12:13:39 +02:00
Anas Nashif 96455d5881 build: support out of tree SoC definition
Add the glue to make this work with SoC code outside of the tree.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2018-09-13 00:56:48 -04:00
Ulf Magnusson d0e8752a52 Kconfig: Rename $ENV_VAR_{ARCH,BOARD_DIR} to $ARCH/$BOARD_DIR
The prefixes might be a leftover from the old 'option env="..."' symbols
(which are no longer needed). Since environment variables can be
referenced directly now, there's no point in having a prefix.

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2018-09-11 19:17:25 -04:00
Daniel Leung c164c8ea8b doc: fix using Ninja to generate PDF
The chain of dependencies works for make but not for Ninja.
Make it explicit so Ninja will work to generate PDF.

Signed-off-by: Daniel Leung <daniel.leung@intel.com>
2018-09-11 14:55:43 -04:00
Daniel Leung 9945e7fda0 doc: add ability to generate PDF
This adds new targets to generate build documentation through
LaTEX to PDF.

There are a few notes:

1. pdflatex complains about the tex file generated by doxygen
   so it needs to be fixed with a Python script before feeding
   in through pdflatex.

2. SVG files are not recognized by pdflatex so they are converted
   to known good format on the fly, only for producing PDF. This
   uses the libRSVG's rsvg-convert tool.

Relates to #6782.

Signed-off-by: Daniel Leung <daniel.leung@intel.com>
2018-08-29 18:16:56 -04:00
Ulf Magnusson a56be6f58d Kconfiglib: Fix $srctree behavior for the top-level Kconfig file
Due a design goof, the top-level Kconfig file passed to
Kconfig.__init__() wasn't looked up relative to $srctree. This broke a
planned fix for an issue with the CI check for references to undefined
Kconfig files in external projects.

Update Kconfiglib to upstream revision 953cc12464 to fix it.

Also update doc/CMakeLists.txt to pass 'Kconfig' instead of '../Kconfig'
to genrest.py. $srctree is already set to $ZEPHYR_BASE.

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2018-08-18 10:38:52 +02:00
Carles Cufi 896a6966f8 doc: Make Sphinx output directory configurable
In order to be able to place the generated HTML content directly in a
folder of the user's choice, make the Sphinx HTML output folder
configurable.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2018-08-16 14:40:12 +02:00
Carles Cufi d6c56d57c3 doc: Remove unnecessary copy statements
Since we're now copying the whole doc/ folder into the output folder,
there's no need anymore to copy certain files by hand.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2018-08-07 21:31:38 +02:00
Carles Cufi a0dbc7aa4b doc: Copy all doc/ contents and not just .rst files
To avoid having to refer to non-rst files artificially in order to get
them copied into the destination folder, make a raw full copy of the
doc/ folder instead of copying only the .rst files.

Fixes #9128

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2018-08-06 21:56:57 +02:00
Carles Cufi e182dbc22e doc: cmake: Enable out-of-tree builds
The following changes have been made to support out-of-tree builds:

* In order to avoid using relative hardcoded paths, use CMake's
  configure_file() to replace the paths in the doxygen input file
  so that the output directory is set correctly.
* All .rst and additional required files are now copied from the doc/
  folder into the build/rst folder using extract_content.py. The
  samples/ and boards/ folder are copied twice (once into build/rst
  and another into build/doc/rst) to manage relative paths.
* All paths are absolute where possible, including themes and static
  content.

This patch ensures that the Zephyr repo is not contaminated by the
build at all.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2018-07-19 08:44:41 -04:00
Carles Cufi 60c5540dbf doc: cmake: Conditionally add USES_TERMINAL to html targets
When using Ninja, output will be buffered until the command completes
unless USES_TERMINAL is used. Use USES_TERMINAL here so that output is
sent directly to the terminal without having to wait. This is a bit of
an abuse of the Ninja console pool, but for building documentation this
should not be an issue since it's a self-contained CMake project.
Note that this is done conditionally, only when Sphinx output is not
disabled by using its "-q" flag.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2018-07-17 11:08:25 +02:00
Carles Cufi 7896451713 doc: cmake: Use proper dependencies
Properly use add_dependencies() instead of DEPENDS for the custom
targets.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2018-07-17 11:08:25 +02:00
Carles Cufi 2af9a9e628 doc: cmake: Use flexible variables for inclusion
In order to be able to use this CMakeLists.txt file from other projects,
use the proper variables so that they refer to their own paths.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2018-07-13 19:26:22 +02:00
Carles Cufi d505ca7081 doc: cmake: Fix argument parsing
Fix the way a list is constructed during argument parsing so that CMake
propagates the options correctly to Sphinx.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2018-07-13 07:25:02 -04:00
Carles Cufi 247ca67cea doc: sphinx: Reshuffle sphinx cmd-line options
Move options to the place they belong ([OPTIONS] SOURCEDIR OUTPUTDIR)
according to sphinx itself.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2018-07-12 23:11:46 -04:00
Carles Cufi 45d58a7bb1 cmake: Rename process.cmake to reflect contents
Rename process.cmake to reflect its contents: executing the CMake
command "execute_process".

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2018-07-12 23:11:46 -04:00
Carles Cufi ae69934cb9 doc: Support building with CMake
Add a new CMakeLists.txt that is capable of building the documentation.
Note that the error checkin currently only works on Unix platforms since
it's tied to a shell script.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2018-07-12 01:26:05 +02:00