mirror of
https://gitlab.redox-os.org/redox-os/redox.git
synced 2026-06-24 05:44:17 +08:00
Even if we start using dynamic linking for the rest of initfs, bootstrap has to be statically linked as it is responsible for loading the first instance of the dynamic linker.
128 lines
3.4 KiB
TOML
128 lines
3.4 KiB
TOML
[source]
|
|
same_as = "../base"
|
|
|
|
[build]
|
|
template = "custom"
|
|
dependencies = [
|
|
"redoxfs",
|
|
]
|
|
script = """
|
|
BINS=(
|
|
init
|
|
logd
|
|
ramfs
|
|
randd
|
|
zerod
|
|
|
|
acpid
|
|
fbbootlogd
|
|
fbcond
|
|
hwd
|
|
inputd
|
|
lived
|
|
nvmed
|
|
pcid
|
|
pcid-spawner
|
|
rtcd
|
|
vesad
|
|
)
|
|
|
|
virt_bins()
|
|
{
|
|
BINS+=(virtio-blkd virtio-gpud)
|
|
}
|
|
|
|
x86_common_bins()
|
|
{
|
|
BINS+=(ahcid ided ps2d vesad)
|
|
virt_bins
|
|
}
|
|
|
|
aarch64_bins()
|
|
{
|
|
case "${BOARD}" in
|
|
raspi3b*)
|
|
BINS+=(bcm2835-sdhcid)
|
|
;;
|
|
*)
|
|
#qemu-virt
|
|
virt_bins
|
|
;;
|
|
esac
|
|
}
|
|
|
|
case "${TARGET}" in
|
|
i586-unknown-redox | i686-unknown-redox)
|
|
x86_common_bins
|
|
;;
|
|
x86_64-unknown-redox)
|
|
x86_common_bins
|
|
;;
|
|
aarch64-unknown-redox)
|
|
aarch64_bins
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
|
|
rm -rf "${COOKBOOK_BUILD}/initfs"
|
|
mkdir -p "${COOKBOOK_BUILD}/initfs/etc"
|
|
|
|
cp "${COOKBOOK_SOURCE}/init.rc" "${COOKBOOK_BUILD}/initfs/etc/init.rc"
|
|
cp "${COOKBOOK_SOURCE}/init_drivers.rc" "${COOKBOOK_BUILD}/initfs/etc/init_drivers.rc"
|
|
if [ -e ${COOKBOOK_SOURCE}/${TARGET}/init_drivers.rc.${BOARD} ]; then
|
|
cp "${COOKBOOK_SOURCE}/${TARGET}/init_drivers.rc.${BOARD}" "${COOKBOOK_BUILD}/initfs/etc/init_drivers.rc"
|
|
elif [ -e ${COOKBOOK_SOURCE}/${TARGET}/init_drivers.rc ]; then
|
|
cp "${COOKBOOK_SOURCE}/${TARGET}/init_drivers.rc" "${COOKBOOK_BUILD}/initfs/etc/init_drivers.rc"
|
|
fi
|
|
|
|
mkdir -pv "${COOKBOOK_BUILD}/initfs/etc/pcid"
|
|
cp -v "${COOKBOOK_SOURCE}/drivers/initfs.toml" "${COOKBOOK_BUILD}/initfs/etc/pcid/initfs.toml"
|
|
|
|
export CARGO_PROFILE_RELEASE_OPT_LEVEL=s
|
|
export CARGO_PROFILE_RELEASE_PANIC=abort
|
|
"${COOKBOOK_CARGO}" build ${build_flags} \
|
|
--manifest-path "${COOKBOOK_SOURCE}/Cargo.toml" \
|
|
$(for bin in "${BINS[@]}"; do echo "-p" "${bin}"; done)
|
|
|
|
mkdir -pv "${COOKBOOK_BUILD}/initfs/bin" "${COOKBOOK_BUILD}/initfs/lib/drivers"
|
|
for bin in "${BINS[@]}"
|
|
do
|
|
case "${bin}" in
|
|
init | logd | ramfs | randd | zerod | pcid | pcid-spawner | fbbootlogd | fbcond | inputd | vesad | lived | ps2d | acpid | bcm2835-sdhcid | rtcd | hwd)
|
|
cp -v "target/${TARGET}/${build_type}/${bin}" "${COOKBOOK_BUILD}/initfs/bin"
|
|
;;
|
|
*)
|
|
cp -v "target/${TARGET}/${build_type}/${bin}" "${COOKBOOK_BUILD}/initfs/lib/drivers"
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# TODO: symlinks aren't supported by redox-initfs
|
|
#ln -sv zerod "${COOKBOOK_BUILD}/initfs/bin/nulld"
|
|
|
|
cp "${COOKBOOK_BUILD}/initfs/bin/zerod" "${COOKBOOK_BUILD}/initfs/bin/nulld"
|
|
|
|
cp "${COOKBOOK_SYSROOT}/usr/bin/redoxfs" "${COOKBOOK_BUILD}/initfs/bin"
|
|
|
|
ARCH="$(echo "${GNU_TARGET}" | cut -d - -f1)"
|
|
RUSTFLAGS="$RUSTFLAGS -Ctarget-feature=+crt-static" cargo \
|
|
-Zbuild-std=core,alloc,compiler_builtins \
|
|
-Zbuild-std-features=compiler-builtins-mem build \
|
|
--target "${TARGET}" \
|
|
--manifest-path "${COOKBOOK_SOURCE}/bootstrap/Cargo.toml" \
|
|
--release \
|
|
--target-dir "${COOKBOOK_BUILD}"
|
|
"${GNU_TARGET}-ld" \
|
|
-o "${COOKBOOK_BUILD}/bootstrap" \
|
|
--gc-sections \
|
|
-T "${COOKBOOK_SOURCE}/bootstrap/src/${ARCH}.ld" \
|
|
-z max-page-size=4096 \
|
|
"${COOKBOOK_BUILD}/${TARGET}/release/libbootstrap.a"
|
|
|
|
env -u CARGO cargo run --manifest-path "${COOKBOOK_SOURCE}/initfs/tools/Cargo.toml" --bin redox-initfs-ar -- "${COOKBOOK_BUILD}/initfs" "${COOKBOOK_BUILD}/bootstrap" -o "${COOKBOOK_BUILD}/initfs.img"
|
|
|
|
mkdir -v "${COOKBOOK_STAGE}/boot"
|
|
cp "${COOKBOOK_BUILD}/initfs.img" "${COOKBOOK_STAGE}/boot/initfs"
|
|
"""
|