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