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 # Set up the test library first
     56 ifeq ($(LIBCORE_SKIP_TESTS),)
     57 include $(CLEAR_VARS)
     58 LOCAL_MODULE := $(core_magic_local_target)
     59 core_src_files :=
     60 
     61 # Include the sub.mk files.
     62 $(foreach dir, \
     63     luni/src/test/native, \
     64     $(eval $(call include-core-native-dir,$(dir))))
     65 
     66 # This is for the test library, so rename the variable.
     67 test_src_files := $(core_src_files)
     68 core_src_files :=
     69 
     70 # Extract out the allowed LOCAL_* variables. Note: $(sort) also
     71 # removes duplicates.
     72 test_c_includes := $(sort libcore/include $(LOCAL_C_INCLUDES) $(JNI_H_INCLUDE))
     73 test_shared_libraries := $(sort $(LOCAL_SHARED_LIBRARIES))
     74 test_static_libraries := $(sort $(LOCAL_STATIC_LIBRARIES))
     75 endif # LIBCORE_SKIP_TESTS
     76 
     77 
     78 include $(CLEAR_VARS)
     79 LOCAL_MODULE := $(core_magic_local_target)
     80 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk
     81 core_src_files :=
     82 
     83 # Include the sub.mk files.
     84 $(foreach dir, \
     85     dalvik/src/main/native luni/src/main/native, \
     86     $(eval $(call include-core-native-dir,$(dir))))
     87 
     88 # Extract out the allowed LOCAL_* variables. Note: $(sort) also
     89 # removes duplicates.
     90 core_c_includes := $(sort libcore/include $(LOCAL_C_INCLUDES) $(JNI_H_INCLUDE))
     91 core_shared_libraries := $(sort $(LOCAL_SHARED_LIBRARIES))
     92 core_static_libraries := $(sort $(LOCAL_STATIC_LIBRARIES))
     93 
     94 
     95 #
     96 # Build for the target (device).
     97 #
     98 
     99 include $(CLEAR_VARS)
    100 
    101 LOCAL_CFLAGS += -Wall -Wextra -Werror
    102 LOCAL_CFLAGS += $(core_cflags)
    103 LOCAL_CPPFLAGS += $(core_cppflags)
    104 ifeq ($(TARGET_ARCH),arm)
    105 # Ignore "note: the mangling of 'va_list' has changed in GCC 4.4"
    106 LOCAL_CFLAGS += -Wno-psabi
    107 endif
    108 
    109 # Define the rules.
    110 LOCAL_SRC_FILES := $(core_src_files)
    111 LOCAL_C_INCLUDES := $(core_c_includes)
    112 LOCAL_SHARED_LIBRARIES := $(core_shared_libraries) libexpat libicuuc libicui18n libssl libcrypto libz libnativehelper
    113 LOCAL_STATIC_LIBRARIES := $(core_static_libraries)
    114 LOCAL_MODULE_TAGS := optional
    115 LOCAL_MODULE := libjavacore
    116 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk
    117 
    118 LOCAL_C_INCLUDES += external/stlport/stlport bionic/ bionic/libstdc++/include
    119 LOCAL_SHARED_LIBRARIES += libstlport
    120 
    121 include $(BUILD_SHARED_LIBRARY)
    122 
    123 
    124 # Test library
    125 ifeq ($(LIBCORE_SKIP_TESTS),)
    126 include $(CLEAR_VARS)
    127 
    128 LOCAL_CFLAGS += -Wall -Wextra -Werror
    129 LOCAL_CFLAGS += $(core_cflags)
    130 LOCAL_CPPFLAGS += $(core_cppflags)
    131 ifeq ($(TARGET_ARCH),arm)
    132 # Ignore "note: the mangling of 'va_list' has changed in GCC 4.4"
    133 LOCAL_CFLAGS += -Wno-psabi
    134 endif
    135 
    136 # Define the rules.
    137 LOCAL_SRC_FILES := $(test_src_files)
    138 LOCAL_C_INCLUDES := $(test_c_includes)
    139 LOCAL_SHARED_LIBRARIES := $(test_shared_libraries)
    140 LOCAL_STATIC_LIBRARIES := $(test_static_libraries)
    141 LOCAL_MODULE_TAGS := optional
    142 LOCAL_MODULE := libjavacoretests
    143 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk
    144 
    145 include $(BUILD_SHARED_LIBRARY)
    146 endif # LIBCORE_SKIP_TESTS
    147 
    148 
    149 #
    150 # Build for the host.
    151 #
    152 
    153 ifeq ($(WITH_HOST_DALVIK),true)
    154     include $(CLEAR_VARS)
    155     # Define the rules.
    156     LOCAL_SRC_FILES := $(core_src_files)
    157     LOCAL_CFLAGS += $(core_cflags)
    158     LOCAL_C_INCLUDES := $(core_c_includes)
    159     LOCAL_CPPFLAGS += $(core_cppflags)
    160     LOCAL_LDLIBS += -ldl -lpthread
    161     LOCAL_MODULE_TAGS := optional
    162     LOCAL_MODULE := libjavacore
    163     LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk
    164     LOCAL_SHARED_LIBRARIES := $(core_shared_libraries) libexpat libicuuc libicui18n libssl libcrypto libz-host
    165     LOCAL_STATIC_LIBRARIES := $(core_static_libraries)
    166     include $(BUILD_HOST_SHARED_LIBRARY)
    167 
    168     ifeq ($(LIBCORE_SKIP_TESTS),)
    169     include $(CLEAR_VARS)
    170     # Define the rules.
    171     LOCAL_SRC_FILES := $(test_src_files)
    172     LOCAL_CFLAGS += $(core_cflags)
    173     LOCAL_C_INCLUDES := $(test_c_includes)
    174     LOCAL_CPPFLAGS += $(core_cppflags)
    175     LOCAL_LDLIBS += -ldl -lpthread
    176     LOCAL_MODULE_TAGS := optional
    177     LOCAL_MODULE := libjavacoretests
    178     LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/NativeCode.mk
    179     LOCAL_SHARED_LIBRARIES := $(test_shared_libraries)
    180     LOCAL_STATIC_LIBRARIES := $(test_static_libraries)
    181     include $(BUILD_HOST_SHARED_LIBRARY)
    182     endif # LIBCORE_SKIP_TESTS
    183 endif
    184