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