#
# Toolchain
#
# Note: BSD: CCC=clang++
CCC=g++
RM=rm
OCP=objcopy
ODUMP=objdump
TAR=tar

#
# Build config
#
RESOURCE_PATH=res
ELF_TYPE=elf64-x86-64
RESOURCE_SECTION_NAME=blobres
EXECUTABLE=app

#
# Default: make all
#
.PHONY: all
all: $(EXECUTABLE)

#
# Cleanup
#
.PHONY: clean
clean:
	-@$(RM) -f *.o
	-@$(RM) -f $(RESOURCE_SECTION_NAME).tar

#
# Object dump
#
.PHONY: dump
dump:
	$(ODUMP) -x $(RESOURCE_SECTION_NAME).o

#
# Link application
#
$(EXECUTABLE): resource_section.o $(RESOURCE_SECTION_NAME).o
	$(CCC) -o $(EXECUTABLE) resource_section.o $(RESOURCE_SECTION_NAME).o

#
# Main program
#
resource_section.o: resource_section.cc
	$(CCC) -c -DRESOURCE_SECTION_NAME=$(RESOURCE_SECTION_NAME) -o resource_section.o resource_section.cc

#
# Convert tar to non-allocated object
#
$(RESOURCE_SECTION_NAME).o: $(RESOURCE_SECTION_NAME).tar
	$(OCP) --input binary --output $(ELF_TYPE) --binary-architecture i386 --rename-section \
	  .data=.$(RESOURCE_SECTION_NAME),readonly,data,contents \
	  $(RESOURCE_SECTION_NAME).tar $(RESOURCE_SECTION_NAME).o

#
# Make tar from the resource directory (only dir itself checked here)
#
$(RESOURCE_SECTION_NAME).tar: $(RESOURCE_PATH)
	$(TAR) -v --group=nogroup --owner=nobody --dereference --recursion \
	  --create --format=ustar --directory=$(RESOURCE_PATH) -f $(RESOURCE_SECTION_NAME).tar .
