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