# Compiler, Linker, and Assembler CC := gcc AR := ar AS := nasm # All needed build directories INC_DIR := include SRC_DIR := sys BIN_DIR := bin LIB_DIR := lib OBJ_DIR := build TST_DIR := test # C runtime library CINIT := $(LIB_DIR)/crt/crt1.o $(LIB_DIR)/crt/x86_64/crti.o `gcc --print-file-name=crtbeginS.o` CFINI := `gcc --print-file-name=crtendS.o` $(LIB_DIR)/crt/x86_64/crtn.o # Flags, Libraries and Includes CFLAGS := -g -march=native -fno-strict-aliasing -fwrapv -fms-extensions STATIC := -nodefaultlibs -nostartfiles -static AFLAGS := -f elf64 INCS := -I $(INC_DIR) -isystem $(INC_DIR)/vendor/libc ELIBS := -L$(LIB_DIR) -lc # Named generic rules (must be evaluated lazily) COMPILE = @echo "CC "$@;\ $(CC) -MD $(CFLAGS) $(TCFLAGS) $(INCS) $(TCINCS) -o $@ -c $< LINK = @echo "LD "$@;\ $(CC) -MD $(CFLAGS) $(STATIC) $(TCFLAGS) -o $@ $(CINIT) $< $(CFINI) $(TCLIBS) $(ELIBS) COMPLINK = @echo "CC "$@;\ $(CC) -MD $(CFLAGS) $(STATIC) $(TCFLAGS) $(INCS) $(TCINCS) -o $@ $(CINIT) $^ $(CFINI) $(TCLIBS) $(ELIBS) ASSEMBLE = @echo "AS "$@;\ $(AS) $(AFLAGS) $(TCFLAGS) -o $@ $< ARCHIVE = @echo "AR "$@;\ $(AR) crs $@ $^ include rules.mk