41 lines
751 B
Makefile
41 lines
751 B
Makefile
CC ?= gcc
|
|
AR ?= ar
|
|
RANLIB ?= ranlib
|
|
CFLAGS ?= -Os -fno-builtin -ffreestanding -nostdinc
|
|
LDFLAGS ?= -nostdlib -static
|
|
|
|
-include config.mak
|
|
ARCH ?= x86_64
|
|
|
|
CFLAGS += -I. -I include
|
|
|
|
SRC_DIRS = src/string src/stdio src/stdlib src/internal
|
|
OBJ_DIR = obj
|
|
LIB_DIR = lib
|
|
|
|
SRCS := $(shell find $(SRC_DIRS) -name '*.c' 2>/dev/null)
|
|
OBJS := $(SRCS:%=$(OBJ_DIR)/%.o)
|
|
CRT_OBJ := crt/crt1.o
|
|
|
|
.PHONY: all clean distclean
|
|
|
|
all: $(LIB_DIR)/libc.a $(CRT_OBJ)
|
|
|
|
$(OBJ_DIR)/%.c.o: %.c
|
|
@mkdir -p $(dir $@)
|
|
$(CC) $(CFLAGS) -c -o $@ $<
|
|
|
|
$(LIB_DIR)/libc.a: $(OBJS)
|
|
@mkdir -p $(LIB_DIR)
|
|
$(AR) crs $@ $^
|
|
$(RANLIB) $@
|
|
|
|
crt/crt1.o: crt/crt1.c
|
|
$(CC) $(CFLAGS) -c -o $@ $<
|
|
|
|
clean:
|
|
rm -rf $(OBJ_DIR) $(LIB_DIR)
|
|
|
|
distclean: clean
|
|
rm -f config.mak
|