SRCS = $(sort $(wildcard $(srcdir)/*.c)) OBJS = $(patsubst $(srcdir)/%.c,obj/%.o,$(SRCS)) DEPS = $(patsubst $(srcdir)/%.c,obj/%.d,$(SRCS)) gc_impl = sms CFLAGS = CPPFLAGS = LDFLAGS = # CFLAGS_AUTO = -fdata-sections -ffunction-sections -flto -g -O3 -std=c11 -Wall -Werror=implicit-function-declaration # CFLAGS_AUTO = -g -Og -std=c11 -Wall -Werror=implicit-function-declaration CFLAGS_AUTO = -flto -g -Og -std=c11 -Wall -Werror=implicit-function-declaration LDFLAGS_AUTO = LDLIBS_AUTO = -lm CFLAGS_ALL = $(CPPFLAGS) $(CFLAGS_AUTO) $(CFLAGS) LDFLAGS_ALL = $(LDFLAGS_AUTO) $(LDFLAGS) LDLIBS_ALL = $(LDLIBS_AUTO) $(LDLIBS) -include config.mak ifeq ($(CONFIGURED),) all: @printf >&2 'Please run mk.sh, not make.\n' @exit 1 else include $(srcdir)/platform/$(platform).mk imb3.elf: $(OBJS) obj/gc/$(gc_impl).o obj/platform/$(platform).o $(CC) $(CFLAGS_ALL) $(LDFLAGS_ALL) -o $@ $^ $(LDLIBS_ALL) obj/%.o: $(srcdir)/%.c @mkdir -p $(dir $@) $(CC) $(CFLAGS_ALL) -c -o $@ $< # https://www.gnu.org/software/make/manual/html_node/Automatic-Prerequisites.html obj/%.d: $(srcdir)/%.c @mkdir -p obj @set -e; rm -f $@; \ $(CC) -M $(CPPFLAGS) $< > $@.$$$$; \ sed 's,\($*\)\.o[ :]*,obj/\1.o $@ : ,g' < $@.$$$$ > $@; \ rm -f $@.$$$$ include $(DEPS) endif .PHONY: all