Home | History | Annotate | Download | only in pndk
      1 #
      2 # Copyright (C) 2008 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 # Assemble the Native Development Kit
     18 # Assembled using the generic build by default.
     19 # (set in device/config/product_config.make)
     20 
     21 # A macro to make rules to copy all newer files in a directory tree matching an
     22 # optional find filter and add the files to a list variable for dependencies.
     23 # Designed after copy_headers.make: Create a rule to copy each file;
     24 # copy-one-file defines the actual rule.
     25 # $(1): source directory tree root
     26 # $(2): destination directory tree root
     27 # $(3): list variable to append destination files to
     28 # $(4): optional find(1) arguments
     29 define define-tree-copy-rules
     30   $(eval _src_files := $(shell find $(1) -type f $(4))) \
     31   $(foreach _src, $(_src_files), \
     32     $(eval _dest := $(patsubst $(1)%,$(2)%,$(_src))) \
     33     $(eval $(3) := $($(3)) $(_dest)) \
     34     $(eval $(call copy-one-file,$(_src),$(_dest))) \
     35    )
     36 endef
     37 
     38 #-------------------------------------------------------------------------------
     39 # Install all the files needed to build the pndk.
     40 #   We build three versions of the pndk
     41 #       (1) The full version, with source.
     42 #       (2) The full version, without source.
     43 #       (3) A JNI-only version, with source.
     44 #
     45 #   We make five sets of trees:
     46 #		(A) Common files used in all versions of the pndk
     47 #   (B) Common files used in the full versions of the pndk
     48 #		(C) Files used in the standard pndk (no source files included)
     49 #		(D) Files used in both the JNI-only and full-with-source version
     50 #		(E) Files used in just the full-with-source version
     51 #
     52 #   Each pndk version is created by combining the appropriate trees:
     53 #
     54 #            (A)   (B)  (C)  (D)  (E)
     55 #       (1)  yes   yes       yes  yes
     56 #       (2)  yes   yes  yes
     57 #       (3)  yes             yes
     58 #
     59 # Source is provided for partners who want to recompile our libraries for optimization.
     60 # The JNI-only version is provided for partners that want to create shared
     61 # libraries that can be packaged with APK files and called from Java code.
     62 
     63 LOCAL_PATH := $(call my-dir)
     64 
     65 # Source trees for the pndk
     66 samples_src_dir := $(LOCAL_PATH)/samples
     67 sample_src_dir := $(samples_src_dir)/sample
     68 samplejni_src_dir := $(samples_src_dir)/samplejni
     69 config_src_dir := $(LOCAL_PATH)/config
     70 kernel_common_src_dir := $(KERNEL_HEADERS_COMMON)
     71 kernel_arch_src_dir := $(KERNEL_HEADERS_ARCH)
     72 bionic_src_dir := bionic
     73 jni_src_dir := $(JNI_H_INCLUDE)
     74 
     75 # Workspace directory
     76 pndk_intermediates := $(call intermediates-dir-for,PACKAGING,pndk)
     77 
     78 # Common destination trees for the pndk
     79 pndk_common_tree := $(pndk_intermediates)/common
     80 pndk_common_dest_dir := $(pndk_common_tree)/pndk
     81 samplejni_dest_dir := $(pndk_common_dest_dir)/samples/samplejni
     82 config_dest_dir := $(pndk_common_dest_dir)/config
     83 kernel_dest_dir := $(pndk_common_dest_dir)/include/kernel/include
     84 gcc_dest_dir := $(pndk_common_dest_dir)/toolchain
     85 jni_dest_dir := $(pndk_common_dest_dir)/include/nativehelper
     86 
     87 # Common-full destination trees for the pndk
     88 pndk_common_full_tree := $(pndk_intermediates)/common_full
     89 pndk_common_full_dest_dir := $(pndk_common_full_tree)/pndk
     90 sample_dest_dir := $(pndk_common_full_dest_dir)/samples/sample
     91 
     92 # Destination trees without source for the standard pndk (without source)
     93 pndk_no_src_tree := $(pndk_intermediates)/no_src
     94 pndk_no_src_dest_dir := $(pndk_no_src_tree)/pndk
     95 bionic_no_src_dest_dir := $(pndk_no_src_dest_dir)/include/bionic
     96 
     97 # Destination trees including source for the pndk with source
     98 pndk_src_tree := $(pndk_intermediates)/with_src
     99 pndk_src_dest_dir := $(pndk_src_tree)/pndk
    100 bionic_src_dest_dir := $(pndk_src_dest_dir)/include/bionic
    101 
    102 # Destinations of all common files (not picked up by tree rules below)
    103 pndk_common_dest_files := $(pndk_common_dest_dir)/Android_PNDK_README.html \
    104 		$(pndk_common_dest_dir)/config/armelf.x \
    105 		$(pndk_common_dest_dir)/config/armelflib.x \
    106 		$(pndk_common_dest_dir)/lib/crtbegin_dynamic.o \
    107 		$(pndk_common_dest_dir)/lib/crtend_android.o \
    108 		$(pndk_common_dest_dir)/lib/libc.so \
    109 		$(pndk_common_dest_dir)/lib/libm.so 
    110     
    111 # Destinations of files used by the full, non-jni-only configurations
    112 pndk_common_full_dest_files := \
    113 		$(pndk_common_full_dest_dir)/lib/libdl.so \
    114 		$(pndk_common_full_dest_dir)/lib/libstdc++.so
    115 
    116 # Install common files outside common trees
    117 $(pndk_common_dest_dir)/Android_PNDK_README.html: $(LOCAL_PATH)/Android_PNDK_README.html | $(ACP)
    118 	@echo "pndk Android_PNDK_README.html: from $? to $@"
    119 	$(copy-file-to-target)
    120 
    121 $(pndk_common_dest_dir)/config/armelf.x: $(BUILD_SYSTEM)/armelf.x | $(ACP)
    122 	@echo "pndk config: $@"
    123 	$(copy-file-to-target)
    124 
    125 $(pndk_common_dest_dir)/config/armelflib.x: $(BUILD_SYSTEM)/armelflib.x | $(ACP)
    126 	@echo "pndk config: $@"
    127 	$(copy-file-to-target)
    128 
    129 $(pndk_common_dest_dir)/lib/%: $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/% | $(ACP)
    130 	@echo "pndk lib: $@"
    131 	$(copy-file-to-target)
    132 
    133 # Install common_full files outside common trees
    134 $(pndk_common_full_dest_dir)/lib/%: $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/% | $(ACP)
    135 	@echo "pndk lib full: $@"
    136 	$(copy-file-to-target)
    137 
    138 # Install files in common trees
    139 listvar := pndk_common_dest_files
    140 $(call define-tree-copy-rules,$(samplejni_src_dir),$(samplejni_dest_dir),$(listvar))
    141 $(call define-tree-copy-rules,$(config_src_dir),$(config_dest_dir),$(listvar))
    142 $(call define-tree-copy-rules,$(kernel_common_src_dir),$(kernel_dest_dir),$(listvar))
    143 $(call define-tree-copy-rules,$(kernel_arch_src_dir),$(kernel_dest_dir),$(listvar))
    144 $(call define-tree-copy-rules,$(jni_src_dir),$(jni_dest_dir),$(listvar), -name jni.h)
    145 
    146 # Install files common to the full builds but not the JNI build
    147 listvar := pndk_common_full_dest_files
    148 $(call define-tree-copy-rules,$(sample_src_dir),$(sample_dest_dir),$(listvar))
    149 
    150 # Install files without sources
    151 listvar := pndk_no_src_dest_files
    152 $(call define-tree-copy-rules,$(bionic_src_dir),$(bionic_no_src_dest_dir),$(listvar),-name '*.h')
    153 
    154 # Install files including sources
    155 listvar := pndk_with_src_dest_files
    156 $(call define-tree-copy-rules,$(bionic_src_dir),$(bionic_src_dest_dir),$(listvar))
    157 
    158 
    159 #-------------------------------------------------------------------------------
    160 # Create the multiple versions of the pndk:
    161 # pndk_no_src           all files without source
    162 # pndk_with_source      all files with source
    163 # pndk_jni_with_source  just files for building JNI shared libraries with source.
    164 
    165 # Name the tar files
    166 name := android_pndk-$(TARGET_PRODUCT)
    167 ifeq ($(TARGET_BUILD_TYPE),debug)
    168   name := $(name)_debug
    169 endif
    170 name := $(name)-$(BUILD_NUMBER)
    171 pndk_tarfile := $(pndk_intermediates)/$(name).tar
    172 pndk_tarfile_zipped := $(pndk_tarfile).gz
    173 pndk_with_src_tarfile := $(pndk_intermediates)/$(name)-src.tar
    174 pndk_with_src_tarfile_zipped := $(pndk_with_src_tarfile).gz
    175 pndk_jni_with_src_tarfile := $(pndk_intermediates)/$(name)-jni-src.tar
    176 pndk_jni_with_src_tarfile_zipped := $(pndk_jni_with_src_tarfile).gz
    177 
    178 .PHONY: pndk pndk_with_src pndk_no_src pndk_jni_with_src pndk_debug
    179 
    180 pndk: pndk_no_src pndk_with_src pndk_jni_with_src
    181 pndk_no_src: $(pndk_tarfile_zipped)
    182 pndk_with_src: $(pndk_with_src_tarfile_zipped)
    183 pndk_jni_with_src: $(pndk_jni_with_src_tarfile_zipped)
    184 
    185 # Put the pndk zip files in the distribution directory
    186 $(call dist-for-goals,pndk,$(pndk_tarfile_zipped))
    187 $(call dist-for-goals,pndk,$(pndk_with_src_tarfile_zipped))
    188 $(call dist-for-goals,pndk,$(pndk_jni_with_src_tarfile_zipped))
    189 
    190 # zip up tar files
    191 %.tar.gz: %.tar
    192 	@echo "pndk: zipped $<"
    193 	$(hide) gzip -cf $< > $@
    194 
    195 # tar up the files without our sources to make the pndk.
    196 $(pndk_tarfile): $(pndk_common_dest_files) $(pndk_common_full_dest_files) $(pndk_no_src_dest_files)
    197 	@echo "pndk: $@"
    198 	@mkdir -p $(dir $@)
    199 	@rm -f $@
    200 	$(hide) tar rf $@ -C $(pndk_common_tree) pndk
    201 	$(hide) tar rf $@ -C $(pndk_common_full_tree) pndk
    202 	$(hide) tar rf $@ -C $(pndk_no_src_tree) pndk
    203 
    204 # tar up the full sources to make the pndk with sources.
    205 $(pndk_with_src_tarfile): $(pndk_common_dest_files) $(pndk_common_full_dest_files) $(pndk_with_src_dest_files) $(pndk_full_with_src_dest_files)
    206 	@echo "pndk: $@"
    207 	@mkdir -p $(dir $@)
    208 	@rm -f $@
    209 	$(hide) tar rf $@ -C $(pndk_common_tree) pndk
    210 	$(hide) tar rf $@ -C $(pndk_common_full_tree) pndk
    211 	$(hide) tar rf $@ -C $(pndk_src_tree) pndk
    212 	
    213 # tar up the sources to make the pndk with JNI support.
    214 $(pndk_jni_with_src_tarfile): $(pndk_common_dest_files) $(pndk_with_src_dest_files)
    215 	@echo "pndk: $@"
    216 	@mkdir -p $(dir $@)
    217 	@rm -f $@
    218 	$(hide) tar rf $@ -C $(pndk_common_tree) pndk
    219 	$(hide) tar rf $@ -C $(pndk_src_tree) pndk
    220 
    221 # Debugging reporting can go here, add it as a target to get output.
    222 pndk_debug: pndk
    223 	@echo "You are here: $@"
    224 	@echo "pndk tar file:          $(pndk_tarfile_zipped)"
    225 	@echo "pndk_with_src tar file: $(pndk_with_src_tarfile_zipped)"
    226 	@echo "pndk_jni_with_src tar file: $(pndk_jni_with_src_tarfile_zipped)"
    227 	@echo "pndk_files:             $(pndk_no_src_dest_files)"
    228 	@echo "pndk_with_src files:    $(pndk_with_src_dest_files)"
    229 	@echo "pndk_full_with_src files:    $(pndk_full_with_src_dest_files)"
    230 	@echo "pndk_common_files:      $(pndk_common_dest_files)"
    231 	@echo "pndk_common_full_dest_files:      $(pndk_common_full_dest_files)"
    232 
    233