diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..c14dfc6ed --- /dev/null +++ b/Makefile @@ -0,0 +1,118 @@ +# ----------------------- +# Compilation options +# ----------------------- + +RELEASE := 1 +STATIC := 0 + +DISABLE_LSQUIC := 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_LSQUIC), 1) + FLAGS += -Ddisable_lsquic +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 --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 librariess tatically (Default: 1)" + echo "" + echo "DISABLE_LSQUIC Don't use lsquic (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