# Compilador que será utilizado
CC=gcc

# flags de compilación
CFLAGS=-g -Wall -std=c11

# flags de linkeo
LDFLAGS=

# Carpeta con codigo
FS_DIR=fs/
FS_OBJECTS=ext2.o ext2_write.o block_cache.o
FS_FULL=$(addprefix $(OBJ_DIR)$(FS_DIR), $(FS_OBJECTS))

UTILS_DIR=utils/
UTILS_OBJECTS=bitmap.o
UTILS_FULL=$(addprefix $(OBJ_DIR)$(UTILS_DIR), $(UTILS_OBJECTS))

ROOT_DIR=../../

HDD_IMAGE=$(ROOT_DIR)hdd/hdd.img
HDD_COPY=./hdd.img

OBJ_DIR=$(ROOT_DIR)obj/

OBJECTS= ext2_test.o io_clash.o 

# Agrear acá los directorios a incluir en la compilación
INCDIR=$(ROOT_DIR)src/include/ ./

# Nombre del ejecutable a generar
EXECUTABLE=ext2_test

all: $(EXECUTABLE)

clean:
	rm -rf $(EXECUTABLE) $(OBJECTS)

$(EXECUTABLE): delirios $(OBJECTS) $(FS_FULL) $(UTILS_FULL)
	$(CC) $(LDFLAGS) $(OBJECTS) $(FS_FULL) $(UTILS_FULL) -o $@

delirios:
	cd $(ROOT_DIR); make debug	

io_clash.o: $(OBJ_DIR)syscall/io.o
	objcopy --redefine-syms=io_clash.sym $< $@	

.c.o:
	$(CC) $(INCDIR:%=-I%) $(CFLAGS) $< -c -o $@

$(HDD_IMAGE):
	cd $(ROOT_DIR); make hdd

hdd: $(HDD_IMAGE)
	cp -f $(HDD_IMAGE) $(HDD_COPY)

test: $(EXECUTABLE) hdd
	./test.sh $(EXECUTABLE)
