# Environment variables passed via elixir_make
# ROOT_DIR
# BUILD_ARCHIVE
# BUILD_ARCHIVE_DIR
# BUILD_INTERNAL_FLAGS

# System vars
TEMP=$(HOME)/.cache

# Public configuration
!IFNDEF BUILD_MODE
BUILD_MODE=opt # can also be dbg
!ENDIF

!IFNDEF BUILD_CACHE
BUILD_CACHE=$(TEMP)/xla_extension
!ENDIF

!IFNDEF TENSORFLOW_GIT_REPO
TENSORFLOW_GIT_REPO=https://github.com/tensorflow/tensorflow.git
!ENDIF

!IFNDEF TENSORFLOW_GIT_REV
# Tensorflow 2.8.0
TENSORFLOW_GIT_REV=3f878cff5b698b82eea85db2b60d65a2e320850e
!ENDIF

# Private configuration
BAZEL_FLAGS=--define "framework_shared_object=false" -c $(BUILD_MODE)

TENSORFLOW_NS=tf-$(TENSORFLOW_GIT_REV)
TENSORFLOW_DIR=$(BUILD_CACHE)/$(TENSORFLOW_NS)
TENSORFLOW_XLA_EXTENSION_NS=tensorflow/compiler/xla/extension
TENSORFLOW_XLA_EXTENSION_DIR=$(TENSORFLOW_DIR)/$(TENSORFLOW_XLA_EXTENSION_NS)
TENSORFLOW_XLA_BUILD_ARCHIVE=$(TENSORFLOW_DIR)/bazel-bin/$(TENSORFLOW_XLA_EXTENSION_NS)/xla_extension.tar.gz

$(BUILD_ARCHIVE): $(TENSORFLOW_DIR) extension/BUILD
	rm -rf "$(TENSORFLOW_XLA_EXTENSION_DIR)" && \
		ln -s "$(ROOT_DIR)/extension" "$(TENSORFLOW_XLA_EXTENSION_DIR)" && \
		cd "$(TENSORFLOW_DIR)" && \
		bazel build $(BAZEL_FLAGS) $(BUILD_FLAGS) $(BUILD_INTERNAL_FLAGS) //$(TENSORFLOW_XLA_EXTENSION_NS):xla_extension && \
		mkdir -f "$(BUILD_ARCHIVE_DIR)" && \
		cp -f "$(TENSORFLOW_XLA_BUILD_ARCHIVE)" "$(BUILD_ARCHIVE)"

# Clones tensorflow
$(TENSORFLOW_DIR):
	mkdir "$(TENSORFLOW_DIR)" && \
		cd "$(TENSORFLOW_DIR)" && \
		git init && \
		git remote add origin $(TENSORFLOW_GIT_REPO) && \
		git fetch --depth 1 origin $(TENSORFLOW_GIT_REV) && \
		git checkout FETCH_HEAD

# Print Tensorflow Dir
PTD:
	@ echo "$(TENSORFLOW_DIR)"

clean:
	cd "$(TENSORFLOW_DIR)" && bazel clean --expunge
	rm -rf "$(TENSORFLOW_XLA_EXTENSION_DIR)"
	rm -rf "$(TENSORFLOW_DIR)"
	rm -rf "$(TARGET_DIR)"
