mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-11 12:41:30 +00:00
* Cleanup & Reorganize Makefile for Dev Containers * Fix Makefile & misc fixes --------- Co-authored-by: m0th <43860202+m0th@users.noreply.github.com>
228 lines
8.7 KiB
Makefile
228 lines
8.7 KiB
Makefile
# Build binaries: make cmake, make build
|
|
# One time initial setup (or to reset db): make prep, make inject-mariadb, make maps
|
|
# Update custom db edits: make inject-custom
|
|
# Start up server: make shared, make login, make world, make zone
|
|
# in game, stop combat spam #logs set gmsay 79 0
|
|
# in game, stop loot spam #logs set gmsay 69 0
|
|
NAME := eqemu-server
|
|
|
|
.PHONY: prep
|
|
prep: is-vscode
|
|
@echo "Preparing build/bin for usage..."
|
|
|
|
@echo "Prepping folders..."
|
|
@mkdir -p .devcontainer/override
|
|
@mkdir -p .devcontainer/repo
|
|
@mkdir -p .devcontainer/cache
|
|
@mkdir -p build/bin/logs
|
|
@mkdir -p build/bin/shared
|
|
@mkdir -p build/bin/assets
|
|
|
|
@echo "Applying overrides..."
|
|
@if [ ! -f .devcontainer/override/eqemu_config.json ]; then cp .devcontainer/base/eqemu_config.json .devcontainer/override/eqemu_config.json; fi
|
|
@if [ -f build/bin/eqemu_config.json ]; then unlink build/bin/eqemu_config.json; fi
|
|
cd build/bin && ln -s ../../.devcontainer/override/eqemu_config.json eqemu_config.json
|
|
@if [ ! -f .devcontainer/override/login.json ]; then cp .devcontainer/base/login.json .devcontainer/override/login.json; fi
|
|
@if [ -f build/bin/login.json ]; then unlink build/bin/login.json; fi
|
|
cd build/bin && ln -s ../../.devcontainer/override/login.json login.json
|
|
|
|
@echo "Cloning repositories..."
|
|
cd .devcontainer/repo && if [ ! -d "quests" ]; then cd ../../.devcontainer/repo/ && git clone https://github.com/ProjectEQ/projecteqquests.git quests; fi
|
|
cd .devcontainer/repo && if [ ! -d "eqemu-definitions" ]; then cd ../../.devcontainer/repo/ && git clone https://github.com/xackery/eqemu-definitions.git eqemu-definitions; fi
|
|
cd .devcontainer/repo && if [ ! -d "maps" ]; then cd ../../ && make maps; fi
|
|
@if [ -d build/bin/quests ]; then unlink build/bin/quests; fi
|
|
cd build/bin && ln -s ../../.devcontainer/repo/quests quests
|
|
@if [ -d build/bin/maps ]; then unlink build/bin/maps; fi
|
|
cd build/bin && ln -s ../../.devcontainer/repo/maps maps
|
|
@if [ -d build/bin/eqemu-definitions ]; then unlink build/bin/eqemu-definitions; fi
|
|
cd build/bin && ln -s ../../.devcontainer/repo/eqemu-definitions eqemu-definitions
|
|
@mkdir -p build/bin/quests/mods
|
|
|
|
@echo "Applying base links..."
|
|
cp -R -u -p utils/patches .devcontainer/base/
|
|
@if [ -d build/bin/assets/patches ]; then unlink build/bin/assets/patches; fi
|
|
cd build/bin/assets && ln -s ../../../.devcontainer/base/patches patches
|
|
@if [ -d build/bin/lua_modules ]; then unlink build/bin/lua_modules; fi
|
|
cd build/bin && ln -s ../../.devcontainer/repo/quests/lua_modules lua_modules
|
|
@if [ -d build/bin/mods ]; then unlink build/bin/mods; fi
|
|
cd build/bin && ln -s ../../.devcontainer/repo/quests/mods mods
|
|
@if [ -d build/bin/plugins ]; then unlink build/bin/plugins; fi
|
|
cd build/bin && ln -s ../../.devcontainer/repo/quests/plugins plugins
|
|
|
|
@echo "Eqemu is prepared. Edit build/bin/eqemu_config.json to configure."
|
|
|
|
is-vscode:
|
|
@if [ -z "$$REMOTE_CONTAINERS" ]; then \
|
|
echo "Not running in VS Code devcontainer"; \
|
|
exit 1; \
|
|
fi
|
|
|
|
clean: is-vscode
|
|
rm -rf build
|
|
|
|
.PHONY: maps
|
|
maps: is-vscode
|
|
@echo "Downloading maps..."
|
|
@mkdir -p .devcontainer/repo/maps
|
|
@cd .devcontainer/repo/maps && wget -nc https://github.com/EQEmu/maps/archive/refs/heads/master.zip
|
|
@cd .devcontainer/repo/maps && unzip -o master.zip
|
|
@cd .devcontainer/repo/maps && mv maps-master/* .
|
|
@cd .devcontainer/repo/maps && rm -rf maps-master
|
|
@echo "Maps downloaded."
|
|
|
|
# Runs tests
|
|
.PHONY: test
|
|
test: is-vscode
|
|
cd build/bin && ./tests
|
|
|
|
# Runs login binary
|
|
.PHONY: login
|
|
login: is-vscode check-mariadb
|
|
cd build/bin && ./loginserver
|
|
|
|
.PHONY: hotfix
|
|
hotfix: shared
|
|
|
|
# Runs shared_memory binary
|
|
.PHONY: shared
|
|
shared: is-vscode check-mariadb
|
|
cd build/bin && ./shared_memory
|
|
|
|
# Runs zone binary
|
|
.PHONY: zone
|
|
zone: is-vscode check-mariadb
|
|
@find build/bin/logs/zone/ -type f -name 'zone*.log' -exec rm -f {} +
|
|
cd build/bin && ./zone
|
|
|
|
check-mariadb: is-vscode
|
|
@if ! sudo service mariadb status | grep -q 'active (running)'; then \
|
|
sudo service mariadb start; \
|
|
fi
|
|
|
|
# Runs world binary
|
|
.PHONY: world
|
|
world: is-vscode check-mariadb
|
|
@find build/bin/logs/ -type f -name 'world*.log' -exec rm -f {} +
|
|
cd build/bin && ./world
|
|
|
|
# Runs ucs binary
|
|
.PHONY: ucs
|
|
ucs: is-vscode check-mariadb
|
|
@find build/bin/logs/ -type f -name 'ucs*.log' -exec rm -f {} +
|
|
cd build/bin && ./ucs
|
|
|
|
# Runs queryserv binary
|
|
.PHONY: queryserv
|
|
queryserv: is-vscode check-mariadb
|
|
@find build/bin/logs/ -type f -name 'query_server*.log' -exec rm -f {} +
|
|
cd build/bin && ./queryserv
|
|
|
|
reset-content:
|
|
@echo "Resetting content tables in database peq..."
|
|
cd .devcontainer/cache/db/peq-dump && sudo mariadb --database peq -e "source create_tables_content.sql"
|
|
|
|
valgrind-%: is-vscode
|
|
cd build/bin && valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --verbose --log-file=logs/$*.valgrind.log ./$*
|
|
|
|
# Start mariaDB standalone
|
|
.PHONY: mariadb
|
|
mariadb:
|
|
@sudo service mariadb start
|
|
|
|
.PHONY: inject-mariadb
|
|
inject-mariadb:
|
|
-sudo service mariadb start
|
|
-mkdir -p .devcontainer/cache/db/
|
|
-sudo mariadb -e 'DROP DATABASE IF EXISTS peq;'
|
|
-sudo mariadb -e 'CREATE DATABASE peq;'
|
|
-sudo mariadb -e "CREATE USER IF NOT EXISTS 'peq'@'127.0.0.1' IDENTIFIED BY 'peqpass';"
|
|
-sudo mariadb -e "GRANT ALL PRIVILEGES ON *.* TO 'peq'@'127.0.0.1';"
|
|
ifeq (,$(wildcard .devcontainer/cache/db/db.sql.zip))
|
|
@echo ".devcontainer/cache/db.sql.zip not found. Downloading database from https://db.eqemu.dev/latest"
|
|
wget -nc https://db.eqemu.dev/latest -O .devcontainer/cache/db/db.sql.zip
|
|
-cd .devcontainer/cache/db && unzip db.sql.zip
|
|
endif
|
|
@echo "Sourcing db may take a while, please wait..."
|
|
|
|
@cd .devcontainer/cache/db/peq-dump && sudo mariadb --database peq -e "source create_tables_content.sql"
|
|
@cd .devcontainer/cache/db/peq-dump && sudo mariadb --database peq -e "source create_tables_login.sql"
|
|
@cd .devcontainer/cache/db/peq-dump && sudo mariadb --database peq -e "source create_tables_player.sql"
|
|
@# deprecated cd .devcontainer/cache/db/peq-dump && sudo mariadb --database peq -e "source create_tables_queryserv.sql"
|
|
@cd .devcontainer/cache/db/peq-dump && sudo mariadb --database peq -e "source create_tables_state.sql"
|
|
@cd .devcontainer/cache/db/peq-dump && sudo mariadb --database peq -e "source create_tables_system.sql"
|
|
|
|
@echo "MariaDB is now injected."
|
|
|
|
.PHONY: gm-%
|
|
gm-%: is-vscode
|
|
sudo mariadb --database peq -e "UPDATE account SET status=255 WHERE name = '$*';"
|
|
@echo "Account $* is now a GM. /camp to have it go into effect."
|
|
|
|
depends: is-vscode
|
|
sudo apt install graphviz pip time
|
|
pip3 install graphviz
|
|
mkdir -p build/depends
|
|
@if [ ! -f "build/depends/dependency_graph.py" ]; then \
|
|
wget https://raw.githubusercontent.com/pvigier/dependency-graph/master/dependency_graph.py -O build/depends/dependency_graph.py; \
|
|
fi
|
|
@echo "Generating dependency graphs (This may take a while)..."
|
|
@echo "Login..."
|
|
time python3 build/depends/dependency_graph.py -f png login build/depends/login.dot
|
|
@echo "World..."
|
|
time python3 build/depends/dependency_graph.py -f png world build/depends/world.dot
|
|
@echo "Zone..."
|
|
time python3 build/depends/dependency_graph.py -f png zone build/depends/zone.dot
|
|
@echo "Common..."
|
|
time python3 build/depends/dependency_graph.py -f png common build/depends/common.dot
|
|
|
|
backup: is-vscode
|
|
@mkdir -p build/bin/backup
|
|
cd build/bin && ./world database:dump --compress --player-tables --state-tables --system-tables --query-serv-tables
|
|
|
|
restore-%: is-vscode
|
|
@if [ -z "$*" ]; then \
|
|
echo "Please provide a backup file to restore from. Example: make restore-backup.sql"; \
|
|
exit 1; \
|
|
fi
|
|
@echo "Restoring from backup $*"
|
|
@sudo mariadb --database peq -e "$*"
|
|
|
|
|
|
cpu-zone: is-vscode
|
|
ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer)
|
|
@echo "This makefile is not intended to be run from the .devcontainer directory."
|
|
exit
|
|
endif
|
|
@cd build/bin && mkdir -p tmp
|
|
cd build/bin && CPUPROFILE=prof.out ./zone
|
|
|
|
pprof-zone: is-vscode
|
|
ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer)
|
|
@echo "This makefile is not intended to be run from the .devcontainer directory."
|
|
exit
|
|
endif
|
|
cd build/bin && google-pprof --pdf zone prof.out > prof.pdf
|
|
|
|
pprof-gv-zone: is-vscode
|
|
ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer)
|
|
@echo "This makefile is not intended to be run from the .devcontainer directory."
|
|
exit
|
|
endif
|
|
cd build/bin && google-pprof --gv zone prof.out > prof.gv
|
|
|
|
heap-zone: is-vscode
|
|
ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer)
|
|
@echo "This makefile is not intended to be run from the .devcontainer directory."
|
|
exit
|
|
endif
|
|
@cd build/bin && mkdir -p tmp
|
|
cd build/bin && HEAPPROFILE=prof.out ./zone
|
|
|
|
|
|
.PHONY: pull
|
|
pull:
|
|
git pull
|
|
@if [ ! -d "quests" ]; then git clone https://github.com/rebuildeq/quests.git quests; fi
|
|
cd quests && git pull
|
|
@if [ ! -d "eqemu-definitions" ]; then git clone https://github.com/xackery/eqemu-definitions.git eqemu-definitions; fi
|
|
cd eqemu-definitions && git pull
|