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