e49d7d05ee68ffb5ef40046a86fa8a35c7112511
[lunaix-os.git] / lunaix-os / usr / makefile
1 include utils.mkinc
2 include toolchain.mkinc
3
4 task := all
5
6 sys_include := $(CURDIR)/includes
7 build_dir := $(CURDIR)/build
8 libc_name := liblunac
9 libc_files := $(libc_name).a
10 libc := $(addprefix $(build_dir)/lib/,$(libc_files))
11 ldscript := $(CURDIR)/link-usr.ld
12
13 common_param := CC AR INCLUDES BUILD_DIR BUILD_NAME CFLAGS LDFLAGS
14
15 INCLUDES := $(sys_include)
16 BUILD_DIR := $(build_dir)
17 BUILD_NAME := $(libc_name).a
18
19 $(build_dir)/bin:
20         @mkdir -p $(build_dir)/bin
21
22 $(build_dir)/lib:
23         @mkdir -p $(build_dir)/lib
24
25 $(build_dir)/includes:
26         @mkdir -p $(build_dir)/includes
27
28 export $(common_param)
29 $(build_dir)/$(libc_name).a: $(build_dir)/bin $(build_dir)/lib $(build_dir)/includes
30         $(call status,TASK,$(BUILD_NAME))
31         @$(MAKE) $(MKFLAGS) -C libc/ $(task)
32
33 app-list = $(shell cat apps.list)
34 exec-list = $(shell cat execs.list)
35
36 mkapp-list := $(addprefix app-, $(app-list))
37 mkexec-list := $(addprefix $(build_dir)/bin/, $(exec-list))
38
39 export LD_SCRIPT := $(ldscript)
40 export LIBC := $(libc)
41 app-%:
42         $(call status,TASK,$*)
43         @$(MAKE) $(MKFLAGS) -C $* $(task) BUILD_NAME="$*"
44
45 exec_%.o: %.c
46         $(call status,CC,$<)
47         @$(CC) $(CFLAGS) $(addprefix -I,$(INCLUDES)) -c $< -o $@
48
49 $(build_dir)/bin/%: exec_%.o
50         $(call status,LD,$(@F))
51         @$(CC) -T $(ldscript) -o $@ $< $(libc) $(LDFLAGS)
52
53 app: task := all
54 app: INCLUDES += $(build_dir)/includes
55 app: $(mkapp-list)
56
57 exec: task := all
58 exec: INCLUDES += $(build_dir)/includes
59 exec: $(mkexec-list)
60
61 clean: task := clean
62 clean: $(mkapp-list)
63         @rm -rf $(build_dir)
64         @$(MAKE) $(MKFLAGS) -C libc/ $(task)
65
66 all: task := all
67 all: $(build_dir)/$(libc_name).a exec app