seL4-docs/Makefile

133 lines
4.8 KiB
Makefile

# Copyright 2020 seL4 Project a Series of LF Projects, LLC.
# SPDX-License-Identifier: BSD-2-Clause
default: serve
.PHONY: ruby_deps
ruby_deps: Gemfile Gemfile.lock
bundle install
# The following rules generate a yaml file that contains file modification metadata
# provided by git. The format is:
#
# date: Tue Mar 13 19:11:51 2018 +1100
# timestamps:
# - page: BuildSystemAnatomy/index.md
# date: Tue Mar 13 19:11:51 2018 +1100
# - page: CAmkESDifferences.md
# date: Tue Mar 13 19:11:51 2018 +1100
# ...
# If this prebuild _data generation step gets more complicated then it should
# probably be moved to a python script.
FILE_NAME=_data/generated.yml
UPDATE_DATE:= $(shell git log -1 --format='%cd %h')
FILES:= $(shell find . -iname "*.md" | grep -ve "./README.md" | grep -ve "^./_repos/"| sed 's/.\///')
.PHONY: _data/generated.yml
_data/generated.yml:
echo "date: $(UPDATE_DATE)" > $(FILE_NAME)
echo timestamps: >> $(FILE_NAME) && \
for i in $(FILES); do \
echo " - page: $$i" >> $(FILE_NAME) &&\
echo " date: `git log -1 --format='%cd %h' -- $$i`" >> $(FILE_NAME); \
done
generate_data_files: _data/generated.yml
# Adding a git URL here and appending the directory name to REPOSITORY_LIST will
# add a rule for checking out the repository under _repos/$(REPO_NAME)
GIT_REPOS:=$(shell (cd _data/projects && for i in `ls`; do cat $$i | ../../tools/get_repos.py ; done) | sort -u)
REPOSITORY_LIST = sel4 sel4-tutorials capdl
REPOSITORIES = $(GIT_REPOS:%=_repos/%)
$(REPOSITORIES):
mkdir -p $@
git clone --depth=1 https://github.com/$(@:_repos/%=%) $@
_repos/tutes:
mkdir -p $@
_repos/tutes/%.md: _repos/sel4proj/sel4-tutorials/tutorials/% _repos/tutes
PYTHONPATH=_repos/sel4/capdl/python-capdl-tool _repos/sel4proj/sel4-tutorials/template.py --docsite --out-dir _repos/tutes --tut-file $</$(@F)
TUTORIALS:= $(filter-out index.md,$(notdir $(wildcard Tutorials/*.md)))
tutorials: ${TUTORIALS:%=_repos/tutes/%}
_generate_api_pages: $(REPOSITORIES)
$(MAKE) markdown -C _repos/sel4/sel4/manual
generate_libsel4vm_api: $(REPOSITORIES)
mkdir -p projects/virtualization/docs/api && \
for i in `ls _repos/sel4proj/sel4_projects_libs/libsel4vm/docs/libsel4vm_*`; \
do \
tools/gen_markdown_api_doc.py -f $$i -o projects/virtualization/docs/api/`basename $$i`; \
done;
generate_libsel4vmmplatsupport_api: $(REPOSITORIES)
mkdir -p projects/virtualization/docs/api && \
for i in `ls _repos/sel4proj/sel4_projects_libs/libsel4vmmplatsupport/docs/libsel4vmmplatsupport_*`; \
do \
tools/gen_markdown_api_doc.py -f $$i -o projects/virtualization/docs/api/`basename $$i`; \
done;
generate_api: _generate_api_pages generate_libsel4vm_api generate_libsel4vmmplatsupport_api
# Rules for local serving of the site using jekyll.
# Supports docker or running using local environment.
# The _production versions run with JEKYLL_ENV=production which will show additional content.
# The _production versions require `generate_data_files` to have been run separately.
JEKYLL_ENV:=development
DOCKER_IMG:=docs_builder
docker_serve: docker_build
docker run -p 4000:4000 -v $(PWD):/docs -w /docs -it $(DOCKER_IMG) bash -c 'make serve JEKYLL_ENV=$(JEKYLL_ENV)'
docker_build:
docker build -t $(DOCKER_IMG) tools/
# --host 0.0.0.0 serves on all interfaces, so that docker can export
# the connection; also works locally
serve: build
JEKYLL_ENV=$(JEKYLL_ENV) bundle exec jekyll serve --host 0.0.0.0
build: generate_api ruby_deps $(REPOSITORIES)
$(MAKE) tutorials
ifeq ($(JEKYLL_ENV),production)
$(MAKE) generate_data_files
endif
JEKYLL_ENV=$(JEKYLL_ENV) bundle exec jekyll build
clean:
rm -rf _site
rm -rf _repos
rm -rf _data/generated.yml
rm -rf .sass-cache/
# Check conformance for Web Content Accessibility Guidelines (WCAG) 2.0, AA
# This relies on Automated Accessibility Testing Tool (AATT) (https://github.com/paypal/AATT)
# to be running and listening on http://localhose:3000
# The resulting conformance_results.xml file can be viewed with `make check_conformance_errors` or using a junit xml viewer
check_conformance: build
find _site -iname "*.html"| sed "s/_site.//" | python tools/testWCAG.py > conformance_results.xml
check_conformance_errors: conformance_results.xml
grep -B1 'type="failure"' conformance_results.xml || true
LIQUID_CUSTOM_TAGS := continue
LIQUID_LINTER_CMDLINE := liquid-linter $(LIQUID_CUSTOM_TAGS:%=--custom-tag %)
# Liquid syntax linting check.
# If it is complaining about unknown custom tags -> add them to the list above.
# Requires `liquid-linter` to be installed.
# git ls-files won't list any files that are untracked
check_liquid_syntax:
git ls-files "*.html" | xargs $(LIQUID_LINTER_CMDLINE)
git ls-files "*.md" | xargs $(LIQUID_LINTER_CMDLINE)
# Output html checking using tidy.
# Any warnings or errors will be printed to stdout
# Requires `tidy` to be installed.
check_html_output: build
find _site/ -iname "*.html"| xargs -l tidy -q --drop-empty-elements n -e