• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1//
2// Copyright (C) 2016 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8//      http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15//
16
17//
18// Definitions for building the Conscrypt Java library, native code,
19// and associated tests.
20//
21
22// Conscrypt is divided into subdirectories.
23//
24// The structure is:
25//
26//   constants/
27//       src/gen             # Generates NativeConstants.java.
28//   common/
29//       src/main/java       # Common Java source for all platforms.
30//       src/jni/
31//            main           # Common C++ source for all platforms.
32//            unbundled      # C++ source used for OpenJDK and unbundled Android.
33//       src/test/java       # Common test files for all platforms.
34//   android/
35//       src/main/java       # Java source for unbundled Android.
36//   openjdk/
37//       src/main/java       # Java source for OpenJDK.
38//       src/test
39//            java/          # Java source for common tests.
40//            resources/     # Support files for tests
41//   platform/
42//       src/main/java       # Java source for bundled Android.
43//       src/test
44//            java/          # Java source for bundled tests.
45//
46
47cc_defaults {
48    name: "conscrypt_global",
49
50    cflags: [
51        "-Wall",
52        "-Wextra",
53        "-Werror",
54        "-Wunused",
55    ],
56
57    srcs: [
58        "common/src/jni/main/cpp/conscrypt/compatibility_close_monitor.cc",
59        "common/src/jni/main/cpp/conscrypt/jniload.cc",
60        "common/src/jni/main/cpp/conscrypt/jniutil.cc",
61        "common/src/jni/main/cpp/conscrypt/native_crypto.cc",
62        "common/src/jni/main/cpp/conscrypt/netutil.cc",
63        "common/src/jni/main/cpp/conscrypt/trace.cc",
64    ],
65
66    local_include_dirs: [
67        "common/src/jni/main/include",
68    ],
69
70    compile_multilib: "both",
71    stl: "c++_static",
72}
73
74cc_defaults {
75    name: "conscrypt_unbundled-jni-defaults",
76
77    local_include_dirs: [
78        "common/src/jni/unbundled/include",
79    ],
80
81    shared_libs: [
82        "liblog",
83    ],
84
85    static_libs: [
86        "libssl",
87        "libcrypto",
88    ],
89
90    sdk_version: "9",
91}
92
93cc_library {
94    name: "libconscrypt_jni",
95    defaults: [
96        "conscrypt_global",
97        "conscrypt_unbundled-jni-defaults",
98    ],
99}
100
101cc_library_host_shared {
102    name: "libconscrypt_openjdk_jni",
103    defaults: ["conscrypt_global"],
104
105    cflags: [
106        "-DCONSCRYPT_OPENJDK",
107    ],
108
109    local_include_dirs: [
110        "common/src/jni/unbundled/include",
111    ],
112
113    static_libs: [
114        "libssl",
115        "libcrypto",
116    ],
117
118    // TODO: b/26097626. ASAN breaks use of this library in JVM.
119    // Re-enable sanitization when the issue with making clients of this library
120    // preload ASAN runtime is resolved. Without that, clients are getting runtime
121    // errors due to unresolved ASAN symbols, such as
122    // __asan_option_detect_stack_use_after_return.
123    sanitize: {
124        never: true,
125    },
126
127    stl: "libc++_static",
128
129    // The post-build signing tools need signapk.jar and its shared libs
130    multilib: {
131        lib64: {
132            dist: {
133                targets: ["droidcore"],
134            },
135        },
136    },
137}
138
139cc_binary_host {
140    name: "conscrypt_generate_constants",
141    srcs: ["constants/src/gen/cpp/generate_constants.cc"],
142    cflags: [
143        "-Wall",
144        "-Werror",
145    ],
146    shared_libs: [
147        "libcrypto",
148        "libssl",
149    ],
150}
151
152genrule {
153    name: "conscrypt-nojarjar_generated_constants",
154    out: ["org/conscrypt/NativeConstants.java"],
155    cmd: "$(location conscrypt_generate_constants) > $(out)",
156    tools: ["conscrypt_generate_constants"],
157}
158
159// Create the conscrypt library without jarjar for tests
160java_library {
161    name: "conscrypt-nojarjar",
162    host_supported: true,
163    hostdex: true,
164
165    srcs: [
166        "common/src/main/java/**/*.java",
167        ":conscrypt-nojarjar_generated_constants",
168    ],
169
170    no_standard_libs: true,
171    system_modules: "core-all-system-modules",
172    target: {
173        android: {
174            srcs: ["platform/src/main/java/**/*.java"],
175            libs: ["core-all"],
176        },
177        host: {
178            srcs: ["openjdk/src/main/java/**/*.java"],
179            javacflags: ["-XDignore.symbol.file"],
180        },
181    },
182
183    required: ["libjavacrypto"],
184    java_version: "1.7",
185}
186
187genrule {
188    name: "conscrypt_generated_constants",
189    out: ["com/android/org/conscrypt/NativeConstants.java"],
190    cmd: "$(location conscrypt_generate_constants) com.android.org.conscrypt > $(out)",
191    tools: ["conscrypt_generate_constants"],
192}
193
194filegroup {
195    name: "conscrypt_java_files",
196    srcs: [
197        "repackaged/common/src/main/java/**/*.java",
198        "repackaged/platform/src/main/java/**/*.java",
199        ":conscrypt_generated_constants",
200    ],
201}
202
203filegroup {
204    name: "conscrypt_public_api_files",
205    srcs: ["publicapi/src/main/java/**/*.java"]
206}
207
208// Create the conscrypt library from the source produced by the srcgen/generate_android_src.sh
209// script.
210java_library {
211    name: "conscrypt",
212    installable: true,
213    hostdex: true,
214
215    srcs: [
216        ":conscrypt_java_files",
217        ":conscrypt_public_api_files",
218    ],
219
220    // Conscrypt can be updated independently from the other core libraries so it must only depend
221    // on public SDK and intra-core APIs.
222    no_standard_libs: true,
223    libs: ["core.intra.stubs"],
224    patch_module: "java.base",
225    system_modules: "core-intra-stubs-system-modules",
226
227    // Workaround for b/124476339: libjavacrypto is required for both APEX and
228    // hostdex builds, but adding a top-level required property results in
229    // it being installed to /system on Android.
230    // TODO(b/124476339): move required back to a top level property
231    target: {
232        hostdex: {
233            required: ["libjavacrypto"],
234        }
235    },
236
237    permitted_packages: [
238        "android.net.ssl",
239        "com.android.org.conscrypt",
240    ],
241}
242
243// A guaranteed unstripped version of conscrypt.
244// The build system may or may not strip the conscrypt jar, but this one will
245// not be stripped. See b/24535627.
246java_library {
247    name: "conscrypt-testdex",
248    installable: true,
249
250    static_libs: ["conscrypt"],
251    dex_preopt: {
252        enabled: false,
253    },
254
255    no_framework_libs: true,
256
257    required: ["libjavacrypto"],
258}
259
260// Platform conscrypt crypto JNI library
261cc_defaults {
262    name: "libjavacrypto-defaults",
263
264    cflags: [
265        "-Wall",
266        "-Wextra",
267        "-Werror",
268        "-Wunused",
269        "-fvisibility=hidden",
270    ],
271
272    srcs: ["common/src/jni/main/cpp/**/*.cc"],
273    include_dirs: [
274        "libcore/luni/src/main/native",
275    ],
276    local_include_dirs: ["common/src/jni/main/include"],
277}
278
279// Platform conscrypt crypto JNI library
280cc_library_shared {
281    name: "libjavacrypto",
282    host_supported: true,
283    defaults: ["libjavacrypto-defaults"],
284
285    cflags: ["-DJNI_JARJAR_PREFIX=com/android/"],
286    header_libs: ["libnativehelper_header_only"],
287    shared_libs: [
288        "libcrypto",
289        "liblog",
290        "libssl",
291    ],
292
293    target: {
294        darwin: {
295            enabled: false,
296        },
297    },
298}
299
300// Unbundled Conscrypt jar
301java_library {
302    name: "conscrypt_unbundled",
303
304    srcs: [
305        "common/src/main/java/**/*.java",
306        "android/src/main/java/**/*.java",
307        ":conscrypt-nojarjar_generated_constants",
308    ],
309
310    libs: ["conscrypt-stubs"],
311
312    sdk_version: "current",
313    java_version: "1.7",
314}
315
316// Stub library for unbundled builds
317java_library {
318    name: "conscrypt-stubs",
319
320    srcs: ["android-stub/src/main/java/**/*.java"],
321
322    sdk_version: "current",
323    java_version: "1.7",
324}
325
326// Static unbundled Conscrypt crypto JNI library
327cc_library_static {
328    name: "libconscrypt_static",
329    defaults: ["libjavacrypto-defaults"],
330
331    cflags: [
332        "-DJNI_JARJAR_PREFIX=com/google/android/gms/",
333        "-DCONSCRYPT_UNBUNDLED",
334        "-DSTATIC_LIB",
335    ],
336
337    local_include_dirs: ["common/src/jni/unbundled/include"],
338
339    static_libs: [
340        "libssl",
341        "libcrypto",
342    ],
343    sdk_version: "9",
344    stl: "c++_shared",
345}
346
347
348// Make the conscrypt-tests library.
349java_test {
350    name: "conscrypt-tests",
351    hostdex: true,
352    srcs: [
353        "repackaged/platform/src/test/java/**/*.java",
354        "repackaged/common/src/test/java/**/*.java",
355        "repackaged/openjdk-integ-tests/src/test/java/**/*.java",
356        "repackaged/testing/src/main/java/**/*.java",
357        "publicapi/src/test/java/**/*.java",
358    ],
359    java_resource_dirs: [
360        // Resource directories do not need repackaging.
361        "openjdk/src/test/resources",
362        "openjdk-integ-tests/src/test/resources",
363    ],
364
365    no_standard_libs: true,
366    libs: [
367        "core-all",
368        "conscrypt",
369        "junit",
370        "mockito-target-minus-junit4",
371    ],
372    system_modules: "core-all-system-modules",
373
374    static_libs: [
375        "bouncycastle-unbundled",
376        "bouncycastle-bcpkix-unbundled",
377        "bouncycastle-ocsp-unbundled",
378    ],
379    javacflags: [
380        "-Xmaxwarns 9999999",
381        //"-Xlint:all",
382        //"-Xlint:-serial,-deprecation,-unchecked",
383    ],
384
385    required: ["libjavacrypto"],
386    java_version: "1.7",
387}
388
389// Make the conscrypt-benchmarks library.
390java_test {
391    name: "conscrypt-benchmarks",
392    srcs: [
393        "repackaged/testing/src/main/java/**/*.java",
394        "repackaged/benchmark-base/src/main/java/**/*.java",
395        "repackaged/benchmark-android/src/main/java/**/*.java",
396    ],
397    no_standard_libs: true,
398    libs: [
399        "core-all",
400        "conscrypt",
401        "junit",
402        "bouncycastle-unbundled",
403        "bouncycastle-bcpkix-unbundled",
404        "bouncycastle-ocsp-unbundled",
405        "caliper-api-target",
406    ],
407    system_modules: "core-all-system-modules",
408
409    javacflags: [
410        "-Xmaxwarns 9999999",
411        //"-Xlint:all",
412        //"-Xlint:-serial,-deprecation,-unchecked",
413    ],
414
415    required: ["libjavacrypto"],
416    java_version: "1.7",
417}
418