1# -*- mode: makefile -*- 2# Copyright (C) 2007 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 native code needed for the core library. 18# 19 20# 21# Common definitions for host and target. 22# 23 24# These two definitions are used to help sanity check what's put in 25# sub.mk. See, the "error" directives immediately below. 26core_magic_local_target := ...//::default:://... 27core_local_path := $(LOCAL_PATH) 28 29# Include a submakefile, resolve its source file locations, 30# and stick them on core_src_files. The submakefiles are 31# free to append to LOCAL_SRC_FILES, LOCAL_C_INCLUDES, 32# LOCAL_SHARED_LIBRARIES, or LOCAL_STATIC_LIBRARIES, but nothing 33# else. All other LOCAL_* variables will be ignored. 34# 35# $(1): directory containing the makefile to include 36define include-core-native-dir 37 LOCAL_SRC_FILES := 38 include $(LOCAL_PATH)/$(1)/sub.mk 39 ifneq ($$(LOCAL_MODULE),$(core_magic_local_target)) 40 $$(error $(LOCAL_PATH)/$(1)/sub.mk should not include CLEAR_VARS \ 41 or define LOCAL_MODULE) 42 endif 43 ifneq ($$(LOCAL_PATH),$(core_local_path)) 44 $$(error $(LOCAL_PATH)/$(1)/sub.mk should not define LOCAL_PATH) 45 endif 46 core_src_files += $$(addprefix $(1)/,$$(LOCAL_SRC_FILES)) 47 LOCAL_SRC_FILES := 48endef 49 50define include-openjdk-native-dir 51 LOCAL_SRC_FILES := 52 include $(LOCAL_PATH)/$(1)/openjdksub.mk 53 openjdk_core_src_files += $$(addprefix $(1)/,$$(LOCAL_SRC_FILES)) 54 LOCAL_SRC_FILES := 55endef 56 57# Set up the default state. Note: We use CLEAR_VARS here, even though 58# we aren't quite defining a new rule yet, to make sure that the 59# sub.mk files don't see anything stray from the last rule that was 60# set up. 61 62include $(CLEAR_VARS) 63LOCAL_MODULE := $(core_magic_local_target) 64LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk 65core_src_files := 66openjdk_core_src_files := 67 68#Include the sub.mk for openjdk. 69$(foreach dir, \ 70 ojluni/src/main/native, \ 71 $(eval $(call include-openjdk-native-dir,$(dir)))) 72 73# Include the sub.mk files. 74$(foreach dir, \ 75 dalvik/src/main/native luni/src/main/native, \ 76 $(eval $(call include-core-native-dir,$(dir)))) 77 78# Extract out the allowed LOCAL_* variables. 79core_c_includes := libcore/include $(LOCAL_C_INCLUDES) 80core_shared_libraries := $(LOCAL_SHARED_LIBRARIES) 81core_static_libraries := $(LOCAL_STATIC_LIBRARIES) 82libart_cflags := $(LOCAL_CFLAGS) -Wall -Wextra -Werror 83core_cppflags += -std=gnu++11 -DU_USING_ICU_NAMESPACE=0 84# TODO(narayan): Prune down this list of exclusions once the underlying 85# issues have been fixed. Most of these are small changes except for 86# -Wunused-parameter. 87openjdk_cflags := $(libart_cflags) \ 88 -Wno-unused-parameter \ 89 -Wno-unused-variable \ 90 -Wno-parentheses-equality \ 91 -Wno-constant-logical-operand \ 92 -Wno-sometimes-uninitialized 93 94core_test_files := \ 95 luni/src/test/native/dalvik_system_JniTest.cpp \ 96 luni/src/test/native/libcore_java_io_FileTest.cpp \ 97 luni/src/test/native/libcore_java_lang_ThreadTest.cpp \ 98 luni/src/test/native/libcore_java_nio_BufferTest.cpp \ 99 luni/src/test/native/libcore_util_NativeAllocationRegistryTest.cpp \ 100 101# 102# Build for the target (device). 103# 104 105include $(CLEAR_VARS) 106LOCAL_CFLAGS += $(libart_cflags) 107LOCAL_CPPFLAGS += $(core_cppflags) 108LOCAL_SRC_FILES += $(core_src_files) 109LOCAL_C_INCLUDES += $(core_c_includes) 110LOCAL_SHARED_LIBRARIES += $(core_shared_libraries) libcrypto libdl libexpat libicuuc libicui18n libnativehelper libz libutils 111LOCAL_STATIC_LIBRARIES += $(core_static_libraries) libziparchive libbase 112LOCAL_MODULE_TAGS := optional 113LOCAL_MODULE := libjavacore 114LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk 115LOCAL_CXX_STL := libc++ 116include $(BUILD_SHARED_LIBRARY) 117 118include $(CLEAR_VARS) 119 120LOCAL_CFLAGS += $(libart_cflags) 121LOCAL_CPPFLAGS += $(core_cppflags) 122ifeq ($(TARGET_ARCH),arm) 123# Ignore "note: the mangling of 'va_list' has changed in GCC 4.4" 124LOCAL_CFLAGS += -Wno-psabi 125endif 126 127# Define the rules. 128LOCAL_CFLAGS += $(openjdk_cflags) 129LOCAL_SRC_FILES := $(openjdk_core_src_files) 130LOCAL_C_INCLUDES := $(core_c_includes) 131LOCAL_SHARED_LIBRARIES := $(core_shared_libraries) libcrypto libicuuc libssl libz 132LOCAL_SHARED_LIBRARIES += libopenjdkjvm libnativehelper libdl 133LOCAL_STATIC_LIBRARIES := $(core_static_libraries) libfdlibm 134LOCAL_MODULE_TAGS := optional 135LOCAL_MODULE := libopenjdk 136LOCAL_NOTICE_FILE := $(LOCAL_PATH)/ojluni/NOTICE 137LOCAL_CXX_STL := libc++ 138include $(BUILD_SHARED_LIBRARY) 139 140# Debug version of libopenjdk. Depends on libopenjdkjvmd. 141include $(CLEAR_VARS) 142 143LOCAL_CFLAGS += $(libart_cflags) 144LOCAL_CPPFLAGS += $(core_cppflags) 145ifeq ($(TARGET_ARCH),arm) 146# Ignore "note: the mangling of 'va_list' has changed in GCC 4.4" 147LOCAL_CFLAGS += -Wno-psabi 148endif 149 150LOCAL_CFLAGS += $(openjdk_cflags) 151LOCAL_SRC_FILES := $(openjdk_core_src_files) 152LOCAL_C_INCLUDES := $(core_c_includes) 153LOCAL_SHARED_LIBRARIES := $(core_shared_libraries) libcrypto libicuuc libssl libz 154LOCAL_SHARED_LIBRARIES += libopenjdkjvmd libnativehelper libdl 155LOCAL_STATIC_LIBRARIES := $(core_static_libraries) libfdlibm 156LOCAL_MODULE_TAGS := optional 157LOCAL_MODULE := libopenjdkd 158LOCAL_NOTICE_FILE := $(LOCAL_PATH)/ojluni/NOTICE 159LOCAL_CXX_STL := libc++ 160include $(BUILD_SHARED_LIBRARY) 161 162# Test JNI library. 163ifeq ($(LIBCORE_SKIP_TESTS),) 164 165include $(CLEAR_VARS) 166LOCAL_CFLAGS += $(libart_cflags) 167LOCAL_CPPFLAGS += $(core_cppflags) 168LOCAL_SRC_FILES += $(core_test_files) 169LOCAL_C_INCLUDES += libcore/include 170LOCAL_SHARED_LIBRARIES += libnativehelper_compat_libc++ 171LOCAL_MODULE_TAGS := optional 172LOCAL_MODULE := libjavacoretests 173LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk 174LOCAL_CXX_STL := libc++ 175include $(BUILD_SHARED_LIBRARY) 176 177endif # LIBCORE_SKIP_TESTS 178 179# Set of gtest unit tests. 180include $(CLEAR_VARS) 181LOCAL_CFLAGS += $(libart_cflags) 182LOCAL_CPPFLAGS += $(core_cppflags) 183LOCAL_SRC_FILES += \ 184 luni/src/test/native/libcore_io_Memory_test.cpp \ 185 186LOCAL_C_INCLUDES += libcore/include 187LOCAL_MODULE_TAGS := debug 188LOCAL_MODULE := libjavacore-unit-tests 189LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk 190LOCAL_SHARED_LIBRARIES := libnativehelper 191LOCAL_CXX_STL := libc++ 192include $(BUILD_NATIVE_TEST) 193 194# Set of benchmarks for libjavacore functions. 195include $(CLEAR_VARS) 196LOCAL_CFLAGS += $(libart_cflags) 197LOCAL_CPPFLAGS += $(core_cppflags) 198LOCAL_SRC_FILES += \ 199 luni/src/benchmark/native/libcore_io_Memory_bench.cpp \ 200 201LOCAL_C_INCLUDES += libcore/include 202LOCAL_MODULE_TAGS := debug 203LOCAL_MODULE := libjavacore-benchmarks 204LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk 205LOCAL_SHARED_LIBRARIES := libnativehelper 206LOCAL_CXX_STL := libc++ 207LOCAL_MULTILIB := both 208LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32 209LOCAL_MODULE_STEM_64 := $(LOCAL_MODULE)64 210include $(BUILD_NATIVE_BENCHMARK) 211 212 213# 214# Build for the host. 215# 216 217ifeq ($(HOST_OS),linux) 218 219include $(CLEAR_VARS) 220LOCAL_CLANG := true 221LOCAL_SRC_FILES += $(core_src_files) 222LOCAL_CFLAGS += $(libart_cflags) 223LOCAL_C_INCLUDES += $(core_c_includes) 224LOCAL_CPPFLAGS += $(core_cppflags) 225LOCAL_LDLIBS += -ldl -lpthread 226ifeq ($(HOST_OS),linux) 227LOCAL_LDLIBS += -lrt 228endif 229LOCAL_MODULE_TAGS := optional 230LOCAL_MODULE := libjavacore 231LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk 232LOCAL_SHARED_LIBRARIES += $(core_shared_libraries) libexpat-host libicuuc-host libicui18n-host libcrypto-host libz-host libziparchive-host 233LOCAL_STATIC_LIBRARIES += $(core_static_libraries) 234LOCAL_MULTILIB := both 235LOCAL_CXX_STL := libc++ 236include $(BUILD_HOST_SHARED_LIBRARY) 237 238# Debug version of libopenjdk (host). Depends on libopenjdkjvmd. 239include $(CLEAR_VARS) 240LOCAL_SRC_FILES := $(openjdk_core_src_files) 241LOCAL_C_INCLUDES := $(core_c_includes) 242LOCAL_CFLAGS := -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -DLINUX -D__GLIBC__ # Sigh. 243LOCAL_CFLAGS += $(openjdk_cflags) 244LOCAL_SHARED_LIBRARIES := $(core_shared_libraries) libicuuc-host libcrypto-host libz-host 245LOCAL_SHARED_LIBRARIES += libopenjdkjvmd libnativehelper 246LOCAL_STATIC_LIBRARIES := $(core_static_libraries) libfdlibm 247LOCAL_MODULE_TAGS := optional 248LOCAL_LDLIBS += -ldl -lpthread 249LOCAL_MODULE := libopenjdkd 250LOCAL_NOTICE_FILE := $(LOCAL_PATH)/ojluni/NOTICE 251LOCAL_MULTILIB := both 252include $(BUILD_HOST_SHARED_LIBRARY) 253 254include $(CLEAR_VARS) 255LOCAL_SRC_FILES := $(openjdk_core_src_files) 256LOCAL_C_INCLUDES := $(core_c_includes) 257LOCAL_CFLAGS := -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -DLINUX -D__GLIBC__ # Sigh. 258LOCAL_CFLAGS += $(openjdk_cflags) 259LOCAL_SHARED_LIBRARIES := $(core_shared_libraries) libicuuc-host libcrypto-host libz-host 260LOCAL_SHARED_LIBRARIES += libopenjdkjvm libnativehelper 261LOCAL_STATIC_LIBRARIES := $(core_static_libraries) libfdlibm 262LOCAL_MODULE_TAGS := optional 263LOCAL_LDLIBS += -ldl -lpthread 264LOCAL_MODULE := libopenjdk 265LOCAL_NOTICE_FILE := $(LOCAL_PATH)/ojluni/NOTICE 266LOCAL_MULTILIB := both 267include $(BUILD_HOST_SHARED_LIBRARY) 268 269ifeq ($(LIBCORE_SKIP_TESTS),) 270 include $(CLEAR_VARS) 271 LOCAL_CLANG := true 272 LOCAL_SRC_FILES += $(core_test_files) 273 LOCAL_CFLAGS += $(libart_cflags) 274 LOCAL_C_INCLUDES += libcore/include 275 LOCAL_CPPFLAGS += $(core_cppflags) 276 LOCAL_LDLIBS += -ldl -lpthread 277 LOCAL_MODULE_TAGS := optional 278 LOCAL_MODULE := libjavacoretests 279 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk 280 LOCAL_SHARED_LIBRARIES := libnativehelper 281 LOCAL_MULTILIB := both 282 LOCAL_CXX_STL := libc++ 283 include $(BUILD_HOST_SHARED_LIBRARY) 284endif # LIBCORE_SKIP_TESTS 285 286endif # HOST_OS == linux 287