0b972ac92e
Make armv7 as a new MACHINE_ARCH. Copy all the places we do armv6 and add armv7 as basically an alias. clang appears to generate code for armv7 by default. armv7 hard float isn't supported by the the in-tree gcc, so it hasn't been updated to have a new default. Support armv7 as a new valid MACHINE_ARCH (and by extension TARGET_ARCH). Add armv7 to the universe build. Differential Revision: https://reviews.freebsd.org/D12010
171 lines
5.1 KiB
Makefile
171 lines
5.1 KiB
Makefile
# Makefile.arm -- with config changes.
|
|
# Copyright 1990 W. Jolitz
|
|
# from: @(#)Makefile.i386 7.1 5/10/91
|
|
# $FreeBSD$
|
|
#
|
|
# Makefile for FreeBSD
|
|
#
|
|
# This makefile is constructed from a machine description:
|
|
# config machineid
|
|
# Most changes should be made in the machine description
|
|
# /sys/arm/conf/``machineid''
|
|
# after which you should do
|
|
# config machineid
|
|
# Generic makefile changes should be made in
|
|
# /sys/conf/Makefile.arm
|
|
# after which config should be rerun for all machines.
|
|
#
|
|
|
|
# Which version of config(8) is required.
|
|
%VERSREQ= 600013
|
|
|
|
STD8X16FONT?= iso
|
|
|
|
.if !defined(S)
|
|
.if exists(./@/.)
|
|
S= ./@
|
|
.else
|
|
S= ../../..
|
|
.endif
|
|
.endif
|
|
.include "$S/conf/kern.pre.mk"
|
|
|
|
INCLUDES+= -I$S/contrib/libfdt -I$S/gnu/dts/include
|
|
|
|
SYSTEM_LD:= ${SYSTEM_LD:$S/conf/ldscript.$M=ldscript.$M}
|
|
SYSTEM_DEP:= ${SYSTEM_DEP:$S/conf/ldscript.$M=ldscript.$M}
|
|
|
|
.if !defined(DEBUG) && !defined(PROFLEVEL)
|
|
STRIP_FLAGS = -S
|
|
.endif
|
|
|
|
# We don't support gcc's thump interwork stuff, so disable it
|
|
CFLAGS.gcc += -mno-thumb-interwork
|
|
|
|
# We generally don't want fpu instructions in the kernel.
|
|
CFLAGS.clang += -mfpu=none
|
|
|
|
.if !empty(DDB_ENABLED)
|
|
CFLAGS += -funwind-tables
|
|
.if ${COMPILER_TYPE} == "clang" && ${COMPILER_VERSION} < 30500
|
|
# clang < 3.5.0 requires us to tell it to emit assembly with unwind information
|
|
CFLAGS += -mllvm -arm-enable-ehabi
|
|
.endif
|
|
.endif
|
|
|
|
# hack because genassym.c includes sys/bus.h which includes these.
|
|
genassym.o: bus_if.h device_if.h
|
|
|
|
SYSTEM_LD_ = ${LD} -m ${LD_EMULATION} -Bdynamic -T ldscript.$M.noheader \
|
|
${_LDFLAGS} --no-warn-mismatch --warn-common --export-dynamic \
|
|
--dynamic-linker /red/herring \
|
|
-o ${FULLKERNEL}.noheader -X ${SYSTEM_OBJS} vers.o
|
|
SYSTEM_LD_TAIL +=;sed s/" + SIZEOF_HEADERS"// ldscript.$M\
|
|
>ldscript.$M.noheader; \
|
|
${SYSTEM_LD_}; \
|
|
${OBJCOPY} -S -O binary ${FULLKERNEL}.noheader \
|
|
${KERNEL_KO}.bin; \
|
|
rm ${FULLKERNEL}.noheader
|
|
|
|
FILES_CPU_FUNC = \
|
|
$S/$M/$M/cpufunc_asm_arm9.S \
|
|
$S/$M/$M/cpufunc_asm_xscale.S $S/$M/$M/cpufunc_asm.S \
|
|
$S/$M/$M/cpufunc_asm_xscale_c3.S $S/$M/$M/cpufunc_asm_armv5_ec.S \
|
|
$S/$M/$M/cpufunc_asm_fa526.S $S/$M/$M/cpufunc_asm_sheeva.S \
|
|
$S/$M/$M/cpufunc_asm_pj4b.S $S/$M/$M/cpufunc_asm_armv6.S \
|
|
$S/$M/$M/cpufunc_asm_armv7.S
|
|
|
|
.if ${MACHINE_ARCH:Marmv[67]*} == "" && defined(KERNPHYSADDR)
|
|
KERNEL_EXTRA=trampoline
|
|
KERNEL_EXTRA_INSTALL=kernel.gz.tramp
|
|
trampoline: ${KERNEL_KO}.tramp
|
|
${KERNEL_KO}.tramp: ${KERNEL_KO} $S/$M/$M/inckern.S $S/$M/$M/elf_trampoline.c
|
|
echo "#define KERNNAME \"${KERNEL_KO}.tmp\"" >opt_kernname.h
|
|
sed s/${KERNVIRTADDR}/${KERNPHYSADDR}/ ldscript.$M > ldscript.$M.tramp
|
|
sed s/" + SIZEOF_HEADERS"// ldscript.$M.tramp > \
|
|
ldscript.$M.tramp.noheader
|
|
echo "#include <machine/asm.h>" >tmphack.S
|
|
echo "ENTRY(_start)" >>tmphack.S
|
|
echo "bl _startC" >>tmphack.S
|
|
${OBJCOPY} --strip-symbol '$$d' --strip-symbol '$$a' \
|
|
-g --strip-symbol '$$t' ${FULLKERNEL} ${KERNEL_KO}.tmp
|
|
eval $$(stat -s ${KERNEL_KO}.tmp) && \
|
|
echo "#define KERNSIZE $$st_size" >>opt_kernname.h
|
|
${CC} -O -nostdlib -I. -I$S \
|
|
-Xlinker -T -Xlinker ldscript.$M.tramp \
|
|
-DELF_TRAMPOLINE \
|
|
tmphack.S \
|
|
$S/$M/$M/elf_trampoline.c \
|
|
$S/$M/$M/inckern.S \
|
|
${FILES_CPU_FUNC} \
|
|
-o ${KERNEL_KO}.tramp
|
|
${CC} -O -nostdlib -I. -I$S \
|
|
-Xlinker -T -Xlinker ldscript.$M.tramp.noheader \
|
|
-DELF_TRAMPOLINE \
|
|
tmphack.S \
|
|
$S/$M/$M/elf_trampoline.c \
|
|
$S/$M/$M/inckern.S \
|
|
${FILES_CPU_FUNC} \
|
|
-o ${KERNEL_KO}.tramp.noheader
|
|
${OBJCOPY} -S -O binary ${KERNEL_KO}.tramp.noheader \
|
|
${KERNEL_KO}.tramp.bin
|
|
${OBJCOPY} ${STRIP_FLAGS} ${KERNEL_KO}.tmp
|
|
echo "#define KERNNAME \"${KERNEL_KO}.tmp.gz\"" >opt_kernname.h
|
|
eval $$(stat -s ${KERNEL_KO}.tmp) && \
|
|
echo "#define KERNSIZE $$st_size" >>opt_kernname.h
|
|
gzip -f9 ${KERNEL_KO}.tmp
|
|
eval $$(stat -s ${KERNEL_KO}.tmp.gz) && \
|
|
echo "#define KERNCOMPSIZE $$st_size" >>opt_kernname.h
|
|
${CC} -O2 -ffreestanding -I. -I$S -c \
|
|
-DKZIP -DELF_TRAMPOLINE \
|
|
$S/kern/inflate.c \
|
|
-o inflate-tramp.o
|
|
${CC} -O -nostdlib -I. -I$S \
|
|
-Xlinker -T -Xlinker ldscript.$M.tramp \
|
|
-DKZIP -DELF_TRAMPOLINE \
|
|
tmphack.S \
|
|
$S/$M/$M/elf_trampoline.c \
|
|
inflate-tramp.o \
|
|
$S/$M/$M/inckern.S \
|
|
${FILES_CPU_FUNC} \
|
|
-o ${KERNEL_KO}.gz.tramp
|
|
${CC} -O -nostdlib -I. -I$S \
|
|
-Xlinker -T -Xlinker ldscript.$M.tramp.noheader \
|
|
-DKZIP -DELF_TRAMPOLINE \
|
|
tmphack.S \
|
|
$S/$M/$M/elf_trampoline.c \
|
|
inflate-tramp.o \
|
|
$S/$M/$M/inckern.S \
|
|
${FILES_CPU_FUNC} \
|
|
-o ${KERNEL_KO}.tramp.noheader
|
|
${OBJCOPY} -S -O binary ${KERNEL_KO}.tramp.noheader \
|
|
${KERNEL_KO}.gz.tramp.bin
|
|
rm ${KERNEL_KO}.tmp.gz ${KERNEL_KO}.tramp.noheader opt_kernname.h \
|
|
inflate-tramp.o tmphack.S
|
|
.endif
|
|
|
|
%BEFORE_DEPEND
|
|
|
|
%OBJS
|
|
|
|
%FILES.c
|
|
|
|
%FILES.s
|
|
|
|
%FILES.m
|
|
|
|
%CLEAN
|
|
|
|
CLEAN+= ldscript.$M ${KERNEL_KO}.bin ldscript.$M.noheader
|
|
|
|
CLEAN+= ${KERNEL_KO}.tramp ${KERNEL_KO}.tramp.bin ldscript.$M.tramp \
|
|
ldscript.$M.tramp.noheader ${KERNEL_KO}.gz.tramp \
|
|
${KERNEL_KO}.gz.tramp.bin
|
|
|
|
ldscript.$M: $S/conf/ldscript.$M
|
|
cat $S/conf/ldscript.$M|sed s/KERNPHYSADDR/${KERNPHYSADDR}/g| \
|
|
sed s/KERNVIRTADDR/${KERNVIRTADDR}/g > ldscript.$M
|
|
%RULES
|
|
|
|
.include "$S/conf/kern.post.mk"
|