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