mirror of
https://gitlab.redox-os.org/redox-os/redox.git
synced 2026-06-23 13:24:17 +08:00
fix(cookbook): shared dependencies
These shall only be added iff `PREFER_STATIC` is not set. Signed-off-by: Anhad Singh <andypython@protonmail.com>
This commit is contained in:
parent
88ee0be35d
commit
8b663ee368
@ -8,3 +8,5 @@ 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",
|
||||
]
|
||||
|
||||
|
||||
@ -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(),
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user