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 include $(CLEAR_VARS)
     55 LOCAL_MODULE := $(core_magic_local_target)
     56 core_src_files :=
     57 
     58 # Include the sub.mk files.
     59 $(foreach dir, \
     60     dalvik/src/main/native luni/src/main/native, \
     61     $(eval $(call include-core-native-dir,$(dir))))
     62 
     63 # Extract out the allowed LOCAL_* variables. Note: $(sort) also
     64 # removes duplicates.
     65 core_c_includes := $(sort libcore/include $(LOCAL_C_INCLUDES) $(JNI_H_INCLUDE))
     66 core_shared_libraries := $(sort $(LOCAL_SHARED_LIBRARIES))
     67 core_static_libraries := $(sort $(LOCAL_STATIC_LIBRARIES))
     68 core_cflags := -fvisibility=hidden
     69 core_cflags += '-DGCC_HIDDEN=__attribute__((visibility("hidden")))'
     70 core_cppflags := -fvisibility-inlines-hidden
     71 
     72 
     73 #
     74 # Build for the target (device).
     75 #
     76 
     77 include $(CLEAR_VARS)
     78 
     79 LOCAL_CFLAGS += -Wall -Wextra -Werror
     80 LOCAL_CFLAGS += $(core_cflags)
     81 LOCAL_CPPFLAGS += $(core_cppflags)
     82 ifeq ($(TARGET_ARCH),arm)
     83 # Ignore "note: the mangling of 'va_list' has changed in GCC 4.4"
     84 LOCAL_CFLAGS += -Wno-psabi
     85 endif
     86 
     87 # Define the rules.
     88 LOCAL_SRC_FILES := $(core_src_files)
     89 LOCAL_C_INCLUDES := $(core_c_includes)
     90 LOCAL_SHARED_LIBRARIES := $(core_shared_libraries) libexpat libicuuc libicui18n libssl libcrypto libz libnativehelper
     91 LOCAL_STATIC_LIBRARIES := $(core_static_libraries)
     92 LOCAL_MODULE_TAGS := optional
     93 LOCAL_MODULE := libjavacore
     94 
     95 LOCAL_C_INCLUDES += external/stlport/stlport bionic/ bionic/libstdc++/include
     96 LOCAL_SHARED_LIBRARIES += libstlport
     97 
     98 include $(BUILD_SHARED_LIBRARY)
     99 
    100 #
    101 # Build for the host.
    102 #
    103 
    104 ifeq ($(WITH_HOST_DALVIK),true)
    105     include $(CLEAR_VARS)
    106     # Define the rules.
    107     LOCAL_SRC_FILES := $(core_src_files)
    108     LOCAL_CFLAGS += $(core_cflags)
    109     LOCAL_C_INCLUDES := $(core_c_includes)
    110     LOCAL_CPPFLAGS += $(core_cppflags)
    111     LOCAL_LDLIBS += -ldl -lpthread
    112     LOCAL_MODULE_TAGS := optional
    113     LOCAL_MODULE := libjavacore
    114     LOCAL_SHARED_LIBRARIES := $(core_shared_libraries) libexpat libicuuc libicui18n libssl libcrypto libz-host
    115     LOCAL_STATIC_LIBRARIES := $(core_static_libraries)
    116     include $(BUILD_HOST_SHARED_LIBRARY)
    117 endif
    118