CFLAGS		+= -c -I$(SRC_DIR)/protobuf/ -I$(SRC_DIR)/syscall/
CFLAGS		+=  -fpie  -Wa,--noexecstack -fno-strict-aliasing

GEN-OFFSETS	:= gen-offsets.sh

PASM-OBJS	+= $(ARCH_DIR)/parasite-head.o
RESTORER-ARCH-OBJS := $(ARCH_DIR)/restorer.o

PARASITE	+= parasite.bin.o parasite.bin
RESTORER	:= restorer.bin.o restorer.bin
BLOBS		:= parasite-blob.h restorer-blob.h
PIELDS		:= pie.lds.S
ASMFLAGS	:= -D__ASSEMBLY__

.DEFAULT_GOAL	:= pie

LIB-OBJS	= log-simple.o blob-util-net.o $(SYSCALL-LIB)

$(PARASITE): $(LIB-OBJS) $(PASM-OBJS) $(PIELDS)
$(RESTORER): $(LIB-OBJS) $(RESTORER-ARCH-OBJS) $(PIELDS)

$(PIELDS): $(PIELDS).in
	$(E) "  GEN     " $@
	$(Q) $(SH) -c "echo 'OUTPUT_ARCH($(LDARCH))' > $(PIELDS)"
	$(Q) $(SH) -c "cat $(PIELDS).in >> $(PIELDS)"

blob-util-net.o: $(SRC_DIR)/util-net.c
	$(E) "  CC      " $@
	$(Q) $(CC) $(CFLAGS) $< -o $@

%.o: %.S
	$(E) "  CC      " $@
	$(Q) $(CC) $(ASMFLAGS) $(CFLAGS) $< -o $@

%.o: %.c
	$(E) "  CC      " $@
	$(Q) $(CC) $(CFLAGS) $< -o $@

%.bin.o: %.o
	$(E) "  GEN     " $@
	$(Q) $(LD) -T $(PIELDS) -o $@ $(^:$(PIELDS)=)

%.bin: %.bin.o
	$(E) "  GEN     " $@
	$(Q) $(OBJCOPY) -O binary $< $@

%-blob.h: %.bin %.bin.o $(GEN-OFFSETS)
	$(E) "  GEN     " $@
	$(Q) $(SH) $(GEN-OFFSETS) $(@:-blob.h=) > $@ || rm -f $@

pie: $(BLOBS)

clean:
	$(E) "  CLEAN PIE"
	$(Q) $(RM) -f ./*-blob.h
	$(Q) $(RM) -f ./*.o
	$(Q) $(RM) -f ./*.d
	$(Q) $(RM) -f ./*.bin
	$(Q) $(RM) -f ./*.bin.o
	$(Q) $(RM) -f $(PIELDS)

.PHONY: clean pie
.SECONDARY:
