mirror of
https://github.com/giongto35/cloud-game.git
synced 2026-01-23 10:35:44 +00:00
132 lines
3.9 KiB
Makefile
132 lines
3.9 KiB
Makefile
PROJECT = cloud-game
|
|
REPO_ROOT = github.com/giongto35
|
|
ROOT = ${REPO_ROOT}/${PROJECT}
|
|
|
|
CGO_CFLAGS='-g -O3'
|
|
CGO_LDFLAGS='-g -O3'
|
|
GO_TAGS=
|
|
|
|
.PHONY: clean test
|
|
|
|
fmt:
|
|
@goimports -w cmd pkg tests
|
|
@gofmt -s -w cmd pkg tests
|
|
|
|
compile: fmt
|
|
@go install ./cmd/...
|
|
|
|
clean:
|
|
@rm -rf bin
|
|
@rm -rf build
|
|
@go clean ./cmd/*
|
|
|
|
|
|
build.coordinator:
|
|
mkdir -p bin/
|
|
go build -ldflags "-w -s -X 'main.Version=$(GIT_VERSION)'" -o bin/ ./cmd/coordinator
|
|
|
|
build.worker:
|
|
mkdir -p bin/
|
|
CGO_CFLAGS=${CGO_CFLAGS} CGO_LDFLAGS=${CGO_LDFLAGS} \
|
|
go build -pgo=auto -buildmode=exe $(if $(GO_TAGS),-tags $(GO_TAGS),) \
|
|
-ldflags "-w -s -X 'main.Version=$(GIT_VERSION)'" $(EXT_WFLAGS) \
|
|
-o bin/ ./cmd/worker
|
|
|
|
build: build.coordinator build.worker
|
|
|
|
test:
|
|
go test -v ./pkg/...
|
|
|
|
verify-cores:
|
|
go test -run TestAll ./pkg/worker/room -v -renderFrames $(GL_CTX) -outputPath "./_rendered"
|
|
|
|
dev.build: compile build
|
|
|
|
dev.build-local:
|
|
mkdir -p bin/
|
|
go build -o bin/ ./cmd/coordinator
|
|
CGO_CFLAGS=${CGO_CFLAGS} CGO_LDFLAGS=${CGO_LDFLAGS} go build -pgo=auto -o bin/ ./cmd/worker
|
|
|
|
dev.run: dev.build-local
|
|
ifeq ($(OS),Windows_NT)
|
|
./bin/coordinator.exe & ./bin/worker.exe
|
|
else
|
|
./bin/coordinator & ./bin/worker
|
|
endif
|
|
|
|
dev.run.debug:
|
|
go build -race -o bin/ ./cmd/coordinator
|
|
CGO_CFLAGS=${CGO_CFLAGS} CGO_LDFLAGS=${CGO_LDFLAGS} \
|
|
go build -race -gcflags=all=-d=checkptr -o bin/ ./cmd/worker
|
|
./bin/coordinator & ./bin/worker
|
|
|
|
dev.run-docker:
|
|
docker rm cloud-game-local -f || true
|
|
docker compose up --build
|
|
|
|
# RELEASE
|
|
# Builds the app for new release.
|
|
#
|
|
# Folder structure:
|
|
# - assets/
|
|
# - games/ (shared between both executables)
|
|
# - cores/ (filtered by extension)
|
|
# - web/
|
|
# - coordinator
|
|
# - worker
|
|
# - config.yaml (shared)
|
|
#
|
|
# Config params:
|
|
# - RELEASE_DIR: the name of the output folder (default: release).
|
|
# - CONFIG_DIR: search dir for core config files.
|
|
# - DLIB_TOOL: the name of a dynamic lib copy tool (with params) (e.g., ldd -x -y; default: ldd).
|
|
# - DLIB_SEARCH_PATTERN: a grep filter of the output of the DLIB_TOOL (e.g., my_lib.so; default: .*so).
|
|
# Be aware that this search pattern will return only matched regular expression part and not the whole line.
|
|
# de. -> abc def ghj -> def
|
|
# Makefile special symbols should be escaped with \.
|
|
# - DLIB_ALTER: a special flag to use altered dynamic copy lib tool for macOS only.
|
|
# - CORE_EXT: a glob pattern to filter the cores that are copied into the release.
|
|
# - CFG_EXT: a glob pattern to copy config file into the release (default: *.cfg).
|
|
#
|
|
# Example:
|
|
# make release DLIB_TOOL="ldd -x" DLIB_SEARCH_PATTERN=/usr/lib.*\\\\s CORE_EXT=*.so
|
|
#
|
|
RELEASE_DIR ?= release
|
|
CONFIG_DIR = configs
|
|
DLIB_TOOL ?= ldd
|
|
DLIB_SEARCH_PATTERN ?= .*so
|
|
DLIB_ALTER ?= false
|
|
CORE_EXT ?= *_libretro.so
|
|
CFG_EXT ?= *.cfg
|
|
COORDINATOR_DIR = ./$(RELEASE_DIR)
|
|
WORKER_DIR = ./$(RELEASE_DIR)
|
|
CORES_DIR = assets/cores
|
|
GAMES_DIR = assets/games
|
|
.PHONY: release
|
|
.SILENT: release
|
|
release: GIT_VERSION := $(shell ./scripts/version.sh)
|
|
release: clean build
|
|
rm -rf ./$(RELEASE_DIR) && mkdir ./$(RELEASE_DIR)
|
|
mkdir -p $(COORDINATOR_DIR) && mkdir -p $(WORKER_DIR)
|
|
cp ./bin/coordinator $(COORDINATOR_DIR) && cp ./bin/worker $(WORKER_DIR)
|
|
chmod +x $(COORDINATOR_DIR)/coordinator $(WORKER_DIR)/worker
|
|
ifeq ($(DLIB_ALTER),false)
|
|
for bin in $$($(DLIB_TOOL) $(WORKER_DIR)/worker | grep -oE $(DLIB_SEARCH_PATTERN)); \
|
|
do cp -v "$$bin" $(WORKER_DIR); \
|
|
done
|
|
else
|
|
$(DLIB_TOOL) $(WORKER_DIR) $(WORKER_DIR)/worker
|
|
endif
|
|
cp -R ./web $(COORDINATOR_DIR)
|
|
# add version tag into index.html
|
|
./scripts/version.sh $(COORDINATOR_DIR)/web/index.html
|
|
mkdir -p $(WORKER_DIR)/$(GAMES_DIR)
|
|
ifneq (,$(wildcard ./$(GAMES_DIR)))
|
|
cp -R ./$(GAMES_DIR) $(WORKER_DIR)/assets
|
|
endif
|
|
mkdir -p $(WORKER_DIR)/$(CORES_DIR)
|
|
cp ./$(CORES_DIR)/$(CFG_EXT) $(WORKER_DIR)/$(CORES_DIR)
|
|
ifneq (,$(wildcard ./$(CORES_DIR)/$(CORE_EXT)))
|
|
cp -R ./$(CORES_DIR)/$(CORE_EXT) $(WORKER_DIR)/$(CORES_DIR)
|
|
endif
|
|
cp ./$(CONFIG_DIR)/config.yaml ./$(RELEASE_DIR)
|