# # Nuclide Makefile # # Apr 2024 by Marco Cawthorne # # set `GAME` when issuing make. E.g. `make GAME=wastes` GAME=base # affects the output binary name (e.g. NAME=TheWastes > TheWastes_x64.exe) for dev builds NAME=`./Tools/get-name.sh $(GAME)` GAME_ARCH=x64 GAME_EXT= GAME_BINARY=$(NAME)_$(GAME_ARCH)$(GAME_EXT) GAMEDS_BINARY=$(NAME)DS_$(GAME_ARCH)$(GAME_EXT) # FTE specific builds ENGINE_ARCH=amd64 ENGINE_CLBUILD=m-dbg ENGINE_SVBUILD=sv-dbg ENGINE_BINARY=./ThirdParty/fteqw/engine/debug/$(GAME) ENGINE_DEDICATED=./ThirdParty/fteqw/engine/debug/$(GAME)-sv ENGINE_BINARY_LIN32=./ThirdParty/fteqw/engine/release/$(GAME)32 ENGINE_BINARY_LIN64=./ThirdParty/fteqw/engine/release/$(GAME)64 ENGINE_BINARY_WIN32=./ThirdParty/fteqw/engine/release/$(GAME).exe ENGINE_BINARY_WIN64=./ThirdParty/fteqw/engine/release/$(GAME)64.exe ENGINE_DS_LIN32=./ThirdParty/fteqw/engine/release/$(GAME)-sv32 ENGINE_DS_LIN64=./ThirdParty/fteqw/engine/release/$(GAME)-sv64 ENGINE_DS_WIN32=./ThirdParty/fteqw/engine/release/$(GAME)sv.exe ENGINE_DS_WIN64=./ThirdParty/fteqw/engine/release/$(GAME)sv64.exe NUCLIDE_DIR=`pwd` QCC_DIR=$(NUCLIDE_DIR) BUILD_DIR=$(NUCLIDE_DIR)/build EDITOR=radiant NATIVE_PLUGINS=`head -n 1 ../../../$(GAME)/PLUGINS` help: @printf "#####################\nNuclide Makefile Help\n#####################\n\nmain targets:\n" @printf "\tgame [GAME=base]\n" @printf "\t\talternatively: client, server, menu [GAME=base]\n" @printf "\tedef [GAME=base]\n" @printf "\tengine [GAME=base] [NAME=MyGame]\n" @printf "\tdedicated [GAME=base]\n" @printf "\tplugins [GAME=base] [NATIVE_PLUGINS=\"ode ffmpeg\"]\n" @printf "\ttools\n" @printf "\teditor\n" @printf "\tdocs\n" @printf "\tdist [GAME=base]\n" @printf "\tclean[-game,engine,tools] [GAME=base]\n" @printf "\tupdate [GAME=base]\n" @printf "\nthird-party targets:\n" @printf "\tfteqw, fteqw-sv, fteqw-plugins\n" @printf "\tradiant, netradiant-custom\n" all: game engine dedicated plugins game: fteqcc cd "$(GAME)/src/" && $(MAKE) QCC=$(QCC_DIR)/../../fteqcc client: fteqcc cd "$(GAME)/src/client/" && $(MAKE) QCC=$(QCC_DIR)/../../../fteqcc server: fteqcc cd "$(GAME)/src/server/" && $(MAKE) QCC=$(QCC_DIR)/../../../fteqcc menu: fteqcc cd "$(GAME)/src/menu/" && $(MAKE) QCC=$(QCC_DIR)/../../../fteqcc edef: Tools/make_mapdef.sh $(GAME) #-mkdir -p "ThirdParty/gtkradiant/install/gamepacks/$(GAME).game/$(GAME)/" #-cp "$(GAME)/radiant.game" "ThirdParty/gtkradiant/install/games/$(GAME).game" #-cp "$(GAME)/entities.def" "ThirdParty/gtkradiant/install/gamepacks/$(GAME).game/$(GAME)/entities.def" #-cp "$(GAME)/radiant.xml" "ThirdParty/gtkradiant/install/gamepacks/$(GAME).game/default_build_menu.xml" #sed -i 's/enginepath_linux=\"\"/enginepath_linux=\"$(NUCLIDE_DIR)\"/g' "ThirdParty/gtkradiant/install/games/$(GAME).game" #-mkdir -p "ThirdParty/netradiant-custom/install/gamepacks/$(GAME).game/$(GAME)/" #-cp "$(GAME)/radiant.game" "ThirdParty/netradiant-custom/install/gamepacks/games/$(GAME).game" #-cp "$(GAME)/entities.def" "ThirdParty/netradiant-custom/install/gamepacks/$(GAME).game/$(GAME)/entities.def" #-cp "$(GAME)/radiant.xml" "ThirdParty/netradiant-custom/install/gamepacks/$(GAME).game/default_build_menu.xml" #sed -i 's/enginepath_linux=\"\"/enginepath_linux=\"$(NUCLIDE_DIR)\"/g' "ThirdParty/netradiant-custom/install/gamepacks/games/$(GAME).game" docs: doxygen #printf "# Entity Guide\n\n# Overview\n\n" > ./Documentation/EntityGuide.md #cd ./src/gs-entbase && grep -r "QUAKED" | awk '{ print $2 }' | sort | uniq | awk '{ printf "[%s](@ref %s)\n\n", $1, $1; }' >> ../../Documentation/EntityGuide.md # devel engine: $(ENGINE_BINARY) dedicated: $(ENGINE_DEDICATED) plugins: fteqw-plugins editor: $(EDITOR) # release engine-win32: $(ENGINE_BINARY_WIN32) engine-win64: $(ENGINE_BINARY_WIN64) engine-lin32: $(ENGINE_BINARY_LIN32) engine-lin64: $(ENGINE_BINARY_LIN64) dedicated-win32: $(ENGINE_DS_WIN32) dedicated-win64: $(ENGINE_DS_WIN64) dedicated-lin32: $(ENGINE_DS_LIN32) dedicated-lin64: $(ENGINE_DS_LIN64) # misc tools: fteqcc vmap vvmtool iqmtool imgtool generatebuiltinsl makevulkanblob vmap: cd Tools/vmap && $(MAKE) install -m 0777 Tools/vmap/vmap vmap vvmtool: cd Tools/vvmtool && $(MAKE) install -m 0777 Tools/vvmtool/vvmtool vvmtool worldspawn: cd Tools/worldspawn && $(MAKE) dist: dist-pak dist-engine dist-engine: engine-lin32 engine-lin64 engine-win32 engine-win64 dedicated-lin32 dedicated-lin64 dedicated-win32 dedicated-win64 dist-pak: mkdir -p "$(BUILD_DIR)/$(NAME)-content/$(GAME)" ./Tools/make_dist.sh "$(GAME)" $(BUILD_DIR)/$(NAME)-content/$(GAME) > $(BUILD_DIR)/$(NAME)-content.log -$(GAME)/post-dist.sh "$(GAME)" "$(BUILD_DIR)/$(NAME)-content" # generate trinity .shader files from .mat within the game directory trshaders: Tools/make_trshaders.sh $(GAME) # recycling center clean: clean-game clean-engine clean-tools clean-dist clean-dist: -rm -r $(BUILD_DIR)/$(NAME)-content/ -rm -r $(BUILD_DIR)/$(NAME)-win/ -rm -r $(BUILD_DIR)/$(NAME)-linux/ clean-game: -rm conhistory.txt crash.log fullchain.pem \ privkey.pem installed.lst $(GAME)/csprogs.dat \ $(GAME)/menu.dat $(GAME)/progs.dat $(GAME)/csprogs.lno \ $(GAME)/menu.lno $(GAME)/progs.lno $(GAME)/csqccore.txt \ $(GAME)/menucore.txt $(GAME)/ssqccore.txt fteplug_*.so clean-engine: cd ThirdParty/fteqw/engine && $(MAKE) clean -rm $(NAME)_x64$(GAME_EXT) $(NAME)_x86$(GAME_EXT) $(NAME)DS_x64$(GAME_EXT) $(NAME)DS_x86$(GAME_EXT) fteqw fteqw-sv clean-tools: cd Tools/vmap && $(MAKE) clean cd Tools/vvmtool && $(MAKE) clean cd ThirdParty/fteqw/engine && $(MAKE) clean -rm vmap vvmtool iqmtool imgtool fteqcc generatebuiltinsl makevulkanblob update: if [ -f ./.git/config ];then git pull;fi if [ -f $(GAME)/.git/config ];then cd $(GAME) && git pull;fi if [ ! -d ThirdParty/fteqw ];then git clone https://www.github.com/fte-team/fteqw ThirdParty/fteqw;else cd ./ThirdParty/fteqw && git pull;fi if [ ! -d Tools/vvmtool ];then git clone https://github.com/VeraVisions/vvmtool Tools/vvmtool;else cd ./Tools/vvmtool && git pull;fi if [ ! -d Tools/vmap ];then git clone https://github.com/VeraVisions/vmap Tools/vmap;else cd ./Tools/vmap && git pull;fi if [ ! -d Tools/worldspawn ];then git clone https://github.com/VeraVisions/worldspawn Tools/worldspawn;else cd ./Tools/worldspawn && git pull;fi if [ ! -d ThirdParty/gtkradiant ];then git clone https://github.com/TTimo/gtkradiant ThirdParty/gtkradiant;else cd ./ThirdParty/gtkradiant && git pull;fi if [ ! -d ThirdParty/netradiant-custom ];then git clone https://github.com/Garux/netradiant-custom ThirdParty/netradiant-custom;else cd ./ThirdParty/netradiant-custom && git pull;fi # fte specific corner fteqw-plugins: cd ThirdParty/fteqw/engine && $(MAKE) plugins-dbg NATIVE_PLUGINS="$(NATIVE_PLUGINS)" FTE_CONFIG=$(GAME) find ThirdParty/fteqw/engine/debug/ -name "fteplug_*.so" -exec mv '{}' ./ \; fteqw-plugins-win32: cd ThirdParty/fteqw/engine && $(MAKE) plugins-dbg NATIVE_PLUGINS="$(NATIVE_PLUGINS)" FTE_CONFIG=$(GAME) FTE_TARGET=win32 find ThirdParty/fteqw/engine/debug/ -name "fteplug_*.dll" -exec mv '{}' ./ \; fteqw-plugins-win64: cd ThirdParty/fteqw/engine && $(MAKE) plugins-dbg NATIVE_PLUGINS="$(NATIVE_PLUGINS)" FTE_CONFIG=$(GAME) FTE_TARGET=win64 find ThirdParty/fteqw/engine/debug/ -name "fteplug_*.dll" -exec mv '{}' ./ \; fteqw-plugins-lin32: cd ThirdParty/fteqw/engine && $(MAKE) plugins-dbg NATIVE_PLUGINS="$(NATIVE_PLUGINS)" FTE_CONFIG=$(GAME) FTE_TARGET=linux32 find ThirdParty/fteqw/engine/debug/ -name "fteplug_*.dll" -exec mv '{}' ./ \; fteqw-plugins-lin64: cd ThirdParty/fteqw/engine && $(MAKE) plugins-dbg NATIVE_PLUGINS="$(NATIVE_PLUGINS)" FTE_CONFIG=$(GAME) FTE_TARGET=linux64 find ThirdParty/fteqw/engine/debug/ -name "fteplug_*.dll" -exec mv '{}' ./ \; $(ENGINE_BINARY): cd ThirdParty/fteqw/engine && $(MAKE) makelibs ARCH=x86_64 cp $(GAME)/engine.h ./ThirdParty/fteqw/engine/common/config_$(GAME).h cd ThirdParty/fteqw/engine && $(MAKE) $(ENGINE_CLBUILD) FTE_CONFIG=$(GAME) ARCH=x86_64 install -m 0777 $(ENGINE_BINARY) ./$(GAME_BINARY) $(ENGINE_BINARY_WIN32): cd ThirdParty/fteqw/engine && $(MAKE) makelibs FTE_TARGET=win32 cp $(GAME)/engine.h ./ThirdParty/fteqw/engine/common/config_$(GAME).h cd ThirdParty/fteqw/engine && $(MAKE) m-rel FTE_TARGET=win32 FTE_CONFIG=$(GAME) mkdir -p "$(BUILD_DIR)/$(NAME)-win" install -m 0777 $(ENGINE_BINARY_WIN32) $(BUILD_DIR)/$(NAME)-win/$(NAME)_x86.exe cd ThirdParty/fteqw/engine && $(MAKE) plugins-rel NATIVE_PLUGINS="$(NATIVE_PLUGINS)" FTE_CONFIG=$(GAME) FTE_TARGET=win32 find ThirdParty/fteqw/engine/release/ -name "fteplug_*.dll" -exec mv '{}' $(BUILD_DIR)/$(NAME)-win/ \; $(ENGINE_BINARY_WIN64): cd ThirdParty/fteqw/engine && $(MAKE) makelibs FTE_TARGET=win64 cp $(GAME)/engine.h ./ThirdParty/fteqw/engine/common/config_$(GAME).h cd ThirdParty/fteqw/engine && $(MAKE) m-rel FTE_TARGET=win64 FTE_CONFIG=$(GAME) mkdir -p "$(BUILD_DIR)/$(NAME)-win" install -m 0777 $(ENGINE_BINARY_WIN64) $(BUILD_DIR)/$(NAME)-win/$(NAME)_x64.exe cd ThirdParty/fteqw/engine && $(MAKE) plugins-rel NATIVE_PLUGINS="$(NATIVE_PLUGINS)" FTE_CONFIG=$(GAME) FTE_TARGET=win64 find ThirdParty/fteqw/engine/release/ -name "fteplug_*.dll" -exec mv '{}' $(BUILD_DIR)/$(NAME)-win/ \; $(ENGINE_BINARY_LIN32): cd ThirdParty/fteqw/engine && $(MAKE) makelibs ARCH=i686 FTE_TARGET=linux32 cp $(GAME)/engine.h ./ThirdParty/fteqw/engine/common/config_$(GAME).h cd ThirdParty/fteqw/engine && $(MAKE) m-rel ARCH=i686 FTE_TARGET=linux32 FTE_CONFIG=$(GAME) mkdir -p "$(BUILD_DIR)/$(NAME)-linux" cd ThirdParty/fteqw/engine && $(MAKE) plugins-rel NATIVE_PLUGINS="$(NATIVE_PLUGINS)" FTE_CONFIG=$(GAME) FTE_TARGET=linux32 find ThirdParty/fteqw/engine/release/ -name "fteplug_*.so" -exec mv '{}' $(BUILD_DIR)/$(NAME)-linux/ \; install -m 0777 $(ENGINE_BINARY_LIN32) $(BUILD_DIR)/$(NAME)-linux/$(NAME)_x86 $(ENGINE_BINARY_LIN64): cd ThirdParty/fteqw/engine && $(MAKE) makelibs ARCH=x86_64 FTE_TARGET=linux64 cp $(GAME)/engine.h ./ThirdParty/fteqw/engine/common/config_$(GAME).h cd ThirdParty/fteqw/engine && $(MAKE) m-rel ARCH=x86_64 FTE_TARGET=linux64 FTE_CONFIG=$(GAME) mkdir -p "$(BUILD_DIR)/$(NAME)-linux" install -m 0777 $(ENGINE_BINARY_LIN64) $(BUILD_DIR)/$(NAME)-linux/$(NAME)_x64 cd ThirdParty/fteqw/engine && $(MAKE) plugins-rel NATIVE_PLUGINS="$(NATIVE_PLUGINS)" FTE_CONFIG=$(GAME) FTE_TARGET=linux64 find ThirdParty/fteqw/engine/release/ -name "fteplug_*.so" -exec mv '{}' $(BUILD_DIR)/$(NAME)-linux/ \; $(ENGINE_DEDICATED): cd ThirdParty/fteqw/engine && $(MAKE) makelibs ARCH=x86_64 cp $(GAME)/engine.h ./ThirdParty/fteqw/engine/common/config_$(GAME).h cd ThirdParty/fteqw/engine && $(MAKE) sv-dbg FTE_CONFIG=$(GAME) ARCH=x86_64 install -m 0777 $(ENGINE_DEDICATED) ./$(GAMEDS_BINARY) $(ENGINE_DS_LIN32): cd ThirdParty/fteqw/engine && $(MAKE) makelibs FTE_TARGET=win32 cp $(GAME)/engine.h ./ThirdParty/fteqw/engine/common/config_$(GAME).h cd ThirdParty/fteqw/engine && $(MAKE) sv-rel FTE_TARGET=win32 FTE_CONFIG=$(GAME) mkdir -p "$(BUILD_DIR)/$(NAME)-win" install -m 0777 $(ENGINE_DS_WIN32) $(BUILD_DIR)/$(NAME)-win/$(NAME)DS_x86.exe $(ENGINE_DS_LIN64): cd ThirdParty/fteqw/engine && $(MAKE) makelibs FTE_TARGET=win64 cp $(GAME)/engine.h ./ThirdParty/fteqw/engine/common/config_$(GAME).h cd ThirdParty/fteqw/engine && $(MAKE) sv-rel FTE_TARGET=win64 FTE_CONFIG=$(GAME) mkdir -p "$(BUILD_DIR)/$(NAME)-win" install -m 0777 $(ENGINE_DS_WIN64) $(BUILD_DIR)/$(NAME)-win/$(NAME)DS_x64.exe $(ENGINE_DS_WIN32): cd ThirdParty/fteqw/engine && $(MAKE) makelibs ARCH=i686 FTE_TARGET=linux32 cp $(GAME)/engine.h ./ThirdParty/fteqw/engine/common/config_$(GAME).h cd ThirdParty/fteqw/engine && $(MAKE) sv-rel ARCH=i686 FTE_TARGET=linux32 FTE_CONFIG=$(GAME) mkdir -p "$(BUILD_DIR)/$(NAME)-linux" install -m 0777 $(ENGINE_DS_LIN32) $(BUILD_DIR)/$(NAME)-linux/$(NAME)DS_x86 $(ENGINE_DS_WIN64): cd ThirdParty/fteqw/engine && $(MAKE) makelibs ARCH=x86_64 FTE_TARGET=linux64 cp $(GAME)/engine.h ./ThirdParty/fteqw/engine/common/config_$(GAME).h cd ThirdParty/fteqw/engine && $(MAKE) sv-rel ARCH=x86_64 FTE_TARGET=linux64 FTE_CONFIG=$(GAME) mkdir -p "$(BUILD_DIR)/$(NAME)-linux" install -m 0777 $(ENGINE_DS_LIN64) $(BUILD_DIR)/$(NAME)-linux/$(NAME)DS_x64 iqmtool: cd ThirdParty/fteqw/engine && $(MAKE) iqmtool install -m 0777 ./ThirdParty/fteqw/engine/release/iqmtool ./ imgtool: cd ThirdParty/fteqw/engine && $(MAKE) imgtool install -m 0777 ./ThirdParty/fteqw/engine/release/imgtool ./ fteqcc: cd ThirdParty/fteqw/engine && $(MAKE) qcc-rel install -m 0777 ./ThirdParty/fteqw/engine/release/fteqcc ./ generatebuiltinsl: cd ThirdParty/fteqw/engine/shaders && $(MAKE) generatebuiltinsl install -m 0777 ./ThirdParty/fteqw/engine/shaders/generatebuiltinsl ./ makevulkanblob: cd ThirdParty/fteqw/engine/shaders && $(MAKE) makevulkanblob install -m 0777 ./ThirdParty/fteqw/engine/shaders/makevulkanblob ./ # stock FTE engine fteqw: cd ThirdParty/fteqw/engine && $(MAKE) makelibs ARCH=x86_64 cd ThirdParty/fteqw/engine && $(MAKE) $(ENGINE_CLBUILD) ARCH=x86_64 install -m 0777 ./ThirdParty/fteqw/engine/debug/fteqw ./ fteqwglqw64.exe: cd ThirdParty/fteqw/engine && $(MAKE) makelibs FTE_TARGET=win64 cd ThirdParty/fteqw/engine && $(MAKE) m-rel FTE_TARGET=win64 mkdir -p "$(BUILD_DIR)/$(NAME)-win" install -m 0777 $(ENGINE_BINARY_WIN64) $(BUILD_DIR)/fteqwglqw64.exe fteqw-sv: cd ThirdParty/fteqw/engine && $(MAKE) makelibs ARCH=stock-x86_64 cp $(GAME)/engine.h ./ThirdParty/fteqw/engine/common/config_$(GAME).h cd ThirdParty/fteqw/engine && $(MAKE) sv-dbg FTE_CONFIG=fteqw ARCH=stock-x86_64 install -m 0777 ./ThirdParty/fteqw/engine/debug/fteqw ./fteqw # third-party level editing software radiant: if [ ! -d ThirdParty/gtkradiant ];then git clone https://github.com/TTimo/gtkradiant ThirdParty/gtkradiant;fi cd ThirdParty/gtkradiant && scons Tools/make_launcher.sh ./ThirdParty/gtkradiant/install/ ./radiant.bin radiant netradiant-custom: if [ ! -d ThirdParty/netradiant-custom ];then git clone https://github.com/Garux/netradiant-custom ThirdParty/netradiant-custom;fi cd ThirdParty/netradiant-custom && $(MAKE) Tools/make_launcher.sh ./ThirdParty/netradiant-custom/install/ ./radiant.x86_64 netradiant-custom