# -*- mode: makefile -*- # Copyright (C) 2007 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Definitions for building the native code needed for the core library. # # # Common definitions for host and target. # # These two definitions are used to help sanity check what's put in # sub.mk. See, the "error" directives immediately below. core_magic_local_target := ...//::default:://... core_local_path := $(LOCAL_PATH) # Include a submakefile, resolve its source file locations, # and stick them on core_src_files. The submakefiles are # free to append to LOCAL_SRC_FILES, LOCAL_C_INCLUDES, # LOCAL_SHARED_LIBRARIES, or LOCAL_STATIC_LIBRARIES, but nothing # else. All other LOCAL_* variables will be ignored. # # $(1): directory containing the makefile to include define include-core-native-dir LOCAL_SRC_FILES := include $(LOCAL_PATH)/$(1)/sub.mk ifneq ($$(LOCAL_MODULE),$(core_magic_local_target)) $$(error $(LOCAL_PATH)/$(1)/sub.mk should not include CLEAR_VARS \ or define LOCAL_MODULE) endif ifneq ($$(LOCAL_PATH),$(core_local_path)) $$(error $(LOCAL_PATH)/$(1)/sub.mk should not define LOCAL_PATH) endif core_src_files += $$(addprefix $(1)/,$$(LOCAL_SRC_FILES)) LOCAL_SRC_FILES := endef define include-openjdk-native-dir LOCAL_SRC_FILES := include $(LOCAL_PATH)/$(1)/openjdksub.mk openjdk_core_src_files += $$(addprefix $(1)/,$$(LOCAL_SRC_FILES)) LOCAL_SRC_FILES := endef # Set up the default state. Note: We use CLEAR_VARS here, even though # we aren't quite defining a new rule yet, to make sure that the # sub.mk files don't see anything stray from the last rule that was # set up. include $(CLEAR_VARS) LOCAL_MODULE := $(core_magic_local_target) LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk core_src_files := openjdk_core_src_files := #Include the sub.mk for openjdk. $(foreach dir, \ ojluni/src/main/native, \ $(eval $(call include-openjdk-native-dir,$(dir)))) # Include the sub.mk files. $(foreach dir, \ dalvik/src/main/native luni/src/main/native, \ $(eval $(call include-core-native-dir,$(dir)))) # Extract out the allowed LOCAL_* variables. core_c_includes := libcore/include $(LOCAL_C_INCLUDES) core_shared_libraries := $(LOCAL_SHARED_LIBRARIES) core_static_libraries := $(LOCAL_STATIC_LIBRARIES) libart_cflags := $(LOCAL_CFLAGS) -Wall -Wextra -Werror core_cppflags += -std=gnu++11 -DU_USING_ICU_NAMESPACE=0 # TODO(narayan): Prune down this list of exclusions once the underlying # issues have been fixed. Most of these are small changes except for # -Wunused-parameter. openjdk_cflags := $(libart_cflags) \ -Wno-unused-parameter \ -Wno-unused-variable \ -Wno-parentheses-equality \ -Wno-constant-logical-operand \ -Wno-sometimes-uninitialized core_test_files := \ luni/src/test/native/dalvik_system_JniTest.cpp \ luni/src/test/native/libcore_java_io_FileTest.cpp \ luni/src/test/native/libcore_java_lang_ThreadTest.cpp \ luni/src/test/native/libcore_java_nio_BufferTest.cpp \ luni/src/test/native/libcore_util_NativeAllocationRegistryTest.cpp \ # # Build for the target (device). # include $(CLEAR_VARS) LOCAL_CFLAGS += $(libart_cflags) LOCAL_CPPFLAGS += $(core_cppflags) LOCAL_SRC_FILES += $(core_src_files) LOCAL_C_INCLUDES += $(core_c_includes) LOCAL_SHARED_LIBRARIES += $(core_shared_libraries) libcrypto libdl libexpat libicuuc libicui18n libnativehelper libz libutils LOCAL_STATIC_LIBRARIES += $(core_static_libraries) libziparchive libbase LOCAL_MODULE_TAGS := optional LOCAL_MODULE := libjavacore LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk LOCAL_CXX_STL := libc++ include $(BUILD_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_CFLAGS += $(libart_cflags) LOCAL_CPPFLAGS += $(core_cppflags) ifeq ($(TARGET_ARCH),arm) # Ignore "note: the mangling of 'va_list' has changed in GCC 4.4" LOCAL_CFLAGS += -Wno-psabi endif # Define the rules. LOCAL_CFLAGS += $(openjdk_cflags) LOCAL_SRC_FILES := $(openjdk_core_src_files) LOCAL_C_INCLUDES := $(core_c_includes) LOCAL_SHARED_LIBRARIES := $(core_shared_libraries) libcrypto libicuuc libssl libz LOCAL_SHARED_LIBRARIES += libopenjdkjvm libnativehelper libdl LOCAL_STATIC_LIBRARIES := $(core_static_libraries) libfdlibm LOCAL_MODULE_TAGS := optional LOCAL_MODULE := libopenjdk LOCAL_NOTICE_FILE := $(LOCAL_PATH)/ojluni/NOTICE LOCAL_CXX_STL := libc++ include $(BUILD_SHARED_LIBRARY) # Debug version of libopenjdk. Depends on libopenjdkjvmd. include $(CLEAR_VARS) LOCAL_CFLAGS += $(libart_cflags) LOCAL_CPPFLAGS += $(core_cppflags) ifeq ($(TARGET_ARCH),arm) # Ignore "note: the mangling of 'va_list' has changed in GCC 4.4" LOCAL_CFLAGS += -Wno-psabi endif LOCAL_CFLAGS += $(openjdk_cflags) LOCAL_SRC_FILES := $(openjdk_core_src_files) LOCAL_C_INCLUDES := $(core_c_includes) LOCAL_SHARED_LIBRARIES := $(core_shared_libraries) libcrypto libicuuc libssl libz LOCAL_SHARED_LIBRARIES += libopenjdkjvmd libnativehelper libdl LOCAL_STATIC_LIBRARIES := $(core_static_libraries) libfdlibm LOCAL_MODULE_TAGS := optional LOCAL_MODULE := libopenjdkd LOCAL_NOTICE_FILE := $(LOCAL_PATH)/ojluni/NOTICE LOCAL_CXX_STL := libc++ include $(BUILD_SHARED_LIBRARY) # Test JNI library. ifeq ($(LIBCORE_SKIP_TESTS),) include $(CLEAR_VARS) LOCAL_CFLAGS += $(libart_cflags) LOCAL_CPPFLAGS += $(core_cppflags) LOCAL_SRC_FILES += $(core_test_files) LOCAL_C_INCLUDES += libcore/include LOCAL_SHARED_LIBRARIES += libnativehelper_compat_libc++ LOCAL_MODULE_TAGS := optional LOCAL_MODULE := libjavacoretests LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk LOCAL_CXX_STL := libc++ include $(BUILD_SHARED_LIBRARY) endif # LIBCORE_SKIP_TESTS # Set of gtest unit tests. include $(CLEAR_VARS) LOCAL_CFLAGS += $(libart_cflags) LOCAL_CPPFLAGS += $(core_cppflags) LOCAL_SRC_FILES += \ luni/src/test/native/libcore_io_Memory_test.cpp \ LOCAL_C_INCLUDES += libcore/include LOCAL_MODULE_TAGS := debug LOCAL_MODULE := libjavacore-unit-tests LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk LOCAL_SHARED_LIBRARIES := libnativehelper LOCAL_CXX_STL := libc++ include $(BUILD_NATIVE_TEST) # Set of benchmarks for libjavacore functions. include $(CLEAR_VARS) LOCAL_CFLAGS += $(libart_cflags) LOCAL_CPPFLAGS += $(core_cppflags) LOCAL_SRC_FILES += \ luni/src/benchmark/native/libcore_io_Memory_bench.cpp \ LOCAL_C_INCLUDES += libcore/include LOCAL_MODULE_TAGS := debug LOCAL_MODULE := libjavacore-benchmarks LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk LOCAL_SHARED_LIBRARIES := libnativehelper LOCAL_CXX_STL := libc++ LOCAL_MULTILIB := both LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32 LOCAL_MODULE_STEM_64 := $(LOCAL_MODULE)64 include $(BUILD_NATIVE_BENCHMARK) # # Build for the host. # ifeq ($(HOST_OS),linux) include $(CLEAR_VARS) LOCAL_CLANG := true LOCAL_SRC_FILES += $(core_src_files) LOCAL_CFLAGS += $(libart_cflags) LOCAL_C_INCLUDES += $(core_c_includes) LOCAL_CPPFLAGS += $(core_cppflags) LOCAL_LDLIBS += -ldl -lpthread ifeq ($(HOST_OS),linux) LOCAL_LDLIBS += -lrt endif LOCAL_MODULE_TAGS := optional LOCAL_MODULE := libjavacore LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk LOCAL_SHARED_LIBRARIES += $(core_shared_libraries) libexpat-host libicuuc-host libicui18n-host libcrypto-host libz-host libziparchive-host LOCAL_STATIC_LIBRARIES += $(core_static_libraries) LOCAL_MULTILIB := both LOCAL_CXX_STL := libc++ include $(BUILD_HOST_SHARED_LIBRARY) # Debug version of libopenjdk (host). Depends on libopenjdkjvmd. include $(CLEAR_VARS) LOCAL_SRC_FILES := $(openjdk_core_src_files) LOCAL_C_INCLUDES := $(core_c_includes) LOCAL_CFLAGS := -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -DLINUX -D__GLIBC__ # Sigh. LOCAL_CFLAGS += $(openjdk_cflags) LOCAL_SHARED_LIBRARIES := $(core_shared_libraries) libicuuc-host libcrypto-host libz-host LOCAL_SHARED_LIBRARIES += libopenjdkjvmd libnativehelper LOCAL_STATIC_LIBRARIES := $(core_static_libraries) libfdlibm LOCAL_MODULE_TAGS := optional LOCAL_LDLIBS += -ldl -lpthread LOCAL_MODULE := libopenjdkd LOCAL_NOTICE_FILE := $(LOCAL_PATH)/ojluni/NOTICE LOCAL_MULTILIB := both include $(BUILD_HOST_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_SRC_FILES := $(openjdk_core_src_files) LOCAL_C_INCLUDES := $(core_c_includes) LOCAL_CFLAGS := -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -DLINUX -D__GLIBC__ # Sigh. LOCAL_CFLAGS += $(openjdk_cflags) LOCAL_SHARED_LIBRARIES := $(core_shared_libraries) libicuuc-host libcrypto-host libz-host LOCAL_SHARED_LIBRARIES += libopenjdkjvm libnativehelper LOCAL_STATIC_LIBRARIES := $(core_static_libraries) libfdlibm LOCAL_MODULE_TAGS := optional LOCAL_LDLIBS += -ldl -lpthread LOCAL_MODULE := libopenjdk LOCAL_NOTICE_FILE := $(LOCAL_PATH)/ojluni/NOTICE LOCAL_MULTILIB := both include $(BUILD_HOST_SHARED_LIBRARY) ifeq ($(LIBCORE_SKIP_TESTS),) include $(CLEAR_VARS) LOCAL_CLANG := true LOCAL_SRC_FILES += $(core_test_files) LOCAL_CFLAGS += $(libart_cflags) LOCAL_C_INCLUDES += libcore/include LOCAL_CPPFLAGS += $(core_cppflags) LOCAL_LDLIBS += -ldl -lpthread LOCAL_MODULE_TAGS := optional LOCAL_MODULE := libjavacoretests LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk LOCAL_SHARED_LIBRARIES := libnativehelper LOCAL_MULTILIB := both LOCAL_CXX_STL := libc++ include $(BUILD_HOST_SHARED_LIBRARY) endif # LIBCORE_SKIP_TESTS endif # HOST_OS == linux