2 include toolchain.mkinc
4 LCONFIG_FLAGS := --quiet
6 include lunabuild.mkinc
8 include $(lbuild_mkinc)
11 $(error ARCH is not set)
16 sys_include := $(CURDIR)/includes
17 build_dir := $(CURDIR)/build
19 libc_files := $(libc_name).a
20 libc := $(addprefix $(build_dir)/lib/,$(libc_files))
22 common_param := CC AR INCLUDES BUILD_DIR BUILD_NAME\
23 CFLAGS LDFLAGS ARCH LBUILD
25 INCLUDES := $(sys_include)
26 BUILD_DIR := $(build_dir)
27 BUILD_NAME := $(libc_name).a
29 mkapp-list := $(addprefix app-, $(shell cat apps.list))
30 mkexec-list := $(addprefix $(build_dir)/bin/, $(_LBUILD_SRCS))
32 uexec_ld := $(CURDIR)/uexec.ld
34 # Directory structure prerequisites
36 @mkdir -p $(build_dir)/bin
39 @mkdir -p $(build_dir)/lib
41 $(build_dir)/includes:
42 @mkdir -p $(build_dir)/includes
45 export $(common_param)
46 $(build_dir)/$(libc_name).a: $(build_dir)/bin $(build_dir)/lib $(build_dir)/includes
47 $(call status,TASK,$(BUILD_NAME))
48 @$(MAKE) $(MKFLAGS) -C libc/ $(task)
50 $(uexec_ld): $(uexec_ld)x
51 @$(CC) -include $(lbuild_config_h) -x c -P -E $< -o $@
53 # Application (with standalone makefile)
54 export LD_SCRIPT := $(uexec_ld)
55 export LIBC := $(libc)
56 export $(common_param)
58 $(call status,TASK,$*)
59 @$(MAKE) $(MKFLAGS) -C $* $(task) BUILD_NAME="$*"
62 app: INCLUDES += $(build_dir)/includes
66 # Programs (single file)
69 @$(CC) $(CFLAGS) $(addprefix -I,$(INCLUDES)) -c $< -o $@
71 $(build_dir)/bin/%: exec_%.o $(uexec_ld)
72 $(call status,LD,$(@F))
73 @$(CC) -T $(uexec_ld) -o $@ $< $(libc) $(LDFLAGS)
76 exec: INCLUDES += $(build_dir)/includes
83 @rm -rf $(build_dir) $(lbuild_dir) $(uexec_ld)
84 @$(MAKE) $(MKFLAGS) -C libc/ $(task)
88 all: $(build_dir)/$(libc_name).a exec app