Skip to content
Snippets Groups Projects
Commit 9c359bcf authored by Jeremy Soller's avatar Jeremy Soller
Browse files

Merge branch 'dynamic_linking' into 'master'

fix(coobook): separate shared deps

See merge request redox-os/cookbook!435
parents c3a83083 1eb6a6b0
No related branches found
No related tags found
No related merge requests found
......@@ -2,4 +2,11 @@
git = "https://gitlab.redox-os.org/redox-os/ion.git"
[build]
template = "cargo"
template = "custom"
script = """
DYNAMIC_INIT
cookbook_cargo
"""
[package]
shared-deps = ["libgcc"]
......@@ -17,3 +17,5 @@ cp -rp "$COOKBOOK_SOURCE/." ./
cookbook_configure
"""
[package]
shared-deps = ["libgcc"]
......@@ -17,3 +17,5 @@ DYNAMIC_INIT
cookbook_configure
"""
[package]
shared-deps = ["libgcc"]
......@@ -38,3 +38,6 @@ else
fi
cookbook_configure
"""
[package]
shared-deps = ["libgcc"]
......@@ -16,3 +16,5 @@ DYNAMIC_INIT
cookbook_configure
"""
[package]
shared-deps = ["libgcc", "libgmp"]
......@@ -19,3 +19,9 @@ DYNAMIC_INIT
cookbook_configure
"""
[package]
shared-deps = [
"libgcc",
"libgmp",
"libmpfr",
]
......@@ -16,3 +16,6 @@ COOKBOOK_CONFIGURE_FLAGS+=(
)
cookbook_configure
"""
[package]
shared-deps = ["libgcc"]
......@@ -11,3 +11,5 @@ script = """
"${COOKBOOK_MAKE}" install DESTDIR="${COOKBOOK_STAGE}"
"""
[package]
shared-deps = ["libgcc"]
......@@ -37,11 +37,10 @@ cookbook_configure
"""
[package]
dependencies = [
shared-deps = [
"libgcc",
"expat",
"libgmp",
"libmpfr",
"zlib",
]
#TODO compiled but not tested
[source]
tar = "https://github.com/NixOS/patchelf/releases/download/0.18.0/patchelf-0.18.0.tar.bz2"
blake3 = "f843b32bdf3ee8a1f465e92d3fef34f30c48ccef9c112fdb793e2e7f2ae7283a"
script = """
DYNAMIC_INIT
autotools_recursive_regenerate
"""
[build]
template = "configure"
template = "custom"
script = """
DYNAMIC_INIT
cookbook_configure
"""
[package]
shared-deps = ["libgcc"]
......@@ -11,6 +11,12 @@ use std::{
use termion::{color, style};
use walkdir::{DirEntry, WalkDir};
fn should_build_shared() -> bool {
use std::sync::OnceLock;
static YES: OnceLock<bool> = OnceLock::new();
*YES.get_or_init(|| env::var("COOKBOOK_PREFER_STATIC").expect("COOKBOOK_PREFER_STATIC").is_empty())
}
fn remove_all(path: &Path) -> Result<(), String> {
if path.is_dir() {
fs::remove_dir_all(path)
......@@ -639,6 +645,38 @@ function cookbook_configure {
"${COOKBOOK_MAKE}" -j "${COOKBOOK_MAKE_JOBS}"
"${COOKBOOK_MAKE}" install DESTDIR="${COOKBOOK_STAGE}"
}
function cookbook_cmake {
cat > CMakeToolchain-x86_64.cmake <<EOF
set(CMAKE_SYSTEM_NAME UnixPaths)
set(CMAKE_FIND_ROOT_PATH ${COOKBOOK_SYSROOT})
set(CMAKE_C_COMPILER ${TARGET}-gcc)
set(CMAKE_CXX_COMPILER ${TARGET}-g++)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,")
set(CMAKE_PLATFORM_USES_PATH_WHEN_NO_SONAME 1)
EOF
cmake "${COOKBOOK_SOURCE}" \
-DCMAKE_TOOLCHAIN_FILE=./CMakeToolchain-x86_64.cmake
-DCMAKE_INSTALL_PREFIX="." \
-DCMAKE_INSTALL_LIBDIR=lib \
-DCMAKE_INSTALL_SBINDIR=bin \
-DCMAKE_INSTALL_INCLUDEDIR="include" \
-DCMAKE_INSTALL_OLDINCLUDEDIR="/include" \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=True \
-DENABLE_STATIC=False \
-GNinja \
-Wno-dev \
"${COOKBOOK_CMAKE_FLAGS[@]}"
ninja -j"${COOKBOOK_MAKE_JOBS}"
DESTDIR="${COOKBOOK_STAGE}" ninja install -j"${COOKBOOK_MAKE_JOBS}"
}
"#;
let post_script = r#"# Common post script
......@@ -787,12 +825,17 @@ fn package(
target: String,
depends: Vec<String>,
}
let depends = if should_build_shared() {
package.dependencies.iter().chain(package.shared_deps.iter()).cloned().collect()
} else {
package.dependencies.clone()
};
let stage_toml = toml::to_string(&StageToml {
name: name.into(),
version: "TODO".into(),
target: env::var("TARGET")
.map_err(|err| format!("failed to read TARGET: {:?}", err))?,
depends: package.dependencies.clone(),
depends
})
.map_err(|err| format!("failed to serialize stage.toml: {:?}", err))?;
fs::write(target_dir.join("stage.toml"), stage_toml)
......
......@@ -78,6 +78,8 @@ pub struct BuildRecipe {
pub struct PackageRecipe {
#[serde(default)]
pub dependencies: Vec<String>,
#[serde(rename = "shared-deps", default)]
pub shared_deps: Vec<String>,
}
/// Everything required to build a Redox package
......@@ -129,6 +131,7 @@ mod tests {
},
package: PackageRecipe {
dependencies: Vec::new(),
shared_deps: Vec::new(),
},
}
);
......@@ -171,6 +174,7 @@ mod tests {
},
package: PackageRecipe {
dependencies: Vec::new(),
shared_deps: Vec::new(),
},
}
);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment