APPLICATION = wamr-mini
# If no BOARD is defined in the environment, use this default:
BOARD ?= native

# This has to be the absolute path to the RIOT base directory:
RIOTBASE ?= $(CURDIR)/../../../../RIOT

USEMODULE += ztimer64_msec
USEMODULE += ztimer_usec
USEMODULE += sema

WPEDANTIC := 0
WERROR := 0

# Comment this out to disable code in RIOT that does safety checking
# which is not needed in a production environment but helps in the
# development process:
DEVELHELP ?= 1

# Change this to 0 show compiler invocation lines by default:
QUIET ?= 1

ARCHIVES += $(BINDIR)/libwamr.a

#Load the usual RIOT make infastructure

include $(RIOTBASE)/Makefile.include


WAMR_SOURCE = $(CURDIR)/../../..
WAMR_BUILD_DIR = $(BINDIR)/wamr

#less Wall TODO: get things fixed
CFLAGS :=  $(filter-out -pedantic, $(CFLAGS))
CFLAGS += -Wno-format
CFLAGS += -Wno-strict-prototypes
CFLAGS += -Wno-old-style-definition
CFLAGS += -Wno-cast-function-type

WAMR_CORE = $(WAMR_SOURCE)/core
IWASM_ROOT = $(WAMR_CORE)/iwasm
SHARED_LIB_ROOT = $(WAMR_CORE)/shared

IWASM_INCLUDES += ${IWASM_ROOT}/include \
                   ${SHARED_LIB_ROOT}/platform/include \
                   ${SHARED_LIB_ROOT}/platform/riot \


INCLUDES += $(addprefix -I,${IWASM_INCLUDES})



RIOT_INCLUDES = $(filter-out -%,$(subst -I,,$(INCLUDES)))

#WAMR_BUILD_TARGET is "X86_32" "AARCH64[sub]", "ARM[sub]",
#                     "THUMB[sub]", "MIPS" or "XTENSA"
#no msp430, no AVR support for now

#translate (CPU_ARCH) to Build Target
ifeq ($(CPU),native)
#$(CPU) is defined for every CPU
#Riot native is x86_32
	WAMR_BUILD_TARGET = X86_32
else ifeq ($(findstring arm,$(CPU_ARCH)),arm)
	WAMR_BUILD_TARGET = THUMB
else ifeq ($(CPU_ARCH),mips32r2)
	WAMR_BUILD_TARGET = MIPS
else ifeq ($(CPU_ARCH),xtensa)
	WAMR_BUILD_TARGET = XTENSA
endif

ifeq ($(QUIET), 0)
	CMAKEMAKEFLAGS += VERBOSE=1
endif


$(BINDIR)/libwamr.a: $(WAMR_BUILD_DIR)/libwamr.a
	cp $< $@

$(WAMR_BUILD_DIR)/libwamr.a: $(WAMR_BUILD_DIR)/Makefile
	$(MAKE) -C $(WAMR_BUILD_DIR) $(CMAKEMAKEFLAGS)

$(WAMR_BUILD_DIR)/Makefile: CMakeLists.txt
	cmake -B$(WAMR_BUILD_DIR) \
		"-DRIOT_INCLUDES=$(RIOT_INCLUDES)"\
		-DWAMR_ROOT_DIR=$(WAMR_SOURCE)\
		-DWAMR_BUILD_TARGET=$(WAMR_BUILD_TARGET)\
		-DCMAKE_SYSTEM_NAME=Generic \
		-DCMAKE_SYSTEM_PROCESSOR="$(MCPU)" \
		-DCMAKE_C_COMPILER=$(CC) \
		-DCMAKE_C_COMPILER_WORKS=TRUE \

print_build_target:
	@echo CPU_ARCH: $(CPU_ARCH)
	@echo CPU: $(CPU)
	@echo CFLAGS: $(CFLAGS)
	@echo WAMR_BUILD_TARGET: $(WAMR_BUILD_TARGET)
