76 lines
2.2 KiB
Makefile
76 lines
2.2 KiB
Makefile
LIBC_DIR := $(LUNA_ROOT)/libs/libc
|
|
LIBC_SRC := $(LIBC_DIR)/src
|
|
LIBC_OBJ := $(LIBC_DIR)/lib
|
|
LIBC_BIN := $(LIBC_DIR)/bin
|
|
|
|
LIBC_CC := x86_64-elf-gcc
|
|
LIBC_CXX := x86_64-elf-g++
|
|
LIBC_NASM := nasm
|
|
LIBC_AR := x86_64-elf-ar
|
|
|
|
LIBC_CFLAGS := -Wall -Wextra -Werror -Os -ffreestanding -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)
|
|
$(LIBC_CXX) $(LIBC_CFLAGS) $(LIBC_CXXFLAGS) -o $@ -c $^
|
|
|
|
$(LIBC_OBJ)/%.c.o: $(LIBC_SRC)/%.c
|
|
@mkdir -p $(@D)
|
|
$(LIBC_CC) $(LIBC_CFLAGS) -o $@ -c $^
|
|
|
|
$(LIBC_OBJ)/%.asm.o: $(LIBC_SRC)/%.asm
|
|
@mkdir -p $(@D)
|
|
$(LIBC_NASM) $(LIBC_NASMFLAGS) -o $@ $^
|
|
|
|
$(LIBC_BIN)/libc.a: $(LIBC_OBJS)
|
|
@mkdir -p $(@D)
|
|
$(LIBC_AR) rcs $@ $(LIBC_OBJS)
|
|
|
|
$(LIBC_BIN)/crt0.o: $(LIBC_DIR)/crt0.asm
|
|
@mkdir -p $(@D)
|
|
$(LIBC_NASM) $(LIBC_NASMFLAGS) -o $@ $^
|
|
|
|
$(LIBC_BIN)/crti.o: $(LIBC_DIR)/crti.asm
|
|
@mkdir -p $(@D)
|
|
$(LIBC_NASM) $(LIBC_NASMFLAGS) -o $@ $^
|
|
|
|
$(LIBC_BIN)/crtn.o: $(LIBC_DIR)/crtn.asm
|
|
@mkdir -p $(@D)
|
|
$(LIBC_NASM) $(LIBC_NASMFLAGS) -o $@ $^
|
|
|
|
libc-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 $^ $@
|
|
|
|
libc-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
|
|
|
|
libc-clean:
|
|
rm -rf $(LIBC_OBJ)/*
|
|
rm -rf $(LIBC_BIN)/*
|
|
rm -f $(LUNA_ROOT)/base/usr/lib/libc.a
|