summaryrefslogtreecommitdiff
path: root/Kbuild
blob: 2cbad361a00174d4e06be09928a0a02211cf0076 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# vim: filetype=make

ifneq ($(strip $(CONFIG_MAX_NUM_TASK_IRQS)),)
ifneq (${CONFIG_MAX_NUM_TASK_IRQS},0)
TASK_IRQS=y
endif
endif

ifneq ("$(wildcard $(MDEF_FILE))","")
MDEF_FILE_PATH=$(strip $(MDEF_FILE))
else
ifneq ($(MDEF_FILE),)
MDEF_FILE_PATH=$(strip $(PROJECT_BASE)/$(MDEF_FILE))
endif
endif

define filechk_prj.mdef
	(echo "% WARNING. THIS FILE IS AUTO-GENERATED. DO NOT MODIFY!"; \
	echo; \
	echo "% CONFIG NUM_COMMAND_PACKETS NUM_TIMER_PACKETS NUM_TASK_PRIORITIES"; \
	echo "% ============================================================="; \
	echo "  CONFIG ${CONFIG_NUM_COMMAND_PACKETS}             ${CONFIG_NUM_TIMER_PACKETS}               ${CONFIG_NUM_TASK_PRIORITIES}"; \
	echo; \
	echo "% TASKGROUP NAME";\
	echo "% ==============";\
	echo "  TASKGROUP EXE";\
	echo "  TASKGROUP SYS";\
	echo "  TASKGROUP FPU";\
	echo "  TASKGROUP SSE";\
	echo; \
	if test "$(TASK_IRQS)" = "y"; then \
		echo "% Task IRQ objects";\
		echo "% EVENT    NAME              HANDLER"; \
		echo "% ======================================="; \
		i=0; \
		while [ $$i -lt $(CONFIG_MAX_NUM_TASK_IRQS) ]; do \
			echo "  EVENT    _TaskIrqEvt$$i     NULL"; \
		i=$$(($$i+1));\
		done; \
	fi; \
	if test -e "$(MDEF_FILE_PATH)"; then \
		cat $(MDEF_FILE_PATH); \
	fi;)
endef

misc/generated/sysgen/prj.mdef:	$(MDEF_FILE_PATH) \
				include/config/auto.conf FORCE
	$(call filechk,prj.mdef)

misc/generated/sysgen/kernel_main.c: misc/generated/sysgen/prj.mdef \
				     kernel/microkernel/include/micro_private_types.h \
				     kernel/microkernel/include/kernel_main.h
	$(Q)$(PYTHON) $(srctree)/scripts/sysgen \
			$(CURDIR)/misc/generated/sysgen/prj.mdef \
			$(CURDIR)/misc/generated/sysgen/

define filechk_configs.c
	(echo "/* file is auto-generated, do not modify ! */"; \
	echo; \
	echo "#include <toolchain.h>"; \
	echo; \
	echo "GEN_ABS_SYM_BEGIN (_ConfigAbsSyms)"; \
	echo; \
	cat $(CURDIR)/include/generated/autoconf.h | sed \
	's/".*"/1/' | awk  \
	'/#define/{printf "GEN_ABSOLUTE_SYM(%s, %s);\n", $$2, $$3}'; \
	echo; \
	echo "GEN_ABS_SYM_END";)
endef

misc/generated/configs.c: include/config/auto.conf FORCE
	$(call filechk,configs.c)

targets := misc/generated/configs.c
targets += include/generated/offsets.h


always := misc/generated/configs.c
always += include/generated/offsets.h

ifeq ($(CONFIG_MICROKERNEL),y)
targets += misc/generated/sysgen/kernel_main.c
always += misc/generated/sysgen/kernel_main.c
endif

define rule_cc_o_c_1
	$(call echo-cmd,cc_o_c_1) $(cmd_cc_o_c_1);
endef

OFFSETS_INCLUDE = $(strip \
		-include $(CURDIR)/include/generated/autoconf.h \
		-I $(srctree)/include \
		-I $(CURDIR)/include/generated \
		-I $(srctree)/kernel/microkernel/include \
		-I $(srctree)/kernel/nanokernel/include \
		-I $(srctree)/lib/libc/minimal/include \
		-I $(srctree)/arch/${ARCH}/include )

cmd_cc_o_c_1 = $(CC) $(KBUILD_CFLAGS) $(OFFSETS_INCLUDE) -c -o $@ $<

arch/$(ARCH)/core/offsets/offsets.o: arch/$(ARCH)/core/offsets/offsets.c $(KCONFIG_CONFIG)
	$(Q)mkdir -p $(dir $@)
	$(call if_changed,cc_o_c_1)


define offsetchk
	$(Q)set -e;                             \
	$(kecho) '  CHK     $@';                \
	mkdir -p $(dir $@);                     \
	$(GENOFFSET_H) -i $(1) -o $@.tmp;       \
	if [ -r $@ ] && cmp -s $@ $@.tmp; then  \
	rm -f $@.tmp;                           \
	else                                    \
	$(kecho) '  UPD     $@';                \
	mv -f $@.tmp $@;                        \
	fi
endef

include/generated/offsets.h: arch/$(ARCH)/core/offsets/offsets.o \
					include/config/auto.conf FORCE
	$(call offsetchk,arch/$(ARCH)/core/offsets/offsets.o)