Created --runtime-arg switch for dex2oat to pass arguments to runtime.
This replaces the -Xms, -Xmx, and -verbose options.
Change-Id: Idc023b6d369bd8b5df932b9f2eb6dbc79d591ab1
diff --git a/build/Android.oat.mk b/build/Android.oat.mk
index 00aa8cf..50c05ab 100644
--- a/build/Android.oat.mk
+++ b/build/Android.oat.mk
@@ -49,12 +49,12 @@
$(HOST_CORE_OAT): $(HOST_CORE_DEX) $(DEX2OAT_DEPENDENCY)
@echo "host dex2oat: $@ ($?)"
@mkdir -p $(dir $@)
- $(hide) $(DEX2OAT) -Xms16m -Xmx16m $(addprefix --dex-file=,$(filter-out $(DEX2OAT),$^)) --oat=$@ --image=$(HOST_CORE_IMG) --base=$(IMG_HOST_BASE_ADDRESS)
+ $(hide) $(DEX2OAT) --runtime-arg -Xms16m --runtime-arg -Xmx16m $(addprefix --dex-file=,$(filter-out $(DEX2OAT),$^)) --oat=$@ --image=$(HOST_CORE_IMG) --base=$(IMG_HOST_BASE_ADDRESS)
$(TARGET_CORE_OAT): $(TARGET_CORE_DEX) $(DEX2OAT_DEPENDENCY)
@echo "target dex2oat: $@ ($?)"
@mkdir -p $(dir $@)
- $(hide) $(DEX2OAT) -Xms32m -Xmx32m $(addprefix --dex-file=,$(filter-out $(DEX2OAT),$^)) --oat=$@ --image=$(TARGET_CORE_IMG) --base=$(IMG_TARGET_BASE_ADDRESS) --host-prefix=$(PRODUCT_OUT)
+ $(hide) $(DEX2OAT) --runtime-arg -Xms32m --runtime-arg -Xmx32m $(addprefix --dex-file=,$(filter-out $(DEX2OAT),$^)) --oat=$@ --image=$(TARGET_CORE_IMG) --base=$(IMG_TARGET_BASE_ADDRESS) --host-prefix=$(PRODUCT_OUT)
$(HOST_CORE_IMG): $(HOST_CORE_OAT)
@@ -70,6 +70,6 @@
$(TARGET_BOOT_OAT): $(TARGET_BOOT_DEX) $(DEX2OAT_DEPENDENCY)
@echo "target dex2oat: $@ ($?)"
@mkdir -p $(dir $@)
- $(hide) $(DEX2OAT) -Xms256m -Xmx256m $(addprefix --dex-file=,$(filter-out $(DEX2OAT),$^)) --oat=$@ --image=$(TARGET_BOOT_IMG) --base=$(IMG_TARGET_BASE_ADDRESS) --host-prefix=$(PRODUCT_OUT)
+ $(hide) $(DEX2OAT) --runtime-arg -Xms256m --runtime-arg -Xmx256m $(addprefix --dex-file=,$(filter-out $(DEX2OAT),$^)) --oat=$@ --image=$(TARGET_BOOT_IMG) --base=$(IMG_TARGET_BASE_ADDRESS) --host-prefix=$(PRODUCT_OUT)
$(TARGET_BOOT_IMG): $(TARGET_BOOT_OAT)
diff --git a/build/Android.oattest.mk b/build/Android.oattest.mk
index 89cd906..7233f08 100644
--- a/build/Android.oattest.mk
+++ b/build/Android.oattest.mk
@@ -40,7 +40,7 @@
define build-art-oat
$(2): $(1) $(3) $(DEX2OAT_DEPENDENCY)
@echo "target dex2oat: $$@ ($$?)"
- $(hide) $(DEX2OAT) -Xms16m -Xmx16m --boot-image=$(3) $(addprefix --dex-file=,$$<) --oat=$$@ --host-prefix=$(PRODUCT_OUT)
+ $(hide) $(DEX2OAT) --runtime-arg -Xms16m --runtime-arg -Xmx16m --boot-image=$(3) $(addprefix --dex-file=,$$<) --oat=$$@ --host-prefix=$(PRODUCT_OUT)
endef
########################################################################
diff --git a/src/class_linker.cc b/src/class_linker.cc
index afb6721..7c07f00 100644
--- a/src/class_linker.cc
+++ b/src/class_linker.cc
@@ -567,8 +567,8 @@
execl("/system/bin/dex2oatd",
"/system/bin/dex2oatd",
- "-Xms64m",
- "-Xmx64m",
+ "--runtime-arg", "-Xms64m",
+ "--runtime-arg", "-Xmx64m",
boot_image_option.c_str(),
dex_file_option.c_str(),
oat_file_option.c_str(),
diff --git a/src/dex2oat.cc b/src/dex2oat.cc
index 455b8b9..6a39241 100644
--- a/src/dex2oat.cc
+++ b/src/dex2oat.cc
@@ -52,14 +52,10 @@
" Example: --host-prefix=out/target/product/crespo\n"
"\n");
fprintf(stderr,
- " -Xms<n> may be used to specify an initial heap size for the runtime used to\n"
- " run dex2oat\n"
- " Example: -Xms256m\n"
- "\n");
- fprintf(stderr,
- " -Xmx<n> may be used to specify a maximum heap size for the runtime used to\n"
- " run dex2oat\n"
- " Example: -Xmx256m\n"
+ " --runtime-arg <argument>: used to specify various arguments for the runtime,\n"
+ " such as initial heap size, maximum heap size, and verbose output.\n"
+ " Use a separate --runtime-arg switch for each argument.\n"
+ " Example: --runtime-arg -Xms256m\n"
"\n");
exit(EXIT_FAILURE);
}
@@ -81,9 +77,7 @@
std::string boot_image_option;
uintptr_t image_base = 0;
std::string host_prefix;
- const char* Xms = NULL;
- const char* Xmx = NULL;
- const char* verbose = NULL;
+ std::vector<const char*> runtime_args;
for (int i = 0; i < argc; i++) {
const StringPiece option(argv[i]);
@@ -113,12 +107,12 @@
boot_image_option += boot_image_filename;
} else if (option.starts_with("--host-prefix=")) {
host_prefix = option.substr(strlen("--host-prefix=")).data();
- } else if (option.starts_with("-Xms")) {
- Xms = option.data();
- } else if (option.starts_with("-Xmx")) {
- Xmx = option.data();
- } else if (option.starts_with("-verbose:")) {
- verbose = option.data();
+ } else if (option == "--runtime-arg") {
+ if (++i >= argc) {
+ fprintf(stderr, "Missing required argument for --runtime-arg\n");
+ usage();
+ }
+ runtime_args.push_back(argv[i]);
} else {
fprintf(stderr, "unknown argument %s\n", option.data());
usage();
@@ -161,18 +155,12 @@
} else {
options.push_back(std::make_pair(boot_image_option.c_str(), reinterpret_cast<void*>(NULL)));
}
- if (Xms != NULL) {
- options.push_back(std::make_pair(Xms, reinterpret_cast<void*>(NULL)));
- }
- if (Xmx != NULL) {
- options.push_back(std::make_pair(Xmx, reinterpret_cast<void*>(NULL)));
- }
- if (verbose != NULL) {
- options.push_back(std::make_pair(verbose, reinterpret_cast<void*>(NULL)));
- }
if (!host_prefix.empty()) {
options.push_back(std::make_pair("host-prefix", host_prefix.c_str()));
}
+ for (size_t i = 0; i < runtime_args.size(); i++) {
+ options.push_back(std::make_pair(runtime_args[i], reinterpret_cast<void*>(NULL)));
+ }
UniquePtr<Runtime> runtime(Runtime::Create(options, false));
if (runtime.get() == NULL) {
fprintf(stderr, "could not create runtime\n");
diff --git a/src/oatopt.cc b/src/oatopt.cc
index 133af59..c792b4d 100644
--- a/src/oatopt.cc
+++ b/src/oatopt.cc
@@ -51,8 +51,8 @@
execl("/system/bin/dex2oatd",
"/system/bin/dex2oatd",
- "-Xms64m",
- "-Xmx64m",
+ "--runtime-arg", "-Xms64m",
+ "--runtime-arg", "-Xmx64m",
"--boot-image=/data/art-cache/boot.art",
dex_file_option.c_str(),
oat_file_option.c_str(),
diff --git a/test/003-omnibus-opcodes/build b/test/003-omnibus-opcodes/build
index 47abae2..d5aa786 100644
--- a/test/003-omnibus-opcodes/build
+++ b/test/003-omnibus-opcodes/build
@@ -24,9 +24,3 @@
dx -JXmx256m --debug --dex --dump-to=classes.lst --output=classes.dex classes
zip ${ANDROID_PRODUCT_OUT}/data/art-test/$TEST_NAME.jar classes.dex
-
-dex2oatd -Xms16m -Xmx16m \
- --boot-image=${ANDROID_PRODUCT_OUT}/data/art-test/core.art \
- --dex-file=${ANDROID_PRODUCT_OUT}/data/art-test/$TEST_NAME.jar \
- --oat=${ANDROID_PRODUCT_OUT}/data/art-test/$TEST_NAME.oat \
- --host-prefix=${ANDROID_PRODUCT_OUT}
diff --git a/test/023-many-interfaces/build b/test/023-many-interfaces/build
index 171eaae..ebe722e 100644
--- a/test/023-many-interfaces/build
+++ b/test/023-many-interfaces/build
@@ -26,9 +26,3 @@
dx --debug --dex --dump-to=classes.lst --output=classes.dex classes
zip ${ANDROID_PRODUCT_OUT}/data/art-test/$TEST_NAME.jar classes.dex
-
-dex2oatd -Xms16m -Xmx16m \
- --boot-image=${ANDROID_PRODUCT_OUT}/data/art-test/core.art \
- --dex-file=${ANDROID_PRODUCT_OUT}/data/art-test/$TEST_NAME.jar \
- --oat=${ANDROID_PRODUCT_OUT}/data/art-test/$TEST_NAME.oat \
- --host-prefix=${ANDROID_PRODUCT_OUT}
diff --git a/test/056-const-string-jumbo/build b/test/056-const-string-jumbo/build
index d7a8268..a563cd0 100644
--- a/test/056-const-string-jumbo/build
+++ b/test/056-const-string-jumbo/build
@@ -45,9 +45,3 @@
dx -JXmx500m --debug --dex --no-optimize --positions=none --no-locals \
--dump-to=classes.lst --output=classes.dex classes
zip ${ANDROID_PRODUCT_OUT}/data/art-test/$TEST_NAME.jar classes.dex
-
-dex2oatd -Xms16m -Xmx16m \
- --boot-image=${ANDROID_PRODUCT_OUT}/data/art-test/core.art \
- --dex-file=${ANDROID_PRODUCT_OUT}/data/art-test/$TEST_NAME.jar \
- --oat=${ANDROID_PRODUCT_OUT}/data/art-test/$TEST_NAME.oat \
- --host-prefix=${ANDROID_PRODUCT_OUT}
diff --git a/test/085-old-style-inner-class/build b/test/085-old-style-inner-class/build
index 32f7a86..b7e12ae 100644
--- a/test/085-old-style-inner-class/build
+++ b/test/085-old-style-inner-class/build
@@ -27,9 +27,3 @@
--dump-width=1000 classes 2>/dev/null
zip ${ANDROID_PRODUCT_OUT}/data/art-test/$TEST_NAME.jar classes.dex
-
-dex2oatd -Xms16m -Xmx16m \
- --boot-image=${ANDROID_PRODUCT_OUT}/data/art-test/core.art \
- --dex-file=${ANDROID_PRODUCT_OUT}/data/art-test/$TEST_NAME.jar \
- --oat=${ANDROID_PRODUCT_OUT}/data/art-test/$TEST_NAME.oat \
- --host-prefix=${ANDROID_PRODUCT_OUT}