1# Makefile.arm -- with config changes. 2# Copyright 1990 W. Jolitz 3# Makefile for FreeBSD 4# 5# This makefile is constructed from a machine description: 6# config machineid 7# Most changes should be made in the machine description 8# /sys/arm/conf/``machineid'' 9# after which you should do 10# config machineid 11# Generic makefile changes should be made in 12# /sys/conf/Makefile.arm 13# after which config should be rerun for all machines. 14# 15 16# Which version of config(8) is required. 17%VERSREQ= 600013 18 19STD8X16FONT?= iso 20 21.if !defined(S) 22.if exists(./@/.) 23S= ./@ 24.else 25S= ../../.. 26.endif 27.endif 28.include "$S/conf/kern.pre.mk" 29 30INCLUDES+= -I$S/contrib/libfdt -I$S/contrib/device-tree/include -I$S/dts/include 31 32LINUX_DTS_VERSION!= awk '/freebsd,dts-version/ { sub(/;$$/,"", $$NF); print $$NF }' $S/dts/freebsd-compatible.dts 33CFLAGS += -DLINUX_DTS_VERSION=\"${LINUX_DTS_VERSION}\" 34 35.if !defined(DEBUG) 36STRIP_FLAGS = -S 37.endif 38 39# We don't support gcc's thump interwork stuff, so disable it 40CFLAGS.gcc += -mno-thumb-interwork 41 42# We generally don't want fpu instructions in the kernel. 43CFLAGS.clang += -mfpu=none 44 45.if !empty(DDB_ENABLED) 46CFLAGS += -funwind-tables 47.endif 48 49# "makeoptions KERNVIRTADDR=" is now optional, supply the default value. 50.if empty(KERNVIRTADDR) 51KERNVIRTADDR= 0xc0000000 52.endif 53 54# Use a custom SYSTEM_LD command to generate the elf kernel, so we can 55# set the text segment start address, and also strip the "arm mapping 56# symbols" which have names like $a.0 and $d.2; see the document 57# "ELF for the ARM architecture" for more info on the mapping symbols. 58SYSTEM_LD= \ 59 ${SYSTEM_LD_BASECMD} \ 60 --defsym='text_start=kernbase + SIZEOF_HEADERS' \ 61 -o ${.TARGET} ${SYSTEM_OBJS} vers.o; \ 62 $(OBJCOPY) \ 63 --wildcard \ 64 --strip-symbol='$$[adt]*' \ 65 ${.TARGET} 66 67# hack because genassym.c includes sys/bus.h which includes these. 68genassym.o: bus_if.h device_if.h 69 70%BEFORE_DEPEND 71 72%OBJS 73 74%FILES.c 75 76%FILES.s 77 78%FILES.m 79 80%CLEAN 81 82%RULES 83 84.include "$S/conf/kern.post.mk" 85 86# Generate the .bin (no elf headers) kernel 87# Copy the kernel to directly executable format (the elf headers are 88# stripped and a binary head blob with jump to kernel start address is 89# prepended), saving the output in a temp file. 90# We also strip arm "marker" symbols which are used only by elf toolchains. Read 91# the symbols from kernel.full and pass them to arm_kernel_boothdr.awk, which 92# generates a binary header blob that goes on the front of the stripped kernel. 93# Cat the header blob and the temp file together to make the kernel.bin file. 94${KERNEL_KO}.bin: ${FULLKERNEL} 95 @${OBJCOPY} --wildcard --strip-symbol='$$[adtx]*' \ 96 --output-target=binary ${FULLKERNEL} ${.TARGET}.temp 97 @{ ${NM} ${FULLKERNEL} | \ 98 LC_ALL=C \ 99 ${AWK} -f $S/tools/arm_kernel_boothdr.awk -v hdrtype=v7jump && \ 100 cat ${.TARGET}.temp; \ 101 } > ${.TARGET} 102 @rm ${.TARGET}.temp 103 @echo "created ${.TARGET} from ${.ALLSRC}" 104