2023-07-19 21:57:18 +03:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
if [ "${ARCH}" = "" ]; then
|
|
|
|
ARCH=aarch64
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ "${PROFILE}" = "" ]; then
|
|
|
|
PROFILE=debug
|
|
|
|
fi
|
|
|
|
|
|
|
|
USER_TARGET=${ARCH}-unknown-yggdrasil
|
|
|
|
USER_CARGO_OPTS="--target=${USER_TARGET}"
|
|
|
|
|
2023-07-20 18:14:48 +03:00
|
|
|
if [ "${PROFILE}" = "release" ]; then
|
|
|
|
USER_CARGO_OPTS="${USER_CARGO_OPTS} --release"
|
|
|
|
fi
|
|
|
|
|
2023-07-19 21:57:18 +03:00
|
|
|
pstatus() {
|
|
|
|
echo -e "[BUILD] \033[32;1m$@\033[0m"
|
|
|
|
}
|
|
|
|
|
|
|
|
die() {
|
|
|
|
echo -e "[ERROR] \033[31;1m$@\033[0m" >&2
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
check_toolchain() {
|
|
|
|
pstatus "Checking toolchain"
|
|
|
|
if ! cargo +ygg-stage1 --version; then
|
|
|
|
die "Yggdrasil OS Rust toolchain is not built/installed, see https://git.alnyan.me/yggdrasil/yggdrasil-rust"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
pack_initrd() {
|
2023-07-27 16:25:26 +03:00
|
|
|
local workspace_dir=$(pwd)
|
2023-07-20 12:00:41 +03:00
|
|
|
local build_dir=target/${USER_TARGET}/${PROFILE}
|
|
|
|
local root_dir=${build_dir}/rootfs
|
2023-07-27 16:25:26 +03:00
|
|
|
|
2023-07-20 12:00:41 +03:00
|
|
|
mkdir -p "${root_dir}"
|
2023-07-27 16:25:26 +03:00
|
|
|
mkdir -p "${root_dir}/sbin"
|
|
|
|
mkdir -p "${root_dir}/bin"
|
2023-07-20 12:00:41 +03:00
|
|
|
|
2023-07-27 16:25:26 +03:00
|
|
|
# init
|
2023-07-20 12:00:41 +03:00
|
|
|
cp ${build_dir}/init ${root_dir}
|
2023-07-27 16:25:26 +03:00
|
|
|
cp ${build_dir}/rc ${root_dir}/sbin/
|
2023-12-28 10:39:21 +02:00
|
|
|
cp ${build_dir}/service ${root_dir}/sbin/
|
|
|
|
cp ${build_dir}/logd ${root_dir}/sbin/
|
2023-07-27 16:25:26 +03:00
|
|
|
|
|
|
|
# shell
|
|
|
|
cp ${build_dir}/shell ${root_dir}/bin/sh
|
|
|
|
|
|
|
|
# sysutils
|
|
|
|
cp ${build_dir}/mount ${root_dir}/sbin/
|
|
|
|
cp ${build_dir}/login ${root_dir}/sbin/
|
2023-11-14 14:55:13 +02:00
|
|
|
cp ${build_dir}/ls ${root_dir}/bin/
|
2023-12-05 16:34:38 +02:00
|
|
|
cp ${build_dir}/mkdir ${root_dir}/bin/
|
|
|
|
cp ${build_dir}/touch ${root_dir}/bin/
|
|
|
|
cp ${build_dir}/rm ${root_dir}/bin/
|
|
|
|
cp ${build_dir}/cat ${root_dir}/bin/
|
2023-11-14 17:31:30 +02:00
|
|
|
cp ${build_dir}/hexd ${root_dir}/bin/
|
2023-12-11 02:45:50 +02:00
|
|
|
cp ${build_dir}/dd ${root_dir}/bin/
|
2023-12-28 10:39:21 +02:00
|
|
|
cp ${build_dir}/random ${root_dir}/bin/
|
2024-01-08 18:45:38 +02:00
|
|
|
cp ${build_dir}/view ${root_dir}/bin/
|
2024-01-15 18:20:02 +02:00
|
|
|
cp ${build_dir}/chmod ${root_dir}/bin/
|
2023-12-28 10:39:21 +02:00
|
|
|
|
2024-01-22 14:41:09 +02:00
|
|
|
# netutils
|
|
|
|
cp ${build_dir}/netconf ${root_dir}/sbin/
|
|
|
|
cp ${build_dir}/dhcp-client ${root_dir}/sbin/
|
|
|
|
cp ${build_dir}/nc ${root_dir}/bin/
|
|
|
|
|
2023-12-28 10:39:21 +02:00
|
|
|
# colors
|
|
|
|
cp ${build_dir}/colors ${root_dir}/bin/
|
|
|
|
cp ${build_dir}/term ${root_dir}/bin/
|
2023-11-18 22:44:11 +02:00
|
|
|
|
|
|
|
# red
|
|
|
|
cp ${build_dir}/red ${root_dir}/bin/red
|
2023-07-27 16:25:26 +03:00
|
|
|
|
|
|
|
cp -r ${workspace_dir}/etc ${root_dir}/
|
2024-01-08 18:45:38 +02:00
|
|
|
if [ -d ${workspace_dir}/arch/${ARCH}/rc.d ]; then
|
|
|
|
cp ${workspace_dir}/arch/${ARCH}/rc.d/* ${root_dir}/etc/rc.d
|
|
|
|
fi
|
|
|
|
if [ -f ${workspace_dir}/arch/${ARCH}/inittab ]; then
|
|
|
|
cp ${workspace_dir}/arch/${ARCH}/inittab ${root_dir}/etc/
|
|
|
|
fi
|
2023-12-08 17:52:21 +02:00
|
|
|
chmod +x ${root_dir}/etc/rc.d/*
|
2023-07-20 12:00:41 +03:00
|
|
|
|
|
|
|
cd "${root_dir}"
|
|
|
|
mkdir -p dev
|
2023-07-27 16:25:26 +03:00
|
|
|
touch dev/.do_not_remove
|
2023-12-05 16:34:38 +02:00
|
|
|
mkdir -p sys
|
|
|
|
touch sys/.do_not_remove
|
2024-01-15 18:20:02 +02:00
|
|
|
mkdir -p tmp
|
|
|
|
touch tmp/.do_no_remove
|
2023-07-20 12:00:41 +03:00
|
|
|
|
2023-07-27 16:25:26 +03:00
|
|
|
tar cf ../initrd.tar `find . -type f -printf "%P\n"`
|
2023-07-19 21:57:18 +03:00
|
|
|
cd -
|
|
|
|
}
|
|
|
|
|
|
|
|
check_toolchain
|
|
|
|
|
|
|
|
case "$1" in
|
|
|
|
build|"")
|
2023-07-27 16:25:26 +03:00
|
|
|
if [ "${CLEAN_BUILD}" = 1 ]; then
|
|
|
|
cargo clean
|
|
|
|
fi
|
|
|
|
|
2023-07-19 21:57:18 +03:00
|
|
|
pstatus "Building userspace programs"
|
|
|
|
cargo +ygg-stage1 build ${USER_CARGO_OPTS}
|
|
|
|
|
|
|
|
pstatus "Creating initrd.tar"
|
|
|
|
pack_initrd
|
|
|
|
;;
|
2023-12-05 16:34:38 +02:00
|
|
|
# clippy ignored for now
|
|
|
|
check|clippy)
|
|
|
|
cargo +ygg-stage1 check ${USER_CARGO_OPTS}
|
|
|
|
;;
|
2023-07-19 21:57:18 +03:00
|
|
|
**)
|
|
|
|
;;
|
|
|
|
esac
|