summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorimp <imp@FreeBSD.org>2016-02-07 16:44:13 +0000
committerimp <imp@FreeBSD.org>2016-02-07 16:44:13 +0000
commit3c1575b1354d0e382a785faaf0ecbc66a8ea11f5 (patch)
tree8994dd3eb13f7ce21a9b583a7a6c00996541aa3d
parent0b1b9fdab4a2bd75d016d9f6b07262f4a22e35dc (diff)
downloadFreeBSD-src-3c1575b1354d0e382a785faaf0ecbc66a8ea11f5.zip
FreeBSD-src-3c1575b1354d0e382a785faaf0ecbc66a8ea11f5.tar.gz
Use new NANO_LOG to put the logs some place reasonable. Also, share
the object directory among all builds where it makes sense. When building with NANO_CPUTYPE, separate that out to its own object directory. Put disk files in their own directories. This should make having multiple variants of the same architecture saner.
-rw-r--r--tools/tools/nanobsd/embedded/common85
1 files changed, 47 insertions, 38 deletions
diff --git a/tools/tools/nanobsd/embedded/common b/tools/tools/nanobsd/embedded/common
index d10a36f..9e02dcc 100644
--- a/tools/tools/nanobsd/embedded/common
+++ b/tools/tools/nanobsd/embedded/common
@@ -88,23 +88,30 @@ NANO_CFG_BASE=$(pwd)
NANO_CFG_BASE=$(realpath ${NANO_CFG_BASE}/..)
NANO_SRC=$(realpath ${NANO_CFG_BASE}/../../..)
#### XXX share obj
-NANO_OBJ=${NANO_SRC}/../$NANO_NAME/obj
-# Where cust_pkg() finds packages to install
-#XXX: Is this the right place?
-#NANO_PORTS=$(realpath ${NANO_SRC}/../ports)
-NANO_PORTS=/usr/ports
-NANO_PACKAGE_DIR=${NANO_SRC}/${NANO_TOOLS}/Pkg
+if [ -z ${NANO_CPUTYPE} ]; then
+ NANO_OBJ=${NANO_SRC}/../embedded/obj
+else
+ # Alas, I can't set OBJTREE to ${MACHINE}.${MACHINE_ARCH}.${CPUTYPE}
+ # so this will have to do until I can.
+ NANO_OBJ=${NANO_SRC}/../embedded/obj.${NANO_CPUTYPE}
+fi
+NANO_LOG=${NANO_OBJ}/../${NANO_NAME}
+NANO_DISKIMGDIR=${NANO_OBJ}/../images
+NANO_WORLDDIR=${NANO_LOG}/_.w
NANO_INIT_IMG2=0
NANO_NOPRIV_BUILD=t
unset MAKEOBJDIRPREFIX
-# this to go into nanobsd.sh
-NANO_PORTS=${NANO_PORTS:-/usr/ports}
-
mkdir -p ${NANO_OBJ}
NANO_OBJ=$(realpath ${NANO_OBJ})
+mkdir -p ${NANO_LOG}
+NANO_LOG=$(realpath ${NANO_LOG})
+mkdir -p ${NANO_IMAGES}
+NANO_IMAGES=$(realpath ${NANO_IMAGES})
+mkdir -p ${NANO_WORLDDIR}
+NANO_WORLDDIR=$(realpath ${NANO_WORLDDIR})
-NANO_FAT_DIR=${NANO_OBJ}/_.fat
+NANO_FAT_DIR=${NANO_LOG}/_.fat
customize_cmd cust_allow_ssh_root
@@ -191,7 +198,7 @@ create_diskimage_gpt ( ) (
create_diskimage_mbr ( ) (
pprint 2 "build diskimage ${NANO_NAME}"
- pprint 3 "log: ${NANO_OBJ}/_.di"
+ pprint 3 "log: ${NANO_LOG}/_.di"
(
local extra i sz fmt fmtarg bootmbr bootbsd skiparg
@@ -204,36 +211,36 @@ create_diskimage_mbr ( ) (
skiparg=${NANO_MBR_FIRST_SKIP:+-S ${NANO_MBR_FIRST_SKIP}}
for i in s1 s2 s3 s4 p1 p2 p3 p4 p5 empty; do
- rm -fr ${NANO_OBJ}/_.${i}*
+ rm -fr ${NANO_LOG}/_.${i}*
done
# Populate the FAT partition, if needed
if [ -n "${NANO_SLICE_FAT}" ]; then
echo Creating MSDOS partition for kernel
newfs_msdos -C ${NANO_SLICE_FAT_SIZE} -F 16 -L ${NANO_NAME} \
- ${NANO_OBJ}/_.${NANO_SLICE_FAT}
+ ${NANO_LOG}/_.${NANO_SLICE_FAT}
if [ -d ${NANO_FAT_DIR} ]; then
# Need to copy files from ${NANO_FATDIR} with mtools, or use
# makefs -t msdos once that's supported
- mcopy -i ${NANO_OBJ}/_.${NANO_SLICE_FAT} ${NANO_FAT_DIR}/* ::
+ mcopy -i ${NANO_LOG}/_.${NANO_SLICE_FAT} ${NANO_FAT_DIR}/* ::
fi
fi
# Populate the Powerpc boot image, if needed
if [ "${NANO_LAYOUT}" = powerpc64-ibm ]; then
- dd if=${NANO_WORLDDIR}/boot/boot1.elf of=${NANO_OBJ}/_.s1 bs=800k count=1 conv=sync
+ dd if=${NANO_WORLDDIR}/boot/boot1.elf of=${NANO_LOG}/_.s1 bs=800k count=1 conv=sync
fi
# Populate the / partition, and place it into a slice with a
# bsd label
[ -z ${NANO_NOPRIV_BUILD} ] || extra="-F ${NANO_METALOG}"
sz=${NANO_SLICE_ROOT_SIZE:+-s ${NANO_SLICE_ROOT_SIZE}}
- eval "${NANO_MAKEFS_UFS}" ${extra} $sz "${NANO_OBJ}/_.${NANO_ROOT}" \
+ eval "${NANO_MAKEFS_UFS}" ${extra} $sz "${NANO_LOG}/_.${NANO_ROOT}" \
"${NANO_WORLDDIR}"
case ${NANO_DISK_SCHEME} in
mbr)
- mkimg -s bsd ${bootbsd} -p freebsd-ufs:=${NANO_OBJ}/_.${NANO_ROOT} \
- -o ${NANO_OBJ}/_.${NANO_SLICE_ROOT}
+ mkimg -s bsd ${bootbsd} -p freebsd-ufs:=${NANO_LOG}/_.${NANO_ROOT} \
+ -o ${NANO_LOG}/_.${NANO_SLICE_ROOT}
eval $NANO_SLICE_CFG=freebsd
eval $NANO_SLICE_ROOT=freebsd
;;
@@ -246,12 +253,12 @@ create_diskimage_mbr ( ) (
# Populate the /cfg partition, empty if none given
if [ -z "${NANO_CFGDIR}" ]; then
echo "Faking cfg dir, it's empty"
- NANO_CFGDIR=${NANO_OBJ}/_.empty
+ NANO_CFGDIR=${NANO_LOG}/_.empty
mkdir -p ${NANO_CFGDIR}
fi
# XXX -F cfg-mtree
eval "${NANO_MAKEFS_UFS}" -s ${NANO_SLICE_CFG_SIZE} \
- "${NANO_OBJ}/_.${NANO_SLICE_CFG}" "${NANO_CFGDIR}"
+ "${NANO_LOG}/_.${NANO_SLICE_CFG}" "${NANO_CFGDIR}"
# data slice not supported since we need the part for FAT for
# booting
@@ -261,31 +268,32 @@ create_diskimage_mbr ( ) (
eval $NANO_SLICE_FAT=fat16b
fi
+ out=${NANO_DISKIMGDIR}/_.disk.image.${NANO_NAME}${fmt}
# below depends on https://reviews.freebsd.org/D4403 not yet in the tree
# but there's problems: it marks all partitions as active, so you have to
# boot off parittion 3 or 2 by hand if you're playing around with this WIP
case ${NANO_LAYOUT} in
std-embedded)
- mkimg -a 3 ${skiparg} ${fmtarg} ${bootmbr} -s mbr -p ${s1}:=${NANO_OBJ}/_.s1 \
- -p ${s2}:=${NANO_OBJ}/_.s2 \
- -p ${s3}:=${NANO_OBJ}/_.s3 \
- -o ${NANO_OBJ}/_.disk.image.${NANO_NAME}${fmt}
+ mkimg -a 3 ${skiparg} ${fmtarg} ${bootmbr} -s mbr -p ${s1}:=${NANO_LOG}/_.s1 \
+ -p ${s2}:=${NANO_LOG}/_.s2 \
+ -p ${s3}:=${NANO_LOG}/_.s3 \
+ -o ${out}
;;
std-x86)
# s1 is cfg, s2 is /, not sure how to make that
# boot (marked as active) with mkimg yet
- mkimg -a 2 ${fmtarg} ${bootmbr} -s mbr -p ${s1}:=${NANO_OBJ}/_.s1 \
- -p ${s2}:=${NANO_OBJ}/_.s2 \
- -o ${NANO_OBJ}/_.disk.image.${NANO_NAME}${fmt}
+ mkimg -a 2 ${fmtarg} ${bootmbr} -s mbr -p ${s1}:=${NANO_LOG}/_.s1 \
+ -p ${s2}:=${NANO_LOG}/_.s2 \
+ -o ${out}
;;
std-uefi)
# s1 is boot, s2 is cfg, s3 is /, not sure how to make that
# boot (marked as active) with mkimg yet
mkimg -a 2 ${fmtarg} ${bootmbr} -s mbr \
-p efi:=${NANO_WORLDDIR}/boot/boot1.efifat \
- -p ${s2}:=${NANO_OBJ}/_.s2 \
- -p ${s3}:=${NANO_OBJ}/_.s3 \
- -o ${NANO_OBJ}/_.disk.image.${NANO_NAME}${fmt}
+ -p ${s2}:=${NANO_LOG}/_.s2 \
+ -p ${s3}:=${NANO_LOG}/_.s3 \
+ -o ${out}
;;
std-uefi-bios)
# p1 is boot for uefi, p2 is boot for gpt, p3 is cfg, p4 is /
@@ -293,9 +301,9 @@ create_diskimage_mbr ( ) (
mkimg -a 2 ${fmtarg} ${bootmbr} -s gpt \
-p efi:=${NANO_WORLDDIR}/boot/boot1.efifat \
-p freebsd-boot:=${NAANO_WORLDDIR}/boot/gptboot \
- -p ${p3}:=${NANO_OBJ}/_.p3 \
- -p ${p4}:=${NANO_OBJ}/_.p4 \
- -o ${NANO_OBJ}/_.disk.image.${NANO_NAME}${fmt}
+ -p ${p3}:=${NANO_LOG}/_.p3 \
+ -p ${p4}:=${NANO_LOG}/_.p4 \
+ -o ${out}
;;
powerpc64-ibm)
# A lie to make the boot loader work, it boots the first BSD partition
@@ -304,13 +312,14 @@ create_diskimage_mbr ( ) (
# boot image is on a special partition, ala std-embedded, but that
# partition isn't FAT with special files, but a copy of the boot
# loader itself.
- mkimg -a 1 ${fmtarg} -s mbr -p prepboot:=${NANO_OBJ}/_.s1 \
- -p ${s2}:=${NANO_OBJ}/_.s2 \
- -p ${s3}:=${NANO_OBJ}/_.s3a \
- -o ${NANO_OBJ}/_.disk.image.${NANO_NAME}${fmt}
+ mkimg -a 1 ${fmtarg} -s mbr -p prepboot:=${NANO_LOG}/_.s1 \
+ -p ${s2}:=${NANO_LOG}/_.s2 \
+ -p ${s3}:=${NANO_LOG}/_.s3a \
+ -o ${out}
;;
esac
- ) > ${NANO_OBJ}/_.di 2>&1
+ xz -9 --keep ${out}
+ ) > ${NANO_LOG}/_.di 2>&1
)
die( ) {
OpenPOWER on IntegriCloud