O=0 CC=gcc-4.6 OBJCOPY=objcopy LDS=vm64K.lds # set optimization level CFLAGS := -O${O} # i386-gcc pass -g so we do too ;-) #CFLAGS := -g # set lang standard to c99 CFLAGS += -std=c99 # turn on all warnings CFLAGS += -Wall # force 32 bit code and address generation CFLAGS += -m32 # strip extraneous info from binary explicity ensure no comment section is # generated #CFLAGS += -s # ensure no startup files are included CFLAGS += -nostartfiles # avoid generating exception frame (.eh_frame) support CFLAGS += -fno-asynchronous-unwind-tables # use a freestanding environment eg no standard libs no start (may want to remove this) CFLAGS += -ffreestanding # ensure that we only statically link things CFLAGS += --static # use custom vm linker script CFLAGS += -T ${LDS} # remove identity generation from the binary CFLAGS += -Wl,--build-id=none CFLAGS += -Wl,-M .PHONY: all all: initialrawsv.bin foo.o: foo.c $(CC) $(CFLAGS) -c foo.c main.o: main.c $(CC) $(CFLAGS) -c main.c initialrawsv.elf: ${LDS} crt0.S main.o foo.o $(CC) ${CFLAGS} -o initialrawsv.elf crt0.S main.o foo.o > initialrawsv.map initialrawsv.bin: initialrawsv.elf $(OBJCOPY) -S initialrawsv.elf --output-target=binary initialrawsv.bin clean: rm *.elf *.o *.bin *.map