BUILD_ROOT = ./rust/target
LOCAL_TARGET_DIR = $(BUILD_ROOT)/cargo
LIBDIR = $(BUILD_ROOT)/r-package/release
STATLIB = $(LIBDIR)/libdelta_sharing_native.a

PKG_CPPFLAGS = -DSTRICT_R_HEADERS -DR_NO_REMAP
PKG_LIBS = -L$(LIBDIR) -ldelta_sharing_native

all: $(SHLIB) rust-clean

$(SHLIB): $(STATLIB)

.PHONY: $(STATLIB)

$(STATLIB):
	@set -e; \
		if test -n "$$HOME" && test -d "$$HOME/.cargo/bin"; then \
			PATH="$$HOME/.cargo/bin:$$PATH"; \
			export PATH; \
		fi; \
		deployment_target="$(MACOSX_DEPLOYMENT_TARGET)"; \
		if test "`uname -s`" = Darwin; then \
			if test -z "$$deployment_target"; then \
				deployment_target="`rustc --print=deployment-target 2>/dev/null | sed 's/^[^=]*=//'`"; \
			fi; \
			test -n "$$deployment_target"; \
			MACOSX_DEPLOYMENT_TARGET="$$deployment_target"; \
			export MACOSX_DEPLOYMENT_TARGET; \
		fi; \
		cargo_flags="--locked"; \
		if test -f rust/vendor.tar.xz || test -f rust/vendor-config.toml; then \
			test -f rust/vendor.tar.xz; \
			test -f rust/vendor-config.toml; \
			rm -Rf vendor .cargo; \
			tar xf rust/vendor.tar.xz; \
			mkdir -p .cargo; \
			cp rust/vendor-config.toml .cargo/config.toml; \
			export CARGO_HOME="$(CURDIR)/.cargo"; \
			cargo_flags="--frozen"; \
		fi; \
		target_dir="$${CARGO_TARGET_DIR:-$(LOCAL_TARGET_DIR)}"; \
		cargo build $$cargo_flags -j 2 --release \
			--manifest-path=rust/Cargo.toml \
			--target-dir="$$target_dir"; \
		built_library="$$target_dir/release/libdelta_sharing_native.a"; \
		if test -n "$$CARGO_BUILD_TARGET"; then \
			built_library="$$target_dir/$$CARGO_BUILD_TARGET/release/libdelta_sharing_native.a"; \
		fi; \
		mkdir -p "$(LIBDIR)"; \
		cp "$$built_library" "$(STATLIB)"

.PHONY: rust-clean

rust-clean: $(SHLIB)
	rm -Rf $(BUILD_ROOT) .cargo vendor

clean:
	rm -Rf $(SHLIB) $(OBJECTS) $(BUILD_ROOT) .cargo vendor
