aboutsummaryrefslogtreecommitdiff
path: root/release/Makefile.arm
diff options
context:
space:
mode:
Diffstat (limited to 'release/Makefile.arm')
-rw-r--r--release/Makefile.arm134
1 files changed, 134 insertions, 0 deletions
diff --git a/release/Makefile.arm b/release/Makefile.arm
new file mode 100644
index 000000000000..b7092c32bbc1
--- /dev/null
+++ b/release/Makefile.arm
@@ -0,0 +1,134 @@
+#
+# $FreeBSD$
+#
+
+BOARDS?= BEAGLEBONE \
+ RPI-B \
+ PANDABOARD \
+ WANDBOARD-QUAD \
+ ZEDBOARD
+
+ARMTARGETS?=
+ARMSIZE?= 1G
+BOOTSIZE?= 4m
+ARM_WFLAGS?= CROSS_TOOLCHAIN=armv6-gcc
+ARMPORTS?=
+
+WITH_ARM_IMAGES?=1
+CLEANFILES+= arm-all
+
+.if defined(WITH_ARM_IMAGES) && !empty(WITH_ARM_IMAGES) && !empty(BOARDS)
+. for BOARD in ${BOARDS}
+ARMTARGETS+= arm-${BOARD:tl}
+ARMBEFORECLEAN+= arm-mdclean${BOARD:tl}
+CLEANDIRS+= arm-${BOARD:tl} \
+ arm-${BOARD:tl}-boot
+CLEANFILES+= arm-buildworld${BOARD:tl} \
+ arm-buildkernel${BOARD:tl} \
+ arm-installworld${BOARD:tl} \
+ arm-installkernel${BOARD:tl} \
+ ${${BOARD:tu}IMAGE} \
+ ${${BOARD:tu}MDDEV} \
+ ${${BOARD:tu}MDFILE} \
+ ${${BOARD:tu}BOOTDEV} \
+ ${${BOARD:tu}BOOTFILE} \
+ build-arm-${BOARD:tl} \
+ build-arm-ports${BOARD:tl}
+${BOARD:tu}IMAGE= arm-${BOARD:tu}.img
+${BOARD:tu}MDDEV= arm-${BOARD:tu}.mddev
+${BOARD:tu}MDFILE= arm-${BOARD:tu}.raw
+${BOARD:tu}BOOTDEV= arm-${BOARD:tu}.bootdev
+${BOARD:tu}BOOTFILE= arm-${BOARD:tu}.boot
+. if exists(${.CURDIR}/arm/Makefile.${BOARD})
+. include "${.CURDIR}/arm/Makefile.${BOARD}"
+. endif
+
+arm-mdclean${BOARD:tl}:
+.if exists(${${BOARD:tu}MDDEV})
+ umount ${${BOARD:tu}MDFILE} || true
+ mdconfig -d -u $$(cat ${${BOARD:tu}MDDEV})
+.endif
+.if exists(${${BOARD:tu}BOOTDEV})
+ umount ${${BOARD:tu}BOOTFILE} || true
+ mdconfig -d -u $$(cat ${${BOARD:tu}BOOTDEV})
+.endif
+
+arm-${BOARD:tl}: arm-buildworld${BOARD:tl} arm-buildkernel${BOARD:tl} \
+ arm-installworld${BOARD:tl} arm-installkernel${BOARD:tl}
+ ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} build-${.TARGET}
+
+arm-buildworld${BOARD:tl}:
+ @echo ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${ARM_WFLAGS} \
+ buildworld
+ touch ${.TARGET}
+
+arm-buildkernel${BOARD:tl}:
+ @echo ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${ARM_WFLAGS} \
+ KERNCONF=${BOARD} buildkernel
+ touch ${.TARGET}
+
+arm-installworld${BOARD:tl}: arm-mkfs${BOARD:tl}
+ @echo ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${ARM_WFLAGS} \
+ DESTDIR=${.OBJDIR}/arm-${BOARD:tl} installworld distribution
+ touch ${.TARGET}
+
+arm-installkernel${BOARD:tl}:
+ @echo ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${ARM_WFLAGS} \
+ DESTDIR=${.OBJDIR}/arm-${BOARD:tl} KERNCONF=${BOARD} \
+ installkernel
+ touch ${.TARGET}
+
+arm-mkfs${BOARD:tl}:
+.if !exists(${${BOARD:tu}MDDEV})
+ mkdir -p ${.OBJDIR}/arm-${BOARD:tl}
+ truncate -s ${ARMSIZE} ${.OBJDIR}/${${BOARD:tu}MDFILE}
+ echo $$(mdconfig -f ${.OBJDIR}/${${BOARD:tu}MDFILE}) > \
+ ${.OBJDIR}/${${BOARD:tu}MDDEV}
+ newfs -S 4096 /dev/$$(cat ${.OBJDIR}/${${BOARD:tu}MDDEV})
+ mount /dev/$$(cat ${.OBJDIR}/${${BOARD:tu}MDDEV}) \
+ ${.OBJDIR}/arm-${BOARD:tl}
+.endif
+.if !exists(${${BOARD:tu}BOOTDEV})
+ mkdir -p ${.OBJDIR}/arm-${BOARD:tl}-boot
+ truncate -s ${BOOTSIZE} ${.OBJDIR}/${${BOARD:tu}BOOTFILE}
+ echo $$(mdconfig -f ${.OBJDIR}/${${BOARD:tu}BOOTFILE}) > \
+ ${.OBJDIR}/${${BOARD:tu}BOOTDEV}
+ newfs_msdos -S 4096 /dev/$$(cat ${.OBJDIR}/${${BOARD:tu}BOOTDEV})
+ mount_msdosfs /dev/$$(cat ${.OBJDIR}/${${BOARD:tu}BOOTDEV}) \
+ ${.OBJDIR}/arm-${BOARD:tl}-boot
+.endif
+
+arm-mkimage${BOARD:tl}:
+.if exists(/dev/$$(cat ${.OBJDIR}/${${BOARD:tu}BOOTDEV})
+ umount ${.OBJDIR}/arm-${BOARD:tl}-boot
+.endif
+.if exists(/dev/$$(cat ${.OBJDIR}/${${BOARD:tu}MDDEV})
+ umount ${.OBJDIR}/arm-${BOARD:tl}
+.endif
+# FIXME:
+# Do these things need to be MBR?
+# I'm also not entirely sure this is correct, anyway.
+#
+ mkimg -s ${${BOARD}PARTSCHEME} \
+ -b ${${BOARD:tu}BOOTFILE} \
+ -p freebsd/rootfs:=${${BOARD:tu}MDFILE} \
+ -o ${${BOARD:tu}IMAGE}
+
+build-arm-ports${BOARD:tl}:
+. if defined(ARMPORTS) && !empty(ARMPORTS)
+. if !exists(${PORTSDIR}/Makefile)
+. error "Ports tree (${PORTSDIR}) is required."
+. endif
+. for AP in ${ARMPORTS}
+ @echo ${MAKE} -C ${PORTSDIR}/${AP} all install clean distclean
+. endfor
+. endif
+ touch ${.TARGET}
+
+. endfor # main loop
+.endif # !WITH_ARM_IMAGES
+
+beforeclean: ${ARMBEFORECLEAN}
+
+arm-all: ${ARMTARGETS}
+ touch ${.TARGET}