xref: /llvm-project/llvm/utils/gn/secondary/llvm/lib/Target/targets.gni (revision 58961e2e4fac134d6d4683c1cfda148fd62a9fe6)
1import("//llvm/utils/gn/build/toolchain/compiler.gni")
2
3declare_args() {
4  # The target archs LLVM should support. Defaults to the host arch.
5  # Set to a list, e.g. `llvm_targets_to_build = [ "X86", "ARM" ]`,
6  # or to the string "all" to get all known targets.
7  llvm_targets_to_build = "host"
8}
9
10# FIXME: Port the remaining targets.
11llvm_all_stable_targets = [
12  "AArch64",
13  "AMDGPU",
14  "ARM",
15  "AVR",
16  "BPF",
17  "Hexagon",
18  "Lanai",
19  "LoongArch",
20  "Mips",
21  "NVPTX",
22  "PowerPC",
23  "RISCV",
24  "Sparc",
25  "SystemZ",
26  "WebAssembly",
27  "X86",
28]
29
30llvm_all_experimental_targets = []
31
32llvm_all_targets = llvm_all_stable_targets + llvm_all_experimental_targets
33
34# FIXME: This should be based off target_cpu once cross compiles work.
35if (host_cpu == "arm64") {
36  native_target = "AArch64"
37} else if (host_cpu == "arm") {
38  native_target = "ARM"
39} else if (host_cpu == "ppc" || host_cpu == "ppc64") {
40  native_target = "PowerPC"
41} else if (host_cpu == "x86" || host_cpu == "x64") {
42  native_target = "X86"
43} else {
44  assert(false, "add your host_cpu above")
45}
46
47if (llvm_targets_to_build == "host") {
48  llvm_targets_to_build = [ native_target ]
49} else if (llvm_targets_to_build == "all") {
50  llvm_targets_to_build = llvm_all_stable_targets
51} else if (llvm_targets_to_build == "experimental") {
52  llvm_targets_to_build = llvm_all_targets
53}
54
55# Validate that llvm_targets_to_build is set to a list of valid targets,
56# and remember which targets are built where needed (for conditionally-built
57# unittest targets).
58llvm_build_AArch64 = false
59llvm_build_AMDGPU = false
60llvm_build_ARM = false
61llvm_build_BPF = false
62llvm_build_LoongArch = false
63llvm_build_Mips = false
64llvm_build_PowerPC = false
65llvm_build_RISCV = false
66llvm_build_SystemZ = false
67llvm_build_WebAssembly = false
68llvm_build_X86 = false
69llvm_build_native = false
70foreach(target, llvm_targets_to_build) {
71  if (target == native_target) {
72    llvm_build_native = true
73  }
74  if (target == "AArch64") {
75    llvm_build_AArch64 = true
76  } else if (target == "AMDGPU") {
77    llvm_build_AMDGPU = true
78  } else if (target == "ARM") {
79    llvm_build_ARM = true
80  } else if (target == "BPF") {
81    llvm_build_BPF = true
82  } else if (target == "LoongArch") {
83    llvm_build_LoongArch = true
84  } else if (target == "Mips") {
85    llvm_build_Mips = true
86  } else if (target == "PowerPC") {
87    llvm_build_PowerPC = true
88  } else if (target == "RISCV") {
89    llvm_build_RISCV = true
90  } else if (target == "SystemZ") {
91    llvm_build_SystemZ = true
92  } else if (target == "WebAssembly") {
93    llvm_build_WebAssembly = true
94  } else if (target == "X86") {
95    llvm_build_X86 = true
96  } else if (target == "AVR" || target == "Hexagon" || target == "Lanai" ||
97             target == "NVPTX" || target == "RISCV" || target == "Sparc" ||
98             target == "SystemZ") {
99    # Nothing to do.
100  } else {
101    all_targets_string = ""
102    foreach(target, llvm_all_targets) {
103      all_targets_string += "$0x0a    " + target
104    }
105    assert(false, "Unknown target '$target' in llvm_targets_to_build. " +
106                      "Known targets:" + all_targets_string)
107  }
108}
109
110supported_android_toolchains = []
111
112if (android_ndk_path != "") {
113  if (llvm_build_AArch64) {
114    supported_android_toolchains +=
115        [ "//llvm/utils/gn/build/toolchain:stage2_android_aarch64" ]
116  }
117  if (llvm_build_ARM) {
118    supported_android_toolchains +=
119        [ "//llvm/utils/gn/build/toolchain:stage2_android_arm" ]
120  }
121  if (llvm_build_X86) {
122    supported_android_toolchains += [
123      "//llvm/utils/gn/build/toolchain:stage2_android_x64",
124      "//llvm/utils/gn/build/toolchain:stage2_android_x86",
125    ]
126  }
127}
128