all: clean prepare server client extenders DIST_DIR := dist UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Linux) NPROC := $(shell nproc) endif ifeq ($(UNAME_S),Darwin) NPROC := $(shell sysctl -n hw.ncpu) endif ### CLEAN ### prepare: @if [ ! -d "$(DIST_DIR)" ]; then \ mkdir "$(DIST_DIR)"; \ echo "[+] Created '$(DIST_DIR)' directory"; \ fi clean: @ rm -rf $(DIST_DIR) clean-all: clean @ echo "[*] Cleaning all build artifacts..." @ find . -name "*.o" -delete @ find . -name "*.so" -delete @ find . -name "*.a" -delete @ find . -name "build_error.log" -delete @ find . -name "cmake_error.log" -delete @ echo "[+] All artifacts cleaned" docker-clean: @ echo "[*] Cleaning Docker containers and images..." @ docker compose --profile build-server --profile build-extenders --profile build-server-ext down --rmi local 2>/dev/null || true @ echo "[+] Docker containers and images cleaned" docker-clean-all: docker-clean @ echo "[*] Cleaning all Docker artifacts (containers, images, volumes, networks)..." @ docker compose --profile build-server --profile build-extenders --profile build-server-ext --profile runtime down --rmi all --volumes 2>/dev/null || true @ echo "[*] Cleaning build output directories..." @ rm -rf AdaptixServer/server-dist 2>/dev/null || true @ echo "[+] All Docker artifacts cleaned" ### EXTENDERS ### EXTENDER_DIRS := $(shell find AdaptixServer/extenders -maxdepth 1 -type d -not -path "$(DIST_DIR)" -exec test -f {}/Makefile \; -print) extenders: prepare @ echo "[*] Building default extenders" @ mkdir -p $(DIST_DIR)/extenders @ for dir in $(EXTENDER_DIRS); do \ (cd $$dir && $(MAKE) --no-print-directory); \ plugin_name=$$(basename $$dir); \ mv $$dir/dist $(DIST_DIR)/extenders/$$plugin_name; \ done @ echo "[+] done" ### SERVER ### server: prepare @ echo "[*] Building adaptixserver..." @ cd AdaptixServer && GOEXPERIMENT=jsonv2,greenteagc go build -buildvcs=false -ldflags="-s -w" -o adaptixserver > /dev/null 2>build_error.log || { echo "[ERROR] Failed to build AdaptixServer:"; cat build_error.log >&2; exit 1; } # for static build use CGO_ENABLED=0 @ mv AdaptixServer/adaptixserver ./$(DIST_DIR)/ @ cp AdaptixServer/ssl_gen.sh AdaptixServer/profile.yaml AdaptixServer/404page.html ./$(DIST_DIR)/ @ echo "[+] done" server-ext: clean server extenders ### CLIENT ### client: prepare @ echo "[*] Building AdaptixClient..." @ cd AdaptixClient && cmake . > /dev/null 2>cmake_error.log || { echo "[ERROR] CMake failed:"; cat cmake_error.log >&2; exit 1; } @ cd AdaptixClient && make --no-print-directory @ mv ./AdaptixClient/AdaptixClient ./$(DIST_DIR)/ @ echo "[+] done" client-fast: prepare @ echo "[*] Building AdaptixClient in $(NPROC) threads..." @ cd AdaptixClient && cmake . > /dev/null 2>cmake_error.log || { echo "[ERROR] CMake failed:"; cat cmake_error.log >&2; exit 1; } @ cd AdaptixClient && make --no-print-directory -j$(NPROC) @ mv ./AdaptixClient/AdaptixClient ./$(DIST_DIR)/ @ echo "[+] done" ### DOCKER BUILD ### docker-build-server: @ echo "[*] Building server via Docker..." @ docker compose --profile build-server build @ docker compose --profile build-server up --abort-on-container-exit @ docker compose --profile build-server down @ echo "[+] Server built via Docker" docker-build-client: @ echo "[*] Building client via Docker..." @ docker compose --profile build-client build @ docker compose --profile build-client up --abort-on-container-exit @ docker compose --profile build-client down @ echo "[+] Client AppImage built via Docker" docker-build-extenders: @ echo "[*] Building extenders via Docker..." @ docker compose --profile build-extenders build @ docker compose --profile build-extenders up --abort-on-container-exit @ docker compose --profile build-extenders down @ echo "[+] Extenders built via Docker" docker-build-server-ext: @ echo "[*] Building server and extenders via Docker..." @ docker compose --profile build-server-ext build @ docker compose --profile build-server-ext up --abort-on-container-exit @ docker compose --profile build-server-ext down @ echo "[+] Server and extenders built via Docker" docker-build-all: docker-build-server-ext @ echo "[+] All Docker builds completed" ### DOCKER RUNTIME ### docker-up: @ echo "[*] Starting Adaptix server runtime container..." @ docker compose --profile runtime up -d @ echo "[+] Runtime container started" @ echo "[*] Use 'make docker-logs' to view logs" @ echo "[*] Use 'make docker-down' to stop container" docker-down: @ echo "[*] Stopping Adaptix server runtime container..." @ docker compose --profile runtime down @ echo "[+] Runtime container stopped" docker-logs: @ docker compose --profile runtime logs -f docker-restart: docker-down docker-up ### HELP ### help: @ echo "AdaptixC2 Build System" @ echo "" @ echo "Available targets:" @ echo " all - Build everything (server, client, extenders)" @ echo " extenders - Build only the extenders" @ echo " server-ext - Build server and extenders (no client, ideal for VPS)" @ echo " server - Build only the server" @ echo " client-fast - Build only the client in multithread mode (fast build)" @ echo " client - Build only the client" @ echo " clean - Remove dist directory" @ echo " clean-all - Remove all build artifacts" @ echo "" @ echo "Docker commands:" @ echo " docker-build-server - Build server via Docker Compose" @ echo " docker-build-client - Build client AppImage via Docker Compose" @ echo " docker-build-extenders - Build extenders via Docker Compose" @ echo " docker-build-server-ext - Build server and extenders via Docker Compose" @ echo " docker-build-all - Build server and extenders via Docker Compose (alias)" @ echo " docker-up - Start runtime container (detached)" @ echo " docker-down - Stop runtime container" @ echo " docker-logs - View runtime container logs (follow mode)" @ echo " docker-restart - Restart runtime container" @ echo " docker-clean - Remove Docker containers and images (builders only)" @ echo " docker-clean-all - Remove all Docker artifacts (containers, images, volumes, networks)" @ echo "" @ echo " help - Show this help message" @ echo "" @ echo "Platform: $(UNAME_S) [$(NPROC) proc]" .PHONY: all extenders server-ext server client clean clean-all docker-build-server docker-build-extenders docker-build-server-ext docker-build-all docker-up docker-down docker-logs docker-restart docker-clean docker-clean-all help prepare