05d970344a
but LDFLAGS is not (yet) passed on to the linker (via SYSTEM_LD et al). Do so now. As such, any kernel configuration can now define linker flags by setting LDFLAGS as normal and not have to revert to hacks like setting DEBUG for flags that do not relate to debugging (see sys/powerpc/conf/MPC85XX).
140 lines
4.4 KiB
Makefile
140 lines
4.4 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= 600004
|
|
|
|
STD8X16FONT?= iso
|
|
|
|
.if !defined(S)
|
|
.if exists(./@/.)
|
|
S= ./@
|
|
.else
|
|
S= ../../..
|
|
.endif
|
|
.endif
|
|
.include "$S/conf/kern.pre.mk"
|
|
|
|
INCLUDES+= -I$S/contrib/libfdt
|
|
|
|
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
|
|
|
|
.if empty(DDB_ENABLED)
|
|
CFLAGS += -mno-apcs-frame
|
|
.endif
|
|
|
|
SYSTEM_LD_ = ${LD} -Bdynamic -T ldscript.$M.noheader ${LDFLAGS} \
|
|
-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
|
|
|
|
.if defined(MFS_IMAGE)
|
|
SYSTEM_LD_TAIL += ;sh ${S}/tools/embed_mfs.sh ${KERNEL_KO}.bin ${MFS_IMAGE};
|
|
.endif
|
|
|
|
FILES_CPU_FUNC = $S/$M/$M/cpufunc_asm_arm7tdmi.S \
|
|
$S/$M/$M/cpufunc_asm_arm8.S $S/$M/$M/cpufunc_asm_arm9.S \
|
|
$S/$M/$M/cpufunc_asm_sa1.S $S/$M/$M/cpufunc_asm_arm10.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_armv7.S
|
|
|
|
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 \
|
|
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 \
|
|
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 -DKZIP -I. -I$S -c $S/kern/inflate.c -o \
|
|
inflate-tramp.o
|
|
${CC} -O -nostdlib -I. -I$S -Xlinker -T -Xlinker ldscript.$M.tramp \
|
|
-DKZIP 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 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
|
|
|
|
MKMODULESENV+= MACHINE=${MACHINE}
|
|
|
|
%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"
|