132 lines
4.3 KiB
Rust
132 lines
4.3 KiB
Rust
#[cfg(not(feature = "dox"))]
|
|
fn main() -> anyhow::Result<()> {
|
|
use download_cef::{CefIndex, OsAndArch};
|
|
use std::{env, fs, path::PathBuf};
|
|
|
|
println!("cargo::rerun-if-changed=build.rs");
|
|
|
|
let target = env::var("TARGET")?;
|
|
let os_arch = OsAndArch::try_from(target.as_str())?;
|
|
|
|
println!("cargo::rerun-if-env-changed=FLATPAK");
|
|
println!("cargo::rerun-if-env-changed=CEF_PATH");
|
|
let cef_path_env = env::var("FLATPAK")
|
|
.map(|_| String::from("/usr/lib"))
|
|
.or_else(|_| env::var("CEF_PATH"));
|
|
|
|
let cef_dir = match cef_path_env {
|
|
Ok(cef_path) => {
|
|
// Allow overriding the CEF path with environment variables.
|
|
println!("Using CEF path from environment: {cef_path}");
|
|
download_cef::check_archive_json(&env::var("CARGO_PKG_VERSION")?, &cef_path)?;
|
|
PathBuf::from(cef_path)
|
|
}
|
|
Err(_) => {
|
|
let out_dir = PathBuf::from(env::var("OUT_DIR")?);
|
|
let cef_dir = os_arch.to_string();
|
|
let cef_dir = out_dir.join(&cef_dir);
|
|
|
|
if !fs::exists(&cef_dir)? {
|
|
let cef_version = download_cef::default_version(&env::var("CARGO_PKG_VERSION")?);
|
|
let index = CefIndex::download()?;
|
|
let platform = index.platform(&target)?;
|
|
let version = platform.version(&cef_version)?;
|
|
|
|
let archive = version.download_archive(&out_dir, false)?;
|
|
let extracted_dir =
|
|
download_cef::extract_target_archive(&target, &archive, &out_dir, false)?;
|
|
if extracted_dir != cef_dir {
|
|
return Err(anyhow::anyhow!(
|
|
"extracted dir {extracted_dir:?} does not match cef_dir {cef_dir:?}",
|
|
));
|
|
}
|
|
|
|
version.write_archive_json(extracted_dir)?;
|
|
}
|
|
|
|
cef_dir
|
|
}
|
|
};
|
|
|
|
let cef_dir = cef_dir.display().to_string();
|
|
|
|
println!("cargo::metadata=CEF_DIR={cef_dir}");
|
|
println!("cargo::rustc-link-search=native={cef_dir}");
|
|
|
|
let mut cef_dll_wrapper = cmake::Config::new(&cef_dir);
|
|
cef_dll_wrapper
|
|
.generator("Ninja")
|
|
.profile("RelWithDebInfo")
|
|
.build_target("libcef_dll_wrapper");
|
|
|
|
let project_arch = match os_arch.arch {
|
|
"aarch64" => "arm64",
|
|
arch => arch,
|
|
};
|
|
|
|
let sandbox = if cfg!(feature = "sandbox") {
|
|
"ON"
|
|
} else {
|
|
"OFF"
|
|
};
|
|
|
|
match os_arch.os {
|
|
"linux" => {
|
|
println!("cargo::rustc-link-lib=dylib=cef");
|
|
}
|
|
"windows" => {
|
|
let sdk_libs = [
|
|
"comctl32.lib",
|
|
"delayimp.lib",
|
|
"mincore.lib",
|
|
"powrprof.lib",
|
|
"propsys.lib",
|
|
"runtimeobject.lib",
|
|
"setupapi.lib",
|
|
"shcore.lib",
|
|
"shell32.lib",
|
|
"shlwapi.lib",
|
|
"user32.lib",
|
|
"version.lib",
|
|
"wbemuuid.lib",
|
|
"winmm.lib",
|
|
]
|
|
.join(" ");
|
|
|
|
let build_dir = cef_dll_wrapper
|
|
.define("CMAKE_MSVC_RUNTIME_LIBRARY", "MultiThreaded")
|
|
.define("CMAKE_OBJECT_PATH_MAX", "500")
|
|
.define("CMAKE_STATIC_LINKER_FLAGS", &sdk_libs)
|
|
.define("PROJECT_ARCH", project_arch)
|
|
.define("USE_SANDBOX", sandbox)
|
|
.build()
|
|
.display()
|
|
.to_string();
|
|
|
|
println!("cargo::rustc-link-search=native={build_dir}/build/libcef_dll_wrapper");
|
|
println!("cargo::rustc-link-lib=static=libcef_dll_wrapper");
|
|
|
|
println!("cargo::rustc-link-lib=dylib=libcef");
|
|
}
|
|
"macos" => {
|
|
println!("cargo::rustc-link-lib=framework=AppKit");
|
|
|
|
let build_dir = cef_dll_wrapper
|
|
.no_default_flags(true)
|
|
.define("PROJECT_ARCH", project_arch)
|
|
.define("USE_SANDBOX", sandbox)
|
|
.build()
|
|
.display()
|
|
.to_string();
|
|
println!("cargo::rustc-link-search=native={build_dir}/build/libcef_dll_wrapper");
|
|
println!("cargo::rustc-link-lib=static=cef_dll_wrapper");
|
|
}
|
|
os => unimplemented!("unknown target {os}"),
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[cfg(feature = "dox")]
|
|
fn main() {}
|