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. 26 core_magic_local_target := ...//::default:://... 27 core_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 36 define 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 := 48 endef 49 50 define 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 := 55 endef 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 62 include $(CLEAR_VARS) 63 LOCAL_MODULE := $(core_magic_local_target) 64 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk 65 core_src_files := 66 openjdk_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. 79 core_c_includes := libcore/include $(LOCAL_C_INCLUDES) 80 core_shared_libraries := $(LOCAL_SHARED_LIBRARIES) 81 core_static_libraries := $(LOCAL_STATIC_LIBRARIES) 82 libart_cflags := $(LOCAL_CFLAGS) -Wall -Wextra -Werror 83 core_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. 87 openjdk_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 94 core_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 105 include $(CLEAR_VARS) 106 LOCAL_CFLAGS += $(libart_cflags) 107 LOCAL_CPPFLAGS += $(core_cppflags) 108 LOCAL_SRC_FILES += $(core_src_files) 109 LOCAL_C_INCLUDES += $(core_c_includes) 110 LOCAL_SHARED_LIBRARIES += $(core_shared_libraries) libcrypto libdl libexpat libicuuc libicui18n libnativehelper libz libutils 111 LOCAL_STATIC_LIBRARIES += $(core_static_libraries) libziparchive libbase 112 LOCAL_MODULE_TAGS := optional 113 LOCAL_MODULE := libjavacore 114 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk 115 LOCAL_CXX_STL := libc++ 116 include $(BUILD_SHARED_LIBRARY) 117 118 include $(CLEAR_VARS) 119 120 LOCAL_CFLAGS += $(libart_cflags) 121 LOCAL_CPPFLAGS += $(core_cppflags) 122 ifeq ($(TARGET_ARCH),arm) 123 # Ignore "note: the mangling of 'va_list' has changed in GCC 4.4" 124 LOCAL_CFLAGS += -Wno-psabi 125 endif 126 127 # Define the rules. 128 LOCAL_CFLAGS += $(openjdk_cflags) 129 LOCAL_SRC_FILES := $(openjdk_core_src_files) 130 LOCAL_C_INCLUDES := $(core_c_includes) 131 LOCAL_SHARED_LIBRARIES := $(core_shared_libraries) libcrypto libicuuc libssl libz 132 LOCAL_SHARED_LIBRARIES += libopenjdkjvm libnativehelper libdl 133 LOCAL_STATIC_LIBRARIES := $(core_static_libraries) libfdlibm 134 LOCAL_MODULE_TAGS := optional 135 LOCAL_MODULE := libopenjdk 136 LOCAL_NOTICE_FILE := $(LOCAL_PATH)/ojluni/NOTICE 137 LOCAL_CXX_STL := libc++ 138 include $(BUILD_SHARED_LIBRARY) 139 140 # Debug version of libopenjdk. Depends on libopenjdkjvmd. 141 include $(CLEAR_VARS) 142 143 LOCAL_CFLAGS += $(libart_cflags) 144 LOCAL_CPPFLAGS += $(core_cppflags) 145 ifeq ($(TARGET_ARCH),arm) 146 # Ignore "note: the mangling of 'va_list' has changed in GCC 4.4" 147 LOCAL_CFLAGS += -Wno-psabi 148 endif 149 150 LOCAL_CFLAGS += $(openjdk_cflags) 151 LOCAL_SRC_FILES := $(openjdk_core_src_files) 152 LOCAL_C_INCLUDES := $(core_c_includes) 153 LOCAL_SHARED_LIBRARIES := $(core_shared_libraries) libcrypto libicuuc libssl libz 154 LOCAL_SHARED_LIBRARIES += libopenjdkjvmd libnativehelper libdl 155 LOCAL_STATIC_LIBRARIES := $(core_static_libraries) libfdlibm 156 LOCAL_MODULE_TAGS := optional 157 LOCAL_MODULE := libopenjdkd 158 LOCAL_NOTICE_FILE := $(LOCAL_PATH)/ojluni/NOTICE 159 LOCAL_CXX_STL := libc++ 160 include $(BUILD_SHARED_LIBRARY) 161 162 # Test JNI library. 163 ifeq ($(LIBCORE_SKIP_TESTS),) 164 165 include $(CLEAR_VARS) 166 LOCAL_CFLAGS += $(libart_cflags) 167 LOCAL_CPPFLAGS += $(core_cppflags) 168 LOCAL_SRC_FILES += $(core_test_files) 169 LOCAL_C_INCLUDES += libcore/include 170 LOCAL_SHARED_LIBRARIES += libnativehelper_compat_libc++ 171 LOCAL_MODULE_TAGS := optional 172 LOCAL_MODULE := libjavacoretests 173 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk 174 LOCAL_CXX_STL := libc++ 175 include $(BUILD_SHARED_LIBRARY) 176 177 endif # LIBCORE_SKIP_TESTS 178 179 # Set of gtest unit tests. 180 include $(CLEAR_VARS) 181 LOCAL_CFLAGS += $(libart_cflags) 182 LOCAL_CPPFLAGS += $(core_cppflags) 183 LOCAL_SRC_FILES += \ 184 luni/src/test/native/libcore_io_Memory_test.cpp \ 185 186 LOCAL_C_INCLUDES += libcore/include 187 LOCAL_MODULE_TAGS := debug 188 LOCAL_MODULE := libjavacore-unit-tests 189 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk 190 LOCAL_SHARED_LIBRARIES := libnativehelper 191 LOCAL_CXX_STL := libc++ 192 include $(BUILD_NATIVE_TEST) 193 194 # Set of benchmarks for libjavacore functions. 195 include $(CLEAR_VARS) 196 LOCAL_CFLAGS += $(libart_cflags) 197 LOCAL_CPPFLAGS += $(core_cppflags) 198 LOCAL_SRC_FILES += \ 199 luni/src/benchmark/native/libcore_io_Memory_bench.cpp \ 200 201 LOCAL_C_INCLUDES += libcore/include 202 LOCAL_MODULE_TAGS := debug 203 LOCAL_MODULE := libjavacore-benchmarks 204 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk 205 LOCAL_SHARED_LIBRARIES := libnativehelper 206 LOCAL_CXX_STL := libc++ 207 LOCAL_MULTILIB := both 208 LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32 209 LOCAL_MODULE_STEM_64 := $(LOCAL_MODULE)64 210 include $(BUILD_NATIVE_BENCHMARK) 211 212 213 # 214 # Build for the host. 215 # 216 217 ifeq ($(HOST_OS),linux) 218 219 include $(CLEAR_VARS) 220 LOCAL_CLANG := true 221 LOCAL_SRC_FILES += $(core_src_files) 222 LOCAL_CFLAGS += $(libart_cflags) 223 LOCAL_C_INCLUDES += $(core_c_includes) 224 LOCAL_CPPFLAGS += $(core_cppflags) 225 LOCAL_LDLIBS += -ldl -lpthread 226 ifeq ($(HOST_OS),linux) 227 LOCAL_LDLIBS += -lrt 228 endif 229 LOCAL_MODULE_TAGS := optional 230 LOCAL_MODULE := libjavacore 231 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk 232 LOCAL_SHARED_LIBRARIES += $(core_shared_libraries) libexpat-host libicuuc-host libicui18n-host libcrypto-host libz-host libziparchive-host 233 LOCAL_STATIC_LIBRARIES += $(core_static_libraries) 234 LOCAL_MULTILIB := both 235 LOCAL_CXX_STL := libc++ 236 include $(BUILD_HOST_SHARED_LIBRARY) 237 238 # Debug version of libopenjdk (host). Depends on libopenjdkjvmd. 239 include $(CLEAR_VARS) 240 LOCAL_SRC_FILES := $(openjdk_core_src_files) 241 LOCAL_C_INCLUDES := $(core_c_includes) 242 LOCAL_CFLAGS := -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -DLINUX -D__GLIBC__ # Sigh. 243 LOCAL_CFLAGS += $(openjdk_cflags) 244 LOCAL_SHARED_LIBRARIES := $(core_shared_libraries) libicuuc-host libcrypto-host libz-host 245 LOCAL_SHARED_LIBRARIES += libopenjdkjvmd libnativehelper 246 LOCAL_STATIC_LIBRARIES := $(core_static_libraries) libfdlibm 247 LOCAL_MODULE_TAGS := optional 248 LOCAL_LDLIBS += -ldl -lpthread 249 LOCAL_MODULE := libopenjdkd 250 LOCAL_NOTICE_FILE := $(LOCAL_PATH)/ojluni/NOTICE 251 LOCAL_MULTILIB := both 252 include $(BUILD_HOST_SHARED_LIBRARY) 253 254 include $(CLEAR_VARS) 255 LOCAL_SRC_FILES := $(openjdk_core_src_files) 256 LOCAL_C_INCLUDES := $(core_c_includes) 257 LOCAL_CFLAGS := -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -DLINUX -D__GLIBC__ # Sigh. 258 LOCAL_CFLAGS += $(openjdk_cflags) 259 LOCAL_SHARED_LIBRARIES := $(core_shared_libraries) libicuuc-host libcrypto-host libz-host 260 LOCAL_SHARED_LIBRARIES += libopenjdkjvm libnativehelper 261 LOCAL_STATIC_LIBRARIES := $(core_static_libraries) libfdlibm 262 LOCAL_MODULE_TAGS := optional 263 LOCAL_LDLIBS += -ldl -lpthread 264 LOCAL_MODULE := libopenjdk 265 LOCAL_NOTICE_FILE := $(LOCAL_PATH)/ojluni/NOTICE 266 LOCAL_MULTILIB := both 267 include $(BUILD_HOST_SHARED_LIBRARY) 268 269 ifeq ($(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) 284 endif # LIBCORE_SKIP_TESTS 285 286 endif # HOST_OS == linux 287