mirror of https://github.com/roytam1/UXP
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
159 lines
6.0 KiB
159 lines
6.0 KiB
# -*- makefile -*- |
|
# vim:set ts=8 sw=8 sts=8 noet: |
|
# |
|
# 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/. |
|
|
|
ifndef INCLUDED_JAVA_BUILD_MK #{ |
|
|
|
ifdef JAVAFILES #{ |
|
GENERATED_DIRS += classes |
|
|
|
export:: classes |
|
classes: $(call mkdir_deps,classes) |
|
endif #} JAVAFILES |
|
|
|
default_bootclasspath_jars := \ |
|
$(ANDROID_SDK)/android.jar \ |
|
$(NULL) |
|
|
|
default_classpath_jars := \ |
|
$(NULL) |
|
|
|
# Turn a possibly empty list of JAR files into a Java classpath, like a.jar:b.jar. |
|
# Arg 1: Possibly empty list of JAR files. |
|
define classpath_template |
|
$(subst $(NULL) ,:,$(strip $(1))) |
|
endef |
|
|
|
ifdef ANDROID_APK_NAME #{ |
|
$(if $(ANDROID_APK_PACKAGE),,$(error Missing ANDROID_APK_PACKAGE with ANDROID_APK_NAME)) |
|
|
|
android_res_dirs := $(or $(ANDROID_RES_DIRS),$(srcdir)/res) |
|
_ANDROID_RES_FLAG := $(addprefix -S ,$(android_res_dirs)) |
|
_ANDROID_ASSETS_FLAG := $(if $(ANDROID_ASSETS_DIRS),$(addprefix -A ,$(ANDROID_ASSETS_DIRS))) |
|
android_manifest := $(or $(ANDROID_MANIFEST_FILE),AndroidManifest.xml) |
|
|
|
GENERATED_DIRS += classes generated |
|
|
|
generated_r_java := generated/$(subst .,/,$(ANDROID_APK_PACKAGE))/R.java |
|
|
|
classes.dex: $(call mkdir_deps,classes) |
|
classes.dex: $(generated_r_java) |
|
classes.dex: $(ANDROID_APK_NAME).ap_ |
|
classes.dex: $(default_classpath_jars) $(ANDROID_CLASSPATH_JARS) |
|
classes.dex: $(default_bootclasspath_jars) $(ANDROID_BOOTCLASSPATH_JARS) $(ANDROID_EXTRA_JARS) |
|
classes.dex: $(JAVAFILES) |
|
$(JAVAC) $(JAVAC_FLAGS) -d classes $(filter %.java,$^) \ |
|
$(addprefix -bootclasspath ,$(call classpath_template,$(default_bootclasspath_jars) $(ANDROID_BOOTCLASSPATH_JARS))) \ |
|
$(addprefix -classpath ,$(call classpath_template,$(default_classpath_jars) $(ANDROID_CLASSPATH_JARS) $(ANDROID_EXTRA_JARS))) |
|
$(DX) --dex --output=$@ classes $(ANDROID_EXTRA_JARS) |
|
|
|
# R.java and $(ANDROID_APK_NAME).ap_ are both produced by aapt. To |
|
# save an aapt invocation, we produce them both at the same time. The |
|
# trailing semi-colon defines an empty recipe; defining no recipe at |
|
# all causes Make to treat the target differently, in a way that |
|
# defeats our dependencies. |
|
|
|
$(generated_r_java): .aapt.deps ; |
|
$(ANDROID_APK_NAME).ap_: .aapt.deps ; |
|
|
|
# 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))))) |
|
|
|
# An extra package like org.example.app generates dependencies like: |
|
# generated/org/example/app/R.java: .aapt.deps ; |
|
# classes.dex: generated/org/example/app/R.java |
|
# GARBAGE: generated/org/example/app/R.java |
|
$(foreach extra_package,$(ANDROID_EXTRA_PACKAGES), \ |
|
$(eval generated/$(subst .,/,$(extra_package))/R.java: .aapt.deps ;) \ |
|
$(eval classes.dex: generated/$(subst .,/,$(extra_package))/R.java) \ |
|
$(eval GARBAGE: generated/$(subst .,/,$(extra_package))/R.java) \ |
|
) |
|
|
|
# aapt flag -m: 'make package directories under location specified by -J'. |
|
# The --extra-package list is colon separated. |
|
.aapt.deps: $(android_manifest) $(android_res_files) $(wildcard $(ANDROID_ASSETS_DIRS)) |
|
@$(TOUCH) $@ |
|
$(AAPT) package -f -M $< -I $(ANDROID_SDK)/android.jar $(_ANDROID_RES_FLAG) $(_ANDROID_ASSETS_FLAG) \ |
|
--custom-package $(ANDROID_APK_PACKAGE) \ |
|
--non-constant-id \ |
|
--auto-add-overlay \ |
|
$(if $(ANDROID_EXTRA_PACKAGES),--extra-packages $(subst $(NULL) ,:,$(strip $(ANDROID_EXTRA_PACKAGES)))) \ |
|
$(if $(ANDROID_EXTRA_RES_DIRS),$(addprefix -S ,$(ANDROID_EXTRA_RES_DIRS))) \ |
|
-m \ |
|
-J ${@D}/generated \ |
|
-F $(ANDROID_APK_NAME).ap_ |
|
|
|
$(ANDROID_APK_NAME)-unsigned-unaligned.apk: $(ANDROID_APK_NAME).ap_ classes.dex |
|
cp $< $@ |
|
$(ZIP) -0 $@ classes.dex |
|
|
|
$(ANDROID_APK_NAME)-unaligned.apk: $(ANDROID_APK_NAME)-unsigned-unaligned.apk |
|
cp $< $@ |
|
$(DEBUG_JARSIGNER) $@ |
|
|
|
$(ANDROID_APK_NAME).apk: $(ANDROID_APK_NAME)-unaligned.apk |
|
$(ZIPALIGN) -f 4 $< $@ |
|
|
|
GARBAGE += \ |
|
$(generated_r_java) \ |
|
classes.dex \ |
|
$(ANDROID_APK_NAME).ap_ \ |
|
$(ANDROID_APK_NAME)-unsigned-unaligned.apk \ |
|
$(ANDROID_APK_NAME)-unaligned.apk \ |
|
$(ANDROID_APK_NAME).apk \ |
|
$(NULL) |
|
|
|
# Include Android specific java flags, instead of what's in rules.mk. |
|
include $(topsrcdir)/config/android-common.mk |
|
endif #} ANDROID_APK_NAME |
|
|
|
|
|
ifdef JAVA_JAR_TARGETS #{ |
|
# Arg 1: Output target name with .jar suffix, like jars/jarfile.jar. |
|
# Intermediate class files are generated in jars/jarfile-classes. |
|
# Arg 2: Java sources list. We use VPATH and $^ so sources can be |
|
# relative to $(srcdir) or $(CURDIR). |
|
# Arg 3: List of extra jars to link against. We do not use VPATH so |
|
# jars must be relative to $(CURDIR). |
|
# Arg 4: Additional JAVAC_FLAGS. |
|
|
|
# Note: Proguard fails when stale .class files corresponding to |
|
# removed inner classes are present in the object directory. These |
|
# stale class files get packaged into the .jar file, which then gets |
|
# processed by Proguard. To work around this, we always delete any |
|
# existing jarfile-classes directory and start fresh. |
|
|
|
define java_jar_template |
|
$(1): $(2) $(3) $(default_bootclasspath_jars) $(default_classpath_jars) |
|
$$(REPORT_BUILD) |
|
@$$(RM) -rf $(1:.jar=)-classes |
|
@$$(NSINSTALL) -D $(1:.jar=)-classes |
|
@$$(if $$(filter-out .,$$(@D)),$$(NSINSTALL) -D $$(@D)) |
|
$$(JAVAC) $$(JAVAC_FLAGS)\ |
|
$(4)\ |
|
-d $(1:.jar=)-classes\ |
|
$(addprefix -bootclasspath ,$(call classpath_template,$(default_bootclasspath_jars)))\ |
|
$(addprefix -classpath ,$(call classpath_template,$(default_classpath_jars) $(3)))\ |
|
$$(filter %.java,$$^) |
|
$$(JAR) cMf $$@ -C $(1:.jar=)-classes . |
|
|
|
GARBAGE += $(1) |
|
|
|
GARBAGE_DIRS += $(1:.jar=)-classes |
|
endef |
|
|
|
$(foreach jar,$(JAVA_JAR_TARGETS),\ |
|
$(if $($(jar)_DEST),,$(error Missing $(jar)_DEST))\ |
|
$(if $($(jar)_JAVAFILES) $($(jar)_PP_JAVAFILES),,$(error Must provide at least one of $(jar)_JAVAFILES and $(jar)_PP_JAVAFILES))\ |
|
$(eval $(call java_jar_template,$($(jar)_DEST),$($(jar)_JAVAFILES) $($(jar)_PP_JAVAFILES),$($(jar)_EXTRA_JARS),$($(jar)_JAVAC_FLAGS)))\ |
|
) |
|
endif #} JAVA_JAR_TARGETS |
|
|
|
|
|
INCLUDED_JAVA_BUILD_MK := 1 |
|
|
|
endif #} INCLUDED_JAVA_BUILD_MK
|
|
|