build-all.mk revision 62e94189bb3a26ea1f31e8e0cf921d9cb9b5c91e
1# Copyright (C) 2009-2010 The Android Open Source Project
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7#      http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14#
15
16#
17# This script is used to build all wanted NDK binaries. It is included
18# by several scripts.
19#
20
21# ensure that the following variables are properly defined
22$(call assert-defined,NDK_APPS NDK_APP_OUT)
23
24# ====================================================================
25#
26# Prepare the build for parsing Android.mk files
27#
28# ====================================================================
29
30# These phony targets are used to control various stages of the build
31.PHONY: all \
32        host_libraries host_executables \
33        installed_modules \
34        executables libraries static_libraries shared_libraries \
35        clean clean-objs-dir \
36        clean-executables clean-libraries \
37        clean-installed-modules \
38        clean-installed-binaries
39
40# These macros are used in Android.mk to include the corresponding
41# build script that will parse the LOCAL_XXX variable definitions.
42#
43CLEAR_VARS                := $(BUILD_SYSTEM)/clear-vars.mk
44BUILD_HOST_EXECUTABLE     := $(BUILD_SYSTEM)/build-host-executable.mk
45BUILD_HOST_STATIC_LIBRARY := $(BUILD_SYSTEM)/build-host-static-library.mk
46BUILD_STATIC_LIBRARY      := $(BUILD_SYSTEM)/build-static-library.mk
47BUILD_SHARED_LIBRARY      := $(BUILD_SYSTEM)/build-shared-library.mk
48BUILD_EXECUTABLE          := $(BUILD_SYSTEM)/build-executable.mk
49PREBUILT_SHARED_LIBRARY   := $(BUILD_SYSTEM)/prebuilt-shared-library.mk
50PREBUILT_STATIC_LIBRARY   := $(BUILD_SYSTEM)/prebuilt-static-library.mk
51
52ANDROID_MK_INCLUDED := \
53  $(CLEAR_VARS) \
54  $(BUILD_HOST_EXECUTABLE) \
55  $(BUILD_HOST_STATIC_LIBRARY) \
56  $(BUILD_STATIC_LIBRARY) \
57  $(BUILD_SHARED_LIBRARY) \
58  $(BUILD_EXECUTABLE) \
59  $(PREBUILT_SHARED_LIBRARY) \
60
61
62# this is the list of directories containing dependency information
63# generated during the build. It will be updated by build scripts
64# when module definitions are parsed.
65#
66ALL_DEPENDENCY_DIRS :=
67
68# this is the list of all generated files that we would need to clean
69ALL_HOST_EXECUTABLES      :=
70ALL_HOST_STATIC_LIBRARIES :=
71ALL_STATIC_LIBRARIES      :=
72ALL_SHARED_LIBRARIES      :=
73ALL_EXECUTABLES           :=
74
75WANTED_INSTALLED_MODULES  :=
76
77# the first rule
78all: installed_modules host_libraries host_executables
79
80
81$(foreach _app,$(NDK_APPS),\
82  $(eval include $(BUILD_SYSTEM)/setup-app.mk)\
83)
84
85# On Cygwin, we generate a temporary shell script that is capable of
86# process GCC-generated dependency files to convert all path references
87# in them from the Windows to the corresponding Cygwin convention.
88# (e.g. C:/Foo/foo -> /cygdrive/c/Foo/foo)
89#
90# This shell script is generated by passing the output of the cygwin
91# 'mount' command to a special Awk script.
92#
93ifeq ($(HOST_OS),cygwin)
94  GEN_CYGWIN_DEPS_CONVERTER := mount | awk -f $(BUILD_AWK)/gen-cygwin-deps-converter.awk
95  ifeq ($(NDK_LOG),1)
96    $(call __ndk_info,Cygwin dependency file conversion script:)
97    $(info ----- start of script ----)
98    $(info $(shell $(GEN_CYGWIN_DEPS_CONVERTER)))
99    $(info ------ end of script -----)
100  endif
101$(NDK_DEPENDENCIES_CONVERTER):
102	@$(HOST_ECHO) "Cygwin         : Generating dependency file converter script"
103	$(hide) mkdir -p $(dir $@)
104	$(hide) $(GEN_CYGWIN_DEPS_CONVERTER) > $@ && chmod +x $@
105
106clean-dependency-converter:
107	$(hide) $(call host-rm,$(NDK_DEPENDENCIES_CONVERTER))
108
109endif
110
111# ====================================================================
112#
113# Now finish the build preparation with a few rules that depend on
114# what has been effectively parsed and recorded previously
115#
116# ====================================================================
117
118clean: clean-intermediates clean-installed-binaries
119
120distclean: clean
121
122installed_modules: clean-installed-binaries libraries $(WANTED_INSTALLED_MODULES)
123host_libraries: $(HOST_STATIC_LIBRARIES)
124host_executables: $(HOST_EXECUTABLES)
125
126static_libraries: $(STATIC_LIBRARIES)
127shared_libraries: $(SHARED_LIBRARIES)
128executables: $(EXECUTABLES)
129
130libraries: static_libraries shared_libraries
131
132clean-host-intermediates:
133	$(hide) $(call host-rm,$(HOST_EXECUTABLES) $(HOST_STATIC_LIBRARIES))
134
135clean-intermediates: clean-host-intermediates
136	$(hide) $(call host-rm,$(EXECUTABLES) $(STATIC_LIBRARIES) $(SHARED_LIBRARIES))
137
138ifeq ($(HOST_OS),cygwin)
139clean: clean-dependency-converter
140endif
141	
142# include dependency information
143ALL_DEPENDENCY_DIRS := $(patsubst %/,%,$(sort $(ALL_DEPENDENCY_DIRS)))
144-include $(wildcard $(ALL_DEPENDENCY_DIRS:%=%/*.d))
145