xref: /aosp_15_r20/external/ComputeLibrary/scripts/arm_compute_library_nn_driver.go (revision c217d954acce2dbc11938adb493fc0abd69584f3)
1//
2// Copyright © 2020-2021 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6package arm_compute_library_nn_driver
7
8import (
9    "android/soong/android"
10    "android/soong/cc"
11    "strings"
12)
13
14func isVersionAtLeast(version_name string, target_version int) bool {
15    name_map := map[string]int {
16    "L": 5, "5": 5,
17    "M": 6, "6": 6,
18    "N": 7, "7": 7,
19    "O": 8, "8": 8,
20    "P": 9, "9": 9,
21    "Q": 10, "10": 10,
22    "R": 11, "11": 11,
23    "S": 12, "12": 12,
24    "T": 13, "13": 13,
25    }
26    if _, ok := name_map[version_name]; ok {
27        return name_map[version_name] >= target_version
28    } else {
29        return false
30    }
31}
32
33func globalFlags(ctx android.BaseContext) []string {
34    var cppflags []string
35
36   if ctx.Config().PlatformVersionName() == "Q" || ctx.Config().PlatformVersionName() == "10" ||
37      ctx.Config().PlatformVersionName() == "R" || ctx.Config().PlatformVersionName() == "11" ||
38      ctx.Config().PlatformVersionName() == "S" || ctx.Config().PlatformVersionName() == "12" {
39        cppflags = append(cppflags, "-fno-addrsig")
40    }
41
42    if ctx.Config().PlatformVersionName() == "R" || ctx.Config().PlatformVersionName() == "11" {
43      for _, a := range ctx.DeviceConfig().Arches() {
44        theArch := a.ArchType.String()
45        if theArch == "armv8-2a" {
46          cppflags = append(cppflags, "-march=armv8.2-a+fp16")
47          cppflags = append(cppflags, "-DARM_COMPUTE_ENABLE_FP16")
48        }
49      }
50    }
51
52    data_types := strings.Split(ctx.Config().GetenvWithDefault("COMPUTE_LIB_DATA_TYPE", "ALL"), ",")
53
54    for _, x := range data_types {
55        if strings.ToUpper(x) == "ALL" || strings.ToUpper(x) == "INTEGER" {
56            cppflags = append(cppflags, "-DENABLE_INTEGER_KERNELS")
57        }
58        if strings.ToUpper(x) == "ALL" || strings.ToUpper(x) == "QASYMM8" {
59            cppflags = append(cppflags, "-DENABLE_QASYMM8_KERNELS")
60        }
61        if strings.ToUpper(x) == "ALL" || strings.ToUpper(x) == "QASYMM8_SIGNED" {
62            cppflags = append(cppflags, "-DENABLE_QASYMM8_SIGNED_KERNELS")
63        }
64        if strings.ToUpper(x) == "ALL" || strings.ToUpper(x) == "QASYMM16" {
65            cppflags = append(cppflags, "-DENABLE_QASYMM16_KERNELS")
66        }
67        if strings.ToUpper(x) == "ALL" || strings.ToUpper(x) == "QSYMM16" {
68            cppflags = append(cppflags, "-DENABLE_QSYMM16_KERNELS")
69        }
70        if strings.ToUpper(x) == "ALL" || strings.ToUpper(x) == "FP16" {
71            cppflags = append(cppflags, "-DENABLE_FP16_KERNELS")
72        }
73        if strings.ToUpper(x) == "ALL" || strings.ToUpper(x) == "FP32" {
74            cppflags = append(cppflags, "-DENABLE_FP32_KERNELS")
75        }
76    }
77
78    data_layouts := strings.Split(ctx.Config().GetenvWithDefault("COMPUTE_LIB_DATA_LAYOUT", "ALL"), ",")
79
80    for _, x := range data_layouts {
81        if strings.ToUpper(x) == "ALL" || strings.ToUpper(x) == "NHWC" {
82            cppflags = append(cppflags, "-DENABLE_NHWC_KERNELS")
83        }
84        if strings.ToUpper(x) == "ALL" || strings.ToUpper(x) == "NCHW" {
85            cppflags = append(cppflags, "-DENABLE_NCHW_KERNELS")
86        }
87    }
88
89    cppflags = append(cppflags, "-DARM_COMPUTE_CPU_ENABLED")
90    cppflags = append(cppflags, "-DARM_COMPUTE_OPENCL_ENABLED")
91
92    return cppflags
93}
94
95func clframeworkNNDriverDefaults(ctx android.LoadHookContext) {
96        type props struct {
97                Cppflags []string
98        }
99
100        p := &props{}
101        p.Cppflags = globalFlags(ctx)
102
103        ctx.AppendProperties(p)
104}
105
106func init() {
107
108  android.RegisterModuleType("arm_compute_library_defaults", clframeworkNNDriverDefaultsFactory)
109}
110
111func clframeworkNNDriverDefaultsFactory() android.Module {
112
113   module := cc.DefaultsFactory()
114   android.AddLoadHook(module, clframeworkNNDriverDefaults)
115   return module
116}
117