blob: 85074d919633f7e4721e8ec5fa1cb71c31c027d4 [file] [log] [blame]
ifndef DEVICE_NUM
DEVICE_NUM := 1
endif
SYNCBASE_DATA_DIR=/data/data/org.chromium.mojo.shell/app_home/syncbasedata
# TODO(aghassemi): We should be able to drop the mount table dependency once syncgroup creation no longer requires one.
# See https://github.com/vanadium/issues/issues/873
MOUNTTABLE_ADDR := /ns.dev.v.io:8101/tmp/syncslides
DEVICE_NUM_PLUS_ONE := $(shell echo $(DEVICE_NUM) \+ 1 | bc)
DEVICE_ID := $(shell adb devices | sed -n $(DEVICE_NUM_PLUS_ONE)p | awk '{ print $$1; }')
DEVICE_FLAG := --target-device $(DEVICE_ID)
ifneq ($(DEVICE_NUM), 1)
REUSE_FLAG := --reuse-servers
endif
ifdef VLOG
VLOG_FLAGS = --v=$(VLOG) --logtostderr=true
endif
# TODO(aghassemi): Remove use of proxy once BLE-RPC is supported.
SYNCBASE_ARGS := https://syncbase.syncslides.mojo.v.io/syncbase_server.mojo --root-dir=$(SYNCBASE_DATA_DIR) --v23.proxy=/ns.dev.v.io:8101/proxy --v23.namespace.root=$(MOUNTTABLE_ADDR) --name=$(DEVICE_ID) $(VLOG_FLAGS)
SETTINGS_FILE := /sdcard/syncslides_settings.json
SETTINGS_JSON := {\"deviceid\": \"$(DEVICE_ID)\", \"mounttable\": \"$(MOUNTTABLE_ADDR)\"}
SAMPLE_DECKS_PATH := $(PWD)/assets/sample_decks
SD_CARD_DECKS_PATH = '/sdcard/syncslides/decks'
MOJO_DEVTOOLS := $(shell jiri profile env --profiles=v23:mojo --target=arm-android MOJO_DEVTOOLS=)
MOJO_SHELL := $(shell jiri profile env --profiles=v23:mojo --target=arm-android MOJO_SHELL=)
GS_BUCKET_PATH := gs://mojo_services/syncslides
GS_BUCKET_URL := storage.googleapis.com/mojo_services/syncslides
SYNCSLIDES_URL = mojo://$(GS_BUCKET_URL)/app.flx
APP_FLX_FILE := $(PWD)/build/app.flx
SYNCBASE_MOJO_DIR := $(PWD)/packages/syncbase/mojo_services/android
DISCOVERY_MOJO_DIR := $(PWD)/packages/v23discovery/mojo_services/android
MOJO_SHELL_CMD_PATH := /data/local/tmp/org.chromium.mojo.shell.cmd
SYNCSLIDES_SHORTCUT_NAME := SyncSlides
SYNCSLIDES_ICON := https://avatars0.githubusercontent.com/u/9374332?v=3&s=200
define GENERATE_SHORTCUT_FILE
sed -e "s;%GS_BUCKET_URL%;$1;g" -e "s;%SYNCBASE_FLAGS%;$2;g" \
shortcut_template > shortcut_commands
endef
default: run
.PHONY: dartanalyzer
dartanalyzer: packages
dartanalyzer lib/main.dart
.PHONY: dartfmt
dartfmt: packages
dartfmt --overwrite lib
packages: pubspec.yaml
pub get
.PHONY: upgrade-packages
upgrade-packages:
pub upgrade
.PHONY: build
build: packages
pub run flutter_tools build
.PHONY: create-shortcut
create-shortcut: clear-shortcut build install-shell
$(call GENERATE_SHORTCUT_FILE,$(GS_BUCKET_URL),$(SYNCBASE_ARGS))
adb -s $(DEVICE_ID) push -p shortcut_commands $(MOJO_SHELL_CMD_PATH)
adb -s $(DEVICE_ID) shell chmod 555 $(MOJO_SHELL_CMD_PATH)
adb -s $(DEVICE_ID) shell 'echo $(SETTINGS_JSON) > $(SETTINGS_FILE)'
$(MOJO_DEVTOOLS)/mojo_run --shell-path $(MOJO_SHELL) --android --target-device=$(DEVICE_ID) "https://$(GS_BUCKET_URL)/shortcut.mojo $(SYNCSLIDES_SHORTCUT_NAME) $(SYNCSLIDES_URL) $(SYNCSLIDES_ICON)"
.PHONY: clear-shortcut
clear-shortcut:
adb -s $(DEVICE_ID) shell rm -f $(MOJO_SHELL_CMD_PATH)
.PHONY: install-shell
install-shell: clear-shortcut
adb -s $(DEVICE_ID) install $(MOJO_SHELL)
.PHONY: uninstall-shell
uninstall-shell: clear-shortcut
adb -s $(DEVICE_ID) uninstall org.chromium.mojo.shell
.PHONY: deploy
deploy: build
gsutil cp $(APP_FLX_FILE) $(GS_BUCKET_PATH)
gsutil cp $(SYNCBASE_MOJO_DIR)/syncbase_server.mojo $(GS_BUCKET_PATH)
gsutil cp $(DISCOVERY_MOJO_DIR)/discovery.mojo $(GS_BUCKET_PATH)
gsutil -m acl set -R -a public-read $(GS_BUCKET_PATH)
gsutil setmeta -h "Cache-Control:private, max-age=0, no-transform" $(GS_BUCKET_PATH)/*.*
.PHONY: copy-sample-deck
copy-sample-deck:
adb -s $(DEVICE_ID) push -p $(SAMPLE_DECKS_PATH) $(SD_CARD_DECKS_PATH)
# Usage example:
# DEVICE_NUM=1 make run
# DEVICE_NUM=2 make run
run: build install-shell copy-sample-deck
adb -s $(DEVICE_ID) shell 'echo $(SETTINGS_JSON) > $(SETTINGS_FILE)'
pub run flutter_tools run_mojo \
--devtools-path $(MOJO_DEVTOOLS)/mojo_run \
--android --mojo-debug -- --enable-multiprocess \
--map-origin="https://syncbase.syncslides.mojo.v.io/=$(SYNCBASE_MOJO_DIR)" \
--map-origin="https://discovery.syncslides.mojo.v.io/=$(DISCOVERY_MOJO_DIR)" \
--args-for="$(SYNCBASE_ARGS)" \
$(DEVICE_FLAG) \
$(REUSE_FLAG) \
--no-config-file
# Helper targets
run1:
DEVICE_NUM=1 make run
run2:
DEVICE_NUM=2 make run
run3:
DEVICE_NUM=3 make run
run4:
DEVICE_NUM=4 make run
.PHONY: clean
clean:
rm -f app.flx snapshot_blob.bin shortcut_commands
rm -rf packages
-adb -s $(DEVICE_ID) shell run-as org.chromium.mojo.shell rm $(SETTINGS_FILE)
.PHONY: clean-syncbase
clean-syncbase:
-adb -s $(DEVICE_ID) shell run-as org.chromium.mojo.shell rm -rf $(SYNCBASE_DATA_DIR)
.PHONY: very-clean
.very-clean: clean clean-syncbase