1*eca53ba6SRoland Levillain# cpu_features, a cross platform C99 library to get cpu features at runtime. 2*eca53ba6SRoland Levillain 3*eca53ba6SRoland Levillainload("@bazel_skylib//lib:selects.bzl", "selects") 4*eca53ba6SRoland Levillainload("//:bazel/platforms.bzl", "PLATFORM_CPU_ARM", "PLATFORM_CPU_ARM64", "PLATFORM_CPU_MIPS", "PLATFORM_CPU_PPC", "PLATFORM_CPU_RISCV32", "PLATFORM_CPU_RISCV64", "PLATFORM_CPU_X86_64") 5*eca53ba6SRoland Levillainload("//:bazel/platforms.bzl", "PLATFORM_OS_MACOS") 6*eca53ba6SRoland Levillain 7*eca53ba6SRoland Levillainpackage( 8*eca53ba6SRoland Levillain default_visibility = ["//visibility:public"], 9*eca53ba6SRoland Levillain licenses = ["notice"], 10*eca53ba6SRoland Levillain) 11*eca53ba6SRoland Levillain 12*eca53ba6SRoland Levillainexports_files(["LICENSE"]) 13*eca53ba6SRoland Levillain 14*eca53ba6SRoland LevillainINCLUDES = ["include"] 15*eca53ba6SRoland Levillain 16*eca53ba6SRoland LevillainC99_FLAGS = [ 17*eca53ba6SRoland Levillain "-std=c99", 18*eca53ba6SRoland Levillain "-Wall", 19*eca53ba6SRoland Levillain "-Wextra", 20*eca53ba6SRoland Levillain "-Wmissing-declarations", 21*eca53ba6SRoland Levillain "-Wmissing-prototypes", 22*eca53ba6SRoland Levillain "-Wno-implicit-fallthrough", 23*eca53ba6SRoland Levillain "-Wno-unused-function", 24*eca53ba6SRoland Levillain "-Wold-style-definition", 25*eca53ba6SRoland Levillain "-Wshadow", 26*eca53ba6SRoland Levillain "-Wsign-compare", 27*eca53ba6SRoland Levillain "-Wstrict-prototypes", 28*eca53ba6SRoland Levillain] 29*eca53ba6SRoland Levillain 30*eca53ba6SRoland Levillaincc_library( 31*eca53ba6SRoland Levillain name = "cpu_features_macros", 32*eca53ba6SRoland Levillain copts = C99_FLAGS, 33*eca53ba6SRoland Levillain includes = INCLUDES, 34*eca53ba6SRoland Levillain textual_hdrs = ["include/cpu_features_macros.h"], 35*eca53ba6SRoland Levillain) 36*eca53ba6SRoland Levillain 37*eca53ba6SRoland Levillaincc_library( 38*eca53ba6SRoland Levillain name = "cpu_features_cache_info", 39*eca53ba6SRoland Levillain copts = C99_FLAGS, 40*eca53ba6SRoland Levillain includes = INCLUDES, 41*eca53ba6SRoland Levillain textual_hdrs = ["include/cpu_features_cache_info.h"], 42*eca53ba6SRoland Levillain deps = [":cpu_features_macros"], 43*eca53ba6SRoland Levillain) 44*eca53ba6SRoland Levillain 45*eca53ba6SRoland Levillaincc_library( 46*eca53ba6SRoland Levillain name = "bit_utils", 47*eca53ba6SRoland Levillain copts = C99_FLAGS, 48*eca53ba6SRoland Levillain includes = INCLUDES, 49*eca53ba6SRoland Levillain textual_hdrs = ["include/internal/bit_utils.h"], 50*eca53ba6SRoland Levillain deps = [":cpu_features_macros"], 51*eca53ba6SRoland Levillain) 52*eca53ba6SRoland Levillain 53*eca53ba6SRoland Levillaincc_test( 54*eca53ba6SRoland Levillain name = "bit_utils_test", 55*eca53ba6SRoland Levillain srcs = ["test/bit_utils_test.cc"], 56*eca53ba6SRoland Levillain includes = INCLUDES, 57*eca53ba6SRoland Levillain deps = [ 58*eca53ba6SRoland Levillain ":bit_utils", 59*eca53ba6SRoland Levillain "@com_google_googletest//:gtest_main", 60*eca53ba6SRoland Levillain ], 61*eca53ba6SRoland Levillain) 62*eca53ba6SRoland Levillain 63*eca53ba6SRoland Levillaincc_library( 64*eca53ba6SRoland Levillain name = "memory_utils", 65*eca53ba6SRoland Levillain copts = C99_FLAGS, 66*eca53ba6SRoland Levillain includes = INCLUDES, 67*eca53ba6SRoland Levillain textual_hdrs = [ 68*eca53ba6SRoland Levillain "src/copy.inl", 69*eca53ba6SRoland Levillain "src/equals.inl", 70*eca53ba6SRoland Levillain ], 71*eca53ba6SRoland Levillain) 72*eca53ba6SRoland Levillain 73*eca53ba6SRoland Levillaincc_library( 74*eca53ba6SRoland Levillain name = "string_view", 75*eca53ba6SRoland Levillain srcs = [ 76*eca53ba6SRoland Levillain "src/string_view.c", 77*eca53ba6SRoland Levillain ], 78*eca53ba6SRoland Levillain copts = C99_FLAGS, 79*eca53ba6SRoland Levillain includes = INCLUDES, 80*eca53ba6SRoland Levillain textual_hdrs = ["include/internal/string_view.h"], 81*eca53ba6SRoland Levillain deps = [ 82*eca53ba6SRoland Levillain ":cpu_features_macros", 83*eca53ba6SRoland Levillain ":memory_utils", 84*eca53ba6SRoland Levillain ], 85*eca53ba6SRoland Levillain) 86*eca53ba6SRoland Levillain 87*eca53ba6SRoland Levillaincc_test( 88*eca53ba6SRoland Levillain name = "string_view_test", 89*eca53ba6SRoland Levillain srcs = ["test/string_view_test.cc"], 90*eca53ba6SRoland Levillain includes = INCLUDES, 91*eca53ba6SRoland Levillain deps = [ 92*eca53ba6SRoland Levillain ":string_view", 93*eca53ba6SRoland Levillain "@com_google_googletest//:gtest_main", 94*eca53ba6SRoland Levillain ], 95*eca53ba6SRoland Levillain) 96*eca53ba6SRoland Levillain 97*eca53ba6SRoland Levillaincc_library( 98*eca53ba6SRoland Levillain name = "filesystem", 99*eca53ba6SRoland Levillain srcs = ["src/filesystem.c"], 100*eca53ba6SRoland Levillain copts = C99_FLAGS, 101*eca53ba6SRoland Levillain includes = INCLUDES, 102*eca53ba6SRoland Levillain textual_hdrs = ["include/internal/filesystem.h"], 103*eca53ba6SRoland Levillain deps = [":cpu_features_macros"], 104*eca53ba6SRoland Levillain) 105*eca53ba6SRoland Levillain 106*eca53ba6SRoland Levillaincc_library( 107*eca53ba6SRoland Levillain name = "filesystem_for_testing", 108*eca53ba6SRoland Levillain testonly = 1, 109*eca53ba6SRoland Levillain srcs = [ 110*eca53ba6SRoland Levillain "src/filesystem.c", 111*eca53ba6SRoland Levillain "test/filesystem_for_testing.cc", 112*eca53ba6SRoland Levillain ], 113*eca53ba6SRoland Levillain hdrs = [ 114*eca53ba6SRoland Levillain "include/internal/filesystem.h", 115*eca53ba6SRoland Levillain "test/filesystem_for_testing.h", 116*eca53ba6SRoland Levillain ], 117*eca53ba6SRoland Levillain defines = ["CPU_FEATURES_MOCK_FILESYSTEM"], 118*eca53ba6SRoland Levillain includes = INCLUDES, 119*eca53ba6SRoland Levillain deps = [ 120*eca53ba6SRoland Levillain ":cpu_features_macros", 121*eca53ba6SRoland Levillain ], 122*eca53ba6SRoland Levillain) 123*eca53ba6SRoland Levillain 124*eca53ba6SRoland Levillaincc_library( 125*eca53ba6SRoland Levillain name = "stack_line_reader", 126*eca53ba6SRoland Levillain srcs = ["src/stack_line_reader.c"], 127*eca53ba6SRoland Levillain copts = C99_FLAGS, 128*eca53ba6SRoland Levillain defines = ["STACK_LINE_READER_BUFFER_SIZE=1024"], 129*eca53ba6SRoland Levillain includes = INCLUDES, 130*eca53ba6SRoland Levillain textual_hdrs = ["include/internal/stack_line_reader.h"], 131*eca53ba6SRoland Levillain deps = [ 132*eca53ba6SRoland Levillain ":cpu_features_macros", 133*eca53ba6SRoland Levillain ":filesystem", 134*eca53ba6SRoland Levillain ":string_view", 135*eca53ba6SRoland Levillain ], 136*eca53ba6SRoland Levillain) 137*eca53ba6SRoland Levillain 138*eca53ba6SRoland Levillaincc_test( 139*eca53ba6SRoland Levillain name = "stack_line_reader_test", 140*eca53ba6SRoland Levillain srcs = [ 141*eca53ba6SRoland Levillain "include/internal/stack_line_reader.h", 142*eca53ba6SRoland Levillain "src/stack_line_reader.c", 143*eca53ba6SRoland Levillain "test/stack_line_reader_test.cc", 144*eca53ba6SRoland Levillain ], 145*eca53ba6SRoland Levillain defines = ["STACK_LINE_READER_BUFFER_SIZE=16"], 146*eca53ba6SRoland Levillain includes = INCLUDES, 147*eca53ba6SRoland Levillain deps = [ 148*eca53ba6SRoland Levillain ":cpu_features_macros", 149*eca53ba6SRoland Levillain ":filesystem_for_testing", 150*eca53ba6SRoland Levillain ":string_view", 151*eca53ba6SRoland Levillain "@com_google_googletest//:gtest_main", 152*eca53ba6SRoland Levillain ], 153*eca53ba6SRoland Levillain) 154*eca53ba6SRoland Levillain 155*eca53ba6SRoland Levillaincc_library( 156*eca53ba6SRoland Levillain name = "stack_line_reader_to_use_with_filesystem_for_testing", 157*eca53ba6SRoland Levillain testonly = 1, 158*eca53ba6SRoland Levillain srcs = ["src/stack_line_reader.c"], 159*eca53ba6SRoland Levillain hdrs = ["include/internal/stack_line_reader.h"], 160*eca53ba6SRoland Levillain copts = C99_FLAGS, 161*eca53ba6SRoland Levillain defines = ["STACK_LINE_READER_BUFFER_SIZE=1024"], 162*eca53ba6SRoland Levillain includes = INCLUDES, 163*eca53ba6SRoland Levillain deps = [ 164*eca53ba6SRoland Levillain ":cpu_features_macros", 165*eca53ba6SRoland Levillain ":filesystem_for_testing", 166*eca53ba6SRoland Levillain ":string_view", 167*eca53ba6SRoland Levillain ], 168*eca53ba6SRoland Levillain) 169*eca53ba6SRoland Levillain 170*eca53ba6SRoland Levillaincc_library( 171*eca53ba6SRoland Levillain name = "hwcaps", 172*eca53ba6SRoland Levillain srcs = ["src/hwcaps.c"], 173*eca53ba6SRoland Levillain copts = C99_FLAGS, 174*eca53ba6SRoland Levillain defines = selects.with_or({ 175*eca53ba6SRoland Levillain PLATFORM_OS_MACOS: ["HAVE_DLFCN_H"], 176*eca53ba6SRoland Levillain "//conditions:default": ["HAVE_STRONG_GETAUXVAL"], 177*eca53ba6SRoland Levillain }), 178*eca53ba6SRoland Levillain includes = INCLUDES, 179*eca53ba6SRoland Levillain textual_hdrs = ["include/internal/hwcaps.h"], 180*eca53ba6SRoland Levillain deps = [ 181*eca53ba6SRoland Levillain ":cpu_features_macros", 182*eca53ba6SRoland Levillain ":filesystem", 183*eca53ba6SRoland Levillain ":string_view", 184*eca53ba6SRoland Levillain ], 185*eca53ba6SRoland Levillain) 186*eca53ba6SRoland Levillain 187*eca53ba6SRoland Levillaincc_library( 188*eca53ba6SRoland Levillain name = "hwcaps_for_testing", 189*eca53ba6SRoland Levillain testonly = 1, 190*eca53ba6SRoland Levillain srcs = [ 191*eca53ba6SRoland Levillain "src/hwcaps.c", 192*eca53ba6SRoland Levillain "test/hwcaps_for_testing.cc", 193*eca53ba6SRoland Levillain ], 194*eca53ba6SRoland Levillain hdrs = [ 195*eca53ba6SRoland Levillain "include/internal/hwcaps.h", 196*eca53ba6SRoland Levillain "test/hwcaps_for_testing.h", 197*eca53ba6SRoland Levillain ], 198*eca53ba6SRoland Levillain defines = [ 199*eca53ba6SRoland Levillain "CPU_FEATURES_MOCK_GET_ELF_HWCAP_FROM_GETAUXVAL", 200*eca53ba6SRoland Levillain "CPU_FEATURES_TEST", 201*eca53ba6SRoland Levillain ], 202*eca53ba6SRoland Levillain includes = INCLUDES, 203*eca53ba6SRoland Levillain deps = [ 204*eca53ba6SRoland Levillain ":cpu_features_macros", 205*eca53ba6SRoland Levillain ":filesystem_for_testing", 206*eca53ba6SRoland Levillain ":string_view", 207*eca53ba6SRoland Levillain ], 208*eca53ba6SRoland Levillain) 209*eca53ba6SRoland Levillain 210*eca53ba6SRoland Levillaincc_library( 211*eca53ba6SRoland Levillain name = "cpuinfo", 212*eca53ba6SRoland Levillain srcs = selects.with_or({ 213*eca53ba6SRoland Levillain PLATFORM_CPU_X86_64: [ 214*eca53ba6SRoland Levillain "src/impl_x86_freebsd.c", 215*eca53ba6SRoland Levillain "src/impl_x86_linux_or_android.c", 216*eca53ba6SRoland Levillain "src/impl_x86_macos.c", 217*eca53ba6SRoland Levillain "src/impl_x86_windows.c", 218*eca53ba6SRoland Levillain ], 219*eca53ba6SRoland Levillain PLATFORM_CPU_ARM: ["src/impl_arm_linux_or_android.c"], 220*eca53ba6SRoland Levillain PLATFORM_CPU_ARM64: [ 221*eca53ba6SRoland Levillain "src/impl_aarch64_linux_or_android.c", 222*eca53ba6SRoland Levillain "src/impl_aarch64_macos_or_iphone.c", 223*eca53ba6SRoland Levillain "src/impl_aarch64_windows.c", 224*eca53ba6SRoland Levillain ], 225*eca53ba6SRoland Levillain PLATFORM_CPU_MIPS: ["src/impl_mips_linux_or_android.c"], 226*eca53ba6SRoland Levillain PLATFORM_CPU_PPC: ["src/impl_ppc_linux.c"], 227*eca53ba6SRoland Levillain PLATFORM_CPU_RISCV32: ["src/impl_riscv_linux.c"], 228*eca53ba6SRoland Levillain PLATFORM_CPU_RISCV64: ["src/impl_riscv_linux.c"], 229*eca53ba6SRoland Levillain }), 230*eca53ba6SRoland Levillain hdrs = selects.with_or({ 231*eca53ba6SRoland Levillain PLATFORM_CPU_X86_64: [ 232*eca53ba6SRoland Levillain "include/cpuinfo_x86.h", 233*eca53ba6SRoland Levillain "include/internal/cpuid_x86.h", 234*eca53ba6SRoland Levillain "include/internal/windows_utils.h", 235*eca53ba6SRoland Levillain ], 236*eca53ba6SRoland Levillain PLATFORM_CPU_ARM: ["include/cpuinfo_arm.h"], 237*eca53ba6SRoland Levillain PLATFORM_CPU_ARM64: ["include/cpuinfo_aarch64.h"], 238*eca53ba6SRoland Levillain PLATFORM_CPU_MIPS: ["include/cpuinfo_mips.h"], 239*eca53ba6SRoland Levillain PLATFORM_CPU_PPC: ["include/cpuinfo_ppc.h"], 240*eca53ba6SRoland Levillain PLATFORM_CPU_RISCV32: ["include/cpuinfo_riscv.h"], 241*eca53ba6SRoland Levillain PLATFORM_CPU_RISCV64: ["include/cpuinfo_riscv.h"], 242*eca53ba6SRoland Levillain }), 243*eca53ba6SRoland Levillain copts = C99_FLAGS, 244*eca53ba6SRoland Levillain defines = selects.with_or({ 245*eca53ba6SRoland Levillain PLATFORM_OS_MACOS: ["HAVE_SYSCTLBYNAME"], 246*eca53ba6SRoland Levillain "//conditions:default": [], 247*eca53ba6SRoland Levillain }), 248*eca53ba6SRoland Levillain includes = INCLUDES, 249*eca53ba6SRoland Levillain textual_hdrs = selects.with_or({ 250*eca53ba6SRoland Levillain PLATFORM_CPU_X86_64: ["src/impl_x86__base_implementation.inl"], 251*eca53ba6SRoland Levillain PLATFORM_CPU_ARM64: ["src/impl_aarch64__base_implementation.inl"], 252*eca53ba6SRoland Levillain "//conditions:default": [], 253*eca53ba6SRoland Levillain }) + [ 254*eca53ba6SRoland Levillain "src/define_introspection.inl", 255*eca53ba6SRoland Levillain "src/define_introspection_and_hwcaps.inl", 256*eca53ba6SRoland Levillain ], 257*eca53ba6SRoland Levillain deps = [ 258*eca53ba6SRoland Levillain ":bit_utils", 259*eca53ba6SRoland Levillain ":cpu_features_cache_info", 260*eca53ba6SRoland Levillain ":cpu_features_macros", 261*eca53ba6SRoland Levillain ":filesystem", 262*eca53ba6SRoland Levillain ":hwcaps", 263*eca53ba6SRoland Levillain ":memory_utils", 264*eca53ba6SRoland Levillain ":stack_line_reader", 265*eca53ba6SRoland Levillain ":string_view", 266*eca53ba6SRoland Levillain ], 267*eca53ba6SRoland Levillain) 268*eca53ba6SRoland Levillain 269*eca53ba6SRoland Levillaincc_library( 270*eca53ba6SRoland Levillain name = "cpuinfo_for_testing", 271*eca53ba6SRoland Levillain testonly = 1, 272*eca53ba6SRoland Levillain srcs = selects.with_or({ 273*eca53ba6SRoland Levillain PLATFORM_CPU_X86_64: [ 274*eca53ba6SRoland Levillain "src/impl_x86_freebsd.c", 275*eca53ba6SRoland Levillain "src/impl_x86_linux_or_android.c", 276*eca53ba6SRoland Levillain "src/impl_x86_macos.c", 277*eca53ba6SRoland Levillain "src/impl_x86_windows.c", 278*eca53ba6SRoland Levillain ], 279*eca53ba6SRoland Levillain PLATFORM_CPU_ARM: ["src/impl_arm_linux_or_android.c"], 280*eca53ba6SRoland Levillain PLATFORM_CPU_ARM64: [ 281*eca53ba6SRoland Levillain "src/impl_aarch64_linux_or_android.c", 282*eca53ba6SRoland Levillain "src/impl_aarch64_macos_or_iphone.c", 283*eca53ba6SRoland Levillain "src/impl_aarch64_windows.c", 284*eca53ba6SRoland Levillain ], 285*eca53ba6SRoland Levillain PLATFORM_CPU_MIPS: ["src/impl_mips_linux_or_android.c"], 286*eca53ba6SRoland Levillain PLATFORM_CPU_PPC: ["src/impl_ppc_linux.c"], 287*eca53ba6SRoland Levillain PLATFORM_CPU_RISCV32: ["src/impl_riscv_linux.c"], 288*eca53ba6SRoland Levillain PLATFORM_CPU_RISCV64: ["src/impl_riscv_linux.c"], 289*eca53ba6SRoland Levillain }), 290*eca53ba6SRoland Levillain hdrs = selects.with_or({ 291*eca53ba6SRoland Levillain PLATFORM_CPU_X86_64: [ 292*eca53ba6SRoland Levillain "include/cpuinfo_x86.h", 293*eca53ba6SRoland Levillain "include/internal/cpuid_x86.h", 294*eca53ba6SRoland Levillain "include/internal/windows_utils.h", 295*eca53ba6SRoland Levillain ], 296*eca53ba6SRoland Levillain PLATFORM_CPU_ARM: ["include/cpuinfo_arm.h"], 297*eca53ba6SRoland Levillain PLATFORM_CPU_ARM64: ["include/cpuinfo_aarch64.h"], 298*eca53ba6SRoland Levillain PLATFORM_CPU_MIPS: ["include/cpuinfo_mips.h"], 299*eca53ba6SRoland Levillain PLATFORM_CPU_PPC: ["include/cpuinfo_ppc.h"], 300*eca53ba6SRoland Levillain PLATFORM_CPU_RISCV32: ["include/cpuinfo_riscv.h"], 301*eca53ba6SRoland Levillain PLATFORM_CPU_RISCV64: ["include/cpuinfo_riscv.h"], 302*eca53ba6SRoland Levillain }), 303*eca53ba6SRoland Levillain copts = C99_FLAGS, 304*eca53ba6SRoland Levillain defines = selects.with_or({ 305*eca53ba6SRoland Levillain PLATFORM_CPU_X86_64: ["CPU_FEATURES_MOCK_CPUID_X86"], 306*eca53ba6SRoland Levillain "//conditions:default": [], 307*eca53ba6SRoland Levillain }) + selects.with_or({ 308*eca53ba6SRoland Levillain PLATFORM_OS_MACOS: ["HAVE_SYSCTLBYNAME"], 309*eca53ba6SRoland Levillain "//conditions:default": [], 310*eca53ba6SRoland Levillain }), 311*eca53ba6SRoland Levillain includes = INCLUDES, 312*eca53ba6SRoland Levillain textual_hdrs = selects.with_or({ 313*eca53ba6SRoland Levillain PLATFORM_CPU_X86_64: ["src/impl_x86__base_implementation.inl"], 314*eca53ba6SRoland Levillain PLATFORM_CPU_ARM64: ["src/impl_aarch64__base_implementation.inl"], 315*eca53ba6SRoland Levillain "//conditions:default": [], 316*eca53ba6SRoland Levillain }) + [ 317*eca53ba6SRoland Levillain "src/define_introspection.inl", 318*eca53ba6SRoland Levillain "src/define_introspection_and_hwcaps.inl", 319*eca53ba6SRoland Levillain ], 320*eca53ba6SRoland Levillain deps = [ 321*eca53ba6SRoland Levillain ":bit_utils", 322*eca53ba6SRoland Levillain ":cpu_features_cache_info", 323*eca53ba6SRoland Levillain ":cpu_features_macros", 324*eca53ba6SRoland Levillain ":filesystem_for_testing", 325*eca53ba6SRoland Levillain ":hwcaps_for_testing", 326*eca53ba6SRoland Levillain ":memory_utils", 327*eca53ba6SRoland Levillain ":stack_line_reader_to_use_with_filesystem_for_testing", 328*eca53ba6SRoland Levillain ":string_view", 329*eca53ba6SRoland Levillain ], 330*eca53ba6SRoland Levillain) 331*eca53ba6SRoland Levillain 332*eca53ba6SRoland Levillaincc_test( 333*eca53ba6SRoland Levillain name = "cpuinfo_test", 334*eca53ba6SRoland Levillain srcs = selects.with_or({ 335*eca53ba6SRoland Levillain PLATFORM_CPU_ARM64: ["test/cpuinfo_aarch64_test.cc"], 336*eca53ba6SRoland Levillain PLATFORM_CPU_ARM: ["test/cpuinfo_arm_test.cc"], 337*eca53ba6SRoland Levillain PLATFORM_CPU_MIPS: ["test/cpuinfo_mips_test.cc"], 338*eca53ba6SRoland Levillain PLATFORM_CPU_PPC: ["test/cpuinfo_ppc_test.cc"], 339*eca53ba6SRoland Levillain PLATFORM_CPU_RISCV32: ["test/cpuinfo_riscv_test.cc"], 340*eca53ba6SRoland Levillain PLATFORM_CPU_RISCV64: ["test/cpuinfo_riscv_test.cc"], 341*eca53ba6SRoland Levillain PLATFORM_CPU_X86_64: ["test/cpuinfo_x86_test.cc"], 342*eca53ba6SRoland Levillain }), 343*eca53ba6SRoland Levillain includes = INCLUDES, 344*eca53ba6SRoland Levillain deps = [ 345*eca53ba6SRoland Levillain ":cpuinfo_for_testing", 346*eca53ba6SRoland Levillain ":filesystem_for_testing", 347*eca53ba6SRoland Levillain ":hwcaps_for_testing", 348*eca53ba6SRoland Levillain ":string_view", 349*eca53ba6SRoland Levillain "@com_google_googletest//:gtest_main", 350*eca53ba6SRoland Levillain ], 351*eca53ba6SRoland Levillain) 352*eca53ba6SRoland Levillain 353*eca53ba6SRoland Levillaincc_binary( 354*eca53ba6SRoland Levillain name = "list_cpu_features", 355*eca53ba6SRoland Levillain srcs = ["src/utils/list_cpu_features.c"], 356*eca53ba6SRoland Levillain copts = C99_FLAGS, 357*eca53ba6SRoland Levillain includes = INCLUDES, 358*eca53ba6SRoland Levillain deps = [ 359*eca53ba6SRoland Levillain ":bit_utils", 360*eca53ba6SRoland Levillain ":cpu_features_macros", 361*eca53ba6SRoland Levillain ":cpuinfo", 362*eca53ba6SRoland Levillain ], 363*eca53ba6SRoland Levillain) 364*eca53ba6SRoland Levillain 365*eca53ba6SRoland Levillaincc_library( 366*eca53ba6SRoland Levillain name = "ndk_compat", 367*eca53ba6SRoland Levillain srcs = ["ndk_compat/cpu-features.c"], 368*eca53ba6SRoland Levillain copts = C99_FLAGS, 369*eca53ba6SRoland Levillain includes = INCLUDES + ["ndk_compat"], 370*eca53ba6SRoland Levillain textual_hdrs = ["ndk_compat/cpu-features.h"], 371*eca53ba6SRoland Levillain deps = [ 372*eca53ba6SRoland Levillain ":cpu_features_macros", 373*eca53ba6SRoland Levillain ":cpuinfo", 374*eca53ba6SRoland Levillain ":filesystem", 375*eca53ba6SRoland Levillain ":stack_line_reader", 376*eca53ba6SRoland Levillain ":string_view", 377*eca53ba6SRoland Levillain ], 378*eca53ba6SRoland Levillain) 379