# Debian packaging wrapper: fetch upstream android_translation_layer/art_standalone
# and build it. The heavy AOSP-derived source is downloaded at build time rather
# than vendored here; our Debian build fixes live in debian/patches/ and are
# applied to the downloaded tree (and proposed upstream).

UPSTREAM_URL  ?= https://gitlab.com/android_translation_layer/art_standalone.git
UPSTREAM_REF  ?= e78bf68917bcaaf58fef3960cd88793b3b7f39cc
SRC           ?= art_standalone

PREFIX        ?= /usr
LIBDIR        ?= lib
DESTDIR       ?=
CROSS_ARGS    ?=

JAVA_HOME     ?= /usr/lib/jvm/java-21-openjdk-amd64
SHIMBIN       := $(CURDIR)/.shimbin
BUILD_PATH    := $(SHIMBIN):$(JAVA_HOME)/bin:$(PATH)

PATCHES := $(sort $(wildcard debian/patches/*.patch))

.PHONY: all download patch build install clean

all: build

# A `python` (-> python3) on PATH that the AOSP build/core scripts expect.
$(SHIMBIN)/python:
	mkdir -p $(SHIMBIN)
	ln -sf $(shell command -v python3) $(SHIMBIN)/python

$(SRC)/.downloaded:
	rm -rf $(SRC)
	git init -q $(SRC)
	cd $(SRC) && git remote add origin $(UPSTREAM_URL) \
		&& git fetch -q --depth 1 origin $(UPSTREAM_REF) \
		&& git checkout -q --detach FETCH_HEAD
	touch $@

download: $(SRC)/.downloaded

$(SRC)/.patched: $(SRC)/.downloaded $(PATCHES)
	@for p in $(PATCHES); do echo "applying $$p"; patch -d $(SRC) -p1 < "$(CURDIR)/$$p"; done
	touch $@

patch: $(SRC)/.patched

build: $(SRC)/.patched $(SHIMBIN)/python
	PATH="$(BUILD_PATH)" JAVA_HOME="$(JAVA_HOME)" \
		$(MAKE) -C $(SRC) ____PREFIX=$(PREFIX) ____LIBDIR=$(LIBDIR) $(CROSS_ARGS)
	PATH="$(BUILD_PATH)" JAVA_HOME="$(JAVA_HOME)" \
		$(MAKE) -C $(SRC) ____PREFIX=$(PREFIX) ____LIBDIR=$(LIBDIR) adbd $(CROSS_ARGS)

install: build
	PATH="$(BUILD_PATH)" JAVA_HOME="$(JAVA_HOME)" \
		$(MAKE) -C $(SRC) ____PREFIX=$(DESTDIR)$(PREFIX) ____INSTALL_ETC=$(DESTDIR)/etc ____LIBDIR=$(LIBDIR) install $(CROSS_ARGS)
	PATH="$(BUILD_PATH)" JAVA_HOME="$(JAVA_HOME)" \
		$(MAKE) -C $(SRC) ____PREFIX=$(DESTDIR)$(PREFIX) ____LIBDIR=$(LIBDIR) install_adbd $(CROSS_ARGS)

clean:
	rm -rf $(SRC) $(SHIMBIN)

distclean: clean
	dh_clean
