CXXFLAGS:= -pipe -fPIC -Wall -Wextra -pedantic -Wfatal-errors -std=c++14 -O2 -flto -I $(UTIL_DIR)

.PHONY: clean

all: fwldr.exe fwpinj32.dll

clean:
	$(RM) *.bin *.o *.exe *.dll

fwldr.exe: fwldr.o fwpinj32.dll
	$(CXX) -m32 $(CXXFLAGS) -static -mwindows -municode -o $@ $^ -luser32
	strip --strip-all $@

fwldr.o: fwldr.cpp
	$(CXX) -m32 $(CXXFLAGS) -c -o $@ $<

fwpinj32.dll: fwpinj.cpp fwpinj32_s_bin.o $(UTIL_DIR)/fwutil.a
	$(CXX) -m32 $(CXXFLAGS) -shared -static -o $@ $^
	strip --strip-all $@

fwpinj32_s.o: fwpinj32.s
	$(CC) -m32 -c -o $@ $<

fwpinj32_s.bin: fwpinj32_s.o
	objcopy -O binary $< $@

fwpinj32_s_bin.o: fwpinj32_s.bin
	ld -mi386pe -r -o $@ --format=binary $<
	objcopy \
	  --rename-section .data=.rodata \
	  --redefine-sym _binary_fwpinj32_s_bin_start=_binary_fwldr_s_bin_start \
	  --redefine-sym _binary_fwpinj32_s_bin_end=_binary_fwldr_s_bin_end \
	  $@
