# Makefile for RISC-V ISA Manuals # # This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 # International License. To view a copy of this license, visit # http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to # Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. # # SPDX-License-Identifier: CC-BY-SA-4.0 # # Description: # # This Makefile is designed to automate the process of building and packaging # the documentation for RISC-V ISA Manuals. It supports multiple build targets # for generating documentation in various formats (PDF, HTML, EPUB). # # Building with a preinstalled docker container is recommended. # Install by running: # # docker pull riscvintl/riscv-docs-base-container-image:latest # DOCS := riscv-privileged riscv-unprivileged DATE ?= $(shell date +%Y-%m-%d) DOCKER_IMG := riscvintl/riscv-docs-base-container-image:latest ifneq ($(SKIP_DOCKER),true) DOCKER_CMD := docker run --rm -v ${PWD}:/build -w /build \ ${DOCKER_IMG} \ /bin/sh -c DOCKER_QUOTE := " endif SRC_DIR := src BUILD_DIR := build DOCS_PDF := $(addprefix $(BUILD_DIR)/, $(addsuffix .pdf, $(DOCS))) DOCS_HTML := $(addprefix $(BUILD_DIR)/, $(addsuffix .html, $(DOCS))) DOCS_EPUB := $(addprefix $(BUILD_DIR)/, $(addsuffix .epub, $(DOCS))) ENV := LANG=C.utf8 XTRA_ADOC_OPTS := ASCIIDOCTOR_PDF := $(ENV) asciidoctor-pdf ASCIIDOCTOR_HTML := $(ENV) asciidoctor ASCIIDOCTOR_EPUB := $(ENV) asciidoctor-epub3 OPTIONS := --trace \ -a compress \ -a mathematical-format=svg \ -a pdf-fontsdir=docs-resources/fonts \ -a pdf-theme=docs-resources/themes/riscv-pdf.yml \ $(XTRA_ADOC_OPTS) \ -D build \ --failure-level=ERROR REQUIRES := --require=asciidoctor-bibtex \ --require=asciidoctor-diagram \ --require=asciidoctor-lists \ --require=asciidoctor-mathematical .PHONY: all build clean build-container build-no-container build-docs build-pdf build-html build-epub all: build build-docs: $(DOCS_PDF) $(DOCS_HTML) $(DOCS_EPUB) build-pdf: $(DOCS_PDF) build-html: $(DOCS_HTML) build-epub: $(DOCS_EPUB) ALL_SRCS := $(shell git ls-files $(SRC_DIR)) $(BUILD_DIR)/%.pdf: $(SRC_DIR)/%.adoc $(ALL_SRCS) $(DOCKER_CMD) $(DOCKER_QUOTE) $(ASCIIDOCTOR_PDF) $(OPTIONS) $(REQUIRES) $< $(DOCKER_QUOTE) $(BUILD_DIR)/%.html: $(SRC_DIR)/%.adoc $(ALL_SRCS) $(DOCKER_CMD) $(DOCKER_QUOTE) $(ASCIIDOCTOR_HTML) $(OPTIONS) $(REQUIRES) $< $(DOCKER_QUOTE) $(BUILD_DIR)/%.epub: $(SRC_DIR)/%.adoc $(ALL_SRCS) $(DOCKER_CMD) $(DOCKER_QUOTE) $(ASCIIDOCTOR_EPUB) $(OPTIONS) $(REQUIRES) $< $(DOCKER_QUOTE) build: @echo "Checking if Docker is available..." @if command -v docker >/dev/null 2>&1 ; then \ echo "Docker is available, building inside Docker container..."; \ $(MAKE) build-container; \ else \ echo "Docker is not available, building without Docker..."; \ $(MAKE) build-no-container; \ fi build-container: @echo "Starting build inside Docker container..." $(MAKE) build-docs @echo "Build completed successfully inside Docker container." build-no-container: @echo "Starting build..." $(MAKE) SKIP_DOCKER=true build-docs @echo "Build completed successfully." # Update docker image to latest docker-pull-latest: docker pull ${DOCKER_IMG} clean: @echo "Cleaning up generated files..." rm -rf $(BUILD_DIR) @echo "Cleanup completed."