manganis_core/
linker.rs

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
//! Utilities for working with Manganis assets in the linker. This module defines [`LinkSection`] which has information about what section manganis assets are stored in on each platform.

/// Information about the manganis link section for a given platform
#[derive(Debug, Clone, Copy)]
pub struct LinkSection {
    /// The link section we pass to the static
    pub link_section: &'static str,
    /// The name of the section we find in the binary
    pub name: &'static str,
}

impl LinkSection {
    /// The list of link sections for all supported platforms
    pub const ALL: &'static [&'static LinkSection] =
        &[Self::WASM, Self::MACOS, Self::WINDOWS, Self::ILLUMOS];

    /// Returns the link section used in linux, android, fuchsia, psp, freebsd, and wasm32
    pub const WASM: &'static LinkSection = &LinkSection {
        link_section: "manganis",
        name: "manganis",
    };

    /// Returns the link section used in macOS, iOS, tvOS
    pub const MACOS: &'static LinkSection = &LinkSection {
        link_section: "__DATA,manganis,regular,no_dead_strip",
        name: "manganis",
    };

    /// Returns the link section used in windows
    pub const WINDOWS: &'static LinkSection = &LinkSection {
        link_section: "mg",
        name: "mg",
    };

    /// Returns the link section used in illumos
    pub const ILLUMOS: &'static LinkSection = &LinkSection {
        link_section: "set_manganis",
        name: "set_manganis",
    };

    /// The link section used on the current platform
    pub const CURRENT: &'static LinkSection = {
        #[cfg(any(
            target_os = "none",
            target_os = "linux",
            target_os = "android",
            target_os = "fuchsia",
            target_os = "psp",
            target_os = "freebsd",
            target_arch = "wasm32"
        ))]
        {
            Self::WASM
        }

        #[cfg(any(target_os = "macos", target_os = "ios", target_os = "tvos"))]
        {
            Self::MACOS
        }

        #[cfg(target_os = "windows")]
        {
            Self::WINDOWS
        }

        #[cfg(target_os = "illumos")]
        {
            Self::ILLUMOS
        }
    };
}