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 += -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