# -----------------------
#  Compilation options
# -----------------------

RELEASE  := 1
STATIC   := 0

DISABLE_QUIC := 0
NO_DBG_SYMBOLS := 0


FLAGS ?=


ifeq ($(RELEASE), 1)
  FLAGS += --release
endif

ifeq ($(STATIC), 1)
  FLAGS += --static
endif


ifeq ($(NO_DBG_SYMBOLS), 1)
  FLAGS += --no-debug
else
  FLAGS += --debug
endif

ifeq ($(DISABLE_QUIC), 1)
  FLAGS += -Ddisable_quic
endif


# -----------------------
#  Main
# -----------------------

all: invidious

get-libs:
	shards install --production

# TODO: add support for ARM64 via cross-compilation
invidious: get-libs
	crystal build src/invidious.cr $(FLAGS) --progress --stats --error-trace


run: invidious
	./invidious


# -----------------------
#  Development
# -----------------------


format:
	crystal tool format

test:
	crystal spec

verify:
	crystal build src/invidious.cr -Dskip_videojs_download \
	  --no-codegen --progress --stats --error-trace


# -----------------------
#  (Un)Install
# -----------------------

# TODO


# -----------------------
#  Cleaning
# -----------------------

clean:
	rm invidious

distclean: clean
	rm -rf libs


# -----------------------
#  Help page
# -----------------------

help:
	echo "Targets available in this Makefile:"
	echo ""
	echo "get-libs         Fetch Crystal libraries"
	echo "invidious        Build Invidious"
	echo "run              Launch Invidious"
	echo ""
	echo "format           Run the Crystal formatter"
	echo "test             Run tests"
	echo "verify           Just make sure that the code compiles, but without"
	echo "                 generating any binaries. Useful to search for errors"
	echo ""
	echo "clean            Remove build artifacts"
	echo "distclean        Remove build artifacts and libraries"
	echo ""
	echo ""
	echo "Build options available for this Makefile:"
	echo ""
	echo "RELEASE          Make a release build      (Default: 1)"
	echo "STATIC           Link libraries statically (Default: 0)"
	echo ""
	echo "DISABLE_QUIC     Disable support for QUIC  (Default: 0)"
	echo "NO_DBG_SYMBOLS   Strip debug symbols       (Default: 0)"



# No targets generates an output named after themselves
.PHONY: all get-libs build amd64 run
.PHONY: format test verify clean distclean help