# Makefile
#
# Copyright 2012-2024 MicroEJ Corp. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be found with this software.
#
# Generic makefile that can be used from runMakefile MicroEJ Task

# TARGET_PREFIX := i686-linux-gnu-
# CC := $(TARGET_PREFIX)gcc
OBJCOPY := $(TARGET_PREFIX)objcopy

SRCDIR := ./
OUTPUTDIR := build/
PLATFORMDIR := $(SRCDIR)platform/
TARGET := ../application.out

CFLAGS := $(CFLAGS) -I$(PLATFORMDIR)inc/ $(addprefix -I$(SRCDIR),$(wildcard */inc)) -Ivalidation/tests/llkernel/c/inc -Ivalidation/framework/c/embunit -Ivalidation/framework/c/utils/inc
# MicroEJ flags:
CFLAGS += -Winline -fwrapv -Werror-implicit-function-declaration -ffunction-sections -fdata-sections -std=c99 -fno-strict-aliasing -fdollars-in-identifiers -D_XOPEN_SOURCE=700 -D_GNU_SOURCE -fno-stack-protector -no-pie -mbe32 -O2 -g -D__iceTea__RELEASE -DNDEBUG -DMICROEJ_VEE_METHOD_TRACE=0
# -D_FILE_OFFSET_BITS=64

C_SOURCES := $(shell find $(SRCDIR) -iname '*.c')
C_EXCLUDES := $(shell find ./validation/framework/c/embunit/embUnit -iname '*.c')
C_EXCLUDES += $(shell find ./validation/framework/c/embunit/samples -iname '*.c')
C_EXCLUDES += $(shell find ./validation/framework/c/embunit/tests -iname '*.c')
C_EXCLUDES += $(shell find ./validation/framework/c/embunit/textui -iname '*.c')
C_EXCLUDES += $(shell find ./validation/framework/c/embunit/tools -iname '*.c')
C_SOURCES := $(filter-out $(C_EXCLUDES),$(C_SOURCES))

C_SOURCES := $(filter-out src/bar.cpp, $(C_SOURCES))
HEADERS := $(shell find $(SRCDIR) -iname '*.h')

C_OBJECTS := $(patsubst $(SRCDIR)%.c,$(OUTPUTDIR)%.o,$(C_SOURCES))

.PHONY: clean

all: $(TARGET)

$(TARGET): $(PLATFORMDIR)lib/microejapp.o $(C_OBJECTS) $(wildcard $(PLATFORMDIR)lib/*.a)
	$(CC) \
		-Wl,-Map,$(OUTPUTDIR)microej_gcc.map \
		-Wl,--gc-sections \
		-Wl,--start-group \
		$^ \
		-Wl,--end-group \
		-lts -lm -lpthread -lrt -fno-stack-protector -no-pie -D_GNU_SOURCE -ldl -lssl -lcrypto \
		-o "$@"

$(OUTPUTDIR)%.o: $(SRCDIR)%.c $(HEADERS)
	@mkdir -p $(dir $@)
	$(CC) $(CFLAGS) -c -o "$@" "$<"

clean:
	@rm -vf $(C_OBJECTS)
