Android.mk revision f6b7098d4e5b44b014f498dd30128d74143d266b
1# -*- mode: makefile -*-
2# Copyright (C) 2013 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# Definitions for building the Conscrypt Java library, native code,
18# and associated tests.
19#
20
21#
22# Common definitions for host and target.
23#
24
25# Conscrypt is divided into modules.
26#
27# The structure is:
28#
29#   src/
30#       main/               # To be shipped on every device.
31#            java/          # Java source for library code.
32#            native/        # C++ source for library code.
33#            resources/     # Support files.
34#       test/               # Built only on demand, for testing.
35#            java/          # Java source for tests.
36#            native/        # C++ source for tests (rare).
37#            resources/     # Support files.
38#
39# All subdirectories are optional (hence the "2> /dev/null"s below).
40
41LOCAL_PATH := $(call my-dir)
42
43local_javac_flags:=-Xmaxwarns 9999999
44#local_javac_flags+=-Xlint:all -Xlint:-serial,-deprecation,-unchecked
45
46core_cflags := -Wall -Wextra -Werror -Wunused
47core_cppflags := -std=gnu++11 -Wall -Wextra -Werror -Wunused
48
49# libnativehelper's UniquePtr is deprecated but changing to std::unique_ptr has
50# been rejected here in the past:
51# https://android-review.googlesource.com/#/c/113096/
52core_cppflags += -Wno-error=deprecated-declarations
53
54#
55# Build for the target (device).
56#
57
58include $(CLEAR_VARS)
59LOCAL_CPP_EXTENSION := cc
60LOCAL_SRC_FILES := src/gen/native/generate_constants.cc
61LOCAL_MODULE := conscrypt_generate_constants
62LOCAL_SHARED_LIBRARIES := libcrypto libssl
63LOCAL_CXX_STL := none
64include $(BUILD_HOST_EXECUTABLE)
65
66conscrypt_generate_constants_exe := $(LOCAL_INSTALLED_MODULE)
67conscrypt_gen_java_files := $(TARGET_OUT_COMMON_GEN)/conscrypt/NativeConstants.java
68
69$(conscrypt_gen_java_files): $(conscrypt_generate_constants_exe)
70	mkdir -p $(dir $@)
71	$< > $@
72
73# Create the conscrypt library
74include $(CLEAR_VARS)
75LOCAL_SRC_FILES := $(call all-java-files-under,src/main/java)
76LOCAL_SRC_FILES += $(call all-java-files-under,src/platform/java)
77LOCAL_GENERATED_SOURCES := $(conscrypt_gen_java_files)
78LOCAL_JAVA_LIBRARIES := core-oj core-libart
79LOCAL_NO_STANDARD_LIBRARIES := true
80LOCAL_JAVACFLAGS := $(local_javac_flags)
81LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
82LOCAL_MODULE_TAGS := optional
83LOCAL_MODULE := conscrypt
84LOCAL_REQUIRED_MODULES := libjavacrypto
85LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
86LOCAL_JAVA_LANGUAGE_VERSION := 1.7
87include $(BUILD_JAVA_LIBRARY)
88
89# Create the conscrypt library without jarjar for tests
90include $(CLEAR_VARS)
91LOCAL_SRC_FILES := $(call all-java-files-under,src/main/java)
92LOCAL_SRC_FILES += $(call all-java-files-under,src/platform/java)
93LOCAL_GENERATED_SOURCES := $(conscrypt_gen_java_files)
94LOCAL_JAVA_LIBRARIES := core-oj core-libart
95LOCAL_NO_STANDARD_LIBRARIES := true
96LOCAL_JAVACFLAGS := $(local_javac_flags)
97LOCAL_MODULE_TAGS := optional
98LOCAL_MODULE := conscrypt-nojarjar
99LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
100LOCAL_JAVA_LANGUAGE_VERSION := 1.7
101include $(BUILD_STATIC_JAVA_LIBRARY)
102
103ifeq ($(LIBCORE_SKIP_TESTS),)
104# Make the conscrypt-tests library.
105include $(CLEAR_VARS)
106LOCAL_SRC_FILES := $(call all-java-files-under,src/test/java)
107LOCAL_JAVA_RESOURCE_DIRS := src/test/resources
108LOCAL_NO_STANDARD_LIBRARIES := true
109LOCAL_JAVA_LIBRARIES := core-oj core-libart core-junit bouncycastle mockito-target-minus-junit4
110LOCAL_STATIC_JAVA_LIBRARIES := core-tests-support conscrypt-nojarjar
111LOCAL_JAVACFLAGS := $(local_javac_flags)
112LOCAL_MODULE_TAGS := optional
113LOCAL_MODULE := conscrypt-tests
114LOCAL_REQUIRED_MODULES := libjavacrypto
115LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
116LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
117LOCAL_JAVA_LANGUAGE_VERSION := 1.7
118include $(BUILD_STATIC_JAVA_LIBRARY)
119endif
120
121# Platform conscrypt crypto JNI library
122include $(CLEAR_VARS)
123ifneq (,$(wildcard $(TOP)/external/boringssl/flavor.mk))
124    include $(TOP)/external/boringssl/flavor.mk
125else
126    include $(TOP)/external/openssl/flavor.mk
127endif
128LOCAL_CFLAGS += $(core_cflags)
129LOCAL_CFLAGS += -DJNI_JARJAR_PREFIX="com/android/"
130LOCAL_CPPFLAGS += $(core_cppflags)
131LOCAL_SRC_FILES := \
132        src/main/native/org_conscrypt_NativeCrypto.cpp
133LOCAL_C_INCLUDES += \
134        external/openssl/include \
135        external/openssl \
136        libcore/include \
137        libcore/luni/src/main/native \
138        $(LOCAL_PATH)/src/platform/native
139LOCAL_SHARED_LIBRARIES := libcrypto libjavacore liblog libnativehelper libssl libz
140LOCAL_MODULE_TAGS := optional
141LOCAL_MODULE := libjavacrypto
142LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
143include $(BUILD_SHARED_LIBRARY)
144
145# Unbundled Conscrypt jar
146include $(CLEAR_VARS)
147LOCAL_SRC_FILES := $(call all-java-files-under,src/main/java)
148LOCAL_SRC_FILES += $(call all-java-files-under,src/compat/java)
149LOCAL_GENERATED_SOURCES := $(conscrypt_gen_java_files)
150LOCAL_SDK_VERSION := 9
151LOCAL_JAVACFLAGS := $(local_javac_flags)
152LOCAL_MODULE_TAGS := optional
153LOCAL_MODULE := conscrypt_unbundled
154LOCAL_JAVA_LIBRARIES := conscrypt-stubs
155LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
156LOCAL_JACK_FLAGS := -D jack.classpath.default-libraries=false
157LOCAL_JAVA_LANGUAGE_VERSION := 1.7
158include $(BUILD_STATIC_JAVA_LIBRARY)
159
160# Stub library for unbundled builds
161include $(CLEAR_VARS)
162LOCAL_SRC_FILES := $(call all-java-files-under,src/stub/java)
163LOCAL_SDK_VERSION := 9
164LOCAL_JAVACFLAGS := $(local_javac_flags)
165LOCAL_MODULE := conscrypt-stubs
166LOCAL_JACK_FLAGS := -D jack.classpath.default-libraries=false
167LOCAL_JAVA_LANGUAGE_VERSION := 1.7
168include $(BUILD_STATIC_JAVA_LIBRARY)
169
170# Unbundled Conscrypt crypto JNI library
171include $(CLEAR_VARS)
172LOCAL_CFLAGS += $(core_cflags)
173LOCAL_CPPFLAGS += $(core_cppflags)
174LOCAL_SRC_FILES := \
175        src/main/native/org_conscrypt_NativeCrypto.cpp \
176        src/compat/native/JNIHelp.cpp
177LOCAL_C_INCLUDES += \
178        external/openssl/include \
179        external/openssl \
180        $(LOCAL_PATH)/src/compat/native
181LOCAL_LDFLAGS := -llog -lz -ldl
182LOCAL_STATIC_LIBRARIES := libssl libcrypto
183LOCAL_MODULE_TAGS := optional
184LOCAL_MODULE := libconscrypt_jni
185LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
186LOCAL_SDK_VERSION := 9
187LOCAL_JAVA_LANGUAGE_VERSION := 1.7
188include $(BUILD_SHARED_LIBRARY)
189
190# Static unbundled Conscrypt crypto JNI library
191include $(CLEAR_VARS)
192LOCAL_CFLAGS += $(core_cflags)
193LOCAL_CPPFLAGS += $(core_cppflags) \
194        -DJNI_JARJAR_PREFIX="com/google/android/gms/" \
195        -DCONSCRYPT_UNBUNDLED \
196        -DSTATIC_LIB
197LOCAL_SRC_FILES := \
198        src/main/native/org_conscrypt_NativeCrypto.cpp \
199        src/compat/native/JNIHelp.cpp
200LOCAL_C_INCLUDES += \
201        external/openssl/include \
202        external/openssl \
203        $(LOCAL_PATH)/src/compat/native
204LOCAL_MODULE_TAGS := optional
205LOCAL_MODULE := libconscrypt_static
206LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
207LOCAL_STATIC_LIBRARIES := libssl libcrypto
208LOCAL_SDK_VERSION := 9
209LOCAL_JAVA_LANGUAGE_VERSION := 1.7
210include $(BUILD_STATIC_LIBRARY)
211
212#
213# Build for the host.
214#
215
216ifeq ($(HOST_OS),linux)
217
218# Make the conscrypt-hostdex library
219include $(CLEAR_VARS)
220LOCAL_SRC_FILES := $(call all-java-files-under,src/main/java)
221LOCAL_SRC_FILES += $(call all-java-files-under,src/platform/java)
222LOCAL_GENERATED_SOURCES := $(conscrypt_gen_java_files)
223LOCAL_JAVACFLAGS := $(local_javac_flags)
224LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
225LOCAL_MODULE_TAGS := optional
226LOCAL_MODULE := conscrypt-hostdex
227LOCAL_REQUIRED_MODULES := libjavacrypto
228LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
229LOCAL_JAVA_LANGUAGE_VERSION := 1.7
230include $(BUILD_HOST_DALVIK_JAVA_LIBRARY)
231
232# Make the conscrypt-hostdex-nojarjar for tests
233include $(CLEAR_VARS)
234LOCAL_SRC_FILES := $(call all-java-files-under,src/main/java)
235LOCAL_SRC_FILES += $(call all-java-files-under,src/platform/java)
236LOCAL_GENERATED_SOURCES := $(conscrypt_gen_java_files)
237LOCAL_JAVACFLAGS := $(local_javac_flags)
238LOCAL_BUILD_HOST_DEX := true
239LOCAL_MODULE_TAGS := optional
240LOCAL_MODULE := conscrypt-hostdex-nojarjar
241LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
242LOCAL_JAVA_LANGUAGE_VERSION := 1.7
243include $(BUILD_HOST_DALVIK_JAVA_LIBRARY)
244
245# Make the conscrypt-tests library.
246ifeq ($(LIBCORE_SKIP_TESTS),)
247    include $(CLEAR_VARS)
248    LOCAL_SRC_FILES := $(call all-java-files-under,src/test/java)
249    LOCAL_JAVA_RESOURCE_DIRS := src/test/resources
250    LOCAL_JAVA_LIBRARIES := bouncycastle-hostdex core-junit-hostdex core-tests-support-hostdex conscrypt-hostdex-nojarjar mockito-api-hostdex
251    LOCAL_JAVACFLAGS := $(local_javac_flags)
252    LOCAL_MODULE_TAGS := optional
253    LOCAL_MODULE := conscrypt-tests-hostdex
254    LOCAL_REQUIRED_MODULES := libjavacrypto
255    LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
256    LOCAL_JAVA_LANGUAGE_VERSION := 1.7
257    include $(BUILD_HOST_DALVIK_JAVA_LIBRARY)
258endif
259
260# Conscrypt native library for host
261include $(CLEAR_VARS)
262LOCAL_CLANG := true
263LOCAL_SRC_FILES += \
264        src/main/native/org_conscrypt_NativeCrypto.cpp
265LOCAL_C_INCLUDES += \
266        external/openssl/include \
267        external/openssl \
268        libcore/include \
269        libcore/luni/src/main/native \
270        $(LOCAL_PATH)/src/platform/native
271LOCAL_CPPFLAGS += $(core_cppflags)
272LOCAL_LDLIBS += -lpthread
273LOCAL_MODULE_TAGS := optional
274LOCAL_MODULE := libjavacrypto
275LOCAL_CFLAGS += -DJNI_JARJAR_PREFIX="com/android/"
276LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
277LOCAL_SHARED_LIBRARIES := libcrypto libjavacore liblog libnativehelper libssl
278LOCAL_MULTILIB := both
279LOCAL_CXX_STL := none
280include $(BUILD_HOST_SHARED_LIBRARY)
281
282# Conscrypt native library for nojarjar'd version
283# Don't build this for unbundled conscrypt build
284ifeq (,$(TARGET_BUILD_APPS))
285    include $(CLEAR_VARS)
286    LOCAL_CLANG := true
287    LOCAL_SRC_FILES += \
288            src/main/native/org_conscrypt_NativeCrypto.cpp
289    LOCAL_C_INCLUDES += \
290            external/openssl/include \
291            external/openssl \
292            libcore/include \
293            libcore/luni/src/main/native \
294            $(LOCAL_PATH)/src/platform/native
295    LOCAL_CPPFLAGS += $(core_cppflags) -DCONSCRYPT_NOT_UNBUNDLED
296    LOCAL_LDLIBS += -lpthread
297    LOCAL_MODULE_TAGS := optional
298    LOCAL_MODULE := libconscrypt_jni
299    LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
300    LOCAL_SHARED_LIBRARIES := libcrypto libjavacore liblog libnativehelper libssl
301    LOCAL_MULTILIB := both
302    LOCAL_CXX_STL := none
303    include $(BUILD_HOST_SHARED_LIBRARY)
304endif
305
306endif # HOST_OS == linux
307
308# Conscrypt JNI library for host OpenJDK
309# To be self-contained, this shared library statically links in all of its
310# Android-specific dependencies.
311include $(CLEAR_VARS)
312LOCAL_CLANG := true
313LOCAL_SRC_FILES += \
314        src/main/native/org_conscrypt_NativeCrypto.cpp \
315        src/openjdk/native/JNIHelp.cpp
316LOCAL_C_INCLUDES += \
317        external/openssl/include \
318        external/openssl \
319        $(LOCAL_PATH)/src/openjdk/native
320LOCAL_CPPFLAGS += $(core_cppflags) -DCONSCRYPT_OPENJDK
321LOCAL_LDLIBS += -lpthread
322LOCAL_MODULE_TAGS := optional
323LOCAL_MODULE := libconscrypt_openjdk_jni
324LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
325LOCAL_CXX_STL := libc++_static
326LOCAL_STATIC_LIBRARIES := libssl_static-host libcrypto_static
327LOCAL_MULTILIB := both
328# TODO: b/26097626. ASAN breaks use of this library in JVM.
329# Re-enable sanitization when the issue with making clients of this library
330# preload ASAN runtime is resolved. Without that, clients are getting runtime
331# errors due to unresoled ASAN symbols, such as
332# __asan_option_detect_stack_use_after_return.
333LOCAL_SANITIZE := never
334include $(BUILD_HOST_SHARED_LIBRARY)
335
336# Conscrypt Java library for host OpenJDK
337include $(CLEAR_VARS)
338LOCAL_SRC_FILES := $(call all-java-files-under,src/main/java)
339LOCAL_SRC_FILES += $(call all-java-files-under,src/openjdk/java)
340LOCAL_SRC_FILES += $(call all-java-files-under,src/openjdk-host/java)
341LOCAL_GENERATED_SOURCES := $(conscrypt_gen_java_files)
342LOCAL_JAVACFLAGS := $(local_javac_flags) -XDignore.symbol.file
343LOCAL_MODULE_TAGS := optional
344LOCAL_MODULE := conscrypt-host
345LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
346LOCAL_JAVA_LANGUAGE_VERSION := 1.7
347include $(BUILD_HOST_JAVA_LIBRARY)
348
349# clear out local variables
350core_cflags :=
351core_cppflags :=
352local_javac_flags :=
353