Boot framework rework (#45)
[lunaix-os.git] / lunaix-os / kernel.mk
1 include toolchain.mkinc
2 include lunabuild.mkinc
3
4 include $(lbuild_mkinc)
5
6 kbin_dir := $(BUILD_DIR)
7 kbin := $(BUILD_NAME)
8
9 ksrc_objs := $(addsuffix .o,$(_LBUILD_SRCS))
10 ksrc_deps := $(addsuffix .d,$(_LBUILD_SRCS))
11 khdr_opts := $(addprefix -include ,$(_LBUILD_HDRS))
12 kinc_opts := $(addprefix -I,$(_LBUILD_INCS))
13 config_h += -include $(lbuild_config_h)
14
15 tmp_kbin  := $(BUILD_DIR)/tmpk.bin
16 klinking  := link/lunaix.ld
17
18 CFLAGS += $(khdr_opts) $(kinc_opts) $(config_h) -MMD -MP
19
20 -include $(ksrc_deps)
21
22 all_linkable = $(filter-out $(klinking),$(1))
23
24 %.S.o: %.S $(khdr_files) kernel.mk
25         $(call status_,AS,$<)
26         @$(CC) $(CFLAGS) -c $< -o $@
27
28 %.c.o: %.c kernel.mk
29         $(call status_,CC,$<)
30         @$(CC) $(CFLAGS) -c $< -o $@
31
32
33 $(klinking): link/lunaix.ldx
34         $(call status_,PP,$<)
35         @$(CC) $(CFLAGS) -x c -E -P $< -o $@
36
37
38 $(tmp_kbin): $(klinking) $(ksrc_objs)
39         $(call status_,LD,$@)
40
41         @$(CC) -T $(klinking) $(config_h) $(LDFLAGS) -o $@ \
42                         $(call all_linkable,$^)
43
44 ksymtable := lunaix_ksyms.o
45 ksecsmap  := lunaix_ksecsmap.o
46
47 kautogen  := $(ksecsmap) $(ksymtable)
48
49 $(ksymtable): $(tmp_kbin)
50         $(call status_,KSYM,$@)
51         @ARCH=$(ARCH) scripts/gen-ksymtable DdRrTtAGg $< > lunaix_ksymtable.S
52
53         @$(CC) $(CFLAGS) -c lunaix_ksymtable.S -o $@
54
55 $(ksecsmap): $(tmp_kbin)
56         $(call status_,KGEN,$@)
57         @scripts/elftool.tool -p -i $< > lunaix_ksecsmap.S
58
59         @$(CC) $(CFLAGS) -c lunaix_ksecsmap.S -o $@
60
61 .PHONY: __do_relink
62
63 __do_relink: $(klinking) $(ksrc_objs) $(kautogen)
64         $(call status_,LD,$(kbin))
65
66         @$(CC) -T $(klinking) $(config_h) $(LDFLAGS) -o $(kbin) \
67                         $(call all_linkable,$^)
68         
69         @rm $(tmp_kbin)
70
71
72 .PHONY: all
73 all: __do_relink
74
75
76 clean:
77         @rm -f $(ksrc_objs)
78         @rm -f $(ksrc_deps)
79         @rm -f $(klinking)
80         @rm -f lunaix_ksymtable.S $(ksymtable)