2 include toolchain.mkinc
4 include lunabuild.mkinc
6 include $(lbuild_mkinc)
9 $(error ARCH is not set)
12 CFLAGS += $(BUILD_CFLAGS)
13 LDFLAGS += $(BUILD_LDFLAGS)
17 sys_include := $(CURDIR)/includes
18 build_dir := $(CURDIR)/build
20 libc_files := $(libc_name).a
21 libc := $(addprefix $(build_dir)/lib/,$(libc_files))
23 common_param := CC AR INCLUDES BUILD_DIR BUILD_NAME\
24 CFLAGS LDFLAGS ARCH LBUILD LIBC_INCLUDE
26 INCLUDES := $(sys_include)
27 BUILD_DIR := $(build_dir)
28 BUILD_NAME := $(libc_name).a
30 LIBC_INCLUDE := $(build_dir)/usr/includes
32 mkapp-list := $(addprefix app-, $(shell cat apps.list))
33 mkexec-list := $(addprefix $(build_dir)/bin/, $(BUILD_SRCS))
35 uexec_ld := $(CURDIR)/uexec.ld
37 # Directory structure prerequisites
39 @mkdir -p $(build_dir)/bin
42 @mkdir -p $(build_dir)/lib
45 @mkdir -p $(LIBC_INCLUDE)
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)
54 $(uexec_ld): $(uexec_ld)x
55 @$(CC) $(CFLAGS) -x c -P -E $< -o $@
57 # Application (with standalone makefile)
58 export LD_SCRIPT := $(uexec_ld)
59 export LIBC := $(libc)
60 export $(common_param)
62 $(call status,TASK,$*)
63 @$(MAKE) $(MKFLAGS) -C $* $(task) BUILD_NAME="$*"
66 app: INCLUDES += $(LIBC_INCLUDE)
70 # Programs (single file)
73 @$(CC) $(CFLAGS) $(addprefix -I,$(INCLUDES)) -c $< -o $@
75 $(build_dir)/bin/%: exec_%.o $(uexec_ld)
76 $(call status,LD,$(@F))
77 @$(CC) -T $(uexec_ld) -o $@ $< $(libc) $(LDFLAGS)
80 exec: INCLUDES += $(LIBC_INCLUDE)
87 @rm -rf $(build_dir) $(lbuild_dir) $(uexec_ld)
88 @$(MAKE) $(MKFLAGS) -C libc/ $(task)
92 all: $(build_dir)/$(libc_name).a exec app