Introducing LunaBuild to the build flow (#36)
[lunaix-os.git] / lunaix-os / kernel.mk
1 include os.mkinc
2 include toolchain.mkinc
3
4 ksrc_files = $(shell cat .builder/sources.list)
5 kinc_dirs  = $(shell cat .builder/includes.list)
6 khdr_files = $(shell cat .builder/headers.list)
7 khdr_files += .builder/configs.h
8
9 kbin_dir := $(BUILD_DIR)
10 kbin := $(BUILD_NAME)
11
12 ksrc_objs := $(addsuffix .o,$(ksrc_files))
13 ksrc_deps := $(addsuffix .d,$(ksrc_files))
14 khdr_opts := $(addprefix -include ,$(khdr_files))
15 kinc_opts := $(addprefix -I,$(kinc_dirs))
16
17 tmp_kbin  := $(BUILD_DIR)/tmpk.bin
18 ksymtable := lunaix_ksyms.o
19
20 CFLAGS += $(khdr_opts)
21
22 -include $(ksrc_deps)
23
24 %.S.o: %.S $(khdr_files) kernel.mk
25         $(call status_,AS,$<)
26         @$(CC) $(CFLAGS) $(kinc_opts) -MMD -MP -c $< -o $@
27
28 %.c.o: %.c $(khdr_files) kernel.mk
29         $(call status_,CC,$<)
30         @$(CC) $(CFLAGS) $(kinc_opts) -MMD -MP -c $< -o $@
31
32 $(tmp_kbin): $(ksrc_objs)
33         $(call status_,LD,$@)
34         @$(CC) -T link/linker.ld $(LDFLAGS) -o $@ $^
35
36 $(ksymtable): $(tmp_kbin)
37         $(call status_,KSYM,$@)
38         @scripts/gen_ksymtable.sh DdRrTtAGg $< > .lunaix_ksymtable.S
39         @$(CC) $(CFLAGS) -c .lunaix_ksymtable.S -o $@
40
41 .PHONY: __do_relink
42 __do_relink: $(ksrc_objs) $(ksymtable)
43         $(call status_,LD,$(kbin))
44         @$(CC) -T link/linker.ld $(LDFLAGS) -o $(kbin) $^
45         @rm $(tmp_kbin)
46
47 .PHONY: all
48 all: __do_relink
49
50 clean:
51         @rm -f $(ksrc_objs)
52         @rm -f $(ksrc_deps)
53         @rm -f .lunaix_ksymtable.S $(ksymtable)