# CSV Grid - Notepad++ plugin
# Cross-compiled with mingw-w64. `make` builds x64, `make ARCH=x86` builds 32-bit.

ARCH ?= x64

ifeq ($(ARCH),x86)
  PREFIX  := i686-w64-mingw32
  OUTDIR  := build/x86
else
  PREFIX  := x86_64-w64-mingw32
  OUTDIR  := build/x64
endif

CXX     := $(PREFIX)-g++
WINDRES := $(PREFIX)-windres
STRIP   := $(PREFIX)-strip

SRCDIR  := src
TARGET  := $(OUTDIR)/CsvGrid.dll

CXXFLAGS := -std=c++17 -O2 -DUNICODE -D_UNICODE \
            -DWINVER=0x0601 -D_WIN32_WINNT=0x0601 \
            -Wall -Wextra -Wno-unused-parameter -Wno-cast-function-type \
            -I$(SRCDIR)

LDFLAGS := -shared -static -static-libgcc -static-libstdc++ \
           -Wl,--kill-at -Wl,--enable-stdcall-fixup

LIBS := -lcomctl32 -luxtheme -lgdi32 -luser32 -lshlwapi -lole32 -lkernel32

OBJS := $(OUTDIR)/Plugin.o $(OUTDIR)/GridPanel.o $(OUTDIR)/CsvModel.o $(OUTDIR)/CsvGrid.res

all: $(TARGET)

$(OUTDIR):
	mkdir -p $(OUTDIR)

$(OUTDIR)/%.o: $(SRCDIR)/%.cpp | $(OUTDIR)
	$(CXX) $(CXXFLAGS) -c $< -o $@

$(OUTDIR)/CsvGrid.res: $(SRCDIR)/CsvGrid.rc $(SRCDIR)/resource.h | $(OUTDIR)
	$(WINDRES) -I$(SRCDIR) -O coff $< -o $@

$(TARGET): $(OBJS)
	$(CXX) $(OBJS) $(LDFLAGS) $(LIBS) -o $@
	$(STRIP) --strip-unneeded $@

clean:
	rm -rf build

.PHONY: all clean
