fix: false positive when looking for room to host pmem_list
[lunaix-os.git] / lunaix-os / usr / makefile
1 include utils.mkinc
2 include toolchain.mkinc
3 include lunabuild.mkinc
4
5 include $(lbuild_mkinc)
6
7 ifndef ARCH
8 $(error ARCH is not set)
9 endif
10
11 task := all
12
13 sys_include := $(CURDIR)/includes
14 build_dir := $(CURDIR)/build
15 libc_name := liblunac
16 libc_files := $(libc_name).a
17 libc := $(addprefix $(build_dir)/lib/,$(libc_files))
18
19 common_param := CC AR INCLUDES BUILD_DIR BUILD_NAME\
20                                 CFLAGS LDFLAGS ARCH LBUILD
21
22 INCLUDES := $(sys_include)
23 BUILD_DIR := $(build_dir)
24 BUILD_NAME := $(libc_name).a
25
26 mkapp-list := $(addprefix app-, $(shell cat apps.list))
27 mkexec-list := $(addprefix $(build_dir)/bin/, $(_LBUILD_SRCS))
28
29 uexec_ld := $(CURDIR)/uexec.ld
30
31 # Directory structure prerequisites
32 $(build_dir)/bin:
33         @mkdir -p $(build_dir)/bin
34
35 $(build_dir)/lib:
36         @mkdir -p $(build_dir)/lib
37
38 $(build_dir)/includes:
39         @mkdir -p $(build_dir)/includes
40
41 # LibC
42 export $(common_param)
43 $(build_dir)/$(libc_name).a: $(build_dir)/bin $(build_dir)/lib $(build_dir)/includes
44         $(call status,TASK,$(BUILD_NAME))
45         @$(MAKE) $(MKFLAGS) -C libc/ $(task)
46
47 $(uexec_ld): $(uexec_ld)x
48         @$(CC) -include $(lbuild_config_h) -x c -P -E $< -o $@
49
50 # Application (with standalone makefile)
51 export LD_SCRIPT := $(uexec_ld)
52 export LIBC := $(libc)
53 export $(common_param)
54 app-%: $(uexec_ld)
55         $(call status,TASK,$*)
56         @$(MAKE) $(MKFLAGS) -C $* $(task) BUILD_NAME="$*"
57
58 app: task := all
59 app: INCLUDES += $(build_dir)/includes
60 app: $(mkapp-list)
61
62
63 # Programs (single file)
64 exec_%.o: %.c
65         $(call status,CC,$<)
66         @$(CC) $(CFLAGS) $(addprefix -I,$(INCLUDES)) -c $< -o $@
67
68 $(build_dir)/bin/%: exec_%.o $(uexec_ld)
69         $(call status,LD,$(@F))
70         @$(CC) -T $(uexec_ld) -o $@ $< $(libc) $(LDFLAGS)
71
72 exec: task := all
73 exec: INCLUDES += $(build_dir)/includes
74 exec: $(mkexec-list)
75
76
77 # General recipes
78 clean: task := clean
79 clean: $(mkapp-list)
80         @rm -rf $(build_dir) $(lbuild_dir) $(uexec_ld)
81         @$(MAKE) $(MKFLAGS) -C libc/ $(task)
82
83 .NOTPARALLEL:
84 all: task := all
85 all: $(build_dir)/$(libc_name).a exec app