1*d9f75844SAndroid Build Coastguard Worker# Copyright 2017 The Chromium Authors 2*d9f75844SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*d9f75844SAndroid Build Coastguard Worker# found in the LICENSE file. 4*d9f75844SAndroid Build Coastguard Worker 5*d9f75844SAndroid Build Coastguard Workerimport("//build/config/features.gni") 6*d9f75844SAndroid Build Coastguard Workerimport("//testing/test.gni") 7*d9f75844SAndroid Build Coastguard Workerimport("//third_party/google_benchmark/buildconfig.gni") 8*d9f75844SAndroid Build Coastguard Worker 9*d9f75844SAndroid Build Coastguard Worker# Only applied to CRC32C source and tests. (not exported) 10*d9f75844SAndroid Build Coastguard Workerconfig("crc32c_config") { 11*d9f75844SAndroid Build Coastguard Worker visibility = [ ":*" ] 12*d9f75844SAndroid Build Coastguard Worker 13*d9f75844SAndroid Build Coastguard Worker include_dirs = [ 14*d9f75844SAndroid Build Coastguard Worker "config", 15*d9f75844SAndroid Build Coastguard Worker "src/include", 16*d9f75844SAndroid Build Coastguard Worker ] 17*d9f75844SAndroid Build Coastguard Worker 18*d9f75844SAndroid Build Coastguard Worker defines = [ 19*d9f75844SAndroid Build Coastguard Worker "BYTE_ORDER_BIG_ENDIAN=0", 20*d9f75844SAndroid Build Coastguard Worker "CRC32C_TESTS_BUILT_WITH_GLOG=0", 21*d9f75844SAndroid Build Coastguard Worker ] 22*d9f75844SAndroid Build Coastguard Worker 23*d9f75844SAndroid Build Coastguard Worker # If we ever support big-endian builds, add logic to conditionally enable 24*d9f75844SAndroid Build Coastguard Worker # BYTE_ORDER_BIG_ENDIAN. 25*d9f75844SAndroid Build Coastguard Worker 26*d9f75844SAndroid Build Coastguard Worker if (current_cpu == "x86" || current_cpu == "x64") { 27*d9f75844SAndroid Build Coastguard Worker defines += [ 28*d9f75844SAndroid Build Coastguard Worker "HAVE_MM_PREFETCH=1", 29*d9f75844SAndroid Build Coastguard Worker "HAVE_SSE42=1", 30*d9f75844SAndroid Build Coastguard Worker ] 31*d9f75844SAndroid Build Coastguard Worker } else { 32*d9f75844SAndroid Build Coastguard Worker defines += [ 33*d9f75844SAndroid Build Coastguard Worker "HAVE_MM_PREFETCH=0", 34*d9f75844SAndroid Build Coastguard Worker "HAVE_SSE42=0", 35*d9f75844SAndroid Build Coastguard Worker ] 36*d9f75844SAndroid Build Coastguard Worker } 37*d9f75844SAndroid Build Coastguard Worker if (is_clang || !is_win) { 38*d9f75844SAndroid Build Coastguard Worker defines += [ "HAVE_BUILTIN_PREFETCH=1" ] 39*d9f75844SAndroid Build Coastguard Worker } else { 40*d9f75844SAndroid Build Coastguard Worker defines += [ "HAVE_BUILTIN_PREFETCH=0" ] 41*d9f75844SAndroid Build Coastguard Worker } 42*d9f75844SAndroid Build Coastguard Worker 43*d9f75844SAndroid Build Coastguard Worker if (current_cpu == "arm64") { 44*d9f75844SAndroid Build Coastguard Worker defines += [ "HAVE_ARM64_CRC32C=1" ] 45*d9f75844SAndroid Build Coastguard Worker } else { 46*d9f75844SAndroid Build Coastguard Worker defines += [ "HAVE_ARM64_CRC32C=0" ] 47*d9f75844SAndroid Build Coastguard Worker } 48*d9f75844SAndroid Build Coastguard Worker 49*d9f75844SAndroid Build Coastguard Worker # Android added <sys/auxv.h> in API level 18. 50*d9f75844SAndroid Build Coastguard Worker if (is_linux || is_chromeos || is_android) { 51*d9f75844SAndroid Build Coastguard Worker defines += [ 52*d9f75844SAndroid Build Coastguard Worker "HAVE_STRONG_GETAUXVAL=1", 53*d9f75844SAndroid Build Coastguard Worker "HAVE_WEAK_GETAUXVAL=1", 54*d9f75844SAndroid Build Coastguard Worker ] 55*d9f75844SAndroid Build Coastguard Worker } else { 56*d9f75844SAndroid Build Coastguard Worker defines += [ 57*d9f75844SAndroid Build Coastguard Worker "HAVE_STRONG_GETAUXVAL=0", 58*d9f75844SAndroid Build Coastguard Worker "HAVE_WEAK_GETAUXVAL=0", 59*d9f75844SAndroid Build Coastguard Worker ] 60*d9f75844SAndroid Build Coastguard Worker } 61*d9f75844SAndroid Build Coastguard Worker} 62*d9f75844SAndroid Build Coastguard Worker 63*d9f75844SAndroid Build Coastguard Workersource_set("crc32c") { 64*d9f75844SAndroid Build Coastguard Worker sources = [ 65*d9f75844SAndroid Build Coastguard Worker "src/include/crc32c/crc32c.h", 66*d9f75844SAndroid Build Coastguard Worker "src/src/crc32c.cc", 67*d9f75844SAndroid Build Coastguard Worker "src/src/crc32c_portable.cc", 68*d9f75844SAndroid Build Coastguard Worker ] 69*d9f75844SAndroid Build Coastguard Worker 70*d9f75844SAndroid Build Coastguard Worker configs += [ ":crc32c_config" ] 71*d9f75844SAndroid Build Coastguard Worker deps = [ 72*d9f75844SAndroid Build Coastguard Worker ":crc32c_arm64", 73*d9f75844SAndroid Build Coastguard Worker ":crc32c_internal_headers", 74*d9f75844SAndroid Build Coastguard Worker ":crc32c_sse42", 75*d9f75844SAndroid Build Coastguard Worker ] 76*d9f75844SAndroid Build Coastguard Worker} 77*d9f75844SAndroid Build Coastguard Worker 78*d9f75844SAndroid Build Coastguard Workersource_set("crc32c_sse42") { 79*d9f75844SAndroid Build Coastguard Worker visibility = [ ":*" ] 80*d9f75844SAndroid Build Coastguard Worker 81*d9f75844SAndroid Build Coastguard Worker sources = [ 82*d9f75844SAndroid Build Coastguard Worker "src/src/crc32c_sse42.cc", 83*d9f75844SAndroid Build Coastguard Worker "src/src/crc32c_sse42.h", 84*d9f75844SAndroid Build Coastguard Worker "src/src/crc32c_sse42_check.h", 85*d9f75844SAndroid Build Coastguard Worker ] 86*d9f75844SAndroid Build Coastguard Worker 87*d9f75844SAndroid Build Coastguard Worker configs += [ ":crc32c_config" ] 88*d9f75844SAndroid Build Coastguard Worker if (current_cpu == "x86" || current_cpu == "x64") { 89*d9f75844SAndroid Build Coastguard Worker if (is_win && !is_clang) { 90*d9f75844SAndroid Build Coastguard Worker cflags = [ "/arch:AVX" ] 91*d9f75844SAndroid Build Coastguard Worker } else { 92*d9f75844SAndroid Build Coastguard Worker cflags = [ "-msse4.2" ] 93*d9f75844SAndroid Build Coastguard Worker } 94*d9f75844SAndroid Build Coastguard Worker } 95*d9f75844SAndroid Build Coastguard Worker 96*d9f75844SAndroid Build Coastguard Worker deps = [ ":crc32c_internal_headers" ] 97*d9f75844SAndroid Build Coastguard Worker} 98*d9f75844SAndroid Build Coastguard Worker 99*d9f75844SAndroid Build Coastguard Workersource_set("crc32c_arm64") { 100*d9f75844SAndroid Build Coastguard Worker visibility = [ ":*" ] 101*d9f75844SAndroid Build Coastguard Worker 102*d9f75844SAndroid Build Coastguard Worker sources = [ 103*d9f75844SAndroid Build Coastguard Worker "src/src/crc32c_arm64.cc", 104*d9f75844SAndroid Build Coastguard Worker "src/src/crc32c_arm64.h", 105*d9f75844SAndroid Build Coastguard Worker "src/src/crc32c_arm64_check.h", 106*d9f75844SAndroid Build Coastguard Worker ] 107*d9f75844SAndroid Build Coastguard Worker 108*d9f75844SAndroid Build Coastguard Worker configs += [ ":crc32c_config" ] 109*d9f75844SAndroid Build Coastguard Worker if (current_cpu == "arm64") { 110*d9f75844SAndroid Build Coastguard Worker if (is_clang) { 111*d9f75844SAndroid Build Coastguard Worker cflags = [ 112*d9f75844SAndroid Build Coastguard Worker "-march=armv8-a", 113*d9f75844SAndroid Build Coastguard Worker 114*d9f75844SAndroid Build Coastguard Worker # Some builds set -march to a different value from the above. 115*d9f75844SAndroid Build Coastguard Worker # The specific feature flags below enable the instructions we need 116*d9f75844SAndroid Build Coastguard Worker # in these cases. See https://crbug.com/934016 for example. 117*d9f75844SAndroid Build Coastguard Worker "-Xclang", 118*d9f75844SAndroid Build Coastguard Worker "-target-feature", 119*d9f75844SAndroid Build Coastguard Worker "-Xclang", 120*d9f75844SAndroid Build Coastguard Worker "+crc", 121*d9f75844SAndroid Build Coastguard Worker "-Xclang", 122*d9f75844SAndroid Build Coastguard Worker "-target-feature", 123*d9f75844SAndroid Build Coastguard Worker "-Xclang", 124*d9f75844SAndroid Build Coastguard Worker "+crypto", 125*d9f75844SAndroid Build Coastguard Worker ] 126*d9f75844SAndroid Build Coastguard Worker } else { 127*d9f75844SAndroid Build Coastguard Worker cflags = [ "-march=armv8-a+crc+crypto" ] 128*d9f75844SAndroid Build Coastguard Worker } 129*d9f75844SAndroid Build Coastguard Worker } 130*d9f75844SAndroid Build Coastguard Worker 131*d9f75844SAndroid Build Coastguard Worker deps = [ ":crc32c_internal_headers" ] 132*d9f75844SAndroid Build Coastguard Worker} 133*d9f75844SAndroid Build Coastguard Worker 134*d9f75844SAndroid Build Coastguard Workersource_set("crc32c_internal_headers") { 135*d9f75844SAndroid Build Coastguard Worker sources = [ 136*d9f75844SAndroid Build Coastguard Worker "config/crc32c/crc32c_config.h", 137*d9f75844SAndroid Build Coastguard Worker "src/src/crc32c_internal.h", 138*d9f75844SAndroid Build Coastguard Worker "src/src/crc32c_prefetch.h", 139*d9f75844SAndroid Build Coastguard Worker "src/src/crc32c_read_le.h", 140*d9f75844SAndroid Build Coastguard Worker "src/src/crc32c_round_up.h", 141*d9f75844SAndroid Build Coastguard Worker ] 142*d9f75844SAndroid Build Coastguard Worker} 143*d9f75844SAndroid Build Coastguard Worker 144*d9f75844SAndroid Build Coastguard Workertest("crc32c_tests") { 145*d9f75844SAndroid Build Coastguard Worker sources = [ 146*d9f75844SAndroid Build Coastguard Worker "src/src/crc32c_arm64_unittest.cc", 147*d9f75844SAndroid Build Coastguard Worker "src/src/crc32c_extend_unittests.h", 148*d9f75844SAndroid Build Coastguard Worker "src/src/crc32c_portable_unittest.cc", 149*d9f75844SAndroid Build Coastguard Worker "src/src/crc32c_prefetch_unittest.cc", 150*d9f75844SAndroid Build Coastguard Worker "src/src/crc32c_read_le_unittest.cc", 151*d9f75844SAndroid Build Coastguard Worker "src/src/crc32c_round_up_unittest.cc", 152*d9f75844SAndroid Build Coastguard Worker "src/src/crc32c_sse42_unittest.cc", 153*d9f75844SAndroid Build Coastguard Worker "src/src/crc32c_unittest.cc", 154*d9f75844SAndroid Build Coastguard Worker ] 155*d9f75844SAndroid Build Coastguard Worker 156*d9f75844SAndroid Build Coastguard Worker configs += [ ":crc32c_config" ] 157*d9f75844SAndroid Build Coastguard Worker deps = [ 158*d9f75844SAndroid Build Coastguard Worker ":crc32c", 159*d9f75844SAndroid Build Coastguard Worker ":crc32c_arm64", 160*d9f75844SAndroid Build Coastguard Worker ":crc32c_internal_headers", 161*d9f75844SAndroid Build Coastguard Worker ":crc32c_sse42", 162*d9f75844SAndroid Build Coastguard Worker "//testing/gtest:gtest_main", 163*d9f75844SAndroid Build Coastguard Worker "//third_party/googletest:gtest", 164*d9f75844SAndroid Build Coastguard Worker ] 165*d9f75844SAndroid Build Coastguard Worker} 166*d9f75844SAndroid Build Coastguard Worker 167*d9f75844SAndroid Build Coastguard Workerif (enable_google_benchmarks) { 168*d9f75844SAndroid Build Coastguard Worker test("crc32c_benchmark") { 169*d9f75844SAndroid Build Coastguard Worker sources = [ "src/src/crc32c_benchmark.cc" ] 170*d9f75844SAndroid Build Coastguard Worker configs += [ ":crc32c_config" ] 171*d9f75844SAndroid Build Coastguard Worker deps = [ 172*d9f75844SAndroid Build Coastguard Worker ":crc32c", 173*d9f75844SAndroid Build Coastguard Worker ":crc32c_arm64", 174*d9f75844SAndroid Build Coastguard Worker ":crc32c_internal_headers", 175*d9f75844SAndroid Build Coastguard Worker ":crc32c_sse42", 176*d9f75844SAndroid Build Coastguard Worker "//third_party/google_benchmark", 177*d9f75844SAndroid Build Coastguard Worker ] 178*d9f75844SAndroid Build Coastguard Worker } 179*d9f75844SAndroid Build Coastguard Worker} 180