From 94d85accd33aa7e5c90446a9ff87e168b080df2d Mon Sep 17 00:00:00 2001 From: Jeremy Soller <jeremy@system76.com> Date: Thu, 21 May 2020 11:40:08 -0600 Subject: [PATCH] Add optional script to transform source after patches, add more recipes --- recipes/bootloader/recipe.toml | 14 ++++++++++++++ recipes/drivers/recipe.toml | 27 +++++++++++++++++++++++++++ recipes/libiconv/recipe.toml | 14 ++++++++++++++ recipes/libjpeg/recipe.toml | 5 +++++ recipes/liborbital/recipe.toml | 10 ++++++++++ recipes/libsodium/recipe.toml | 9 +++++++++ recipes/xz/recipe.toml | 12 ++++-------- src/bin/cook.rs | 10 +++++++++- src/recipe.rs | 3 +++ 9 files changed, 95 insertions(+), 9 deletions(-) create mode 100644 recipes/bootloader/recipe.toml create mode 100644 recipes/drivers/recipe.toml create mode 100644 recipes/libiconv/recipe.toml create mode 100644 recipes/libjpeg/recipe.toml create mode 100644 recipes/liborbital/recipe.toml create mode 100644 recipes/libsodium/recipe.toml diff --git a/recipes/bootloader/recipe.toml b/recipes/bootloader/recipe.toml new file mode 100644 index 000000000..dacd541c2 --- /dev/null +++ b/recipes/bootloader/recipe.toml @@ -0,0 +1,14 @@ +[source] +git = "https://gitlab.redox-os.org/redox-os/bootloader.git" + +[build] +template = "custom" +script = """ +ARCH="$(echo "${TARGET}" | cut -d - -f1)" +nasm \ + -f bin \ + -o "${COOKBOOK_STAGE}/bootloader" \ + -D "ARCH_${ARCH}" \ + -i"${COOKBOOK_SOURCE}/${ARCH}/" \ + "${COOKBOOK_SOURCE}/${ARCH}/disk.asm" +""" diff --git a/recipes/drivers/recipe.toml b/recipes/drivers/recipe.toml new file mode 100644 index 000000000..fdb437697 --- /dev/null +++ b/recipes/drivers/recipe.toml @@ -0,0 +1,27 @@ +[source] +git = "https://gitlab.redox-os.org/redox-os/drivers.git" + +[build] +template = "custom" +script = """ +redoxer build --release \ + --manifest-path "${COOKBOOK_SOURCE}/Cargo.toml" \ + --workspace + +mkdir -pv "${COOKBOOK_STAGE}/bin" +find "target/${TARGET}/release" \ + -maxdepth 1 \ + -executable \ + -type f \ + -exec cp -v {} "${COOKBOOK_STAGE}/bin/" ';' + +mkdir -pv "${COOKBOOK_STAGE}/etc/pcid" +cp -v "${COOKBOOK_SOURCE}/initfs.toml" "${COOKBOOK_STAGE}/etc/pcid/initfs.toml" + +mkdir -pv "${COOKBOOK_STAGE}/etc/pcid.d" +find "${COOKBOOK_SOURCE}" -maxdepth 2 -type f -name 'config.toml' | while read conf +do + driver="$(basename "$(dirname "$conf")")" + cp -v "$conf" "${COOKBOOK_STAGE}/etc/pcid.d/$driver.toml" +done +""" diff --git a/recipes/libiconv/recipe.toml b/recipes/libiconv/recipe.toml new file mode 100644 index 000000000..5ab4337a1 --- /dev/null +++ b/recipes/libiconv/recipe.toml @@ -0,0 +1,14 @@ +[source] +tar = "https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz" +patches = [ + "01_redox.patch" +] + +[build] +template = "custom" +script = """ +COOKBOOK_CONFIGURE_FLAGS+=( + ac_cv_have_decl_program_invocation_name=no +) +cookbook_configure +""" diff --git a/recipes/libjpeg/recipe.toml b/recipes/libjpeg/recipe.toml new file mode 100644 index 000000000..47859e1d2 --- /dev/null +++ b/recipes/libjpeg/recipe.toml @@ -0,0 +1,5 @@ +[source] +tar = "http://ijg.org/files/jpegsrc.v9c.tar.gz" + +[build] +template = "configure" diff --git a/recipes/liborbital/recipe.toml b/recipes/liborbital/recipe.toml new file mode 100644 index 000000000..cbbe41c9d --- /dev/null +++ b/recipes/liborbital/recipe.toml @@ -0,0 +1,10 @@ +[source] +git = "https://gitlab.redox-os.org/redox-os/liborbital.git" + +[build] +template = "custom" +script = """ +rsync -av --delete "${COOKBOOK_SOURCE}/" ./ +"${COOKBOOK_CARGO}" build --release +"${COOKBOOK_MAKE}" install HOST="${TARGET}" DESTDIR="${COOKBOOK_STAGE}" +""" diff --git a/recipes/libsodium/recipe.toml b/recipes/libsodium/recipe.toml new file mode 100644 index 000000000..cd4ed4937 --- /dev/null +++ b/recipes/libsodium/recipe.toml @@ -0,0 +1,9 @@ +[source] +tar = "https://github.com/jedisct1/libsodium/archive/1.0.16.tar.gz" +patches = [ + "random.patch" +] +script = "./autogen.sh" + +[build] +template = "configure" diff --git a/recipes/xz/recipe.toml b/recipes/xz/recipe.toml index 6180ff10b..3c19525af 100644 --- a/recipes/xz/recipe.toml +++ b/recipes/xz/recipe.toml @@ -5,20 +5,16 @@ patches = [ "02-o_noctty.patch", "03-no-signals.patch" ] - -[build] -template = "custom" script = """ -#TODO: simpler recipe -rsync -av --delete "${COOKBOOK_SOURCE}/" ./ - ./autogen.sh - chmod +w build-aux/config.sub wget -O build-aux/config.sub http://git.savannah.gnu.org/cgit/config.git/plain/config.sub +""" +[build] +template = "custom" +script = """ export CFLAGS="-static" -COOKBOOK_CONFIGURE="./configure" COOKBOOK_CONFIGURE_FLAGS=( --host="${TARGET}" --prefix="" diff --git a/src/bin/cook.rs b/src/bin/cook.rs index 43c188dd6..db2d2bdec 100644 --- a/src/bin/cook.rs +++ b/src/bin/cook.rs @@ -173,7 +173,7 @@ fn fetch(recipe_dir: &Path, source: &SourceRecipe) -> Result<PathBuf, String> { command.arg("submodule").arg("update").arg("--init").arg("--recursive"); run_command(command)?; }, - SourceRecipe::Tar { tar, blake3, sha256, patches } => { + SourceRecipe::Tar { tar, blake3, sha256, patches, script } => { if ! source_dir.is_dir() { // Download tar //TODO: replace wget @@ -266,6 +266,14 @@ fn fetch(recipe_dir: &Path, source: &SourceRecipe) -> Result<PathBuf, String> { run_command_stdin(command, patch.as_bytes())?; } + // Run source script + if let Some(script) = script { + let mut command = Command::new("bash"); + command.arg("-ex"); + command.current_dir(&source_dir_tmp); + run_command_stdin(command, script.as_bytes())?; + } + // Move source.tmp to source atomically rename(&source_dir_tmp, &source_dir)?; } diff --git a/src/recipe.rs b/src/recipe.rs index 7385076bf..972029243 100644 --- a/src/recipe.rs +++ b/src/recipe.rs @@ -29,6 +29,8 @@ pub enum SourceRecipe { /// A list of patch files to apply to the source #[serde(default)] patches: Vec<String>, + /// Optional script to run to prepare the source, such as ./autogen.sh + script: Option<String>, }, } @@ -129,6 +131,7 @@ mod tests { blake3: None, sha256: Some("4f3fc6178a533d392064f14776b23c397ed4b9f48f5de297aba73b643f955c08".to_string()), patches: Vec::new(), + script: None, }, build: BuildRecipe { kind: BuildKind::Custom { -- GitLab