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_COMPATIBILITY_SUITE := device-tests 208LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk 209LOCAL_SHARED_LIBRARIES := libnativehelper 210LOCAL_CXX_STL := libc++ 211LOCAL_MULTILIB := both 212LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32 213LOCAL_MODULE_STEM_64 := $(LOCAL_MODULE)64 214include $(BUILD_NATIVE_BENCHMARK) 215 216 217# 218# Build for the host. 219# 220 221ifeq ($(HOST_OS),linux) 222 223include $(CLEAR_VARS) 224LOCAL_CLANG := true 225LOCAL_SRC_FILES += $(core_src_files) 226LOCAL_CFLAGS += $(libart_cflags) 227LOCAL_C_INCLUDES += $(core_c_includes) 228LOCAL_CPPFLAGS += $(core_cppflags) 229LOCAL_LDLIBS += -ldl -lpthread 230ifeq ($(HOST_OS),linux) 231LOCAL_LDLIBS += -lrt 232endif 233LOCAL_MODULE_TAGS := optional 234LOCAL_MODULE := libjavacore 235LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk 236LOCAL_SHARED_LIBRARIES += $(core_shared_libraries) libexpat libicuuc libicui18n libcrypto libz-host libziparchive 237LOCAL_STATIC_LIBRARIES += $(core_static_libraries) 238LOCAL_MULTILIB := both 239LOCAL_CXX_STL := libc++ 240include $(BUILD_HOST_SHARED_LIBRARY) 241 242# Debug version of libopenjdk (host). Depends on libopenjdkjvmd. 243include $(CLEAR_VARS) 244LOCAL_SRC_FILES := $(openjdk_core_src_files) 245LOCAL_C_INCLUDES := $(core_c_includes) 246LOCAL_CFLAGS := -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -DLINUX -D__GLIBC__ # Sigh. 247LOCAL_CFLAGS += $(openjdk_cflags) 248LOCAL_SHARED_LIBRARIES := $(core_shared_libraries) libicuuc libcrypto libz-host 249LOCAL_SHARED_LIBRARIES += libopenjdkjvmd libnativehelper 250LOCAL_STATIC_LIBRARIES := $(core_static_libraries) libfdlibm 251LOCAL_MODULE_TAGS := optional 252LOCAL_LDLIBS += -ldl -lpthread -lrt 253LOCAL_MODULE := libopenjdkd 254LOCAL_NOTICE_FILE := $(LOCAL_PATH)/ojluni/NOTICE 255LOCAL_MULTILIB := both 256include $(BUILD_HOST_SHARED_LIBRARY) 257 258include $(CLEAR_VARS) 259LOCAL_SRC_FILES := $(openjdk_core_src_files) 260LOCAL_C_INCLUDES := $(core_c_includes) 261LOCAL_CFLAGS := -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -DLINUX -D__GLIBC__ # Sigh. 262LOCAL_CFLAGS += $(openjdk_cflags) 263LOCAL_SHARED_LIBRARIES := $(core_shared_libraries) libicuuc libcrypto libz-host 264LOCAL_SHARED_LIBRARIES += libopenjdkjvm libnativehelper 265LOCAL_STATIC_LIBRARIES := $(core_static_libraries) libfdlibm 266LOCAL_MODULE_TAGS := optional 267LOCAL_LDLIBS += -ldl -lpthread -lrt 268LOCAL_MODULE := libopenjdk 269LOCAL_NOTICE_FILE := $(LOCAL_PATH)/ojluni/NOTICE 270LOCAL_MULTILIB := both 271include $(BUILD_HOST_SHARED_LIBRARY) 272 273ifeq ($(LIBCORE_SKIP_TESTS),) 274 include $(CLEAR_VARS) 275 LOCAL_CLANG := true 276 LOCAL_SRC_FILES += $(core_test_files) 277 LOCAL_CFLAGS += $(libart_cflags) 278 LOCAL_C_INCLUDES += libcore/include 279 LOCAL_CPPFLAGS += $(core_cppflags) 280 LOCAL_LDLIBS += -ldl -lpthread 281 LOCAL_MODULE_TAGS := optional 282 LOCAL_MODULE := libjavacoretests 283 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk 284 LOCAL_SHARED_LIBRARIES := libnativehelper 285 LOCAL_MULTILIB := both 286 LOCAL_CXX_STL := libc++ 287 include $(BUILD_HOST_SHARED_LIBRARY) 288endif # LIBCORE_SKIP_TESTS 289 290endif # HOST_OS == linux 291