File: build.rs

package info (click to toggle)
rust-generator 0.6.20-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, sid
  • size: 260 kB
  • sloc: asm: 253; makefile: 4
file content (85 lines) | stat: -rw-r--r-- 2,204 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
extern crate cc;
extern crate rustc_version;

use std::env;
use std::path::PathBuf;

use rustc_version::{version_meta, Channel};

fn main() {
    // Set cfg flags depending on release channel
    if let Channel::Nightly = version_meta().unwrap().channel {
        return println!("cargo:rustc-cfg=nightly");
    }

    // for the stable build asm lib
    let target: String = env::var("TARGET").unwrap();
    let is_win_gnu = target.ends_with("windows-gnu");
    let is_win_msvc = target.ends_with("windows-msvc");
    let is_win = is_win_gnu || is_win_msvc;

    let arch = match target.split('-').next().unwrap() {
        // "arm" | "armv7" | "armv7s" => "arm",
        // "arm64" | "aarch64" => "arm64",
        // "x86" | "i386" | "i486" | "i586" | "i686" => "i386",
        // "mips" | "mipsel" => "mips32",
        // "powerpc" => "ppc32",
        // "powerpc64" => "ppc64",
        "x86_64" => "x86_64",
        _ => {
            panic!("Unsupported architecture: {}", target);
        }
    };

    let abi = match arch {
        "arm" | "arm64" => "aapcs",
        "mips32" => "o32",
        _ => {
            if is_win {
                "ms"
            } else {
                "sysv"
            }
        }
    };

    let format = if is_win {
        "pe"
    } else if target.contains("apple") {
        "macho"
    } else if target.ends_with("aix") {
        "xcoff"
    } else {
        "elf"
    };

    let (asm, ext) = if is_win_msvc {
        if arch == "arm" {
            ("armasm", "asm")
        } else {
            ("masm", "asm")
        }
    } else if is_win_gnu {
        ("gas", "asm")
    } else {
        ("gas", "S")
    };

    let mut path: PathBuf = "src/detail/asm".into();
    let mut config = cc::Build::new();

    if is_win_gnu {
        config.flag("-x").flag("assembler-with-cpp");
    }

    let file_name: [&str; 11] = ["asm", "_", arch, "_", abi, "_", format, "_", asm, ".", ext];
    let file_name = file_name.concat();

    path.push(file_name);
    config.file(path.to_str().unwrap());

    // create the static asm libary
    config.compile("libasm.a");

    println!("dh-cargo:deb-built-using=asm=0={}", env::var("CARGO_MANIFEST_DIR").unwrap());
}