| #!/usr/bin/env bash | |
| # Copyright lowRISC contributors. | |
| # Licensed under the Apache License, Version 2.0, see LICENSE for details. | |
| # SPDX-License-Identifier: Apache-2.0 | |
| set -e | |
| # Get the project directory from the location of this script | |
| this_dir=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) | |
| proj_root=$( realpath "${this_dir}/../.." ) | |
| build_dir="${proj_root}/build-site" | |
| ####### | |
| # CLI # | |
| ####### | |
| declare command="build" | |
| # The following are only used for "command='serve-proxy'" ------------------------| | |
| declare public_domain="" # (optional) The public-facing domain <-| | |
| declare public_port="" # (optional)The port added to the public-facing domain <-| | |
| case "$1" in | |
| "build"|"build-local"|"build-staging"|"serve"|"serve-proxy") | |
| command="$1" | |
| public_domain="${2}" | |
| public_port="${3}" | |
| ;; | |
| "help"|*) | |
| echo "USAGE: $0 <command> [public_domain] [public_port]" | |
| echo "" | |
| echo "commands:" | |
| echo " help prints this message." | |
| echo " build build the site and docs for prod" | |
| echo " build-local build the site and docs for a localhost server" | |
| echo " build-staging build the site and docs for staging.opentitan.org" | |
| echo " serve build and serve the site locally" | |
| echo " serve-proxy build and serve the site, with a public url" | |
| echo "" | |
| echo "Optional arguments [public_domain] and [public_port] are only used when command='serve-proxy'" | |
| exit 0 | |
| ;; | |
| esac | |
| ################ | |
| # DEPENDENCIES # | |
| ################ | |
| checkDeps () { | |
| # Check for mdbook dep | |
| if ! command -v mdbook >/dev/null; then | |
| echo "E: mdbook not found, please install from your package manager or with:" >&2 | |
| echo "E: $ cargo install mdbook" >&2 | |
| exit 1 | |
| fi | |
| # Check for hugo dep | |
| if ! command -v hugo >/dev/null; then | |
| echo "E: hugo not found, please install from your package manager" >&2 | |
| exit 1 | |
| fi | |
| } | |
| checkDeps | |
| ################# | |
| # CONFIGURATION # | |
| ################# | |
| declare base_url | |
| declare serve_port # The port used by the local webserver (using "build-docs.sh serve/serve-proxy") | |
| getURLs () { | |
| # Defaults here are for production ("build-docs.sh build") | |
| local scheme="https" | |
| local domain="opentitan.org" | |
| local port="" | |
| # Use un-encrypted localhost URLs when building/serving locally | |
| # - serve on port 9000. | |
| if [ "$command" = "build-local" ] || \ | |
| [ "$command" = "serve" ]; then | |
| scheme="http" | |
| domain="localhost" | |
| port=":9000" | |
| serve_port=":9000" | |
| fi | |
| # "serve-proxy" gives us some simple defaults for serving behind a proxy: | |
| # - set the public_domain/public_port appropriately (see $2/$3) | |
| # - serve on port 8000. | |
| if [ "$command" = "serve-proxy" ] ; then | |
| scheme="http" | |
| domain="${public_domain}" | |
| port=":${public_port}" | |
| serve_port=":8000" | |
| fi | |
| if [ "$command" = "build-staging" ] ; then | |
| scheme="https" | |
| domain="staging.opentitan.org" | |
| fi | |
| base_url="${scheme}://${domain}${port}" | |
| } | |
| getURLs | |
| # Export some environment variables that tools will pick up | |
| export HUGO_PARAMS_DOCSURL="${base_url}/book" # hugo | |
| export URL_ROOT="${base_url}/book" # earlgrey_diagram | |
| # Build up doxygen command | |
| doxygen_env="env" | |
| doxygen_env+=" SRCTREE_TOP=${proj_root}" | |
| doxygen_env+=" DOXYGEN_OUT=${build_dir}/gen" | |
| doxygen_args="${proj_root}/util/doxygen/Doxyfile" | |
| # Build up mdbook arguments | |
| mdbook_args="build" | |
| mdbook_args+=" --dest-dir ${build_dir}/book/" | |
| mdbook_args+=" ${proj_root}" | |
| mdbook_guides_args="build" | |
| mdbook_guides_args+=" --dest-dir ${build_dir}/guides/getting_started" | |
| mdbook_guides_args+=" ${proj_root}/doc/guides/getting_started" | |
| # Register the pre-processors | |
| # Each book should only be passed the preprocessors it specifies inside the book.toml | |
| # ./book.toml | |
| book_env="env" | |
| book_env+=" MDBOOK_PREPROCESSOR__TESTPLAN__COMMAND=${proj_root}/util/mdbook_testplan.py" | |
| book_env+=" MDBOOK_PREPROCESSOR__OTBN__COMMAND=${proj_root}/util/mdbook_otbn.py" | |
| book_env+=" MDBOOK_PREPROCESSOR__DOXYGEN__COMMAND=${proj_root}/util/mdbook_doxygen.py" | |
| book_env+=" MDBOOK_PREPROCESSOR__REGGEN__COMMAND=${proj_root}/util/mdbook_reggen.py" | |
| book_env+=" MDBOOK_PREPROCESSOR__WAVEJSON__COMMAND=${proj_root}/util/mdbook_wavejson.py" | |
| book_env+=" MDBOOK_PREPROCESSOR__README2INDEX__COMMAND=${proj_root}/util/mdbook_readme2index.py" | |
| book_env+=" MDBOOK_PREPROCESSOR__DASHBOARD__COMMAND=${proj_root}/util/mdbook_dashboard.py" | |
| # ./doc/guides/getting_started/book.toml | |
| book_guides_env="env" | |
| book_guides_env+=" MDBOOK_PREPROCESSOR__TOOLVERSION__COMMAND=${proj_root}/util/mdbook_toolversion.py" | |
| # Build up Hugo arguments | |
| hugo_args="" | |
| hugo_args+=" --source ${proj_root}/site/landing/" | |
| hugo_args+=" --destination ${build_dir}/" | |
| hugo_args+=" --baseURL ${base_url}" | |
| ############ | |
| # BUILDING # | |
| ############ | |
| buildSite () { | |
| mkdir -p "${build_dir}" | |
| mkdir -p "${build_dir}/gen/doxy" | |
| echo "Building doxygen..." | |
| pushd "${this_dir}" >/dev/null | |
| # shellcheck disable=SC2086 | |
| ${doxygen_env} doxygen ${doxygen_args} | |
| popd >/dev/null | |
| echo "Doxygen build complete." | |
| # shellcheck disable=SC2086 | |
| ${book_env} mdbook ${mdbook_args} | |
| # shellcheck disable=SC2086 | |
| ${book_guides_env} mdbook ${mdbook_guides_args} | |
| # shellcheck disable=SC2086 | |
| hugo ${hugo_args} | |
| } | |
| buildSite | |
| ########### | |
| # SERVING # | |
| ########### | |
| # If serving, run the python HTTP server | |
| if [ "$command" = "serve" ] || [ "$command" = "serve-proxy" ]; then | |
| echo "--------------------------------------------" | |
| echo | |
| echo "Website being served at : ${base_url}" | |
| echo | |
| echo "--------------------------------------------" | |
| python3 -m http.server -d "$build_dir" ${serve_port:1} | |
| # strip leading : | |
| fi |