nuclide/Makefile

334 lines
14 KiB
Makefile

#
# Nuclide Makefile
#
# Apr 2024 by Marco Cawthorne <marco@vera-visions.com>
# Last updated: 2024/10/12
#
# 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)
ENGINE_URL=https://www.github.com/fte-team/fteqw
# 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
-cp src/cvar_defaults.cfg "$(GAME)/zpak001.pk3dir/default_cvar.cfg"
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
vacuum:
-rm ./$(GAME)/csqccore.txt
-rm ./$(GAME)/ssqccore.txt
-rm ./$(GAME)/menucore.txt
-rm ./$(GAME)/condump.txt
-rm ./$(GAME)/fte.cfg
-rm ./$(GAME)/config.cfg
-rm ./$(GAME)/*.lno
-rm -rfv ./$(GAME)/csprogsvers
-rm -rfv ./$(GAME)/data
-rm -rfv ./$(GAME)/saves
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)
clean-fteqw:
cd ThirdParty/fteqw/engine && $(MAKE) clean
-rm 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
debug:
gdb --args ./$(GAME_BINARY) +set sv_cheats 1 +set sv_csqcdebug 1 +set g_logLevel 3 +set g_logTimestamps 1
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 $(ENGINE_URL) 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