Android.mk revision 72ddbd969001397d5747afd063eccad246af32a8
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#   constants/
30#       src/gen             # Generates NativeConstants.java.
31#   common/
32#       src/main/java       # Common Java source for all platforms.
33#       src/jni/
34#            main           # Common C++ source for all platforms.
35#            unbundled      # C++ source used for OpenJDK and unbundled Android.
36#   android/
37#       src/main/java       # Java source for unbundled Android.
38#   openjdk/
39#       src/main/java       # Java source for OpenJDK.
40#       src/test
41#            java/          # Java source for common tests.
42#            resources/     # Support files for tests
43#   platform/
44#       src/main/java       # Java source for bundled Android.
45#       src/test
46#            java/          # Java source for bundled tests.
47#
48# All subdirectories are optional (hence the "2> /dev/null"s below).
49
50LOCAL_PATH := $(call my-dir)
51
52local_javac_flags:=-Xmaxwarns 9999999
53#local_javac_flags+=-Xlint:all -Xlint:-serial,-deprecation,-unchecked
54
55core_cflags := -Wall -Wextra -Werror -Wunused
56core_cppflags := -Wall -Wextra -Werror -Wunused
57
58#
59# Build for the target (device).
60#
61
62include $(CLEAR_VARS)
63LOCAL_SRC_FILES := constants/src/gen/cpp/generate_constants.cpp
64LOCAL_MODULE := conscrypt_generate_constants
65LOCAL_SHARED_LIBRARIES := libcrypto libssl
66include $(BUILD_HOST_EXECUTABLE)
67
68conscrypt_generate_constants_exe := $(LOCAL_INSTALLED_MODULE)
69conscrypt_gen_java_files := $(TARGET_OUT_COMMON_GEN)/conscrypt/org/conscrypt/NativeConstants.java
70
71$(conscrypt_gen_java_files): $(conscrypt_generate_constants_exe)
72	mkdir -p $(dir $@)
73	$< > $@
74
75common_java_files := $(filter-out \
76	%/org/conscrypt/Platform.java \
77	%/org/conscrypt/NativeCryptoJni.java \
78	, $(call all-java-files-under,common/src/main/java))
79
80# Create the conscrypt library
81include $(CLEAR_VARS)
82LOCAL_SRC_FILES := $(common_java_files)
83LOCAL_SRC_FILES += $(call all-java-files-under,platform/src/main/java)
84LOCAL_GENERATED_SOURCES := $(conscrypt_gen_java_files)
85LOCAL_JAVA_LIBRARIES := core-oj core-libart
86LOCAL_NO_STANDARD_LIBRARIES := true
87LOCAL_JAVACFLAGS := $(local_javac_flags)
88LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
89LOCAL_MODULE_TAGS := optional
90LOCAL_MODULE := conscrypt
91LOCAL_REQUIRED_MODULES := libjavacrypto
92LOCAL_JAVA_LANGUAGE_VERSION := 1.7
93include $(BUILD_JAVA_LIBRARY)
94
95# Create the conscrypt library without jarjar for tests
96include $(CLEAR_VARS)
97LOCAL_SRC_FILES := $(common_java_files)
98LOCAL_SRC_FILES += $(call all-java-files-under,platform/src/main/java)
99LOCAL_GENERATED_SOURCES := $(conscrypt_gen_java_files)
100LOCAL_JAVA_LIBRARIES := core-oj core-libart
101LOCAL_NO_STANDARD_LIBRARIES := true
102LOCAL_JAVACFLAGS := $(local_javac_flags)
103LOCAL_MODULE_TAGS := optional
104LOCAL_MODULE := conscrypt-nojarjar
105LOCAL_JAVA_LANGUAGE_VERSION := 1.7
106include $(BUILD_STATIC_JAVA_LIBRARY)
107
108platform_test_java_files := $(filter-out \
109	%/org/conscrypt/NativeCryptoTest.java \
110	%/org/conscrypt/OpenSSLSocketImplTest.java \
111	, $(call all-java-files-under,openjdk/src/test/java))
112platform_test_java_files := $(foreach j,$(platform_test_java_files),\
113	$(if $(findstring openjdk/src/test/java/libcore/,$(j)),,$(j)))
114platform_test_java_files += $(call all-java-files-under,platform/src/test/java)
115
116ifeq ($(LIBCORE_SKIP_TESTS),)
117# Make the conscrypt-tests library.
118include $(CLEAR_VARS)
119LOCAL_SRC_FILES := $(platform_test_java_files)
120LOCAL_JAVA_RESOURCE_DIRS := openjdk/src/test/resources
121LOCAL_NO_STANDARD_LIBRARIES := true
122LOCAL_JAVA_LIBRARIES := core-oj core-libart junit bouncycastle mockito-target-minus-junit4
123LOCAL_STATIC_JAVA_LIBRARIES := core-tests-support conscrypt-nojarjar
124LOCAL_JAVACFLAGS := $(local_javac_flags)
125LOCAL_MODULE_TAGS := optional
126LOCAL_MODULE := conscrypt-tests
127LOCAL_REQUIRED_MODULES := libjavacrypto
128LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
129LOCAL_JAVA_LANGUAGE_VERSION := 1.7
130include $(BUILD_STATIC_JAVA_LIBRARY)
131endif
132
133# Platform conscrypt crypto JNI library
134include $(CLEAR_VARS)
135LOCAL_CFLAGS += $(core_cflags)
136LOCAL_CFLAGS += -DJNI_JARJAR_PREFIX="com/android/"
137LOCAL_CPPFLAGS += $(core_cppflags)
138LOCAL_SRC_FILES := \
139        common/src/jni/main/cpp/org_conscrypt_NativeCrypto.cpp
140LOCAL_C_INCLUDES += \
141        external/openssl/include \
142        external/openssl \
143        libcore/include \
144        libcore/luni/src/main/native \
145        $(LOCAL_PATH)/common/src/jni/main/include
146LOCAL_SHARED_LIBRARIES := libcrypto libjavacore liblog libnativehelper libssl
147LOCAL_MODULE_TAGS := optional
148LOCAL_MODULE := libjavacrypto
149include $(BUILD_SHARED_LIBRARY)
150
151# Unbundled Conscrypt jar
152include $(CLEAR_VARS)
153LOCAL_SRC_FILES := $(common_java_files)
154LOCAL_SRC_FILES += $(call all-java-files-under,android/src/main/java)
155LOCAL_GENERATED_SOURCES := $(conscrypt_gen_java_files)
156LOCAL_SDK_VERSION := 16
157LOCAL_JAVACFLAGS := $(local_javac_flags)
158LOCAL_MODULE_TAGS := optional
159LOCAL_MODULE := conscrypt_unbundled
160LOCAL_JAVA_LIBRARIES := conscrypt-stubs
161LOCAL_JACK_FLAGS := -D jack.classpath.default-libraries=false
162LOCAL_JAVA_LANGUAGE_VERSION := 1.7
163include $(BUILD_STATIC_JAVA_LIBRARY)
164
165# Stub library for unbundled builds
166include $(CLEAR_VARS)
167LOCAL_SRC_FILES := $(call all-java-files-under,android-stub/src/main/java)
168LOCAL_SDK_VERSION := 16
169LOCAL_JAVACFLAGS := $(local_javac_flags)
170LOCAL_MODULE := conscrypt-stubs
171LOCAL_JACK_FLAGS := -D jack.classpath.default-libraries=false
172LOCAL_JAVA_LANGUAGE_VERSION := 1.7
173include $(BUILD_STATIC_JAVA_LIBRARY)
174
175# Static unbundled Conscrypt crypto JNI library
176include $(CLEAR_VARS)
177LOCAL_CFLAGS += $(core_cflags)
178LOCAL_CPPFLAGS += $(core_cppflags) \
179        -DJNI_JARJAR_PREFIX="com/google/android/gms/" \
180        -DCONSCRYPT_UNBUNDLED \
181        -DSTATIC_LIB
182LOCAL_SRC_FILES := \
183        common/src/jni/main/cpp/org_conscrypt_NativeCrypto.cpp \
184        common/src/jni/unbundled/cpp/JNIHelp.cpp
185LOCAL_C_INCLUDES += \
186        external/openssl/include \
187        external/openssl \
188        $(LOCAL_PATH)/common/src/jni/main/include \
189        $(LOCAL_PATH)/common/src/jni/unbundled/include
190LOCAL_MODULE_TAGS := optional
191LOCAL_MODULE := libconscrypt_static
192LOCAL_STATIC_LIBRARIES := libssl libcrypto
193LOCAL_SDK_VERSION := 9
194LOCAL_JAVA_LANGUAGE_VERSION := 1.7
195LOCAL_NDK_STL_VARIANT := c++_shared
196include $(BUILD_STATIC_LIBRARY)
197
198#
199# Build for the host.
200#
201
202ifeq ($(HOST_OS),linux)
203
204# Make the conscrypt-hostdex library
205include $(CLEAR_VARS)
206LOCAL_SRC_FILES := $(common_java_files)
207LOCAL_SRC_FILES += $(call all-java-files-under,platform/src/main/java)
208LOCAL_GENERATED_SOURCES := $(conscrypt_gen_java_files)
209LOCAL_JAVACFLAGS := $(local_javac_flags)
210LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
211LOCAL_MODULE_TAGS := optional
212LOCAL_MODULE := conscrypt-hostdex
213LOCAL_REQUIRED_MODULES := libjavacrypto
214LOCAL_JAVA_LANGUAGE_VERSION := 1.7
215include $(BUILD_HOST_DALVIK_JAVA_LIBRARY)
216
217# Make the conscrypt-hostdex-nojarjar for tests
218include $(CLEAR_VARS)
219LOCAL_SRC_FILES := $(common_java_files)
220LOCAL_SRC_FILES += $(call all-java-files-under,platform/src/main/java)
221LOCAL_GENERATED_SOURCES := $(conscrypt_gen_java_files)
222LOCAL_JAVACFLAGS := $(local_javac_flags)
223LOCAL_BUILD_HOST_DEX := true
224LOCAL_MODULE_TAGS := optional
225LOCAL_MODULE := conscrypt-hostdex-nojarjar
226LOCAL_JAVA_LANGUAGE_VERSION := 1.7
227include $(BUILD_HOST_DALVIK_STATIC_JAVA_LIBRARY)
228
229# Make the conscrypt-tests library.
230ifeq ($(LIBCORE_SKIP_TESTS),)
231    include $(CLEAR_VARS)
232    LOCAL_SRC_FILES := $(platform_test_java_files)
233    LOCAL_JAVA_RESOURCE_DIRS := openjdk/src/test/resources
234    LOCAL_JAVA_LIBRARIES := bouncycastle-hostdex junit-hostdex core-tests-support-hostdex mockito-api-hostdex
235    LOCAL_STATIC_JAVA_LIBRARIES := conscrypt-hostdex-nojarjar
236    LOCAL_JAVACFLAGS := $(local_javac_flags)
237    LOCAL_MODULE_TAGS := optional
238    LOCAL_MODULE := conscrypt-tests-hostdex
239    LOCAL_REQUIRED_MODULES := libjavacrypto
240    LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
241    LOCAL_JAVA_LANGUAGE_VERSION := 1.7
242    include $(BUILD_HOST_DALVIK_JAVA_LIBRARY)
243endif
244
245# Conscrypt native library for host
246include $(CLEAR_VARS)
247LOCAL_CLANG := true
248LOCAL_SRC_FILES += \
249        common/src/jni/main/cpp/org_conscrypt_NativeCrypto.cpp
250LOCAL_C_INCLUDES += \
251        external/openssl/include \
252        external/openssl \
253        libcore/include \
254        libcore/luni/src/main/native \
255        $(LOCAL_PATH)/common/src/jni/main/include
256LOCAL_CPPFLAGS += $(core_cppflags)
257LOCAL_LDLIBS += -lpthread
258LOCAL_MODULE_TAGS := optional
259LOCAL_MODULE := libjavacrypto
260LOCAL_CFLAGS += -DJNI_JARJAR_PREFIX="com/android/"
261LOCAL_SHARED_LIBRARIES := libcrypto libjavacore liblog libnativehelper libssl
262LOCAL_MULTILIB := both
263include $(BUILD_HOST_SHARED_LIBRARY)
264
265endif # HOST_OS == linux
266
267# Conscrypt Java library for host OpenJDK
268include $(CLEAR_VARS)
269LOCAL_SRC_FILES := $(common_java_files)
270LOCAL_SRC_FILES += $(call all-java-files-under,openjdk/src/main/java)
271LOCAL_GENERATED_SOURCES := $(conscrypt_gen_java_files)
272LOCAL_JAVACFLAGS := $(local_javac_flags) -XDignore.symbol.file
273LOCAL_MODULE_TAGS := optional
274LOCAL_MODULE := conscrypt-host
275LOCAL_JAVA_LANGUAGE_VERSION := 1.7
276include $(BUILD_HOST_JAVA_LIBRARY)
277
278# clear out local variables
279common_java_files :=
280conscrypt_gen_java_files :=
281conscrypt_generate_constants_exe :=
282core_cflags :=
283core_cppflags :=
284local_javac_flags :=
285platform_test_java_files :=
286