.SUFFIXES:
.PHONY:clean all

OUTPUT_DIR = ../../hdd/root/bin/

BINARIES = test test2

BINARIES_FULL = $(addprefix $(OUTPUT_DIR), $(BINARIES))

test = test.o

test2 = test2.o

# El compilador
CC = gcc
# -fno-asynchronous-unwind-tables omite la sección .eh_frames 
# requerida por el ABI de x86_64 para hacer stack unwinding.
CFLAGS = -std=c99 -m64 -Wall -Werror -O2 \
		 -fno-stack-protector \
		 -fno-asynchronous-unwind-tables -mno-red-zone -I.

# El ensamblador
NASM = nasm
NASMFLAGS = -felf64

# El linker
LD=ld
LDFLAGS = -static -nmagic -melf_x86_64 -T $(LINKSCRIPT)
LINKSCRIPT = linker_script_bin.ld

all: $(OUTPUT_DIR) $(BINARIES_FULL)

$(OUTPUT_DIR): 
	mkdir $(OUTPUT_DIR)

%.o: %.c
	$(CC) $(CFLAGS) -c -o $@ $^

%.o: %.asm
	$(NASM) $(NASMFLAGS) -o $@ $^

clean:
	@echo 'Limpiando todo...'
	rm -f *.o
	rm -f $(BINARIES_FULL)
	@echo ''

.SECONDEXPANSION:

$(BINARIES_FULL): $$($$(notdir $$@))
	@echo ''
	@echo 'Linkeando test...'
	$(LD) $(LDFLAGS) $^ -o $@
