compiler_llvm_builder/platforms/
aarch64_linux_gnu.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 enable_valgrind: bool,
33 valgrind_options: Vec<String>,
34) -> anyhow::Result<()> {
35 crate::utils::check_presence("cmake")?;
36 crate::utils::check_presence("clang")?;
37 crate::utils::check_presence("clang++")?;
38 crate::utils::check_presence("lld")?;
39 crate::utils::check_presence("ninja")?;
40
41 let llvm_module_llvm = LLVMPath::llvm_module_llvm()?;
42 let llvm_build_final = LLVMPath::llvm_build_final()?;
43 let llvm_target_final = LLVMPath::llvm_target_final()?;
44
45 crate::utils::command(
46 Command::new("cmake")
47 .args([
48 "-S",
49 llvm_module_llvm.to_string_lossy().as_ref(),
50 "-B",
51 llvm_build_final.to_string_lossy().as_ref(),
52 "-G",
53 "Ninja",
54 format!(
55 "-DCMAKE_INSTALL_PREFIX='{}'",
56 llvm_target_final.to_string_lossy().as_ref(),
57 )
58 .as_str(),
59 format!("-DCMAKE_BUILD_TYPE='{build_type}'").as_str(),
60 "-DCMAKE_C_COMPILER='clang'",
61 "-DCMAKE_CXX_COMPILER='clang++'",
62 format!(
63 "-DLLVM_TARGETS_TO_BUILD='{}'",
64 targets
65 .into_iter()
66 .map(|platform| platform.to_string())
67 .collect::<Vec<String>>()
68 .join(";")
69 )
70 .as_str(),
71 format!(
72 "-DLLVM_ENABLE_PROJECTS='{}'",
73 llvm_projects
74 .into_iter()
75 .map(|project| project.to_string())
76 .collect::<Vec<String>>()
77 .join(";")
78 )
79 .as_str(),
80 "-DLLVM_USE_LINKER='lld'",
81 ])
82 .args(crate::platforms::shared::shared_build_opts_default_target(
83 default_target,
84 ))
85 .args(crate::platforms::shared::shared_build_opts_tests(
86 enable_tests,
87 ))
88 .args(crate::platforms::shared::shared_build_opts_coverage(
89 enable_coverage,
90 ))
91 .args(crate::platforms::shared::SHARED_BUILD_OPTS)
92 .args(crate::platforms::shared::SHARED_BUILD_OPTS_NOT_MUSL)
93 .args(crate::platforms::shared::shared_build_opts_werror())
94 .args(extra_args)
95 .args(crate::platforms::shared::shared_build_opts_ccache(
96 ccache_variant,
97 ))
98 .args(crate::platforms::shared::shared_build_opts_assertions(
99 enable_assertions,
100 ))
101 .args(crate::platforms::shared::shared_build_opts_rtti(
102 enable_rtti,
103 ))
104 .args(crate::platforms::shared::shared_build_opts_sanitizers(
105 sanitizer,
106 ))
107 .args(crate::platforms::shared::shared_build_opts_valgrind(
108 enable_valgrind,
109 valgrind_options,
110 )),
111 "LLVM building cmake",
112 )?;
113 crate::utils::ninja(llvm_build_final.as_ref())?;
114 Ok(())
115}