910e62b5创建于 1月15日历史提交
# Copyright 2020 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//testing/test.gni")

# This config is applied to targets that depend on libhwy
config("libhwy_external_config") {
  include_dirs = [ "src" ]
  defines = []
  if (current_cpu == "x86") {
    # Highway automatically disables AVX2 and AVX3 targets when compiling in
    # 32-bit mode due to bugs in the generated code. However, when doing so it
    # prints a warning (#pragma message). This flag silences that warning by
    # explicitly disabling AVX2 and AVX3 targets.
    defines += [ "HWY_BROKEN_TARGETS=(HWY_AVX2|HWY_AVX3)" ]
  }
  if (current_cpu == "arm" || current_cpu == "arm64") {
    # There are Chrome targets that use HWY_ALIGN on absl::uint128. This breaks
    # with SVE, since HWY_ALIGN == 8 for it and the minimal alignment requirement
    # for absl::uint128 is 16.
    defines += [ "HWY_BROKEN_TARGETS=HWY_ALL_SVE" ]
  }
  if (current_cpu == "riscv64") {
    # Runtime dispatch for RVV is broken in highway
    # ref: https://github.com/google/highway/commit/c95cc0237d2f7a0
    defines += [ "HWY_BROKEN_TARGETS=HWY_RVV" ]
  }
}

source_set("libhwy") {
  sources = [
    "src/hwy/abort.cc",
    "src/hwy/aligned_allocator.cc",
    "src/hwy/per_target.cc",
    "src/hwy/print.cc",
    "src/hwy/stats.cc",
    "src/hwy/targets.cc",
    "src/hwy/timer.cc",
  ]

  public_configs = [ ":libhwy_external_config" ]
}

test("highway_tests") {
  defines = [ "HWY_IS_TEST" ]
  sources = [
    "src/hwy/nanobenchmark.cc",
    "src/hwy/tests/arithmetic_test.cc",
    "src/hwy/tests/bit_permute_test.cc",
    "src/hwy/tests/blockwise_combine_test.cc",
    "src/hwy/tests/blockwise_shift_test.cc",
    "src/hwy/tests/blockwise_test.cc",
    "src/hwy/tests/cast_test.cc",
    "src/hwy/tests/combine_test.cc",
    "src/hwy/tests/compare_test.cc",
    "src/hwy/tests/compress_test.cc",
    "src/hwy/tests/concat_test.cc",
    "src/hwy/tests/convert_test.cc",
    "src/hwy/tests/count_test.cc",
    "src/hwy/tests/crypto_test.cc",
    "src/hwy/tests/demote_test.cc",
    "src/hwy/tests/div_test.cc",
    "src/hwy/tests/dup128_vec_test.cc",
    "src/hwy/tests/expand_test.cc",
    "src/hwy/tests/float_test.cc",
    "src/hwy/tests/fma_test.cc",
    "src/hwy/tests/foreach_vec_test.cc",
    "src/hwy/tests/if_test.cc",
    "src/hwy/tests/in_range_float_to_int_conv_test.cc",
    "src/hwy/tests/interleaved_test.cc",
    "src/hwy/tests/logical_test.cc",
    "src/hwy/tests/mask_combine_test.cc",
    "src/hwy/tests/mask_convert_test.cc",
    "src/hwy/tests/mask_mem_test.cc",
    "src/hwy/tests/mask_slide_test.cc",
    "src/hwy/tests/mask_test.cc",
    "src/hwy/tests/masked_arithmetic_test.cc",
    "src/hwy/tests/masked_minmax_test.cc",
    "src/hwy/tests/memory_test.cc",
    "src/hwy/tests/minmax_test.cc",
    "src/hwy/tests/mul_by_pow2_test.cc",
    "src/hwy/tests/mul_pairwise_test.cc",
    "src/hwy/tests/mul_test.cc",
    "src/hwy/tests/reduction_test.cc",
    "src/hwy/tests/resize_test.cc",
    "src/hwy/tests/reverse_test.cc",
    "src/hwy/tests/rotate_test.cc",
    "src/hwy/tests/saturated_test.cc",
    "src/hwy/tests/shift_test.cc",
    "src/hwy/tests/shuffle4_test.cc",
    "src/hwy/tests/sign_test.cc",
    "src/hwy/tests/slide_up_down_test.cc",
    "src/hwy/tests/sums_abs_diff_test.cc",
    "src/hwy/tests/swizzle_block_test.cc",
    "src/hwy/tests/swizzle_test.cc",
    "src/hwy/tests/test_util.cc",
    "src/hwy/tests/test_util_test.cc",
    "src/hwy/tests/truncate_test.cc",
    "src/hwy/tests/tuple_test.cc",
    "src/hwy/tests/widen_mul_test.cc",
  ]
  if (!is_msan) {
    # TODO(crbug.com/424075503): This fails under MSan.
    sources += [ "src/hwy/tests/table_test.cc" ]
  }
  deps = [
    ":libhwy",
    "//base/test:run_all_unittests",
    "//testing/gtest",
  ]
}