libjxl_src/
lib.rs

1mod build;
2pub use build::build;
3
4pub fn out_dir() -> &'static str {
5    std::env!("OUT_DIR")
6}
7
8pub fn print_cargo_link() {
9    print_cargo_link_from(out_dir())
10}
11
12/**
13 * @param dst Pass OUT_DIR environment variable value.
14 */
15pub fn print_cargo_link_from(dst: &str) {
16    #[cfg(all(windows, debug_assertions))]
17    // Prevents "undefined symbol _CrtDbgReport" linker error
18    println!("cargo:rustc-link-lib=dylib=msvcrtd");
19
20    println!("cargo:rustc-link-search=native={}/lib", dst);
21    println!("cargo:rustc-link-search=native={}/build/third_party", dst);
22    println!(
23        "cargo:rustc-link-search=native={}/build/third_party/brotli",
24        dst
25    );
26    println!(
27        "cargo:rustc-link-search=native={}/build/third_party/highway",
28        dst
29    );
30
31    if cfg!(windows) {
32        println!("cargo:rustc-link-lib=static=jxl-static");
33        println!("cargo:rustc-link-lib=static=jxl_threads-static");
34    } else {
35        println!("cargo:rustc-link-lib=static=jxl");
36        println!("cargo:rustc-link-lib=static=jxl_threads");
37    }
38    println!("cargo:rustc-link-lib=static=brotlicommon-static");
39    println!("cargo:rustc-link-lib=static=brotlidec-static");
40    println!("cargo:rustc-link-lib=static=brotlienc-static");
41    println!("cargo:rustc-link-lib=static=hwy");
42
43    #[cfg(not(windows))]
44    // The order matters; this should be after other libs or the linker fails
45    println!("cargo:rustc-link-lib=dylib=stdc++");
46}
47
48#[cfg(test)]
49mod tests {
50    #[test]
51    fn test_print() {
52        super::print_cargo_link();
53    }
54}