summaryrefslogtreecommitdiffstats
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile128
1 files changed, 128 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 00000000..ec22a0de
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,128 @@
+# -----------------------
+# Compilation options
+# -----------------------
+
+RELEASE := 1
+STATIC := 0
+
+NO_DBG_SYMBOLS := 0
+
+# Enable multi-threading.
+# Warning: Experimental feature!!
+# invidious is not stable when MT is enabled.
+MT := 0
+
+
+FLAGS ?=
+
+
+ifeq ($(RELEASE), 1)
+ FLAGS += --release
+endif
+
+ifeq ($(STATIC), 1)
+ FLAGS += --static
+endif
+
+ifeq ($(MT), 1)
+ FLAGS += -Dpreview_mt
+endif
+
+
+ifeq ($(NO_DBG_SYMBOLS), 1)
+ FLAGS += --no-debug
+else
+ FLAGS += --debug
+endif
+
+ifeq ($(API_ONLY), 1)
+ FLAGS += -Dapi_only
+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
+ rm -rf ~/.cache/{crystal,shards}
+
+
+# -----------------------
+# 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 " API_ONLY Build invidious without a GUI (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