From 0ca54f28e0e5a5f08271ff2ff2d818aa5622f835 Mon Sep 17 00:00:00 2001 From: Mark Poliakov Date: Wed, 19 Jul 2023 21:57:18 +0300 Subject: [PATCH] ***: add initial initrd build --- .gitignore | 1 + Cargo.lock | 7 +++++++ Cargo.toml | 4 ++++ build.sh | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ init/Cargo.toml | 8 ++++++++ init/src/main.rs | 3 +++ 6 files changed, 75 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100755 build.sh create mode 100644 init/Cargo.toml create mode 100644 init/src/main.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..ea8c4bf7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 00000000..8cddee5b --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "init" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 00000000..87eed40e --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,4 @@ +[workspace] +members = [ + "init" +] diff --git a/build.sh b/build.sh new file mode 100755 index 00000000..ee89c559 --- /dev/null +++ b/build.sh @@ -0,0 +1,52 @@ +#!/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}" + +USER_FILES=init + +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() { + cd "target/${USER_TARGET}/${PROFILE}" + tar --xform='s/^/\//' -cf initrd.tar ${USER_FILES} + cd - +} + +check_toolchain + +case "$1" in + build|"") + pstatus "Building userspace programs" + cargo +ygg-stage1 build ${USER_CARGO_OPTS} + + pstatus "Creating initrd.tar" + pack_initrd + ;; + **) + ;; +esac diff --git a/init/Cargo.toml b/init/Cargo.toml new file mode 100644 index 00000000..f922052a --- /dev/null +++ b/init/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "init" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/init/src/main.rs b/init/src/main.rs new file mode 100644 index 00000000..f030d1b3 --- /dev/null +++ b/init/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello!"); +}