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

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

.PHONY: language-tests
.PHONY: language-tests-native

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

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

# ============================================================
# -- olvm binaries -------------------------------------------
olvm-binaries:

OLVM_SRCS += src/olvm.c extensions/ffi.c
TEST_DEPS += vm # get deps from vm
TEST_DEPS += $(OLVM_SRCS)

TEST_CFLAGS_DEBUG += $(OLVM_CFLAGS) $(CFLAGS_DEBUG)
TEST_CFLAGS_RELEASE += $(OLVM_CFLAGS) $(CFLAGS_RELEASE)

# common olvm build flags
# TODO: don't forget to autosynchronize these flags with CFLAGS
# TODO: move these flags into main GNUmakefile
OLVM_CFLAGS += -std=gnu99 -Wno-int-to-pointer-cast
OLVM_CFLAGS += -fno-exceptions
OLVM_CFLAGS += -fno-unwind-tables -fno-asynchronous-unwind-tables
OLVM_CFLAGS += -DHAVE_DLOPEN=1 -DHAVE_SOCKETS=1
OLVM_CFLAGS += -DHAVE_MEMFD_CREATE=1
OLVM_CFLAGS += -D_FILE_OFFSET_BITS=64
OLVM_CFLAGS += -lm

OLVM_EXPORT += -Xlinker --export-dynamic

# MIPS linux
# ----------------------------

# # riscv64-unknown-elf-gcc
# tmp/olvm-riscv64-debug: CC=riscv64-unknown-elf-gcc
# tmp/olvm-riscv64-debug: src/olvm.c extensions/ffi.c
# 	$(call olvm-,$@,$(OLVM_CFLAGS) $(CFLAGS_DEBUG))


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

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

tmp/olvm-native-debug: $(TEST_DEPS)
	$(call build-olvm,$@,$(CFLAGS) $(CFLAGS_DEBUG) $(L))

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

tmp/olvm-native-release: $(TEST_DEPS)
	$(call build-olvm,$@,$(CFLAGS) $(CFLAGS_RELEASE) $(L))

endif

# ------ language tests ---------------------------------------
.SILENT: language-tests
language-tests: olvm-binaries
language-tests: RUNNER=LANGUAGE
language-tests: $(wildcard tests/*.scm) $(wildcard tests/*.bin)
	echo " "
	echo "# $(RUNNER) TESTS"
	FAILMARK=$(shell mktemp -u tmp/do.$(RUNNER).XXXXXXXXX) \
	BACKEND_URL=$(BACKEND_URL) RUNNER=$(RUNNER) SESSION=$(SESSION) \
	TESTS="$^" EXECUTABLE=olvm $(MAKE) tests
