diff options
author | Dan Bornstein <danfuzz@android.com> | 2009-10-24 15:33:49 -0700 |
---|---|---|
committer | Dan Bornstein <danfuzz@android.com> | 2009-10-26 11:22:16 -0700 |
commit | 6ac43c29e4f1918d40441178c22bfca7409101be (patch) | |
tree | c1f8a7ce494934b77634ec394081562deb3cb290 /NativeCode.mk | |
parent | e73b98c37f2c61cf5f4de43a1df75229d911572e (diff) | |
download | libcore-6ac43c29e4f1918d40441178c22bfca7409101be.zip libcore-6ac43c29e4f1918d40441178c22bfca7409101be.tar.gz libcore-6ac43c29e4f1918d40441178c22bfca7409101be.tar.bz2 |
Split libcore/Android.mk into two files, one for Java code and one for
native code, and make each have a set of rules for building on the host.
I also tightened up how sub.mk processing works and documented it
a little better.
Change-Id: I8a7a4c5697b2f22c4d69941dba381d6452200911
Diffstat (limited to 'NativeCode.mk')
-rw-r--r-- | NativeCode.mk | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/NativeCode.mk b/NativeCode.mk new file mode 100644 index 0000000..0dfad3b --- /dev/null +++ b/NativeCode.mk @@ -0,0 +1,121 @@ +# 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. +# + +# Get the list of all native directories that contain sub.mk files. +# We're using "sub.mk" to make it clear that these are not typical +# android makefiles. +define all-core-native-dirs +$(patsubst %/sub.mk,%,$(shell cd $(LOCAL_PATH) && ls -d */src/$(1)/native/sub.mk 2> /dev/null)) +endef + +# 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 + +# Find any native directories containing sub.mk files. +core_native_dirs := $(strip $(call all-core-native-dirs,main)) +ifeq ($(core_native_dirs),) + $(error No native code defined for libcore) +endif + +# 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, \ + $(core_native_dirs), \ + $(eval $(call include-core-native-dir,$(dir)))) + +# Extract out the allowed LOCAL_* variables. Note: $(sort) also +# removes duplicates. +core_c_includes := $(sort $(LOCAL_C_INCLUDES) $(JNI_H_INCLUDE)) +core_shared_libraries := $(sort $(LOCAL_SHARED_LIBRARIES)) +core_static_libraries := $(sort $(LOCAL_STATIC_LIBRARIES)) + + +# +# Build for the target (device). +# + +include $(CLEAR_VARS) + +# 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 := libjavacore +include $(BUILD_STATIC_LIBRARY) + +# Deal with keystores required for security. Note: The path to this file +# is hardcoded in TrustManagerFactoryImpl.java. +ALL_PREBUILT += $(TARGET_OUT)/etc/security/cacerts.bks +$(TARGET_OUT)/etc/security/cacerts.bks : $(LOCAL_PATH)/security/src/main/files/cacerts.bks | $(ACP) + $(transform-prebuilt-to-target) + + +# +# Build for the host. +# + +ifeq ($(WITH_HOST_DALVIK),true) + + include $(CLEAR_VARS) + + # 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 := libjavacore-host + include $(BUILD_HOST_STATIC_LIBRARY) + + # TODO: Figure out cacerts.bks for the host. + +endif
\ No newline at end of file |