compiler_llvm_builder/platforms/
aarch64_macos.rs

1//!
2//! The ZKsync LLVM arm64 `macos-aarch64` builder.
3//!
4
5use std::collections::HashSet;
6use std::process::Command;
7
8use crate::build_type::BuildType;
9use crate::ccache_variant::CcacheVariant;
10use crate::llvm_path::LLVMPath;
11use crate::llvm_project::LLVMProject;
12use crate::platforms::Platform;
13use crate::sanitizer::Sanitizer;
14use crate::target_triple::TargetTriple;
15
16///
17/// The building sequence.
18///
19#[allow(clippy::too_many_arguments)]
20pub fn build(
21    build_type: BuildType,
22    targets: HashSet<Platform>,
23    llvm_projects: HashSet<LLVMProject>,
24    enable_rtti: bool,
25    default_target: Option<TargetTriple>,
26    enable_tests: bool,
27    enable_coverage: bool,
28    extra_args: Vec<String>,
29    ccache_variant: Option<CcacheVariant>,
30    enable_assertions: bool,
31    sanitizer: Option<Sanitizer>,
32) -> anyhow::Result<()> {
33    crate::utils::check_presence("cmake")?;
34    crate::utils::check_presence("ninja")?;
35
36    let llvm_module_llvm = LLVMPath::llvm_module_llvm()?;
37    let llvm_build_final = LLVMPath::llvm_build_final()?;
38    let llvm_target_final = LLVMPath::llvm_target_final()?;
39
40    crate::utils::command(
41        Command::new("cmake")
42            .args([
43                "-S",
44                llvm_module_llvm.to_string_lossy().as_ref(),
45                "-B",
46                llvm_build_final.to_string_lossy().as_ref(),
47                "-G",
48                "Ninja",
49                format!(
50                    "-DCMAKE_INSTALL_PREFIX='{}'",
51                    llvm_target_final.to_string_lossy().as_ref(),
52                )
53                .as_str(),
54                format!("-DCMAKE_BUILD_TYPE='{build_type}'").as_str(),
55                format!(
56                    "-DLLVM_TARGETS_TO_BUILD='{}'",
57                    targets
58                        .into_iter()
59                        .map(|platform| platform.to_string())
60                        .collect::<Vec<String>>()
61                        .join(";")
62                )
63                .as_str(),
64                format!(
65                    "-DLLVM_ENABLE_PROJECTS='{}'",
66                    llvm_projects
67                        .into_iter()
68                        .map(|project| project.to_string())
69                        .collect::<Vec<String>>()
70                        .join(";")
71                )
72                .as_str(),
73                "-DCMAKE_OSX_DEPLOYMENT_TARGET='11.0'",
74            ])
75            .args(crate::platforms::shared::shared_build_opts_default_target(
76                default_target,
77            ))
78            .args(crate::platforms::shared::shared_build_opts_tests(
79                enable_tests,
80            ))
81            .args(crate::platforms::shared::shared_build_opts_coverage(
82                enable_coverage,
83            ))
84            .args(crate::platforms::shared::SHARED_BUILD_OPTS)
85            .args(crate::platforms::shared::SHARED_BUILD_OPTS_NOT_MUSL)
86            .args(crate::platforms::shared::shared_build_opts_werror())
87            .args(extra_args)
88            .args(crate::platforms::shared::shared_build_opts_ccache(
89                ccache_variant,
90            ))
91            .args(crate::platforms::shared::shared_build_opts_assertions(
92                enable_assertions,
93            ))
94            .args(crate::platforms::shared::shared_build_opts_rtti(
95                enable_rtti,
96            ))
97            .args(crate::platforms::shared::macos_build_opts_ignore_dupicate_libs_warnings())
98            .args(crate::platforms::shared::shared_build_opts_sanitizers(
99                sanitizer,
100            )),
101        "LLVM building cmake",
102    )?;
103
104    crate::utils::ninja(llvm_build_final.as_ref())?;
105
106    Ok(())
107}