3d976cb7a0685a92605e0969cb917c3fd438e70a
[lunaix-os.git] / lunaix-os / usr / libc / makefile
1 libc_include := $(CURDIR)/includes
2
3 ARCH ?= i386
4 BUILD_DIR ?= bin
5 BUILD_NAME ?= liblunac
6
7 src_dirs := src
8 src_dirs += arch/$(ARCH)
9
10 src_files := $(foreach f, $(src_dirs), $(shell find $(f) -name "*.[cS]"))
11 obj_files := $(addsuffix .o, $(src_files))
12
13 build_lib := $(BUILD_DIR)/lib
14 build_include := $(BUILD_DIR)/includes
15
16 libc_include_opt = $(addprefix -I, $(libc_include))
17 global_include_opt = $(addprefix -I, $(INCLUDES))
18
19 check_folders := $(src_dirs)
20 check_folders += $(build_lib) $(build_include)
21
22 $(BUILD_DIR):
23         @mkdir -p bin
24
25 %.check:
26         @if [ ! -d "$*" ]; then \
27                 echo "'$*' is not exists" && exit 1;\
28         fi
29
30 %.c.o: %.c
31         @$(call status_,CC,$@)
32         @$(CC) $(CFLAGS) $(libc_include_opt) $(global_include_opt) -c $< -o $@
33
34 %.S.o: %.S
35         @$(call status_,CC,$@)
36         @$(CC) $(libc_include_opt) $(global_include_opt) -c $< -o $@
37
38 $(build_lib)/$(BUILD_NAME): $(obj_files)
39         @$(call status_,AR,$(*F))
40         @$(AR) rcs $@ $^
41
42 clean:
43         @rm -f $(obj_files)
44
45 headers: $(libc_include)
46         @$(call status_,INSTALL,$(<F))
47         @cp -r $(libc_include)/* $(build_include)/
48
49 all: $(addsuffix .check, $(check_folders)) $(build_lib)/$(BUILD_NAME) headers
50         @cp arch/$(ARCH)/crt0.S.o $(build_lib)/crt0.o