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 # Set up the default state. Note: We use CLEAR_VARS here, even though
     51 # we aren't quite defining a new rule yet, to make sure that the
     52 # sub.mk files don't see anything stray from the last rule that was
     53 # set up.
     54 
     55 include $(CLEAR_VARS)
     56 LOCAL_MODULE := $(core_magic_local_target)
     57 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk
     58 core_src_files :=
     59 
     60 # Include the sub.mk files.
     61 $(foreach dir, \
     62     dalvik/src/main/native luni/src/main/native, \
     63     $(eval $(call include-core-native-dir,$(dir))))
     64 
     65 # Extract out the allowed LOCAL_* variables.
     66 core_c_includes := libcore/include $(LOCAL_C_INCLUDES)
     67 core_shared_libraries := $(LOCAL_SHARED_LIBRARIES)
     68 core_static_libraries := $(LOCAL_STATIC_LIBRARIES)
     69 core_cflags := $(LOCAL_CFLAGS) -Wall -Wextra -Werror
     70 core_cppflags += -std=gnu++11 -DU_USING_ICU_NAMESPACE=0
     71 
     72 core_test_files := \
     73   luni/src/test/native/dalvik_system_JniTest.cpp \
     74 
     75 #
     76 # Build for the target (device).
     77 #
     78 
     79 include $(CLEAR_VARS)
     80 LOCAL_CFLAGS += $(core_cflags)
     81 LOCAL_CPPFLAGS += $(core_cppflags)
     82 LOCAL_SRC_FILES += $(core_src_files)
     83 LOCAL_C_INCLUDES += $(core_c_includes)
     84 LOCAL_SHARED_LIBRARIES += $(core_shared_libraries) libcrypto libdl libexpat libicuuc libicui18n libnativehelper libz libutils
     85 LOCAL_STATIC_LIBRARIES += $(core_static_libraries) libziparchive libbase
     86 LOCAL_MODULE_TAGS := optional
     87 LOCAL_MODULE := libjavacore
     88 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk
     89 LOCAL_CXX_STL := libc++
     90 include $(BUILD_SHARED_LIBRARY)
     91 
     92 # Test JNI library.
     93 ifeq ($(LIBCORE_SKIP_TESTS),)
     94 
     95 include $(CLEAR_VARS)
     96 LOCAL_CFLAGS += $(core_cflags)
     97 LOCAL_CPPFLAGS += $(core_cppflags)
     98 LOCAL_SRC_FILES += $(core_test_files)
     99 LOCAL_C_INCLUDES += libcore/include
    100 LOCAL_SHARED_LIBRARIES += libcrypto
    101 LOCAL_MODULE_TAGS := optional
    102 LOCAL_MODULE := libjavacoretests
    103 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk
    104 LOCAL_CXX_STL := libc++
    105 include $(BUILD_SHARED_LIBRARY)
    106 
    107 endif # LIBCORE_SKIP_TESTS
    108 
    109 # Set of gtest unit tests.
    110 include $(CLEAR_VARS)
    111 LOCAL_CFLAGS += $(core_cflags)
    112 LOCAL_CPPFLAGS += $(core_cppflags)
    113 LOCAL_SRC_FILES += \
    114   luni/src/test/native/libcore_io_Memory_test.cpp \
    115 
    116 LOCAL_C_INCLUDES += libcore/include
    117 LOCAL_MODULE_TAGS := debug
    118 LOCAL_MODULE := libjavacore-unit-tests
    119 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk
    120 LOCAL_CXX_STL := libc++
    121 include $(BUILD_NATIVE_TEST)
    122 
    123 # Set of benchmarks for libjavacore functions.
    124 include $(CLEAR_VARS)
    125 LOCAL_CFLAGS += $(core_cflags)
    126 LOCAL_CPPFLAGS += $(core_cppflags)
    127 LOCAL_SRC_FILES += \
    128   luni/src/benchmark/native/libcore_io_Memory_bench.cpp \
    129 
    130 LOCAL_C_INCLUDES += libcore/include bionic/benchmarks
    131 LOCAL_MODULE_TAGS := debug
    132 LOCAL_MODULE := libjavacore-benchmarks
    133 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk
    134 LOCAL_CXX_STL := libc++
    135 LOCAL_MULTILIB := both
    136 LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32
    137 LOCAL_MODULE_STEM_64 := $(LOCAL_MODULE)64
    138 include $(BUILD_NATIVE_BENCHMARK)
    139 
    140 
    141 #
    142 # Build for the host.
    143 #
    144 
    145 ifeq ($(HOST_OS),linux)
    146 
    147 include $(CLEAR_VARS)
    148 LOCAL_CLANG := true
    149 LOCAL_SRC_FILES += $(core_src_files)
    150 LOCAL_CFLAGS += $(core_cflags)
    151 LOCAL_C_INCLUDES += $(core_c_includes)
    152 LOCAL_CPPFLAGS += $(core_cppflags)
    153 LOCAL_LDLIBS += -ldl -lpthread
    154 ifeq ($(HOST_OS),linux)
    155 LOCAL_LDLIBS += -lrt
    156 endif
    157 LOCAL_MODULE_TAGS := optional
    158 LOCAL_MODULE := libjavacore
    159 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk
    160 LOCAL_SHARED_LIBRARIES += $(core_shared_libraries) libexpat-host libicuuc-host libicui18n-host libcrypto-host libz-host libziparchive-host
    161 LOCAL_STATIC_LIBRARIES += $(core_static_libraries)
    162 LOCAL_MULTILIB := both
    163 LOCAL_CXX_STL := libc++
    164 include $(BUILD_HOST_SHARED_LIBRARY)
    165 
    166 ifeq ($(LIBCORE_SKIP_TESTS),)
    167     include $(CLEAR_VARS)
    168     LOCAL_CLANG := true
    169     LOCAL_SRC_FILES += $(core_test_files)
    170     LOCAL_CFLAGS += $(core_cflags)
    171     LOCAL_C_INCLUDES += libcore/include
    172     LOCAL_CPPFLAGS += $(core_cppflags)
    173     LOCAL_LDLIBS += -ldl -lpthread
    174     LOCAL_MODULE_TAGS := optional
    175     LOCAL_MODULE := libjavacoretests
    176     LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk
    177     LOCAL_SHARED_LIBRARIES := libcrypto-host
    178     LOCAL_CXX_STL := libc++
    179     include $(BUILD_HOST_SHARED_LIBRARY)
    180 endif # LIBCORE_SKIP_TESTS
    181 
    182 endif # HOST_OS == linux
    183