1 # SPDX-License-Identifier: LGPL-2.1-or-later
2 # See Notices.txt for copyright information
3 .PHONY
: all tests
clean fix-tests format-tests build-tests
7 CC
= powerpc64le-linux-gnu-gcc
8 CXX
= powerpc64le-linux-gnu-g
++
9 CFLAGS
= -O3
-Iinclude
-g0
-mno-altivec
-mno-vsx
-Wall
10 CXXFLAGS
= -std
=gnu
++17
14 TESTS_SOURCE
:= $(wildcard tests
/*/test.
cpp) $(wildcard tests
/*/test.c
)
15 TESTS_DIR
:= $(dir $(TESTS_SOURCE
))
16 TESTS_BUILD_DIR
:= $(addprefix build
/,$(TESTS_DIR
))
17 TESTS_DIFF
:= $(addsuffix diff.txt
,$(TESTS_BUILD_DIR
))
18 TESTS_FILTERED_OUT
:= $(addsuffix filtered-out.s
,$(TESTS_BUILD_DIR
))
19 EXTRA_DEPS
:= Makefile
$(wildcard include/*.h
) include/simplev_cpp_generated.h
21 include/simplev_cpp_generated.h
: Makefile generate_headers.py
22 python3 generate_headers.py
27 build
/tests
/%/out.s
: tests
/%/test.
cpp $(EXTRA_DEPS
) | build
/tests
/%/
28 $(CXX
) -S
$(CFLAGS
) $(CXXFLAGS
) $< -o
$@
30 build
/tests
/%/out.s
: tests
/%/test.c
$(EXTRA_DEPS
) | build
/tests
/%/
31 $(CC
) -S
$(CFLAGS
) $< -o
$@
33 build
/tests
/%/filtered-out.s
: build
/tests
/%/out.s
$(EXTRA_DEPS
)
34 sed
's/\(^\t.ident\t"\).*"/\1GCC"/' < $< > $@
36 build
/tests
/%/diff.txt
: tests
/%/expected.s build
/tests
/%/filtered-out.s
$(EXTRA_DEPS
)
37 diff
-u
$< build
/$(dir $<)filtered-out.s
> $@ || true
39 .PRECIOUS
: build
/tests
/%/out.s build
/tests
/%/filtered-out.s build
/tests
/%/ include/simplev_cpp_generated.h
41 tests
: build-tests format-tests
43 build-tests
: $(TESTS_DIFF
)
46 if
[ -s
"$$i" -o
! -e
"$$i" ]; then \
47 echo
"Test failed: $$i" >&2; \
48 head
-n
10 "$$i" >&2; \
49 failed
=$$((failed
+ 1)); \
52 if
[ $$((failed
)) != 0 ]; then \
53 echo
"$$failed test(s) failed" >&2; \
56 echo
"all tests passed"; \
59 fix-tests
: $(TESTS_FILTERED_OUT
)
60 @for i in
$(TESTS_FILTERED_OUT
); do \
61 target
="$$(dirname "$${i
##build/}")/expected.s"; \
63 [ "$(FORCE_FIX_TESTS)" = "$$target" ] || status
="$$(git status --porcelain "$$target")"; \
64 if
[ -z
"$$status" ]; then \
65 cp
-v
"$$i" "$$target"; \
66 elif
! cmp
"$$i" "$$target"; then \
67 echo
"$$target has uncommitted changes, not overwriting -- commit changes or run make with FORCE_FIX_TESTS=$$target" >&2; \
72 format-tests
: Makefile
include/simplev_cpp_generated.h .clang-format
73 @if
! which clang-format-11
> /dev
/null
; then \
74 echo
"clang-format-11 not found -- skipping format test"; \
76 diff
-u
<(clang-format-11
< include/simplev_cpp_generated.h
) include/simplev_cpp_generated.h
; \
80 rm -rf build
/tests
include/simplev_cpp_generated.h