LIBC_DIR := $(LUNA_ROOT)/libs/libc LIBC_SRC := $(LIBC_DIR)/src LIBC_OBJ := $(LIBC_DIR)/lib LIBC_BIN := $(LIBC_DIR)/bin CC := x86_64-luna-gcc CXX := x86_64-luna-g++ ASM := nasm AR := x86_64-luna-ar LD := x86_64-luna-ld LIBC_CFLAGS := -Wall -Wextra -Werror -Os -nostdlib -fno-omit-frame-pointer -mno-mmx -mno-sse -mno-sse2 -I$(LIBC_DIR)/include -isystem $(LIBC_DIR)/include LIBC_CXXFLAGS := -fno-rtti -fno-exceptions LIBC_NASMFLAGS := -felf64 rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d)) LIBC_CXX_SRC = $(call rwildcard,$(LIBC_SRC),*.cpp) LIBC_C_SRC = $(call rwildcard,$(LIBC_SRC),*.c) LIBC_NASM_SRC = $(call rwildcard,$(LIBC_SRC),*.asm) LIBC_OBJS = $(patsubst $(LIBC_SRC)/%.cpp, $(LIBC_OBJ)/%.cpp.o, $(LIBC_CXX_SRC)) LIBC_OBJS += $(patsubst $(LIBC_SRC)/%.c, $(LIBC_OBJ)/%.c.o, $(LIBC_C_SRC)) LIBC_OBJS += $(patsubst $(LIBC_SRC)/%.asm, $(LIBC_OBJ)/%.asm.o, $(LIBC_NASM_SRC)) $(LIBC_OBJ)/%.cpp.o: $(LIBC_SRC)/%.cpp @mkdir -p $(@D) $(CXX) $(LIBC_CFLAGS) $(LIBC_CXXFLAGS) -o $@ -c $^ $(LIBC_OBJ)/%.c.o: $(LIBC_SRC)/%.c @mkdir -p $(@D) $(CC) $(LIBC_CFLAGS) -o $@ -c $^ $(LIBC_OBJ)/%.asm.o: $(LIBC_SRC)/%.asm @mkdir -p $(@D) $(ASM) $(LIBC_NASMFLAGS) -o $@ $^ $(LIBC_BIN)/libc.a: $(LIBC_OBJS) @mkdir -p $(@D) $(AR) rcs $@ $(LIBC_OBJS) $(LIBC_BIN)/crt0.o: $(LIBC_DIR)/crt0.asm @mkdir -p $(@D) $(ASM) $(LIBC_NASMFLAGS) -o $@ $^ $(LIBC_BIN)/crti.o: $(LIBC_DIR)/crti.asm @mkdir -p $(@D) $(ASM) $(LIBC_NASMFLAGS) -o $@ $^ $(LIBC_BIN)/crtn.o: $(LIBC_DIR)/crtn.asm @mkdir -p $(@D) $(ASM) $(LIBC_NASMFLAGS) -o $@ $^ build: $(LIBC_BIN)/crt0.o $(LIBC_BIN)/crti.o $(LIBC_BIN)/crtn.o $(LIBC_BIN)/libc.a $(LUNA_ROOT)/base/usr/lib/libc.a: $(LIBC_BIN)/libc.a @mkdir -p $(@D) cp $^ $@ $(LUNA_ROOT)/base/usr/lib/crt0.o: $(LIBC_BIN)/crt0.o @mkdir -p $(@D) cp $^ $@ $(LUNA_ROOT)/base/usr/lib/crti.o: $(LIBC_BIN)/crti.o @mkdir -p $(@D) cp $^ $@ $(LUNA_ROOT)/base/usr/lib/crtn.o: $(LIBC_BIN)/crtn.o @mkdir -p $(@D) cp $^ $@ install: $(LUNA_ROOT)/base/usr/lib/libc.a $(LUNA_ROOT)/base/usr/lib/crt0.o $(LUNA_ROOT)/base/usr/lib/crti.o $(LUNA_ROOT)/base/usr/lib/crtn.o clean: rm -rf $(LIBC_OBJ)/* rm -rf $(LIBC_BIN)/* rm -f $(LUNA_ROOT)/base/usr/lib/libc.a rm -f $(LUNA_ROOT)/base/usr/lib/crt*.o