2012-05-21 04:12:37 -07:00
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
2011-11-18 10:28:17 -08:00
2013-11-13 19:32:55 -08:00
DIST_FILES := package-name.txt.in
2011-11-18 10:28:17 -08:00
i f n e q ( , $( findstring -march =armv 7,$ ( OS_CFLAGS ) ) )
MIN_CPU_VERSION = 7
e l s e
MIN_CPU_VERSION = 5
e n d i f
2012-08-31 06:31:29 -07:00
MOZ_APP_BUILDID = $( shell cat $( DEPTH) /config/buildid)
2011-11-18 10:28:17 -08:00
i f e q ( , $( ANDROID_VERSION_CODE ) )
2013-06-03 10:22:18 -07:00
i f e q ( $( CPU_ARCH ) , a r m )
2012-07-23 07:12:19 -07:00
i f e q ( $( MIN_CPU_VERSION ) , 7 )
2012-08-09 14:57:41 -07:00
ANDROID_VERSION_CODE = $( shell cat $( DEPTH) /config/buildid | cut -c1-10)
2012-07-23 07:12:19 -07:00
e l s e
# decrement the version code by 1 for armv6 builds so armv7 builds will win any compatability ties
2012-08-09 14:57:41 -07:00
ANDROID_VERSION_CODE = $( shell echo $$ ( ( ` cat $( DEPTH) /config/buildid | cut -c1-10` - 1) ) )
2012-07-23 07:12:19 -07:00
e n d i f
2013-06-03 10:22:18 -07:00
e l s e #not arm, so x86
# increment the version code by 1 for x86 builds so they are offered to x86 phones that have arm emulators
ANDROID_VERSION_CODE = $( shell echo $$ ( ( ` cat $( DEPTH) /config/buildid | cut -c1-10` + 1) ) )
e n d i f
2011-11-18 10:28:17 -08:00
e n d i f
2012-08-09 14:57:41 -07:00
UA_BUILDID = $( shell echo $( ANDROID_VERSION_CODE) | cut -c1-8)
2012-01-09 23:50:56 -08:00
2013-02-05 20:15:36 -08:00
MOZ_BUILD_TIMESTAMP = $( shell echo ` $( PYTHON) $( topsrcdir) /toolkit/xre/make-platformini.py --print-timestamp` )
2011-11-18 10:28:17 -08:00
DEFINES += \
2013-05-15 20:08:43 -07:00
-DANDROID_VERSION_CODE= $( ANDROID_VERSION_CODE) \
2013-10-10 16:08:58 -07:00
-DMOZ_ANDROID_SHARED_ID= " $( MOZ_ANDROID_SHARED_ID) " \
-DMOZ_ANDROID_SHARED_ACCOUNT_TYPE= " $( MOZ_ANDROID_SHARED_ACCOUNT_TYPE) " \
2013-05-15 20:08:43 -07:00
-DMOZ_APP_BUILDID= $( MOZ_APP_BUILDID) \
-DMOZ_BUILD_TIMESTAMP= $( MOZ_BUILD_TIMESTAMP) \
-DUA_BUILDID= $( UA_BUILDID) \
2011-11-18 10:28:17 -08:00
$( NULL)
GARBAGE += \
2012-06-11 14:54:17 -07:00
AndroidManifest.xml \
2011-11-18 10:28:17 -08:00
classes.dex \
2012-06-11 14:54:17 -07:00
gecko.ap_ \
res/values/strings.xml \
2013-11-13 19:32:55 -08:00
.aapt.deps \
2013-05-20 11:39:49 -07:00
fennec_ids.txt \
2013-02-08 13:42:13 -08:00
javah.out \
jni-stubs.inc \
2013-09-09 05:57:37 -07:00
GeneratedJNIWrappers.cpp \
GeneratedJNIWrappers.h \
2011-11-18 10:28:17 -08:00
$( NULL)
2013-11-13 19:32:55 -08:00
GARBAGE_DIRS += classes db jars res sync services generated
2011-11-18 10:28:17 -08:00
2013-11-20 06:16:00 -08:00
# Bug 567884 - Need a way to find appropriate icons during packaging
i f e q ( $( MOZ_APP_NAME ) , f e n n e c )
ICON_PATH = $( topsrcdir) /$( MOZ_BRANDING_DIRECTORY) /content/fennec_48x48.png
ICON_PATH_HDPI = $( topsrcdir) /$( MOZ_BRANDING_DIRECTORY) /content/fennec_72x72.png
ICON_PATH_XHDPI = $( topsrcdir) /$( MOZ_BRANDING_DIRECTORY) /content/fennec_96x96.png
ICON_PATH_XXHDPI = $( topsrcdir) /$( MOZ_BRANDING_DIRECTORY) /content/fennec_144x144.png
e l s e
ICON_PATH = $( topsrcdir) /$( MOZ_BRANDING_DIRECTORY) /content/icon48.png
ICON_PATH_HDPI = $( topsrcdir) /$( MOZ_BRANDING_DIRECTORY) /content/icon64.png
e n d i f
2011-11-18 10:28:17 -08:00
JAVA_CLASSPATH = $( ANDROID_SDK) /android.jar
2013-04-04 04:48:02 -07:00
ALL_JARS = \
2013-10-24 15:38:22 -07:00
gecko-browser.jar \
gecko-mozglue.jar \
gecko-util.jar \
sync-thirdparty.jar \
websockets.jar \
2013-04-04 04:48:02 -07:00
$( NULL)
i f d e f M O Z _ W E B R T C
2013-10-24 15:38:22 -07:00
ALL_JARS += webrtc.jar
2013-04-04 04:48:02 -07:00
e n d i f
2013-11-13 19:32:55 -08:00
i n c l u d e $( topsrcdir ) / c o n f i g / c o n f i g . m k
2011-11-18 10:28:17 -08:00
# Note that we're going to set up a dependency directly between embed_android.dex and the java files
# Instead of on the .class files, since more than one .class file might be produced per .java file
2011-12-21 08:44:06 -08:00
# Sync dependencies are provided in a single jar. Sync classes themselves are delivered as source,
# because Android resource classes must be compiled together in order to avoid overlapping resource
# indices.
2013-12-03 01:39:56 -08:00
2013-11-18 17:30:00 -08:00
classes.dex : proguard -jars
2013-12-02 13:34:21 -08:00
@echo 'DX classes.dex'
2013-11-18 17:30:00 -08:00
$( DX) --dex --output= classes.dex jars-proguarded $( ANDROID_COMPAT_LIB)
2013-12-09 04:21:38 -08:00
i f d e f M O Z _ D I S A B L E _ P R O G U A R D
PROGUARD_PASSES = 0
2013-11-18 17:30:00 -08:00
e l s e
2013-12-09 04:21:38 -08:00
ifdef MOZ_DEBUG
PROGUARD_PASSES = 1
else
PROGUARD_PASSES = 6
endif
2013-11-18 17:30:00 -08:00
e n d i f
proguard-jars : $( ALL_JARS )
java -jar $( ANDROID_SDK_ROOT) /tools/proguard/lib/proguard.jar @$( topsrcdir) /mobile/android/config/proguard.cfg -optimizationpasses $( PROGUARD_PASSES) -injars $( subst ::,:,$( subst $( NULL) ,:,$( ALL_JARS) ) ) -outjars jars-proguarded -libraryjars $( ANDROID_SDK) /android.jar:$( ANDROID_COMPAT_LIB)
2011-11-18 10:28:17 -08:00
2013-02-08 13:42:14 -08:00
CLASSES_WITH_JNI = \
org.mozilla.gecko.GeckoAppShell \
2013-04-26 10:24:28 -07:00
org.mozilla.gecko.GeckoJavaSampler \
org.mozilla.gecko.gfx.NativePanZoomController \
2013-06-14 09:42:10 -07:00
org.mozilla.gecko.ANRReporter \
2013-02-08 13:42:14 -08:00
$( NULL)
i f d e f M O Z _ W E B S M S _ B A C K E N D
# Note: if you are building with MOZ_WEBSMS_BACKEND turned on, then
# you will get a build error because the generated jni-stubs.inc will
# be different than the one checked in (i.e. it will have the sms-related
# JNI stubs as well). Just copy the generated file to mozglue/android/
# like the error message says and rebuild. All should be well after that.
CLASSES_WITH_JNI += org.mozilla.gecko.GeckoSmsManager
e n d i f
2013-10-24 15:38:22 -07:00
jni-stubs.inc : gecko -browser .jar gecko -mozglue .jar gecko -util .jar sync -thirdparty .jar
2013-02-08 13:42:14 -08:00
$( JAVAH) -o javah.out -bootclasspath $( JAVA_BOOTCLASSPATH) -classpath $( subst $( NULL) $( NULL) ,:,$^) $( CLASSES_WITH_JNI)
2013-02-07 06:37:06 -08:00
$( PYTHON) $( topsrcdir) /mobile/android/base/jni-generator.py javah.out $@
2013-10-09 17:05:37 -07:00
ANNOTATION_PROCESSOR_JAR_FILES := $( DEPTH) /build/annotationProcessors/annotationProcessors.jar
2013-09-09 05:57:37 -07:00
2013-10-09 17:05:37 -07:00
GeneratedJNIWrappers.cpp : $( ANNOTATION_PROCESSOR_JAR_FILES )
GeneratedJNIWrappers.cpp : $( ALL_JARS )
2013-11-21 12:41:28 -08:00
$( JAVA) -classpath gecko-mozglue.jar:$( JAVA_BOOTCLASSPATH) :$( ANNOTATION_PROCESSOR_JAR_FILES) org.mozilla.gecko.annotationProcessors.AnnotationProcessor $( ALL_JARS)
2013-09-09 05:57:37 -07:00
2013-11-13 19:32:55 -08:00
gecko_package_dir = generated/org/mozilla/gecko
# Like generated/org/mozilla/fennec_$USERID.
android_package_dir = $( addprefix generated/,$( subst .,/,$( ANDROID_PACKAGE_NAME) ) )
2012-06-11 14:54:17 -07:00
2013-11-13 19:32:55 -08:00
# These _PP_JAVAFILES are specified in moz.build and defined in
# backend.mk, which is included by config.mk. Therefore this needs to
# be defined after config.mk is included.
PP_JAVAFILES := $( filter-out $( gecko_package_dir) /R.java,$( gecko-mozglue_PP_JAVAFILES) $( gecko-browser_PP_JAVAFILES) )
2012-05-03 03:22:33 -07:00
2013-11-13 19:32:55 -08:00
manifest := \
AndroidManifest.xml.in \
2013-11-13 17:11:58 -08:00
$( NULL)
2013-11-11 20:39:16 -08:00
2013-11-13 19:32:55 -08:00
PP_TARGETS += manifest
# Certain source files need to be preprocessed. This special rule
# generates these files into generated/org/mozilla/gecko for
# consumption by the build system and IDEs.
preprocessed := $( addsuffix .in,$( subst $( gecko_package_dir) /,,$( filter $( gecko_package_dir) /%,$( PP_JAVAFILES) ) ) )
preprocessed_PATH := $( gecko_package_dir)
preprocessed_KEEP_PATH := 1
PP_TARGETS += preprocessed
# Certain source files have Java package name @ANDROID_PACKAGE_NAME@.
# We hate these files but they are necessary for backwards
# compatibility. These special rules generate these files into
# generated/org/mozilla/{firefox,firefox_beta,fennec,fennec_$USER} for
# consumption by the build system and IDEs.
preprocessed_package := $( addsuffix .in,$( subst $( android_package_dir) /,,$( filter $( android_package_dir) /%,$( PP_JAVAFILES) ) ) )
preprocessed_package_PATH := $( android_package_dir)
preprocessed_package_KEEP_PATH := 1
PP_TARGETS += preprocessed_package
2011-11-18 10:28:17 -08:00
2013-11-20 06:16:00 -08:00
res/drawable-mdpi/icon.png : $( ICON_PATH )
$( NSINSTALL) -D res/drawable-mdpi
cp $( ICON_PATH) $@
res/drawable-hdpi/icon.png : $( ICON_PATH_HDPI )
$( NSINSTALL) -D res/drawable-hdpi
cp $( ICON_PATH_HDPI) $@
res/drawable-xhdpi/icon.png : $( ICON_PATH_XHDPI )
$( NSINSTALL) -D res/drawable-xhdpi
cp $( ICON_PATH_XHDPI) $@
2012-11-21 11:53:25 -08:00
2013-11-20 06:16:00 -08:00
res/drawable-xxhdpi/icon.png : $( ICON_PATH_XXHDPI )
$( NSINSTALL) -D res/drawable-xxhdpi
cp $( ICON_PATH_XXHDPI) $@
2012-11-21 11:53:25 -08:00
2013-11-20 06:16:00 -08:00
ANDROID_RESDIRS := $( subst resources/,res/,$( sort $( dir $( ANDROID_RESFILES) ) ) )
$(call mkdir_deps,$(ANDROID_RESDIRS)) : $( ANDROID_RESFILES ) Makefile
$( RM) -r $( @D)
$( NSINSTALL) -D $( @D)
$( TOUCH) $@
$(subst resources/,res/,$(ANDROID_RESFILES)) : $( call mkdir_deps ,$ ( ANDROID_RESDIRS ) ) $( ANDROID_RESFILES )
2013-12-02 13:34:21 -08:00
@echo 'creating $@'
2013-11-20 06:16:00 -08:00
$( NSINSTALL) $( subst res/,$( srcdir) /resources/,$@ ) $( dir $@ )
res/values/strings.xml : $( call mkdir_deps ,res /values )
2013-07-02 12:57:16 -07:00
$( MAKE) -C locales
2011-12-20 07:28:12 -08:00
2013-08-01 15:01:22 -07:00
# With multilocale builds, there will be multiple strings.xml files. We need to
# rebuild gecko.ap_ if any of them change.
MULTILOCALE_STRINGS_XML_FILES := $( wildcard res/values-*/strings.xml)
2013-07-18 15:09:03 -07:00
all_resources = \
2013-08-01 15:01:22 -07:00
$( MULTILOCALE_STRINGS_XML_FILES) \
2013-07-18 15:09:03 -07:00
AndroidManifest.xml \
2013-11-20 06:16:00 -08:00
$( subst resources/,res/,$( ANDROID_RESFILES) ) \
2013-10-09 16:19:00 -07:00
$( ANDROID_GENERATED_RESFILES) \
2013-07-18 15:09:03 -07:00
$( NULL)
2013-11-20 06:16:00 -08:00
# generated/org/mozilla/gecko/R.java and gecko.ap_ are both produced
# by aapt; this saves an aapt invocation.
2013-11-13 19:32:55 -08:00
$(gecko_package_dir)/R.java : .aapt .deps
gecko.ap_ : .aapt .deps
.aapt.deps : $( all_resources )
2013-11-20 06:16:00 -08:00
$( AAPT) package -f -M AndroidManifest.xml -I $( ANDROID_SDK) /android.jar -S res --custom-package org.mozilla.gecko --non-constant-id \
2013-11-13 19:32:55 -08:00
-J $( gecko_package_dir) / \
-F gecko.ap_
@$( TOUCH) $@
fennec_ids.txt : $( gecko_package_dir ) /R .java fennec -ids -generator .py
$( PYTHON) $( topsrcdir) /mobile/android/base/fennec-ids-generator.py -i $< -o $@
2011-11-18 10:28:17 -08:00
2013-11-20 06:16:00 -08:00
# We process ANDROID_RESFILES specially for now; the following flag
# disables the default processing.
IGNORE_ANDROID_RESFILES = 1
2013-11-13 19:32:55 -08:00
i n c l u d e $( topsrcdir ) / c o n f i g / r u l e s . m k
# Override the Java settings with some specific android settings
i n c l u d e $( topsrcdir ) / c o n f i g / a n d r o i d - c o m m o n . m k
2013-05-20 11:39:49 -07:00
2013-11-13 19:32:55 -08:00
libs :: classes .dex jni -stubs .inc GeneratedJNIWrappers .cpp fennec_ids .txt
2012-06-11 14:54:17 -07:00
$( INSTALL) classes.dex $( FINAL_TARGET)
2013-09-09 05:57:37 -07:00
@( diff jni-stubs.inc $( topsrcdir) /mozglue/android/jni-stubs.inc >/dev/null && diff GeneratedJNIWrappers.cpp $( topsrcdir) /widget/android/GeneratedJNIWrappers.cpp >/dev/null) || \
2013-12-02 13:34:21 -08:00
( echo '*** Error: The generated JNI code has changed. Please run cp $(CURDIR)/jni-stubs.inc $(topsrcdir)/mozglue/android && cp $(CURDIR)/GeneratedJNIWrappers.* $(topsrcdir)/widget/android and repeat the build.' && exit 1)