xref: /aosp_15_r20/external/cronet/build/config/arm.gni (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker# Copyright 2014 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Workerimport("//build/config/chromeos/ui_mode.gni")
6*6777b538SAndroid Build Coastguard Workerimport("//build/config/v8_target_cpu.gni")
7*6777b538SAndroid Build Coastguard Worker
8*6777b538SAndroid Build Coastguard Worker# These are primarily relevant in current_cpu == "arm" contexts, where
9*6777b538SAndroid Build Coastguard Worker# ARM code is being compiled.  But they can also be relevant in the
10*6777b538SAndroid Build Coastguard Worker# other contexts when the code will change its behavior based on the
11*6777b538SAndroid Build Coastguard Worker# cpu it wants to generate code for.
12*6777b538SAndroid Build Coastguard Workerif (current_cpu == "arm" || v8_current_cpu == "arm") {
13*6777b538SAndroid Build Coastguard Worker  declare_args() {
14*6777b538SAndroid Build Coastguard Worker    # Version of the ARM processor when compiling on ARM. Ignored on non-ARM
15*6777b538SAndroid Build Coastguard Worker    # platforms.
16*6777b538SAndroid Build Coastguard Worker    arm_version = 7
17*6777b538SAndroid Build Coastguard Worker
18*6777b538SAndroid Build Coastguard Worker    # The ARM architecture. This will be a string like "armv6" or "armv7-a".
19*6777b538SAndroid Build Coastguard Worker    # An empty string means to use the default for the arm_version.
20*6777b538SAndroid Build Coastguard Worker    arm_arch = ""
21*6777b538SAndroid Build Coastguard Worker
22*6777b538SAndroid Build Coastguard Worker    # The ARM floating point hardware. This will be a string like "neon" or
23*6777b538SAndroid Build Coastguard Worker    # "vfpv3". An empty string means to use the default for the arm_version.
24*6777b538SAndroid Build Coastguard Worker    arm_fpu = ""
25*6777b538SAndroid Build Coastguard Worker
26*6777b538SAndroid Build Coastguard Worker    # The ARM variant-specific tuning mode. This will be a string like "armv6"
27*6777b538SAndroid Build Coastguard Worker    # or "cortex-a15". An empty string means to use the default for the
28*6777b538SAndroid Build Coastguard Worker    # arm_version.
29*6777b538SAndroid Build Coastguard Worker    arm_tune = ""
30*6777b538SAndroid Build Coastguard Worker
31*6777b538SAndroid Build Coastguard Worker    # Whether to use the neon FPU instruction set or not.
32*6777b538SAndroid Build Coastguard Worker    arm_use_neon = ""
33*6777b538SAndroid Build Coastguard Worker
34*6777b538SAndroid Build Coastguard Worker    # Whether to enable optional NEON code paths.
35*6777b538SAndroid Build Coastguard Worker    arm_optionally_use_neon = false
36*6777b538SAndroid Build Coastguard Worker
37*6777b538SAndroid Build Coastguard Worker    # Thumb is a reduced instruction set available on some ARM processors that
38*6777b538SAndroid Build Coastguard Worker    # has increased code density.
39*6777b538SAndroid Build Coastguard Worker    arm_use_thumb = true
40*6777b538SAndroid Build Coastguard Worker  }
41*6777b538SAndroid Build Coastguard Worker
42*6777b538SAndroid Build Coastguard Worker  # For lacros build, we use ARM v8 by default.
43*6777b538SAndroid Build Coastguard Worker  if (is_chromeos_lacros && arm_arch == "") {
44*6777b538SAndroid Build Coastguard Worker    # TODO(crbug.com/1467681) Enable i8mm and dotprod instructions for ffmpeg
45*6777b538SAndroid Build Coastguard Worker    # if ever we update to a version of arm that supports these instructions.
46*6777b538SAndroid Build Coastguard Worker    arm_version = 8
47*6777b538SAndroid Build Coastguard Worker    arm_arch = "armv8-a+crc"
48*6777b538SAndroid Build Coastguard Worker  }
49*6777b538SAndroid Build Coastguard Worker
50*6777b538SAndroid Build Coastguard Worker  if (current_os == "android" || target_os == "android") {
51*6777b538SAndroid Build Coastguard Worker    arm_float_abi = "softfp"
52*6777b538SAndroid Build Coastguard Worker  } else {
53*6777b538SAndroid Build Coastguard Worker    declare_args() {
54*6777b538SAndroid Build Coastguard Worker      # The ARM floating point mode. This is either the string "hard", "soft",
55*6777b538SAndroid Build Coastguard Worker      # or "softfp". An empty string means to use the default one for the
56*6777b538SAndroid Build Coastguard Worker      # arm_version.
57*6777b538SAndroid Build Coastguard Worker      arm_float_abi = ""
58*6777b538SAndroid Build Coastguard Worker    }
59*6777b538SAndroid Build Coastguard Worker  }
60*6777b538SAndroid Build Coastguard Worker  assert(arm_float_abi == "" || arm_float_abi == "hard" ||
61*6777b538SAndroid Build Coastguard Worker         arm_float_abi == "soft" || arm_float_abi == "softfp")
62*6777b538SAndroid Build Coastguard Worker
63*6777b538SAndroid Build Coastguard Worker  if (arm_use_neon == "") {
64*6777b538SAndroid Build Coastguard Worker    if (current_os == "linux" && target_cpu != v8_target_cpu) {
65*6777b538SAndroid Build Coastguard Worker      # Don't use neon on V8 simulator builds as a default.
66*6777b538SAndroid Build Coastguard Worker      arm_use_neon = false
67*6777b538SAndroid Build Coastguard Worker    } else {
68*6777b538SAndroid Build Coastguard Worker      arm_use_neon = true
69*6777b538SAndroid Build Coastguard Worker    }
70*6777b538SAndroid Build Coastguard Worker  }
71*6777b538SAndroid Build Coastguard Worker
72*6777b538SAndroid Build Coastguard Worker  if (arm_version == 6) {
73*6777b538SAndroid Build Coastguard Worker    if (arm_arch == "") {
74*6777b538SAndroid Build Coastguard Worker      # v8 can still with version 6 but only with the armv6k extension.
75*6777b538SAndroid Build Coastguard Worker      arm_arch = "armv6k"
76*6777b538SAndroid Build Coastguard Worker    }
77*6777b538SAndroid Build Coastguard Worker    if (arm_tune != "") {
78*6777b538SAndroid Build Coastguard Worker      arm_tune = ""
79*6777b538SAndroid Build Coastguard Worker    }
80*6777b538SAndroid Build Coastguard Worker    if (arm_float_abi == "") {
81*6777b538SAndroid Build Coastguard Worker      arm_float_abi = "softfp"
82*6777b538SAndroid Build Coastguard Worker    }
83*6777b538SAndroid Build Coastguard Worker    if (arm_fpu == "") {
84*6777b538SAndroid Build Coastguard Worker      arm_fpu = "vfp"
85*6777b538SAndroid Build Coastguard Worker    }
86*6777b538SAndroid Build Coastguard Worker    arm_use_thumb = false
87*6777b538SAndroid Build Coastguard Worker    arm_use_neon = false
88*6777b538SAndroid Build Coastguard Worker  } else if (arm_version == 7) {
89*6777b538SAndroid Build Coastguard Worker    if (arm_arch == "") {
90*6777b538SAndroid Build Coastguard Worker      arm_arch = "armv7-a"
91*6777b538SAndroid Build Coastguard Worker    }
92*6777b538SAndroid Build Coastguard Worker
93*6777b538SAndroid Build Coastguard Worker    if (arm_float_abi == "") {
94*6777b538SAndroid Build Coastguard Worker      if (current_os == "linux" && target_cpu != v8_target_cpu) {
95*6777b538SAndroid Build Coastguard Worker        # Default to the same as Android for V8 simulator builds.
96*6777b538SAndroid Build Coastguard Worker        arm_float_abi = "softfp"
97*6777b538SAndroid Build Coastguard Worker      } else {
98*6777b538SAndroid Build Coastguard Worker        arm_float_abi = "hard"
99*6777b538SAndroid Build Coastguard Worker      }
100*6777b538SAndroid Build Coastguard Worker    }
101*6777b538SAndroid Build Coastguard Worker
102*6777b538SAndroid Build Coastguard Worker    if (arm_fpu == "") {
103*6777b538SAndroid Build Coastguard Worker      if (arm_use_neon) {
104*6777b538SAndroid Build Coastguard Worker        arm_fpu = "neon"
105*6777b538SAndroid Build Coastguard Worker      } else {
106*6777b538SAndroid Build Coastguard Worker        arm_fpu = "vfpv3-d16"
107*6777b538SAndroid Build Coastguard Worker      }
108*6777b538SAndroid Build Coastguard Worker    }
109*6777b538SAndroid Build Coastguard Worker  } else if (arm_version == 8) {
110*6777b538SAndroid Build Coastguard Worker    if (arm_arch == "") {
111*6777b538SAndroid Build Coastguard Worker      arm_arch = "armv8-a"
112*6777b538SAndroid Build Coastguard Worker    }
113*6777b538SAndroid Build Coastguard Worker    if (arm_tune == "") {
114*6777b538SAndroid Build Coastguard Worker      arm_tune = "generic-armv8-a"
115*6777b538SAndroid Build Coastguard Worker    }
116*6777b538SAndroid Build Coastguard Worker
117*6777b538SAndroid Build Coastguard Worker    if (arm_float_abi == "") {
118*6777b538SAndroid Build Coastguard Worker      arm_float_abi = "hard"
119*6777b538SAndroid Build Coastguard Worker    }
120*6777b538SAndroid Build Coastguard Worker
121*6777b538SAndroid Build Coastguard Worker    if (arm_fpu == "") {
122*6777b538SAndroid Build Coastguard Worker      if (arm_use_neon) {
123*6777b538SAndroid Build Coastguard Worker        arm_fpu = "neon"
124*6777b538SAndroid Build Coastguard Worker      } else {
125*6777b538SAndroid Build Coastguard Worker        arm_fpu = "vfpv3-d16"
126*6777b538SAndroid Build Coastguard Worker      }
127*6777b538SAndroid Build Coastguard Worker    }
128*6777b538SAndroid Build Coastguard Worker  }
129*6777b538SAndroid Build Coastguard Worker} else if (current_cpu == "arm64" || v8_current_cpu == "arm64") {
130*6777b538SAndroid Build Coastguard Worker  # arm64 supports only "hard".
131*6777b538SAndroid Build Coastguard Worker  arm_float_abi = "hard"
132*6777b538SAndroid Build Coastguard Worker  arm_use_neon = true
133*6777b538SAndroid Build Coastguard Worker  declare_args() {
134*6777b538SAndroid Build Coastguard Worker    # Enables the new Armv8 branch protection features. Valid strings are:
135*6777b538SAndroid Build Coastguard Worker    # - "pac": Enables Pointer Authentication Code (PAC, featured in Armv8.3)
136*6777b538SAndroid Build Coastguard Worker    # - "standard": Enables both PAC and Branch Target Identification (Armv8.5).
137*6777b538SAndroid Build Coastguard Worker    # - "none": No branch protection.
138*6777b538SAndroid Build Coastguard Worker    arm_control_flow_integrity = "none"
139*6777b538SAndroid Build Coastguard Worker
140*6777b538SAndroid Build Coastguard Worker    if ((is_android || is_linux) && target_cpu == "arm64") {
141*6777b538SAndroid Build Coastguard Worker      # Enable PAC and BTI on AArch64 Linux/Android systems.
142*6777b538SAndroid Build Coastguard Worker      # target_cpu == "arm64" filters out some cases (e.g. the ChromeOS x64
143*6777b538SAndroid Build Coastguard Worker      # MSAN build) where the target platform is x64, but V8 is configured to
144*6777b538SAndroid Build Coastguard Worker      # use the arm64 simulator.
145*6777b538SAndroid Build Coastguard Worker      arm_control_flow_integrity = "standard"
146*6777b538SAndroid Build Coastguard Worker    }
147*6777b538SAndroid Build Coastguard Worker  }
148*6777b538SAndroid Build Coastguard Worker  assert(arm_control_flow_integrity == "none" ||
149*6777b538SAndroid Build Coastguard Worker             arm_control_flow_integrity == "standard" ||
150*6777b538SAndroid Build Coastguard Worker             arm_control_flow_integrity == "pac",
151*6777b538SAndroid Build Coastguard Worker         "Invalid branch protection option")
152*6777b538SAndroid Build Coastguard Worker}
153