| # Set path to prebuilts used in the build. |
| UNNAME_S := $(shell uname -s | tr '[:upper:]' '[:lower:]') |
| PREBUILTS := $(PWD)/prebuilts/$(UNNAME_S)-x64 |
| GN ?= $(PREBUILTS)/gn/gn |
| NINJA ?= $(PREBUILTS)/ninja/ninja |
| export PATH := $(PREBUILTS)/clang/bin:$(PATH) |
| |
| # Configure the build arguments. |
| ARCH ?= aarch64 |
| PLATFORM ?= qemu |
| GCC ?= false |
| |
| # Place builds for different architectures and platforms in different |
| # directories. |
| OUT ?= out |
| OUT_DIR = out/$(ARCH)/$(PLATFORM) |
| |
| .PHONY: all |
| all: $(OUT_DIR)/build.ninja |
| @$(NINJA) -C $(OUT_DIR) |
| |
| $(OUT_DIR)/build.ninja: $(OUT_DIR)/args.gn |
| @$(GN) --export-compile-commands gen $(OUT_DIR) |
| |
| # Configure the build by loading the configuration arguments for the |
| # architecture and platform. |
| $(OUT_DIR)/args.gn: build/arch/$(ARCH)/$(PLATFORM).args |
| @echo Copying config for $(ARCH) on $(PLATFORM) |
| @mkdir -p $(OUT_DIR) |
| @echo "arch = \"$(ARCH)\"" >> $@ |
| @echo "use_gcc = $(GCC)" >> $@ |
| @echo >> $@ |
| @cat $< >> $@ |
| |
| .PHONY: clean |
| clean: |
| @$(NINJA) -C $(OUT_DIR) -t clean |
| rm -f $(OUT_DIR)/args.gn |
| |
| .PHONY: clobber |
| clobber: |
| rm -rf $(OUT) |
| |
| # see .clang-format. |
| .PHONY: format |
| format: |
| @echo "Formatting..." |
| @find src/ -name \*.c -o -name \*.cc -o -name \*.h | xargs clang-format -style file -i |
| @find inc/ -name \*.c -o -name \*.cc -o -name \*.h | xargs clang-format -style file -i |
| @find test/ -name \*.c -o -name \*.cc -o -name \*.h | xargs clang-format -style file -i |
| @find . \( -name \*.gn -o -name \*.gni \) | xargs -n1 $(GN) format |
| |
| # see .clang-tidy. |
| .PHONY: tidy |
| tidy: $(OUT_DIR)/build.ninja |
| @$(NINJA) -C $(OUT_DIR) |
| @echo "Tidying..." |
| @find src/ \( -name \\*.c -o -name \*.cc \) | xargs clang-tidy -p $(OUT_DIR) -fix |
| @find test/ \( -name \*.c -o -name \*.cc \) | xargs clang-tidy -p $(OUT_DIR) -fix |
| |
| .PHONY: check |
| check: $(OUT_DIR)/build.ninja |
| @$(NINJA) -C $(OUT_DIR) |
| @echo "Checking..." |
| @find src/ \( -name \*.c -o -name \*.cc \) | xargs clang-check -p $(OUT_DIR) -analyze -fix-what-you-can |
| @find test/ \( -name \*.c -o -name \*.cc \) | xargs clang-check -p $(OUT_DIR) -analyze -fix-what-you-can |
| |
| .PHONY: license |
| license: |
| @find src/ -name \*.c -o -name \*.cc -o -name \*.h | xargs -n1 python build/license.py --style c |
| @find inc/ -name \*.c -o -name \*.cc -o -name \*.h | xargs -n1 python build/license.py --style c |
| @find test/ -name \*.c -o -name \*.cc -o -name \*.h | xargs -n1 python build/license.py --style c |
| @find build/ -name \*.py| xargs -n1 python build/license.py --style hash |
| @find test/ -name \*.py| xargs -n1 python build/license.py --style hash |
| @find . \( -name \*.gn -o -name \*.gni \) | xargs -n1 python build/license.py --style hash |