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