source: mainline/kernel/Makefile@ 32355bc

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 32355bc was 32355bc, checked in by Jiří Zárevúcky <zarevucky.jiri@…>, 6 years ago

Remove the generated common.h header

We haven't used it in some time, instead relying on the compiler
providing types with properties we want. Since we only support
building with GCC and Clang, extra detection code is just dead weight.

  • Property mode set to 100644
File size: 11.5 KB
Line 
1#
2# Copyright (c) 2005 Martin Decky
3# All rights reserved.
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions
7# are met:
8#
9# - Redistributions of source code must retain the above copyright
10# notice, this list of conditions and the following disclaimer.
11# - Redistributions in binary form must reproduce the above copyright
12# notice, this list of conditions and the following disclaimer in the
13# documentation and/or other materials provided with the distribution.
14# - The name of the author may not be used to endorse or promote products
15# derived from this software without specific prior written permission.
16#
17# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27#
28
29## Configuration
30#
31
32ROOT_PATH = ..
33
34VERSION_DEF = $(ROOT_PATH)/version
35
36COMMON_MAKEFILE = $(ROOT_PATH)/Makefile.common
37COMMON_HEADER_ARCH = arch/$(KARCH)/include/arch/common.h
38
39CONFIG_MAKEFILE = $(ROOT_PATH)/Makefile.config
40CONFIG_HEADER = $(ROOT_PATH)/config.h
41
42-include $(VERSION_DEF)
43-include $(COMMON_MAKEFILE)
44-include $(CONFIG_MAKEFILE)
45
46## Common names
47#
48
49AUTOCHECK = $(realpath $(ROOT_PATH)/tools/autocheck.awk)
50KERNEL = kernel.elf
51MAP = kernel.map
52JOB = kernel.job
53MAP_PREV = $(MAP).prev
54DISASM = kernel.disasm
55DUMP = kernel.dump
56REAL_MAP = generic/src/debug/real_map
57
58GENMAP = tools/genmap.py
59
60LINK = arch/$(KARCH)/_link.ld
61EMPTY_MAP = generic/src/debug/empty_map.o
62SIZEOK_MAP = generic/src/debug/sizeok_map.o
63
64ifeq ($(PRECHECK),y)
65 JOBFILE = $(ROOT_PATH)/tools/jobfile.py
66 # NOTE: You must not change the order of arguments.
67 CC_JOB = $(JOBFILE) $(JOB) $(CC) $< -o $@
68else
69 CC_JOB = $(CC) $< -o $@
70endif
71
72.PHONY: all clean autogen_clean depend
73.DELETE_ON_ERROR:
74
75all: $(VERSION_DEF) $(COMMON_MAKEFILE) $(CONFIG_MAKEFILE) $(CONFIG_HEADER) $(KERNEL) $(DISASM)
76
77clean: autogen_clean
78 rm -f $(KERNEL) $(MAP) $(JOB) $(MAP_PREV) $(DISASM) $(DUMP) $(REAL_MAP).* arch/*/_link.ld arch/*/include/arch/common.h
79 find generic/src/ arch/*/src/ genarch/src/ test/ -name '*.o' -follow -exec rm '{}' \;
80 find generic/src/ arch/*/src/ genarch/src/ test/ -name '*.d' -follow -exec rm '{}' \;
81
82## Common compiler flags
83#
84
85INCLUDES = generic/include genarch/include arch/$(KARCH)/include ../abi/arch/$(KARCH)/include ../abi/include
86INCLUDES_FLAGS = $(addprefix -I,$(INCLUDES))
87
88DEFS = -D_HELENOS_SOURCE -DKERNEL -DRELEASE=$(RELEASE) "-DCOPYRIGHT=$(COPYRIGHT)" "-DNAME=$(NAME)" -D__$(BITS)_BITS__ -D__$(ENDIANESS)__
89
90COMMON_CFLAGS = $(INCLUDES_FLAGS) -O$(OPTIMIZATION) -imacros $(CONFIG_HEADER) \
91 -ffreestanding -nostdlib \
92 -fexec-charset=UTF-8 -finput-charset=UTF-8 -fno-common \
93 -fdebug-prefix-map=$(realpath $(ROOT_PATH))=. \
94 -Wa,--fatal-warnings
95
96GCC_CFLAGS = -std=gnu11 -Wall -Wextra -Wno-unused-parameter \
97 -Wmissing-prototypes -Werror-implicit-function-declaration \
98 -Wwrite-strings -pipe -Wno-cast-function-type
99
100CLANG_CFLAGS = -std=gnu11 -Wall -Wextra -Wno-unused-parameter \
101 -Wno-missing-field-initializers -Wno-unused-command-line-argument \
102 -Wmissing-prototypes -Werror-implicit-function-declaration \
103 -Wwrite-strings -pipe -fno-stack-protector -fno-PIC \
104 -mllvm -asm-macro-max-nesting-depth=1000
105
106ifeq ($(CONFIG_DEBUG),y)
107 COMMON_CFLAGS += -Werror
108endif
109
110ifeq ($(CONFIG_UBSAN_KERNEL),y)
111 COMMON_CFLAGS += -fsanitize=undefined
112endif
113
114ifeq ($(CONFIG_LTO),y)
115 COMMON_CFLAGS += -flto
116endif
117
118ifeq ($(CONFIG_LINE_DEBUG),y)
119 COMMON_CFLAGS += -g
120endif
121
122LDFLAGS += -Wl,-n -T $(LINK) -Wl,-M,--fatal-warnings,--warn-common
123
124ifeq ($(CONFIG_STRIP_BINARIES),y)
125 LDFLAGS += -s
126endif
127
128-include arch/$(KARCH)/Makefile.inc
129-include genarch/Makefile.inc
130
131## The at-sign
132#
133# The $(ATSIGN) variable holds the ASCII character representing the at-sign
134# ('@') used in various $(AS) constructs (e.g. @progbits). On architectures that
135# don't use '@' for starting a comment, $(ATSIGN) is merely '@'. However, on
136# those that do use it for starting a comment (e.g. arm32), $(ATSIGN) must be
137# defined as the percentile-sign ('%') in the architecture-dependent
138# Makefile.inc.
139#
140
141ATSIGN ?= @
142
143## Cross-platform assembly to start a symtab.data section
144#
145
146SYMTAB_SECTION = .section symtab.data, \"a\", $(ATSIGN)progbits;
147
148## Compilation options
149#
150
151ifeq ($(COMPILER),clang)
152 CFLAGS = $(COMMON_CFLAGS) $(CLANG_CFLAGS)
153else
154 CFLAGS = $(COMMON_CFLAGS) $(GCC_CFLAGS)
155endif
156
157INSTRUMENTATION = -finstrument-functions
158
159## Generic kernel sources
160#
161
162GENERIC_SOURCES = \
163 generic/src/adt/bitmap.c \
164 generic/src/adt/hash_table.c \
165 generic/src/adt/list.c \
166 generic/src/adt/odict.c \
167 generic/src/console/chardev.c \
168 generic/src/console/console.c \
169 generic/src/console/prompt.c \
170 generic/src/cpu/cpu.c \
171 generic/src/cpu/cpu_mask.c \
172 generic/src/ddi/ddi.c \
173 generic/src/ddi/irq.c \
174 generic/src/debug/symtab.c \
175 generic/src/debug/stacktrace.c \
176 generic/src/debug/panic.c \
177 generic/src/debug/debug.c \
178 generic/src/interrupt/interrupt.c \
179 generic/src/log/log.c \
180 generic/src/main/main.c \
181 generic/src/main/kinit.c \
182 generic/src/main/uinit.c \
183 generic/src/main/version.c \
184 generic/src/main/shutdown.c \
185 generic/src/proc/current.c \
186 generic/src/proc/program.c \
187 generic/src/proc/scheduler.c \
188 generic/src/proc/thread.c \
189 generic/src/proc/task.c \
190 generic/src/syscall/syscall.c \
191 generic/src/syscall/copy.c \
192 generic/src/mm/km.c \
193 generic/src/mm/reserve.c \
194 generic/src/mm/frame.c \
195 generic/src/mm/page.c \
196 generic/src/mm/tlb.c \
197 generic/src/mm/as.c \
198 generic/src/mm/malloc.c \
199 generic/src/mm/backend_anon.c \
200 generic/src/mm/backend_elf.c \
201 generic/src/mm/backend_phys.c \
202 generic/src/mm/backend_user.c \
203 generic/src/mm/slab.c \
204 generic/src/lib/halt.c \
205 generic/src/lib/mem.c \
206 generic/src/lib/memfnc.c \
207 generic/src/lib/gsort.c \
208 generic/src/lib/str.c \
209 generic/src/lib/strtol.c \
210 generic/src/lib/str_error.c \
211 generic/src/lib/elf.c \
212 generic/src/lib/ra.c \
213 generic/src/lib/rd.c \
214 generic/src/lib/ubsan.c \
215 generic/src/printf/printf_core.c \
216 generic/src/printf/printf.c \
217 generic/src/printf/snprintf.c \
218 generic/src/printf/vprintf.c \
219 generic/src/printf/vsnprintf.c \
220 generic/src/time/clock.c \
221 generic/src/time/timeout.c \
222 generic/src/time/delay.c \
223 generic/src/preempt/preemption.c \
224 generic/src/synch/spinlock.c \
225 generic/src/synch/condvar.c \
226 generic/src/synch/mutex.c \
227 generic/src/synch/semaphore.c \
228 generic/src/synch/smc.c \
229 generic/src/synch/waitq.c \
230 generic/src/synch/syswaitq.c \
231 generic/src/smp/ipi.c \
232 generic/src/smp/smp.c \
233 generic/src/ipc/ipc.c \
234 generic/src/ipc/sysipc.c \
235 generic/src/ipc/sysipc_ops.c \
236 generic/src/ipc/ops/conctmeto.c \
237 generic/src/ipc/ops/concttome.c \
238 generic/src/ipc/ops/dataread.c \
239 generic/src/ipc/ops/datawrite.c \
240 generic/src/ipc/ops/debug.c \
241 generic/src/ipc/ops/pagein.c \
242 generic/src/ipc/ops/sharein.c \
243 generic/src/ipc/ops/shareout.c \
244 generic/src/ipc/ops/stchngath.c \
245 generic/src/ipc/ipcrsc.c \
246 generic/src/ipc/irq.c \
247 generic/src/ipc/event.c \
248 generic/src/cap/cap.c \
249 generic/src/security/perm.c \
250 generic/src/sysinfo/sysinfo.c \
251 generic/src/sysinfo/stats.c
252
253## Kernel console support
254#
255
256ifeq ($(CONFIG_KCONSOLE),y)
257GENERIC_SOURCES += \
258 generic/src/console/kconsole.c \
259 generic/src/console/cmd.c
260endif
261
262## Udebug interface sources
263#
264
265ifeq ($(CONFIG_UDEBUG),y)
266GENERIC_SOURCES += \
267 generic/src/ipc/kbox.c \
268 generic/src/udebug/udebug.c \
269 generic/src/udebug/udebug_ops.c \
270 generic/src/udebug/udebug_ipc.c
271endif
272
273## Test sources
274#
275
276ifeq ($(CONFIG_TEST),y)
277 CFLAGS += -Itest/
278 GENERIC_SOURCES += \
279 test/test.c \
280 test/atomic/atomic1.c \
281 test/fault/fault1.c \
282 test/mm/falloc1.c \
283 test/mm/falloc2.c \
284 test/mm/mapping1.c \
285 test/mm/slab1.c \
286 test/mm/slab2.c \
287 test/synch/semaphore1.c \
288 test/synch/semaphore2.c \
289 test/print/print1.c \
290 test/print/print2.c \
291 test/print/print3.c \
292 test/print/print4.c \
293 test/print/print5.c \
294 test/thread/thread1.c
295
296 ifeq ($(KARCH),mips32)
297 GENERIC_SOURCES += test/debug/mips1.c
298 else
299 GENERIC_SOURCES += test/debug/mips1_skip.c
300 endif
301
302 ifeq ($(KARCH),ia64)
303 GENERIC_SOURCES += test/mm/purge1.c
304 else
305 GENERIC_SOURCES += test/mm/purge1_skip.c
306 endif
307
308endif
309
310## Sources where instrumentation is enabled
311#
312
313ifeq ($(CONFIG_TRACE),y)
314 INSTRUMENTED_SOURCES = \
315 generic/src/cpu/cpu.c \
316 generic/src/ddi/ddi.c \
317 generic/src/interrupt/interrupt.c \
318 generic/src/main/main.c \
319 generic/src/main/kinit.c \
320 generic/src/proc/the.c \
321 generic/src/mm/frame.c \
322 generic/src/mm/page.c \
323 generic/src/mm/tlb.c \
324 generic/src/mm/as.c \
325 generic/src/mm/slab.c \
326 generic/src/sysinfo/sysinfo.c \
327 generic/src/console/kconsole.c
328else
329 INSTRUMENTED_SOURCES =
330endif
331
332ARCH_SOURCES += $(ARCH_AUTOCHECK_HEADERS:%.h=%.check.c)
333GENARCH_SOURCES += $(GENARCH_AUTOCHECK_HEADERS:%.h=%.check.c)
334
335GENERIC_OBJECTS := $(addsuffix .o,$(basename $(GENERIC_SOURCES)))
336ARCH_OBJECTS := $(addsuffix .o,$(basename $(ARCH_SOURCES)))
337GENARCH_OBJECTS := $(addsuffix .o,$(basename $(GENARCH_SOURCES)))
338
339GENERIC_DEPENDS := $(addsuffix .d,$(basename $(GENERIC_SOURCES)))
340ARCH_DEPENDS := $(addsuffix .d,$(basename $(ARCH_SOURCES)))
341GENARCH_DEPENDS := $(addsuffix .d,$(basename $(GENARCH_SOURCES)))
342
343-include $(GENERIC_DEPENDS)
344-include $(ARCH_DEPENDS)
345-include $(GENARCH_DEPENDS)
346
347ifeq ($(CONFIG_SYMTAB),y)
348 SYMTAB_OBJECTS := generic/src/debug/real_map.o
349else
350 SYMTAB_OBJECTS :=
351endif
352
353$(DISASM): $(KERNEL)
354ifeq ($(CONFIG_LINE_DEBUG),y)
355 $(OBJDUMP) -d -S $< > $@
356else
357 $(OBJDUMP) -d $< > $@
358endif
359
360$(KERNEL): $(LINK) $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) $(SYMTAB_OBJECTS)
361 $(CC) $(DEFS) $(CFLAGS) $(LDFLAGS) -Wl,-Map,$(MAP) -o $@ $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) $(EXTRA_OBJECTS) $(SYMTAB_OBJECTS)
362
363$(LINK): $(LINK).in
364 $(CC) $(DEFS) $(CFLAGS) -D__ASSEMBLER__ -D__LINKER__ -E -x c $< | grep -v "^\#" > $@
365
366%.check.c: %.h $(AUTOCHECK)
367 cd $(<D) && $(AUTOCHECK) $(<F) > $(@F)
368
369%.o: %.S
370 $(CC_JOB) -c -MD -MP $(DEFS) $(CFLAGS)
371
372%.o: %.s
373 $(CC_JOB) -c -MD -MP $(DEFS) $(CFLAGS)
374
375%.o: %.c
376 $(CC_JOB) -c -MD -MP $(DEFS) $(CFLAGS) $(EXTRA_FLAGS) $(FPU_NO_CFLAGS) $(if $(findstring $<,$(INSTRUMENTED_SOURCES)),$(INSTRUMENTATION))
377
378$(REAL_MAP).o: $(REAL_MAP).bin
379 echo "$(AS_PROLOG)""$(SYMTAB_SECTION)"" .incbin \"$<\"" | $(CC) $(CFLAGS) -x assembler -c -o $@ -
380
381$(REAL_MAP).bin: $(LINK) $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS)
382 echo "$(AS_PROLOG)""$(SYMTAB_SECTION)" | $(CC) $(CFLAGS) -x assembler -c -o $(EMPTY_MAP) -
383 $(CC) $(DEFS) $(CFLAGS) $(LDFLAGS) -Wl,-Map,$(MAP_PREV) -o $@ $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) $(EXTRA_OBJECTS) $(EMPTY_MAP)
384 $(OBJDUMP) -t $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) > $(DUMP)
385 $(GENMAP) $(MAP_PREV) $(DUMP) $@
386
387 # Do it once again, this time to get correct even the symbols
388 # on architectures that have bss after symtab
389
390 echo "$(AS_PROLOG)""$(SYMTAB_SECTION)"" .incbin \"$@\"" | $(CC) $(CFLAGS) -x assembler -c -o $(SIZEOK_MAP) -
391 $(CC) $(DEFS) $(CFLAGS) $(LDFLAGS) -Wl,-Map,$(MAP_PREV) -o $@ $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) $(EXTRA_OBJECTS) $(SIZEOK_MAP)
392 $(OBJDUMP) -t $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) > $(DUMP)
393 $(GENMAP) $(MAP_PREV) $(DUMP) $@
Note: See TracBrowser for help on using the repository browser.