2 include toolchain.mkinc
6 # TODO make this use LBuild
7 CFLAGS += -m32 -ffreestanding -fno-pie
8 LDFLAGS += -m32 -nostdlib -nolibc -z noexecstack -no-pie -Wl,--build-id=none
10 sys_include := $(CURDIR)/includes
11 build_dir := $(CURDIR)/build
13 libc_files := $(libc_name).a
14 libc := $(addprefix $(build_dir)/lib/,$(libc_files))
15 ldscript := $(CURDIR)/link-usr.ld
17 common_param := CC AR INCLUDES BUILD_DIR BUILD_NAME CFLAGS LDFLAGS
19 INCLUDES := $(sys_include)
20 BUILD_DIR := $(build_dir)
21 BUILD_NAME := $(libc_name).a
24 @mkdir -p $(build_dir)/bin
27 @mkdir -p $(build_dir)/lib
29 $(build_dir)/includes:
30 @mkdir -p $(build_dir)/includes
32 export $(common_param)
33 $(build_dir)/$(libc_name).a: $(build_dir)/bin $(build_dir)/lib $(build_dir)/includes
34 $(call status,TASK,$(BUILD_NAME))
35 @$(MAKE) $(MKFLAGS) -C libc/ $(task)
37 app-list = $(shell cat apps.list)
38 exec-list = $(shell cat execs.list)
40 mkapp-list := $(addprefix app-, $(app-list))
41 mkexec-list := $(addprefix $(build_dir)/bin/, $(exec-list))
43 export LD_SCRIPT := $(ldscript)
44 export LIBC := $(libc)
46 $(call status,TASK,$*)
47 @$(MAKE) $(MKFLAGS) -C $* $(task) BUILD_NAME="$*"
51 @$(CC) $(CFLAGS) $(addprefix -I,$(INCLUDES)) -c $< -o $@
53 $(build_dir)/bin/%: exec_%.o
54 $(call status,LD,$(@F))
55 @$(CC) -T $(ldscript) -o $@ $< $(libc) $(LDFLAGS)
58 app: INCLUDES += $(build_dir)/includes
62 exec: INCLUDES += $(build_dir)/includes
68 @$(MAKE) $(MKFLAGS) -C libc/ $(task)
71 all: $(build_dir)/$(libc_name).a exec app