# Compiler, Linker, and Assembler CC := gcc AR := ar AS := nasm PKG := PKG_CONFIG_PATH=lib/pkgconfig pkg-config WL_PROTO:=$(shell $(PKG) --variable=pkgdatadir wayland-protocols) WL_SCAN:=$(shell $(PKG) --variable=wayland_scanner wayland-scanner) # All needed build directories INC_DIR := include BIN_DIR := bin SYS_DIR := sys LIB_DIR := lib SRC_DIR := src 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 -Wno-microsoft-anon-tag STATIC := -nodefaultlibs -nostartfiles -nostdinc -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 "$(@:$(OBJ_DIR)/%=%);\ $(CC) -MD $(CFLAGS) $(TCFLAGS) $(INCS) $(TCINCS) -o $@ -c $< LINK = @echo "LD "$(@:$(OBJ_DIR)/%=%);\ $(CC) -MD $(CFLAGS) $(STATIC) $(TCFLAGS) -o $@ $(CINIT) $< $(CFINI) $(TCLIBS) $(ELIBS) COMPLINK = @echo "CC "$(@:$(OBJ_DIR)/%=%);\ $(CC) -MD $(CFLAGS) $(STATIC) $(TCFLAGS) $(INCS) $(TCINCS) -o $@ $(CINIT) $^ $(CFINI) $(TCLIBS) $(ELIBS) ASSEMBLE = @echo "AS "$(@:$(OBJ_DIR)/%=%);\ $(AS) $(AFLAGS) $(TCFLAGS) -o $@ $< ARCHIVE = @echo "AR "$(@:$(OBJ_DIR)/%=%);\ $(AR) crs $@ $^ include rules.mk