compiler_llvm_builder/platforms/
aarch64_macos.rs1use 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#[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}