xref: /aosp_15_r20/external/webrtc/third_party/crc32c/BUILD.gn (revision d9f758449e529ab9291ac668be2861e7a55c2422)
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