1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
# -*- mode: makefile -*-
# Copyright (C) 2007 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Definitions for building the native code needed for the core library.
#
#
# Common definitions for host and target.
#
# These two definitions are used to help sanity check what's put in
# sub.mk. See, the "error" directives immediately below.
core_magic_local_target := ...//::default:://...
core_local_path := $(LOCAL_PATH)
# Include a submakefile, resolve its source file locations,
# and stick them on core_src_files. The submakefiles are
# free to append to LOCAL_SRC_FILES, LOCAL_C_INCLUDES,
# LOCAL_SHARED_LIBRARIES, or LOCAL_STATIC_LIBRARIES, but nothing
# else. All other LOCAL_* variables will be ignored.
#
# $(1): directory containing the makefile to include
define include-core-native-dir
LOCAL_SRC_FILES :=
include $(LOCAL_PATH)/$(1)/sub.mk
ifneq ($$(LOCAL_MODULE),$(core_magic_local_target))
$$(error $(LOCAL_PATH)/$(1)/sub.mk should not include CLEAR_VARS \
or define LOCAL_MODULE)
endif
ifneq ($$(LOCAL_PATH),$(core_local_path))
$$(error $(LOCAL_PATH)/$(1)/sub.mk should not define LOCAL_PATH)
endif
core_src_files += $$(addprefix $(1)/,$$(LOCAL_SRC_FILES))
LOCAL_SRC_FILES :=
endef
# Set up the default state. Note: We use CLEAR_VARS here, even though
# we aren't quite defining a new rule yet, to make sure that the
# sub.mk files don't see anything stray from the last rule that was
# set up.
include $(CLEAR_VARS)
LOCAL_MODULE := $(core_magic_local_target)
core_src_files :=
# Include the sub.mk files.
$(foreach dir, \
dalvik/src/main/native luni/src/main/native, \
$(eval $(call include-core-native-dir,$(dir))))
# Extract out the allowed LOCAL_* variables. Note: $(sort) also
# removes duplicates.
core_c_includes := $(sort libcore/include $(LOCAL_C_INCLUDES) $(JNI_H_INCLUDE))
core_shared_libraries := $(sort $(LOCAL_SHARED_LIBRARIES))
core_static_libraries := $(sort $(LOCAL_STATIC_LIBRARIES))
core_cflags := -fvisibility=hidden
core_cflags += '-DGCC_HIDDEN=__attribute__((visibility("hidden")))'
core_cppflags := -fvisibility-inlines-hidden
#
# Build for the target (device).
#
include $(CLEAR_VARS)
LOCAL_CFLAGS += -Wall -Wextra -Werror
LOCAL_CFLAGS += $(core_cflags)
LOCAL_CPPFLAGS += $(core_cppflags)
ifeq ($(TARGET_ARCH),arm)
# Ignore "note: the mangling of 'va_list' has changed in GCC 4.4"
LOCAL_CFLAGS += -Wno-psabi
endif
# Define the rules.
LOCAL_SRC_FILES := $(core_src_files)
LOCAL_C_INCLUDES := $(core_c_includes)
LOCAL_SHARED_LIBRARIES := $(core_shared_libraries)
LOCAL_STATIC_LIBRARIES := $(core_static_libraries)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := libjavacore
LOCAL_C_INCLUDES += external/stlport/stlport bionic/ bionic/libstdc++/include
LOCAL_SHARED_LIBRARIES += libstlport
include $(BUILD_STATIC_LIBRARY)
#
# Build for the host.
#
ifeq ($(WITH_HOST_DALVIK),true)
include $(CLEAR_VARS)
# Define the rules.
LOCAL_SRC_FILES := $(core_src_files)
LOCAL_CFLAGS += $(core_cflags)
LOCAL_CPPFLAGS += $(core_cppflags)
LOCAL_C_INCLUDES := $(core_c_includes)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := libjavacore-host
include $(BUILD_HOST_STATIC_LIBRARY)
endif
|