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 += -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_STRIP_MODULE := keep_symbols 173LOCAL_MODULE := libjavacoretests 174LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk 175LOCAL_CXX_STL := libc++ 176include $(BUILD_SHARED_LIBRARY) 177 178endif # LIBCORE_SKIP_TESTS 179 180# Set of gtest unit tests. 181include $(CLEAR_VARS) 182# Add -fno-builtin so that the compiler doesn't attempt to inline 183# memcpy calls that are not really aligned. 184LOCAL_CFLAGS += $(libart_cflags) -fno-builtin 185LOCAL_CPPFLAGS += $(core_cppflags) 186LOCAL_SRC_FILES += \ 187 luni/src/test/native/libcore_io_Memory_test.cpp \ 188 189LOCAL_C_INCLUDES += libcore/include 190LOCAL_MODULE_TAGS := debug 191LOCAL_MODULE := libjavacore-unit-tests 192LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk 193LOCAL_SHARED_LIBRARIES := libnativehelper 194LOCAL_CXX_STL := libc++ 195include $(BUILD_NATIVE_TEST) 196 197# Set of benchmarks for libjavacore functions. 198include $(CLEAR_VARS) 199LOCAL_CFLAGS += $(libart_cflags) 200LOCAL_CPPFLAGS += $(core_cppflags) 201LOCAL_SRC_FILES += \ 202 luni/src/benchmark/native/libcore_io_Memory_bench.cpp \ 203 204LOCAL_C_INCLUDES += libcore/include 205LOCAL_MODULE_TAGS := debug 206LOCAL_MODULE := libjavacore-benchmarks 207LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk 208LOCAL_SHARED_LIBRARIES := libnativehelper 209LOCAL_CXX_STL := libc++ 210LOCAL_MULTILIB := both 211LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32 212LOCAL_MODULE_STEM_64 := $(LOCAL_MODULE)64 213include $(BUILD_NATIVE_BENCHMARK) 214 215 216# 217# Build for the host. 218# 219 220ifeq ($(HOST_OS),linux) 221 222include $(CLEAR_VARS) 223LOCAL_CLANG := true 224LOCAL_SRC_FILES += $(core_src_files) 225LOCAL_CFLAGS += $(libart_cflags) 226LOCAL_C_INCLUDES += $(core_c_includes) 227LOCAL_CPPFLAGS += $(core_cppflags) 228LOCAL_LDLIBS += -ldl -lpthread 229ifeq ($(HOST_OS),linux) 230LOCAL_LDLIBS += -lrt 231endif 232LOCAL_MODULE_TAGS := optional 233LOCAL_MODULE := libjavacore 234LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk 235LOCAL_SHARED_LIBRARIES += $(core_shared_libraries) libexpat libicuuc libicui18n libcrypto libz-host libziparchive 236LOCAL_STATIC_LIBRARIES += $(core_static_libraries) 237LOCAL_MULTILIB := both 238LOCAL_CXX_STL := libc++ 239include $(BUILD_HOST_SHARED_LIBRARY) 240 241# Debug version of libopenjdk (host). Depends on libopenjdkjvmd. 242include $(CLEAR_VARS) 243LOCAL_SRC_FILES := $(openjdk_core_src_files) 244LOCAL_C_INCLUDES := $(core_c_includes) 245LOCAL_CFLAGS := -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -DLINUX -D__GLIBC__ # Sigh. 246LOCAL_CFLAGS += $(openjdk_cflags) 247LOCAL_SHARED_LIBRARIES := $(core_shared_libraries) libicuuc libcrypto libz-host 248LOCAL_SHARED_LIBRARIES += libopenjdkjvmd libnativehelper 249LOCAL_STATIC_LIBRARIES := $(core_static_libraries) libfdlibm 250LOCAL_MODULE_TAGS := optional 251LOCAL_LDLIBS += -ldl -lpthread -lrt 252LOCAL_MODULE := libopenjdkd 253LOCAL_NOTICE_FILE := $(LOCAL_PATH)/ojluni/NOTICE 254LOCAL_MULTILIB := both 255include $(BUILD_HOST_SHARED_LIBRARY) 256 257include $(CLEAR_VARS) 258LOCAL_SRC_FILES := $(openjdk_core_src_files) 259LOCAL_C_INCLUDES := $(core_c_includes) 260LOCAL_CFLAGS := -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -DLINUX -D__GLIBC__ # Sigh. 261LOCAL_CFLAGS += $(openjdk_cflags) 262LOCAL_SHARED_LIBRARIES := $(core_shared_libraries) libicuuc libcrypto libz-host 263LOCAL_SHARED_LIBRARIES += libopenjdkjvm libnativehelper 264LOCAL_STATIC_LIBRARIES := $(core_static_libraries) libfdlibm 265LOCAL_MODULE_TAGS := optional 266LOCAL_LDLIBS += -ldl -lpthread -lrt 267LOCAL_MODULE := libopenjdk 268LOCAL_NOTICE_FILE := $(LOCAL_PATH)/ojluni/NOTICE 269LOCAL_MULTILIB := both 270include $(BUILD_HOST_SHARED_LIBRARY) 271 272ifeq ($(LIBCORE_SKIP_TESTS),) 273 include $(CLEAR_VARS) 274 LOCAL_CLANG := true 275 LOCAL_SRC_FILES += $(core_test_files) 276 LOCAL_CFLAGS += $(libart_cflags) 277 LOCAL_C_INCLUDES += libcore/include 278 LOCAL_CPPFLAGS += $(core_cppflags) 279 LOCAL_LDLIBS += -ldl -lpthread 280 LOCAL_MODULE_TAGS := optional 281 LOCAL_MODULE := libjavacoretests 282 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk 283 LOCAL_SHARED_LIBRARIES := libnativehelper 284 LOCAL_MULTILIB := both 285 LOCAL_CXX_STL := libc++ 286 include $(BUILD_HOST_SHARED_LIBRARY) 287endif # LIBCORE_SKIP_TESTS 288 289endif # HOST_OS == linux 290