AS = as -64 # NEW PART AS += -g CC = gcc GIT = git ifeq ($(GIT),none) GIT_AVAILABLE = false else GIT_AVAILABLE = true endif CFLAGS = -std=c11 -Wall -Wextra -Wshadow -m64 -march=x86-64 -mno-mmx -mno-sse -mno-sse2 \ -fpic -fno-builtin -ffreestanding -fomit-frame-pointer -fno-stack-protector ## NEW PART CFLAGS += -ggdb3 -O0 -DEFI_DEBUG=1 CFLAGS += -DDEBUG INC_DIRS = -I../boot -I../system -I../lib -I../tests -I../app -Iapp SYS_OBJS = system/acpi.o \ system/cpuid.o \ system/cpuinfo.o \ system/cpulocal.o \ system/ehci.o \ system/font.o \ system/hwctrl.o \ system/heap.o \ system/hwquirks.o \ system/keyboard.o \ system/ohci.o \ system/pci.o \ system/pmem.o \ system/reloc.o \ system/screen.o \ system/serial.o \ system/smbios.o \ system/smbus.o \ system/smp.o \ system/temperature.o \ system/timers.o \ system/uhci.o \ system/usbhcd.o \ system/vmem.o \ system/xhci.o LIB_OBJS = lib/barrier.o \ lib/print.o \ lib/read.o \ lib/string.o \ lib/unistd.o TST_OBJS = tests/addr_walk1.o \ tests/bit_fade.o \ tests/block_move.o \ tests/modulo_n.o \ tests/mov_inv_fixed.o \ tests/mov_inv_random.o \ tests/mov_inv_walk1.o \ tests/own_addr.o \ tests/test_helper.o \ tests/tests.o APP_OBJS = app/badram.o \ app/config.o \ app/display.o \ app/error.o \ app/interrupt.o \ app/main.o OBJS = boot/startup.o boot/efisetup.o $(SYS_OBJS) $(LIB_OBJS) $(TST_OBJS) $(APP_OBJS) all: memtest.efi -include boot/efisetup.d -include $(subst .o,.d,$(SYS_OBJS)) -include $(subst .o,.d,$(LIB_OBJS)) -include $(subst .o,.d,$(TST_OBJS)) -include $(subst .o,.d,$(APP_OBJS)) boot/%.o: boot/%.s $(AS) $< -o $@ boot/startup.s: ../boot/startup64.S ../boot/boot.h @mkdir -p boot $(CC) -E -traditional -I../boot -o $@ $< boot/%.s: ../boot/%.S ../boot/boot.h @mkdir -p boot $(CC) -E -traditional -fPIC -I../boot -o $@ $< boot/efisetup.o: ../boot/efisetup.c @mkdir -p boot $(CC) -c $(CFLAGS) -Os $(INC_DIRS) -o $@ $< -MMD -MP -MT $@ -MF $(@:.o=.d) system/reloc.o: ../system/reloc64.c @mkdir -p system $(CC) -c $(CFLAGS) -fno-strict-aliasing -Os $(INC_DIRS) -o $@ $< -MMD -MP -MT $@ -MF $(@:.o=.d) system/%.o: ../system/%.c @mkdir -p system $(CC) -c $(CFLAGS) -Os $(INC_DIRS) -o $@ $< -MMD -MP -MT $@ -MF $(@:.o=.d) lib/%.o: ../lib/%.c @mkdir -p lib $(CC) -c $(CFLAGS) -Os $(INC_DIRS) -o $@ $< -MMD -MP -MT $@ -MF $(@:.o=.d) tests/%.o: ../tests/%.c @mkdir -p tests $(CC) -c $(CFLAGS) -O3 $(INC_DIRS) -o $@ $< -MMD -MP -MT $@ -MF $(@:.o=.d) app/%.o: ../app/%.c app/githash.h @mkdir -p app $(CC) -c $(CFLAGS) -Os $(INC_DIRS) -o $@ $< -MMD -MP -MT $@ -MF $(@:.o=.d) app/githash.h: FORCE @mkdir -p app @( \ if $(GIT_AVAILABLE) && test -d ../.git ; then \ hash=`git rev-parse HEAD | cut -c1-7`; \ else \ hash="unknown"; \ fi; \ define=`echo "#define GIT_HASH \"$$hash\""`; \ echo $$define | diff - $@ > /dev/null 2>&1 || echo $$define > $@; \ ) FORCE: # Link it statically once so I know I don't have undefined symbols and # then link it dynamically so I have full relocation information. memtest_shared: $(OBJS) ldscripts/memtest_shared.lds Makefile $(LD) --warn-constructors --warn-common -static -T ldscripts/memtest_shared.lds -o $@ $(OBJS) && \ $(LD) -shared -Bsymbolic -T ldscripts/memtest_shared.lds -o $@ $(OBJS) memtest_shared.bin: memtest_shared objcopy -O binary $< memtest_shared.bin memtest.efi: memtest_shared.bin boot/header.o boot/setup.o ldscripts/memtest_efi.lds $(eval SIZES=$(shell size -B -d memtest_shared | grep memtest_shared)) $(LD) --defsym=_bss_size=$(word 3,$(SIZES)) -T ldscripts/memtest_efi.lds boot/header.o boot/setup.o -b binary memtest_shared.bin -o memtest.efi clean: rm -rf boot system lib tests app *.img *.iso memtest* iso grub-*