]> git.xonotic.org Git - xonotic/xonotic.git/blobdiff - Makefile
Parallel build fixes and minor cleanups
[xonotic/xonotic.git] / Makefile
index 00f80df4fbb0a59c32b737beae7e170226b72300..d7d329d2f47fda02d153f7de68933b9448024e84 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -4,7 +4,7 @@ CLIENT = xonotic-local-sdl
 SERVER = xonotic-local-dedicated
 
 # CC and MAKEFLAGS are always set so ?= has no effect, therefore
-# use CFLAGS to set default optimisations and support user override
+# we use CFLAGS to set default optimisations which users may override
 CFLAGS ?= -pipe -march=native -mtune=native -flto=auto
 # user can override this with make -j
 MAKEFLAGS := -j$(shell nproc)
@@ -15,53 +15,52 @@ export CC += $(CFLAGS)
 export CC += -I$(PWD)/source/
 # d0_blind_id static libs location
 export CC += -L$(PWD)/$(D0SRC)/.libs/
-# Player IDs: DP_LINK_CRYPTO needs to be set (else it defaults to "dlopen"),
-# it should be set to "shared" but then LIB_CRYPTO gets overridden in DP makefile,
-# and we need to set LIB_CRYPTO such that libgmp gets linked
-export DP_LINK_CRYPTO=foo
-export CFLAGS_CRYPTO=-DLINK_TO_CRYPTO
-export LIB_CRYPTO=-ld0_blind_id -lgmp
+# Player IDs
+export DP_LINK_CRYPTO=static
 # AES
-export DP_LINK_CRYPTO_RIJNDAEL=shared
+export DP_LINK_CRYPTO_RIJNDAEL=static
 
 
 .PHONY: help
 help:
        @echo
-       @echo "  ===== Xonotic Makefile for stable and beta releases ====="
+       @printf "     \e[1;33m===== Xonotic Makefile for stable and beta releases =====\e[m\n"
        @echo
-       @echo "The DarkPlaces engine builds will be named $(CLIENT) and $(SERVER) and"
-       @echo "will be preferred by the xonotic-linux-sdl.sh and xonotic-linux-dedicated.sh scripts."
+       @printf "The DarkPlaces Engine builds will be named \e[1m$(CLIENT) \e[mand \e[1m$(SERVER)\e[m\n"
+       @printf "and will be preferred by \e[1mxonotic-linux-sdl.sh \e[mand \e[1mxonotic-linux-dedicated.sh \e[mscripts.\n"
        @echo
-       @echo "For more info, see https://gitlab.com/xonotic/xonotic/-/wikis/Compiling"
+       @printf "More info is available at \e[1;36mhttps://gitlab.com/xonotic/xonotic/-/wikis/Compiling\e[m\n"
        @echo
-       @echo "-O3 is already enabled for DarkPlaces. Do not add any math flags!"
+       @echo   "-O3 is already enabled for DarkPlaces Engine. Do not add any math flags!"
        @echo
-       @echo "MAKEFLAGS=$(MAKEFLAGS)"
-       @echo "CFLAGS= $(CFLAGS)"
+       @echo   "MAKEFLAGS=$(MAKEFLAGS)"
+       @echo   "CFLAGS= $(CFLAGS)"
        @echo
-       @echo "  make clean-sources         Delete build objects"
-       @echo "  make clean                 Delete engine builds and build objects"
+       @echo   "  make clean-sources         Delete build objects"
+       @echo   "  make clean                 Delete engine builds and build objects"
        @echo
-       @echo "  make update-stable         Update to the latest stable release via rsync"
-       @echo "  make update-beta           Update to the latest daily autobuild via rsync"
+       @echo   "  make update-stable         Update to the latest stable release via rsync"
+       @echo   "  make update-beta           Update to the latest beta autobuild via rsync"
        @echo
-       @echo "  make server                Compile $(SERVER)"
-       @echo "  make client                Compile $(CLIENT)"
-       @echo "  make both"
+       @printf "  make server                Compile \e[1m$(SERVER)\e[m\n"
+       @printf "  make client                Compile \e[1m$(CLIENT)\e[m\n"
+       @echo   "  make both"
        @echo
 
-GIT := $(shell [ -d .git ] && echo "To compile from git, please read https://gitlab.com/xonotic/xonotic/-/wikis/Repository_Access ")
+GIT := $(shell [ -d .git ] && printf "\e[1;31mThis Makefile only supports stable releases and autobuilds, whereas you are using a git repository.  To compile from git, please read https://gitlab.com/xonotic/xonotic/-/wikis/Repository_Access\e[m")
 ifdef GIT
   $(error $(GIT))
 endif
 
-.EXTRA_PREREQS := $(findstring update-stable,$(MAKECMDGOALS)) $(findstring update-beta,$(MAKECMDGOALS))
+
+# If requested, these targets must always run first:
+.EXTRA_PREREQS := $(filter clean update-stable update-beta, $(MAKECMDGOALS))
 
 .PHONY: clean-sources
 clean-sources:
        $(MAKE) -C $(DPSRC) clean
-       $(MAKE) -C $(D0SRC) clean
+       ( $(MAKE) -C $(D0SRC) clean || true ) # autotools may not have created the Makefile yet
+clean-sources: .EXTRA_PREREQS =  # prevents circular dependency
 
 .PHONY: clean
 clean: clean-sources
@@ -75,22 +74,28 @@ update-stable:
 update-beta:
        misc/tools/rsync-updater/update-to-autobuild.sh
 
-$(D0SRC)/Makefile:
-       ( cd $(D0SRC) && ./autogen.sh && ./configure --enable-static --disable-shared )
 
-.PHONY: d0_blind_id
-d0_blind_id: $(D0SRC)/Makefile
+$(D0SRC)/.libs/libd0_blind_id.a $(D0SRC)/.libs/libd0_rijndael.a:
+       ( cd $(D0SRC) && ./autogen.sh && ./configure --enable-static --disable-shared )
+       $(MAKE) -C $(D0SRC) clean  # ensures missing .a files are created FIXME WORKAROUND
        $(MAKE) -C $(D0SRC)
 
-.PHONY: server
-server: d0_blind_id
+$(DPSRC)/darkplaces-dedicated: $(D0SRC)/.libs/libd0_blind_id.a
        $(MAKE) -C $(DPSRC) sv-release
-       cp -v $(DPSRC)/darkplaces-dedicated $(SERVER)
+$(SERVER): $(DPSRC)/darkplaces-dedicated
+       cp $(DPSRC)/darkplaces-dedicated $(SERVER)
 
-.PHONY: client
-client: d0_blind_id
+$(DPSRC)/darkplaces-sdl: $(D0SRC)/.libs/libd0_blind_id.a
        $(MAKE) -C $(DPSRC) sdl-release
-       cp -v $(DPSRC)/darkplaces-sdl $(CLIENT)
+$(CLIENT): $(DPSRC)/darkplaces-sdl
+       cp $(DPSRC)/darkplaces-sdl $(CLIENT)
+
+
+.PHONY: server
+server: $(SERVER)
+
+.PHONY: client
+client: $(CLIENT)
 
 .PHONY: both
 both: client server