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