mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
19db3a26ae
There are two parts to this. The first is to add AndroidManifest.xml as a dependency to the "no dependencies" ap_ built during packaging. The aapt call requires it. So "no dependencies" is more accurately "no *resource* dependencies". The second is to avoid including the Android res/ directory in the language repack step. What happens is that the l10n.py script sees the Android res/ files left in the dist/ directory after unpacking and expects to find them in the objdir. They're not there, so the script fails. To avoid this, we delete them after unpacking. See the comments in packager.mk describing this process. --HG-- extra : rebase_source : 35c3c125dddcd575c1a5e8ad58f9aa13ff2db4c3
244 lines
9.2 KiB
Makefile
244 lines
9.2 KiB
Makefile
# 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/.
|
|
|
|
DIST_FILES := package-name.txt.in
|
|
|
|
ifneq (,$(findstring -march=armv7,$(OS_CFLAGS)))
|
|
MIN_CPU_VERSION=7
|
|
else
|
|
MIN_CPU_VERSION=5
|
|
endif
|
|
|
|
MOZ_APP_BUILDID=$(shell cat $(DEPTH)/config/buildid)
|
|
|
|
ifeq (,$(ANDROID_VERSION_CODE))
|
|
ifeq ($(CPU_ARCH),arm)
|
|
ifeq ($(MIN_CPU_VERSION),7)
|
|
ANDROID_VERSION_CODE=$(shell cat $(DEPTH)/config/buildid | cut -c1-10)
|
|
else
|
|
# decrement the version code by 1 for armv6 builds so armv7 builds will win any compatability ties
|
|
ANDROID_VERSION_CODE=$(shell echo $$((`cat $(DEPTH)/config/buildid | cut -c1-10` - 1)))
|
|
endif
|
|
else #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)))
|
|
endif
|
|
endif
|
|
|
|
UA_BUILDID=$(shell echo $(ANDROID_VERSION_CODE) | cut -c1-8)
|
|
|
|
MOZ_BUILD_TIMESTAMP=$(shell echo `$(PYTHON) $(topsrcdir)/toolkit/xre/make-platformini.py --print-timestamp`)
|
|
|
|
DEFINES += \
|
|
-DANDROID_VERSION_CODE=$(ANDROID_VERSION_CODE) \
|
|
-DMOZ_ANDROID_SHARED_ID="$(MOZ_ANDROID_SHARED_ID)" \
|
|
-DMOZ_ANDROID_SHARED_ACCOUNT_TYPE="$(MOZ_ANDROID_SHARED_ACCOUNT_TYPE)" \
|
|
-DMOZ_APP_BUILDID=$(MOZ_APP_BUILDID) \
|
|
-DMOZ_BUILD_TIMESTAMP=$(MOZ_BUILD_TIMESTAMP) \
|
|
-DUA_BUILDID=$(UA_BUILDID) \
|
|
$(NULL)
|
|
|
|
GARBAGE += \
|
|
AndroidManifest.xml \
|
|
classes.dex \
|
|
gecko.ap_ \
|
|
res/values/strings.xml \
|
|
.aapt.deps \
|
|
fennec_ids.txt \
|
|
javah.out \
|
|
jni-stubs.inc \
|
|
GeneratedJNIWrappers.cpp \
|
|
GeneratedJNIWrappers.h \
|
|
$(NULL)
|
|
|
|
GARBAGE_DIRS += classes db jars res sync services generated
|
|
|
|
JAVA_CLASSPATH = $(ANDROID_SDK)/android.jar
|
|
|
|
ALL_JARS = \
|
|
gecko-browser.jar \
|
|
gecko-mozglue.jar \
|
|
gecko-util.jar \
|
|
sync-thirdparty.jar \
|
|
websockets.jar \
|
|
$(NULL)
|
|
|
|
ifdef MOZ_WEBRTC
|
|
ALL_JARS += webrtc.jar
|
|
endif
|
|
|
|
include $(topsrcdir)/config/config.mk
|
|
|
|
# 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
|
|
# 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.
|
|
|
|
classes.dex: proguard-jars
|
|
@echo 'DX classes.dex'
|
|
$(DX) --dex --output=classes.dex jars-proguarded $(ANDROID_COMPAT_LIB)
|
|
|
|
ifdef MOZ_DISABLE_PROGUARD
|
|
PROGUARD_PASSES=0
|
|
else
|
|
ifdef MOZ_DEBUG
|
|
PROGUARD_PASSES=1
|
|
else
|
|
PROGUARD_PASSES=6
|
|
endif
|
|
endif
|
|
|
|
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)
|
|
|
|
CLASSES_WITH_JNI= \
|
|
org.mozilla.gecko.GeckoAppShell \
|
|
org.mozilla.gecko.GeckoJavaSampler \
|
|
org.mozilla.gecko.gfx.NativePanZoomController \
|
|
org.mozilla.gecko.ANRReporter \
|
|
$(NULL)
|
|
|
|
ifdef MOZ_WEBSMS_BACKEND
|
|
# 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
|
|
endif
|
|
|
|
jni-stubs.inc: gecko-browser.jar gecko-mozglue.jar gecko-util.jar sync-thirdparty.jar
|
|
$(JAVAH) -o javah.out -bootclasspath $(JAVA_BOOTCLASSPATH) -classpath $(subst $(NULL) $(NULL),:,$^) $(CLASSES_WITH_JNI)
|
|
$(PYTHON) $(topsrcdir)/mobile/android/base/jni-generator.py javah.out $@
|
|
|
|
ANNOTATION_PROCESSOR_JAR_FILES := $(DEPTH)/build/annotationProcessors/annotationProcessors.jar
|
|
|
|
GeneratedJNIWrappers.cpp: $(ANNOTATION_PROCESSOR_JAR_FILES)
|
|
GeneratedJNIWrappers.cpp: $(ALL_JARS)
|
|
$(JAVA) -classpath gecko-mozglue.jar:$(JAVA_BOOTCLASSPATH):$(ANNOTATION_PROCESSOR_JAR_FILES) org.mozilla.gecko.annotationProcessors.AnnotationProcessor $(ALL_JARS)
|
|
|
|
gecko_package_dir = generated/org/mozilla/gecko
|
|
# Like generated/org/mozilla/fennec_$USERID.
|
|
android_package_dir = $(addprefix generated/,$(subst .,/,$(ANDROID_PACKAGE_NAME)))
|
|
|
|
# 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))
|
|
|
|
manifest := \
|
|
AndroidManifest.xml.in \
|
|
$(NULL)
|
|
|
|
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
|
|
|
|
include $(topsrcdir)/config/rules.mk
|
|
|
|
# This uses the fact that Android resource directories list all
|
|
# resource files one subdirectory below the parent resource directory.
|
|
android_res_files := $(wildcard $(addsuffix /*,$(wildcard $(addsuffix /*,$(ANDROID_RES_DIRS)))))
|
|
|
|
$(ANDROID_GENERATED_RESFILES): $(call mkdir_deps,$(sort $(dir $(ANDROID_GENERATED_RESFILES))))
|
|
|
|
# [Comment 1/3] We don't have correct dependencies for strings.xml at
|
|
# this point, so we always recursively invoke the submake to check the
|
|
# dependencies. Sigh. And, with multilocale builds, there will be
|
|
# multiple strings.xml files, and we need to rebuild gecko.ap_ if any
|
|
# of them change. But! mobile/android/base/locales does not have
|
|
# enough information to actually build res/values/strings.xml during a
|
|
# language repack. So rather than adding rules into the main
|
|
# makefile, and trying to work around the lack of information, we
|
|
# force a rebuild of gecko.ap_ during packaging. See below.
|
|
|
|
res/values/strings.xml: FORCE
|
|
$(MAKE) -C locales
|
|
|
|
all_resources = \
|
|
$(CURDIR)/AndroidManifest.xml \
|
|
$(android_res_files) \
|
|
$(ANDROID_GENERATED_RESFILES) \
|
|
$(NULL)
|
|
|
|
# All of generated/org/mozilla/gecko/R.java, gecko.ap_, and R.txt are
|
|
# produced by aapt; this saves aapt invocations.
|
|
|
|
$(gecko_package_dir)/R.java: .aapt.deps
|
|
gecko.ap_: .aapt.deps
|
|
R.txt: .aapt.deps
|
|
|
|
# [Comment 2/3] This tom-foolery provides a target that forces a
|
|
# rebuild of gecko.ap_. This is used during packaging to ensure that
|
|
# resources are fresh. The alternative would be complicated; see
|
|
# [Comment 1/3].
|
|
|
|
gecko-nodeps/R.java: .aapt.nodeps
|
|
gecko-nodeps.ap_: .aapt.nodeps
|
|
gecko-nodeps/R.txt: .aapt.nodeps
|
|
|
|
# 1: target file.
|
|
# 2: dependencies.
|
|
# 3: name of ap_ file to write.
|
|
# 4: directory to write R.java into.
|
|
# 5: directory to write R.txt into.
|
|
define aapt_command
|
|
$(1): $$(call mkdir_deps,$(filter-out ./,$(dir $(3) $(4) $(5)))) $(2)
|
|
$$(AAPT) package -f -M AndroidManifest.xml -I $$(ANDROID_SDK)/android.jar \
|
|
--auto-add-overlay \
|
|
$$(addprefix -S ,$$(ANDROID_RES_DIRS)) \
|
|
--custom-package org.mozilla.gecko --non-constant-id \
|
|
-F $(3) \
|
|
-J $(4) \
|
|
--output-text-symbols $(5)
|
|
@$$(TOUCH) $$@
|
|
endef
|
|
|
|
# [Comment 3/3] The first of these rules is used during regular
|
|
# builds. The second writes an ap_ file that is only used during
|
|
# packaging. It doesn't write the normal ap_, or R.java, since we
|
|
# don't want the packaging step to write anything that would make a
|
|
# further no-op build do work. See also
|
|
# toolkit/mozapps/installer/packager.mk.
|
|
|
|
# .aapt.deps: $(all_resources)
|
|
$(eval $(call aapt_command,.aapt.deps,$(all_resources),gecko.ap_,$(gecko_package_dir)/,./))
|
|
|
|
# .aapt.nodeps: $(CURDIR)/AndroidManifest.xml FORCE
|
|
$(eval $(call aapt_command,.aapt.nodeps,$(CURDIR)/AndroidManifest.xml FORCE,gecko-nodeps.ap_,gecko-nodeps/,gecko-nodeps/))
|
|
|
|
fennec_ids.txt: $(gecko_package_dir)/R.java fennec-ids-generator.py
|
|
$(PYTHON) $(topsrcdir)/mobile/android/base/fennec-ids-generator.py -i $< -o $@
|
|
|
|
# Override the Java settings with some specific android settings
|
|
include $(topsrcdir)/config/android-common.mk
|
|
|
|
libs:: classes.dex jni-stubs.inc GeneratedJNIWrappers.cpp fennec_ids.txt
|
|
$(INSTALL) classes.dex $(FINAL_TARGET)
|
|
@(diff jni-stubs.inc $(topsrcdir)/mozglue/android/jni-stubs.inc >/dev/null && diff GeneratedJNIWrappers.cpp $(topsrcdir)/widget/android/GeneratedJNIWrappers.cpp >/dev/null) || \
|
|
(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)
|