NAME := output
TARGET := ../../$(basename $(NAME)).mexw64

CC := x86_64-w64-mingw32-gcc

SRCS := $(shell find -name '*.c')
OBJS := $(addsuffix .o, $(basename $(SRCS)))
LIBS := $(shell find -name '*.dll' -printf '%h\n' | sort | uniq)

CFLAGS := -Wall -O3 -flto -ffunction-sections -fdata-sections
CFLAGS += -fPIC -fno-omit-frame-pointer -fvisibility=hidden
CFLAGS += -D'DLL_EXPORT_SYM=__attribute__((visibility("default")))'
CFLAGS += $(shell find -name '*.h' -printf '-I%h\n' | sort | uniq)
CFLAGS += -DMATLAB_MEX_FILE -DMATLAB_DEFAULT_RELEASE=R2017b
CFLAGS += $(shell cat SOURCE/CFLAGS 2>/dev/null)

LDFLAGS := -shared -s -Wl,-gc-sections -Wl,--as-needed
LDFLAGS += -L$(LIBS) -lm -lmat -lmex -lmx

all: $(TARGET)

%.o: %.c
	@echo 'CC $<'
	@SOURCE_DATE_EPOCH=0 $(CC) -c $< -o $@ $(CFLAGS)

$(TARGET): $(OBJS)
	@echo 'CC $@'
	@SOURCE_DATE_EPOCH=0 $(CC) $^ -o $@ $(LDFLAGS)

clean:
	@find -name '*.o' -delete
