Unfortunately due to bugs in the analyzers or something else, the IDE0005 doesn't work as expected. The "officially suggested" workaround is to enable XML documentation generation to trigger IDE0005 during compiling. Then we need to add three more rules to silence the warnings that come from the XML documentation generation. We also need to enable code style enforcing on build for all of this to work. Known issue is that all of this produces a bunch (tens to hundreds) of obscure analyzer warnings on older versions of Visual Studio, but those seem to not be causing issues.
194 lines
7.0 KiB
Makefile
194 lines
7.0 KiB
Makefile
############################# INSTRUCTIONS #############################
|
|
#
|
|
# to compile, run:
|
|
# make
|
|
#
|
|
# to compile using Mono (version 6.4 or greater) instead of .NET 5, run:
|
|
# make RUNTIME=mono
|
|
#
|
|
# to compile using system libraries for native dependencies, run:
|
|
# make [RUNTIME=net5] TARGETPLATFORM=unix-generic
|
|
#
|
|
# to check the official mods for erroneous yaml files, run:
|
|
# make [RUNTIME=net5] test
|
|
#
|
|
# to check the engine and official mod dlls for code style violations, run:
|
|
# make [RUNTIME=net5] check
|
|
#
|
|
# to compile and install Red Alert, Tiberian Dawn, and Dune 2000, run:
|
|
# make [RUNTIME=net5] [prefix=/foo] [bindir=/bar/bin] install
|
|
#
|
|
# to compile and install Red Alert, Tiberian Dawn, and Dune 2000
|
|
# using system libraries for native dependencies, run:
|
|
# make [prefix=/foo] [bindir=/bar/bin] TARGETPLATFORM=unix-generic install
|
|
#
|
|
# to install Linux startup scripts, desktop files, icons, and MIME metadata
|
|
# make install-linux-shortcuts
|
|
#
|
|
# to install Linux AppStream metadata
|
|
# make install-linux-appdata
|
|
#
|
|
# for help, run:
|
|
# make help
|
|
#
|
|
|
|
######################### UTILITIES/SETTINGS ###########################
|
|
#
|
|
# Install locations for local installs and downstream packaging
|
|
prefix ?= /usr/local
|
|
datarootdir ?= $(prefix)/share
|
|
datadir ?= $(datarootdir)
|
|
mandir ?= $(datarootdir)/man/
|
|
bindir ?= $(prefix)/bin
|
|
libdir ?= $(prefix)/lib
|
|
gameinstalldir ?= $(libdir)/openra
|
|
|
|
# Toolchain
|
|
CWD = $(shell pwd)
|
|
MSBUILD = msbuild -verbosity:m -nologo
|
|
DOTNET = dotnet
|
|
MONO = mono
|
|
RM = rm
|
|
RM_R = $(RM) -r
|
|
RM_F = $(RM) -f
|
|
RM_RF = $(RM) -rf
|
|
|
|
RUNTIME ?= net5
|
|
CONFIGURATION ?= Release
|
|
|
|
# Only for use in target version:
|
|
VERSION := $(shell git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null || (c=$$(git rev-parse --short HEAD 2>/dev/null) && echo git-$$c))
|
|
|
|
# Detect target platform for dependencies if not given by the user
|
|
ifndef TARGETPLATFORM
|
|
UNAME_S := $(shell uname -s)
|
|
UNAME_M := $(shell uname -m)
|
|
ifeq ($(UNAME_S),Darwin)
|
|
TARGETPLATFORM = osx-x64
|
|
else
|
|
ifeq ($(UNAME_M),x86_64)
|
|
TARGETPLATFORM = linux-x64
|
|
else
|
|
TARGETPLATFORM = unix-generic
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
##################### DEVELOPMENT BUILDS AND TESTS #####################
|
|
#
|
|
all:
|
|
@echo "Compiling in ${CONFIGURATION} mode..."
|
|
ifeq ($(RUNTIME), mono)
|
|
@command -v $(firstword $(MSBUILD)) >/dev/null || (echo "OpenRA requires the '$(MSBUILD)' tool provided by Mono >= 6.4."; exit 1)
|
|
@$(MSBUILD) -t:Build -restore -p:Configuration=${CONFIGURATION} -p:TargetPlatform=$(TARGETPLATFORM) -p:Mono=true
|
|
else
|
|
@$(DOTNET) build -c ${CONFIGURATION} -nologo -p:TargetPlatform=$(TARGETPLATFORM)
|
|
endif
|
|
ifeq ($(TARGETPLATFORM), unix-generic)
|
|
@./configure-system-libraries.sh
|
|
endif
|
|
@./fetch-geoip.sh
|
|
|
|
# dotnet clean and msbuild -t:Clean leave files that cause problems when switching between mono/dotnet
|
|
# Deleting the intermediate / output directories ensures the build directory is actually clean
|
|
clean:
|
|
@-$(RM_RF) ./bin ./*/obj
|
|
@-$(RM_F) IP2LOCATION-LITE-DB1.IPV6.BIN.ZIP
|
|
|
|
check:
|
|
@echo
|
|
@echo "Compiling in Debug mode..."
|
|
ifeq ($(RUNTIME), mono)
|
|
# Enabling EnforceCodeStyleInBuild and GenerateDocumentationFile as a workaround for some code style rules (in particular IDE0005) being bugged and not reporting warnings/errors otherwise.
|
|
@$(MSBUILD) -t:build -restore -p:Configuration=Debug -warnaserror -p:TargetPlatform=$(TARGETPLATFORM) -p:Mono=true -p:EnforceCodeStyleInBuild=true -p:GenerateDocumentationFile=true
|
|
else
|
|
# Enabling EnforceCodeStyleInBuild and GenerateDocumentationFile as a workaround for some code style rules (in particular IDE0005) being bugged and not reporting warnings/errors otherwise.
|
|
@$(DOTNET) build -c Debug -nologo -warnaserror -p:TargetPlatform=$(TARGETPLATFORM) -p:EnforceCodeStyleInBuild=true -p:GenerateDocumentationFile=true
|
|
endif
|
|
ifeq ($(TARGETPLATFORM), unix-generic)
|
|
@./configure-system-libraries.sh
|
|
endif
|
|
@echo
|
|
@echo "Checking for explicit interface violations..."
|
|
@./utility.sh all --check-explicit-interfaces
|
|
@echo
|
|
@echo "Checking for incorrect conditional trait interface overrides..."
|
|
@./utility.sh all --check-conditional-trait-interface-overrides
|
|
|
|
check-scripts:
|
|
@echo
|
|
@echo "Checking for Lua syntax errors..."
|
|
@luac -p $(shell find mods/*/maps/* -iname '*.lua')
|
|
@luac -p $(shell find lua/* -iname '*.lua')
|
|
@luac -p $(shell find mods/*/bits/scripts/* -iname '*.lua')
|
|
|
|
test: all
|
|
@echo
|
|
@echo "Testing Tiberian Sun mod MiniYAML..."
|
|
@./utility.sh ts --check-yaml
|
|
@echo
|
|
@echo "Testing Dune 2000 mod MiniYAML..."
|
|
@./utility.sh d2k --check-yaml
|
|
@echo
|
|
@echo "Testing Tiberian Dawn mod MiniYAML..."
|
|
@./utility.sh cnc --check-yaml
|
|
@echo
|
|
@echo "Testing Red Alert mod MiniYAML..."
|
|
@./utility.sh ra --check-yaml
|
|
|
|
############# LOCAL INSTALLATION AND DOWNSTREAM PACKAGING ##############
|
|
#
|
|
version: VERSION mods/ra/mod.yaml mods/cnc/mod.yaml mods/d2k/mod.yaml mods/ts/mod.yaml mods/modcontent/mod.yaml mods/all/mod.yaml
|
|
ifeq ($(VERSION),)
|
|
$(error Unable to determine new version (requires git or override of variable VERSION))
|
|
endif
|
|
@sh -c '. ./packaging/functions.sh; set_engine_version "$(VERSION)" .'
|
|
@sh -c '. ./packaging/functions.sh; set_mod_version "$(VERSION)" mods/ra/mod.yaml mods/cnc/mod.yaml mods/d2k/mod.yaml mods/ts/mod.yaml mods/modcontent/mod.yaml mods/all/mod.yaml'
|
|
|
|
install:
|
|
@sh -c '. ./packaging/functions.sh; install_assemblies $(CWD) $(DESTDIR)$(gameinstalldir) $(TARGETPLATFORM) $(RUNTIME) True True True'
|
|
@sh -c '. ./packaging/functions.sh; install_data $(CWD) $(DESTDIR)$(gameinstalldir) cnc d2k ra'
|
|
|
|
install-linux-shortcuts:
|
|
@sh -c '. ./packaging/functions.sh; install_linux_shortcuts $(CWD) "$(DESTDIR)" "$(gameinstalldir)" "$(bindir)" "$(datadir)" "$(shell head -n1 VERSION)" cnc d2k ra'
|
|
|
|
install-linux-appdata:
|
|
@sh -c '. ./packaging/functions.sh; install_linux_appdata $(CWD) "$(DESTDIR)" "$(datadir)" cnc d2k ra'
|
|
|
|
help:
|
|
@echo 'to compile, run:'
|
|
@echo ' make'
|
|
@echo
|
|
@echo 'to compile using Mono (version 6.4 or greater) instead of .NET 5, run:'
|
|
@echo ' make RUNTIME=mono'
|
|
@echo
|
|
@echo 'to compile using system libraries for native dependencies, run:'
|
|
@echo ' make [RUNTIME=net5] TARGETPLATFORM=unix-generic'
|
|
@echo
|
|
@echo 'to check the official mods for erroneous yaml files, run:'
|
|
@echo ' make [RUNTIME=net5] test'
|
|
@echo
|
|
@echo 'to check the engine and official mod dlls for code style violations, run:'
|
|
@echo ' make [RUNTIME=net5] check'
|
|
@echo
|
|
@echo 'to compile and install Red Alert, Tiberian Dawn, and Dune 2000 run:'
|
|
@echo ' make [RUNTIME=net5] [prefix=/foo] [TARGETPLATFORM=unix-generic] install'
|
|
@echo
|
|
@echo 'to compile and install Red Alert, Tiberian Dawn, and Dune 2000'
|
|
@echo 'using system libraries for native dependencies, run:'
|
|
@echo ' make [RUNTIME=net5] [prefix=/foo] [bindir=/bar/bin] TARGETPLATFORM=unix-generic install'
|
|
@echo
|
|
@echo 'to install Linux startup scripts, desktop files, icons, and MIME metadata'
|
|
@echo ' make install-linux-shortcuts'
|
|
@echo
|
|
@echo 'to install Linux AppStream metadata'
|
|
@echo ' make install-linux-appdata'
|
|
|
|
########################### MAKEFILE SETTINGS ##########################
|
|
#
|
|
.DEFAULT_GOAL := all
|
|
|
|
.SUFFIXES:
|
|
|
|
.PHONY: all clean check check-scripts test version install install-linux-shortcuts install-linux-appdata help
|