diff options
Diffstat (limited to 'scripts/arm_compute_library_nn_driver.go')
-rw-r--r-- | scripts/arm_compute_library_nn_driver.go | 61 |
1 files changed, 55 insertions, 6 deletions
diff --git a/scripts/arm_compute_library_nn_driver.go b/scripts/arm_compute_library_nn_driver.go index 9413edf843..2aab2d3fe7 100644 --- a/scripts/arm_compute_library_nn_driver.go +++ b/scripts/arm_compute_library_nn_driver.go @@ -1,5 +1,5 @@ // -// Copyright © 2020 ARM Ltd. All rights reserved. +// Copyright © 2020-2023 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // @@ -11,20 +11,58 @@ import ( "strings" ) +func isVersionAtLeast(version_name string, target_version int) bool { + name_map := map[string]int { + "L": 5, "5": 5, + "M": 6, "6": 6, + "N": 7, "7": 7, + "O": 8, "8": 8, + "P": 9, "9": 9, + "Q": 10, "10": 10, + "R": 11, "11": 11, + "S": 12, "12": 12, + "T": 13, "13": 13, + "U": 14, "14": 14, + } + if _, ok := name_map[version_name]; ok { + return name_map[version_name] >= target_version + } else { + return false + } +} + func globalFlags(ctx android.BaseContext) []string { var cppflags []string - if ctx.AConfig().PlatformVersionName() == "Q" || ctx.AConfig().PlatformVersionName() == "10" { + if ctx.AConfig().PlatformVersionName() == "Q" || ctx.AConfig().PlatformVersionName() == "10" || + ctx.AConfig().PlatformVersionName() == "R" || ctx.AConfig().PlatformVersionName() == "11" || + ctx.AConfig().PlatformVersionName() == "S" || ctx.AConfig().PlatformVersionName() == "12" { cppflags = append(cppflags, "-fno-addrsig") } if ctx.AConfig().PlatformVersionName() == "R" || ctx.AConfig().PlatformVersionName() == "11" { - cppflags = append(cppflags, "-fno-addrsig") + for _, a := range ctx.DeviceConfig().Arches() { + theArch := a.ArchType.String() + if theArch == "armv8-2a" { + cppflags = append(cppflags, "-march=armv8.2-a+fp16") + cppflags = append(cppflags, "-DARM_COMPUTE_ENABLE_FP16") + cppflags = append(cppflags, "-DENABLE_FP16_KERNELS") + } + } + } + + // Since Android T, the underlying NDK stops supporting system assembler like GAS, in favor of integrated assembler + // However for Android < Android T we still want to suppress integrated assembler for backward compatibility + if ! isVersionAtLeast(ctx.AConfig().PlatformVersionName(), 13) { + cppflags = append(cppflags, "-no-integrated-as") } data_types := strings.Split(ctx.AConfig().GetenvWithDefault("COMPUTE_LIB_DATA_TYPE", "ALL"), ",") for _, x := range data_types { + if strings.ToUpper(x) == "ALL" || strings.ToUpper(x) == "INTEGER" { + cppflags = append(cppflags, "-DENABLE_INTEGER_KERNELS") + } if strings.ToUpper(x) == "ALL" || strings.ToUpper(x) == "QASYMM8" { cppflags = append(cppflags, "-DENABLE_QASYMM8_KERNELS") } @@ -37,14 +75,25 @@ func globalFlags(ctx android.BaseContext) []string { if strings.ToUpper(x) == "ALL" || strings.ToUpper(x) == "QSYMM16" { cppflags = append(cppflags, "-DENABLE_QSYMM16_KERNELS") } - if strings.ToUpper(x) == "ALL" || strings.ToUpper(x) == "FP16" { - cppflags = append(cppflags, "-DENABLE_FP16_KERNELS") - } if strings.ToUpper(x) == "ALL" || strings.ToUpper(x) == "FP32" { cppflags = append(cppflags, "-DENABLE_FP32_KERNELS") } } + data_layouts := strings.Split(ctx.AConfig().GetenvWithDefault("COMPUTE_LIB_DATA_LAYOUT", "ALL"), ",") + + for _, x := range data_layouts { + if strings.ToUpper(x) == "ALL" || strings.ToUpper(x) == "NHWC" { + cppflags = append(cppflags, "-DENABLE_NHWC_KERNELS") + } + if strings.ToUpper(x) == "ALL" || strings.ToUpper(x) == "NCHW" { + cppflags = append(cppflags, "-DENABLE_NCHW_KERNELS") + } + } + + cppflags = append(cppflags, "-DARM_COMPUTE_CPU_ENABLED") + cppflags = append(cppflags, "-DARM_COMPUTE_OPENCL_ENABLED") + return cppflags } |