# SPDX-License-Identifier: LGPL-2.1-or-later # See Notices.txt for copyright information .PHONY: all tests clean fix-tests format-tests build-tests SHELL=/bin/bash CC = powerpc64le-linux-gnu-gcc CXX = powerpc64le-linux-gnu-g++ CFLAGS = -O3 -Iinclude -g0 -mno-altivec -mno-vsx -Wall CXXFLAGS = -std=gnu++17 all: tests TESTS_SOURCE := $(wildcard tests/*/test.cpp) $(wildcard tests/*/test.c) TESTS_DIR := $(dir $(TESTS_SOURCE)) TESTS_BUILD_DIR := $(addprefix build/,$(TESTS_DIR)) TESTS_DIFF := $(addsuffix diff.txt,$(TESTS_BUILD_DIR)) TESTS_FILTERED_OUT := $(addsuffix filtered-out.s,$(TESTS_BUILD_DIR)) EXTRA_DEPS := Makefile $(wildcard include/*.h) include/simplev_cpp_generated.h include/simplev_cpp_generated.h: Makefile generate_headers.py python3 generate_headers.py build/tests/%/: mkdir -p $@ build/tests/%/out.s: tests/%/test.cpp $(EXTRA_DEPS) | build/tests/%/ $(CXX) -S $(CFLAGS) $(CXXFLAGS) $< -o $@ build/tests/%/out.s: tests/%/test.c $(EXTRA_DEPS) | build/tests/%/ $(CC) -S $(CFLAGS) $< -o $@ build/tests/%/filtered-out.s: build/tests/%/out.s $(EXTRA_DEPS) sed 's/\(^\t.ident\t"\).*"/\1GCC"/' < $< > $@ build/tests/%/diff.txt: tests/%/expected.s build/tests/%/filtered-out.s $(EXTRA_DEPS) diff -u $< build/$(dir $<)filtered-out.s > $@ || true .PRECIOUS: build/tests/%/out.s build/tests/%/filtered-out.s build/tests/%/ include/simplev_cpp_generated.h tests: build-tests format-tests build-tests: $(TESTS_DIFF) @failed=0; \ for i in $+; do \ if [ -s "$$i" -o ! -e "$$i" ]; then \ echo "Test failed: $$i" >&2; \ head -n 10 "$$i" >&2; \ failed=$$((failed + 1)); \ fi; \ done; \ if [ $$((failed)) != 0 ]; then \ echo "$$failed test(s) failed" >&2; \ false; \ else \ echo "all tests passed"; \ fi fix-tests: $(TESTS_FILTERED_OUT) @for i in $(TESTS_FILTERED_OUT); do \ target="$$(dirname "$${i##build/}")/expected.s"; \ status=""; \ [ "$(FORCE_FIX_TESTS)" = "$$target" ] || status="$$(git status --porcelain "$$target")"; \ if [ -z "$$status" ]; then \ cp -v "$$i" "$$target"; \ elif ! cmp "$$i" "$$target"; then \ echo "$$target has uncommitted changes, not overwriting -- commit changes or run make with FORCE_FIX_TESTS=$$target" >&2; \ exit 1; \ fi; \ done format-tests: Makefile include/simplev_cpp_generated.h .clang-format @if ! which clang-format-11 > /dev/null; then \ echo "clang-format-11 not found -- skipping format test"; \ else \ diff -u <(clang-format-11 < include/simplev_cpp_generated.h) include/simplev_cpp_generated.h; \ fi clean: rm -rf build/tests include/simplev_cpp_generated.h