Home | History | Annotate | Download | only in core
      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 #
     43 CLEAR_VARS                := $(BUILD_SYSTEM)/clear-vars.mk
     44 BUILD_HOST_EXECUTABLE     := $(BUILD_SYSTEM)/build-host-executable.mk
     45 BUILD_HOST_STATIC_LIBRARY := $(BUILD_SYSTEM)/build-host-static-library.mk
     46 BUILD_STATIC_LIBRARY      := $(BUILD_SYSTEM)/build-static-library.mk
     47 BUILD_SHARED_LIBRARY      := $(BUILD_SYSTEM)/build-shared-library.mk
     48 BUILD_EXECUTABLE          := $(BUILD_SYSTEM)/build-executable.mk
     49 PREBUILT_SHARED_LIBRARY   := $(BUILD_SYSTEM)/prebuilt-shared-library.mk
     50 PREBUILT_STATIC_LIBRARY   := $(BUILD_SYSTEM)/prebuilt-static-library.mk
     51 
     52 ANDROID_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 #
     66 ALL_DEPENDENCY_DIRS :=
     67 
     68 # this is the list of all generated files that we would need to clean
     69 ALL_HOST_EXECUTABLES      :=
     70 ALL_HOST_STATIC_LIBRARIES :=
     71 ALL_STATIC_LIBRARIES      :=
     72 ALL_SHARED_LIBRARIES      :=
     73 ALL_EXECUTABLES           :=
     74 
     75 WANTED_INSTALLED_MODULES  :=
     76 
     77 # the first rule
     78 all: installed_modules host_libraries host_executables
     79 
     80 
     81 $(foreach _app,$(NDK_APPS),\
     82   $(eval include $(BUILD_SYSTEM)/setup-app.mk)\
     83 )
     84 
     85 ifeq (,$(strip $(WANTED_INSTALLED_MODULES)))
     86     ifneq (,$(strip $(NDK_APP_MODULES)))
     87         $(call __ndk_warning,WARNING: No modules to build, your APP_MODULES definition is probably incorrect!)
     88     else
     89         $(call __ndk_warning,WARNING: There are no modules to build in this project!)
     90     endif
     91 endif
     92 
     93 # On Cygwin, we generate a temporary shell script that is capable of
     94 # process GCC-generated dependency files to convert all path references
     95 # in them from the Windows to the corresponding Cygwin convention.
     96 # (e.g. C:/Foo/foo -> /cygdrive/c/Foo/foo)
     97 #
     98 # This shell script is generated by passing the output of the cygwin
     99 # 'mount' command to a special Awk script.
    100 #
    101 ifeq ($(HOST_OS),cygwin)
    102   GEN_CYGWIN_DEPS_CONVERTER := mount | tr '\\' '/' | awk -f $(BUILD_AWK)/gen-cygwin-deps-converter.awk
    103   ifeq ($(NDK_LOG),1)
    104     $(call __ndk_info,Cygwin dependency file conversion script:)
    105     $(info ----- start of script ----)
    106     $(info $(shell $(GEN_CYGWIN_DEPS_CONVERTER)))
    107     $(info ------ end of script -----)
    108   endif
    109 $(NDK_DEPENDENCIES_CONVERTER):
    110 	$(call host-echo-build-step,$(NDK_APP_ABI),Cygwin) Generating dependency file converter script
    111 	$(hide) mkdir -p $(dir $@)
    112 	$(hide) $(GEN_CYGWIN_DEPS_CONVERTER) > $@ && chmod +x $@
    113 
    114 clean-dependency-converter:
    115 	$(hide) $(call host-rm,$(NDK_DEPENDENCIES_CONVERTER))
    116 
    117 endif
    118 
    119 # ====================================================================
    120 #
    121 # Now finish the build preparation with a few rules that depend on
    122 # what has been effectively parsed and recorded previously
    123 #
    124 # ====================================================================
    125 
    126 clean: clean-intermediates clean-installed-binaries
    127 
    128 distclean: clean
    129 
    130 installed_modules: clean-installed-binaries libraries $(WANTED_INSTALLED_MODULES)
    131 host_libraries: $(HOST_STATIC_LIBRARIES)
    132 host_executables: $(HOST_EXECUTABLES)
    133 
    134 static_libraries: $(STATIC_LIBRARIES)
    135 shared_libraries: $(SHARED_LIBRARIES)
    136 executables: $(EXECUTABLES)
    137 
    138 libraries: static_libraries shared_libraries
    139 
    140 clean-host-intermediates:
    141 	$(hide) $(call host-rm,$(HOST_EXECUTABLES) $(HOST_STATIC_LIBRARIES))
    142 
    143 clean-intermediates: clean-host-intermediates
    144 	$(hide) $(call host-rm,$(EXECUTABLES) $(STATIC_LIBRARIES) $(SHARED_LIBRARIES))
    145 
    146 ifeq ($(HOST_OS),cygwin)
    147 clean: clean-dependency-converter
    148 endif
    149 	
    150 # include dependency information
    151 ALL_DEPENDENCY_DIRS := $(patsubst %/,%,$(sort $(ALL_DEPENDENCY_DIRS)))
    152 -include $(wildcard $(ALL_DEPENDENCY_DIRS:%=%/*.d))
    153