diff --git a/recipes/core/initfs/aarch64-unknown-redox/init_drivers.rc b/recipes/core/base-initfs/aarch64-unknown-redox/init_drivers.rc similarity index 100% rename from recipes/core/initfs/aarch64-unknown-redox/init_drivers.rc rename to recipes/core/base-initfs/aarch64-unknown-redox/init_drivers.rc diff --git a/recipes/core/initfs/aarch64-unknown-redox/init_drivers.rc.raspi3bp b/recipes/core/base-initfs/aarch64-unknown-redox/init_drivers.rc.raspi3bp similarity index 100% rename from recipes/core/initfs/aarch64-unknown-redox/init_drivers.rc.raspi3bp rename to recipes/core/base-initfs/aarch64-unknown-redox/init_drivers.rc.raspi3bp diff --git a/recipes/core/initfs/init.rc b/recipes/core/base-initfs/init.rc similarity index 100% rename from recipes/core/initfs/init.rc rename to recipes/core/base-initfs/init.rc diff --git a/recipes/core/initfs/init_drivers.rc b/recipes/core/base-initfs/init_drivers.rc similarity index 100% rename from recipes/core/initfs/init_drivers.rc rename to recipes/core/base-initfs/init_drivers.rc diff --git a/recipes/core/base-initfs/recipe.toml b/recipes/core/base-initfs/recipe.toml index 1da38231..fd3987fc 100644 --- a/recipes/core/base-initfs/recipe.toml +++ b/recipes/core/base-initfs/recipe.toml @@ -3,37 +3,71 @@ same_as = "../base" [build] template = "custom" +dependencies = [ + "drivers-initfs", + "redoxfs", +] script = """ -mkdir -pv "${COOKBOOK_STAGE}/usr/bin" +INITFS_RM_BINS='redoxfs-ar redoxfs-mkfs' + +rm -rf "${COOKBOOK_BUILD}/initfs" +mkdir -p "${COOKBOOK_BUILD}/initfs/etc" + +cp -r "${COOKBOOK_SYSROOT}/"* "${COOKBOOK_BUILD}/initfs" + +# TODO: Move init.rc to another recipe, perhaps initfs-misc? Then it can be installed as a regular dependency. +cp "${COOKBOOK_RECIPE}/init.rc" "${COOKBOOK_BUILD}/initfs/etc/init.rc" +cp "${COOKBOOK_RECIPE}/init_drivers.rc" "${COOKBOOK_BUILD}/initfs/etc/init_drivers.rc" +if [ -e ${COOKBOOK_RECIPE}/${TARGET}/init_drivers.rc.${BOARD} ]; then + cp "${COOKBOOK_RECIPE}/${TARGET}/init_drivers.rc.${BOARD}" "${COOKBOOK_BUILD}/initfs/etc/init_drivers.rc" +elif [ -e ${COOKBOOK_RECIPE}/${TARGET}/init_drivers.rc ]; then + cp "${COOKBOOK_RECIPE}/${TARGET}/init_drivers.rc" "${COOKBOOK_BUILD}/initfs/etc/init_drivers.rc" +fi + +# Move /usr folders to / and remove links +for folder in bin lib include share +do + rm "${COOKBOOK_BUILD}/initfs/${folder}" + mv "${COOKBOOK_BUILD}/initfs/usr/${folder}" "${COOKBOOK_BUILD}/initfs/${folder}" +done +rmdir "${COOKBOOK_BUILD}/initfs/usr" + +for bin in ${INITFS_RM_BINS}; do + rm -f "${COOKBOOK_BUILD}/initfs/bin/$bin" +done + +mkdir -pv "${COOKBOOK_BUILD}/initfs/bin" for package in init logd ramfs randd zerod; do "${COOKBOOK_CARGO}" build \ --manifest-path "${COOKBOOK_SOURCE}/${package}/Cargo.toml" \ ${build_flags} cp -v \ "target/${TARGET}/${build_type}/${package}" \ - "${COOKBOOK_STAGE}/usr/bin/${package}" + "${COOKBOOK_BUILD}/initfs/bin/${package}" done # TODO: symlinks aren't supported by redox-initfs -#ln -sv zerod "${COOKBOOK_STAGE}/usr/bin/nulld" +#ln -sv zerod "${COOKBOOK_BUILD}/initfs/bin/nulld" -cp "${COOKBOOK_STAGE}/usr/bin/zerod" "${COOKBOOK_STAGE}/usr/bin/nulld" +cp "${COOKBOOK_BUILD}/initfs/bin/zerod" "${COOKBOOK_BUILD}/initfs/bin/nulld" ARCH="$(echo "${GNU_TARGET}" | cut -d - -f1)" cargo \ -Zbuild-std=core,alloc,compiler_builtins \ - -Zbuild-std-features=compiler-builtins-mem rustc \ + -Zbuild-std-features=compiler-builtins-mem build \ --target "${TARGET}" \ --manifest-path "${COOKBOOK_SOURCE}/bootstrap/Cargo.toml" \ --release \ - --target-dir "${COOKBOOK_BUILD}" \ - -- \ - --emit link="${COOKBOOK_BUILD}/${TARGET}/release/libbootstrap.a" -mkdir -v "${COOKBOOK_STAGE}/boot" + --target-dir "${COOKBOOK_BUILD}" "${GNU_TARGET}-ld" \ - -o "${COOKBOOK_STAGE}/boot/bootstrap" \ + -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" """ diff --git a/recipes/core/initfs/recipe.toml b/recipes/core/initfs/recipe.toml deleted file mode 100644 index b1ccbde6..00000000 --- a/recipes/core/initfs/recipe.toml +++ /dev/null @@ -1,44 +0,0 @@ -[source] -git = "https://gitlab.redox-os.org/redox-os/redox-initfs.git" - -[build] -template = "custom" -dependencies = [ - "base-initfs", - "drivers-initfs", - "redoxfs", -] -script = """ -INITFS_RM_BINS='redoxfs-ar redoxfs-mkfs' - -rm -rf "${COOKBOOK_BUILD}/initfs" -mkdir -p "${COOKBOOK_BUILD}/initfs/etc" - -cp -r "${COOKBOOK_SYSROOT}/"* "${COOKBOOK_BUILD}/initfs" - -# TODO: Move init.rc to another recipe, perhaps initfs-misc? Then it can be installed as a regular dependency. -cp "${COOKBOOK_RECIPE}/init.rc" "${COOKBOOK_BUILD}/initfs/etc/init.rc" -cp "${COOKBOOK_RECIPE}/init_drivers.rc" "${COOKBOOK_BUILD}/initfs/etc/init_drivers.rc" -if [ -e ${COOKBOOK_RECIPE}/${TARGET}/init_drivers.rc.${BOARD} ]; then - cp "${COOKBOOK_RECIPE}/${TARGET}/init_drivers.rc.${BOARD}" "${COOKBOOK_BUILD}/initfs/etc/init_drivers.rc" -elif [ -e ${COOKBOOK_RECIPE}/${TARGET}/init_drivers.rc ]; then - cp "${COOKBOOK_RECIPE}/${TARGET}/init_drivers.rc" "${COOKBOOK_BUILD}/initfs/etc/init_drivers.rc" -fi - -# Move /usr folders to / and remove links -for folder in bin lib include share -do - rm "${COOKBOOK_BUILD}/initfs/${folder}" - mv "${COOKBOOK_BUILD}/initfs/usr/${folder}" "${COOKBOOK_BUILD}/initfs/${folder}" -done -rmdir "${COOKBOOK_BUILD}/initfs/usr" - -for bin in ${INITFS_RM_BINS}; do - rm -f "${COOKBOOK_BUILD}/initfs/bin/$bin" -done - -env -u CARGO cargo run --manifest-path "${COOKBOOK_SOURCE}/tools/Cargo.toml" --bin redox-initfs-ar -- "${COOKBOOK_BUILD}/initfs" "${COOKBOOK_SYSROOT}/boot/bootstrap" -o "${COOKBOOK_BUILD}/initfs.img" - -mkdir -v "${COOKBOOK_STAGE}/boot" -cp "${COOKBOOK_BUILD}/initfs.img" "${COOKBOOK_STAGE}/boot/initfs" -"""