#!/usr/bin/env -S bash -c "make -s -C ../.. ffi-tests"

# tests without test results in %.%.ok file are legal,
#   but can not be used in batch testing!
TEST_FILES += $(sort $(patsubst %.ok,%,\
                 $(wildcard tests/ffi/*.scm.ok)\
                 $(wildcard tests/ffi/*.bin.ok)))

.PHONY: ffi-tests
.PHONY: ffi-tests-native

ffi-tests-native:
	DEV_MODE=0 make ffi-tests

# enable as part of regression testing
regression-tests: ffi-tests

ffi-tests: ol
ffi-tests: tests/ffi/src.inc
tests/ffi/src.inc: tests/ffi/src.inc.generator
	ol --home=libraries:tests/ffi $< >$@

# ============================================================
# -- ffi binaries --------------------------------------------

FFI_DEPS = tests/ffi/src.c tests/ffi/src.inc

tmp/ffi-%-debug: TEST_DEPS += $(FFI_DEPS)
tmp/ffi-%-debug: TEST_CFLAGS_DEBUG += tests/ffi/src.c
tmp/ffi-%-debug: tests/ffi/src.c tests/ffi/src.inc src/olvm.c extensions/ffi.c

tmp/ffi-%-release: TEST_DEPS += $(FFI_DEPS)
tmp/ffi-%-release: TEST_CFLAGS_RELEASE += tests/ffi/src.c

-include tests/ffi/platforms/i86.mk
-include tests/ffi/platforms/aarch64.mk
-include tests/ffi/platforms/riscv64.mk
-include tests/ffi/platforms/arm.mk
-include tests/ffi/platforms/mips.mk
-include tests/ffi/platforms/mipsel.mk
-include tests/ffi/platforms/ppc.mk
-include tests/ffi/platforms/ppcle64.mk
-include tests/ffi/platforms/sparc64.mk
-include tests/ffi/platforms/alpha.mk
-include tests/ffi/platforms/s390x.mk
-include tests/ffi/platforms/win(e).mk

# native binaries
ifeq ($(DEV_MODE),0)

# native debug
# ----------------------------
ffi-binaries: tmp/ffi-native-debug

tmp/ffi-native-debug: $(FFI_DEPS)
	$(call build-olvm,$@,$(CFLAGS) tests/ffi/src.c $(CFLAGS_DEBUG) $(L))

# native release
ffi-binaries: tmp/ffi-native-release

tmp/ffi-native-release: $(FFI_DEPS)
	$(call build-olvm,$@,$(CFLAGS) tests/ffi/src.c $(CFLAGS_RELEASE) $(L))

endif

ffi-binaries:

# ------ ffi tests -------------------------------------
include tests/ffi/tier-1/Makefile
include tests/ffi/tier-2/Makefile

.SILENT: ffi-tests
ffi-tests: ffi-binaries
ffi-tests: ffi-tier-1-tests
ffi-tests: ffi-tier-2-tests
ffi-tests:
	true
