-
-
Notifications
You must be signed in to change notification settings - Fork 25
/
Makefile
181 lines (153 loc) · 4.56 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
NAME = RCSBuildAid
BUILD ?= $(PWD)/bin
PLUGIN = $(BUILD)/$(NAME).dll
SOURCES = $(wildcard Plugin/*.cs Plugin/*/*.cs)
DOCSRC = README.adoc
LOGFILE = CHANGELOG.adoc
DOC = $(BUILD)/README.html
IMGURL ?= https://github.com/m4v/RCSBuildAid/raw/master/doc
TOOLBAR = $(BUILD)/RCSBuildAidToolbar.dll
TOOLBAR_SRC = $(wildcard RCSBuildAidToolbar/*.cs)
VERSION = $(shell git describe --tags --always)
ZIPNAME = $(NAME)_$(VERSION).zip
PCKPATH = Package
ZIPFILE = $(PCKPATH)/$(ZIPNAME)
GMCS ?= mcs -sdk:4.5
REFERENCE = Assembly-CSharp,UnityEngine,UnityEngine.UI,UnityEngine.CoreModule,$\
UnityEngine.TextRenderingModule,UnityEngine.IMGUIModule,$\
UnityEngine.AnimationModule,UnityEngine.InputLegacyModule,$\
UnityEngine.PhysicsModule
REFERENCE_TOOLBAR = Assembly-CSharp,UnityEngine,UnityEngine.CoreModule,$\
aaa_Toolbar
-include Makefile.mine
MANAGED = $(KSPDIR)/KSP_Data/Managed
GAMEDATA = $(KSPDIR)/GameData
PLUGINDIR = $(GAMEDATA)/$(NAME)
TOOLBAR_LIB ?= $(GAMEDATA)/000_Toolbar/Plugins
# "export DEBUG=1" for enable debug build
ifdef DEBUG
CFLAGS += -debug -define:DEBUG -define:UNITY_ASSERTIONS
else
CFLAGS ?= -optimize
endif
# "export PROFILER=1" for enable profiling
ifdef PROFILER
CFLAGS += -define:ENABLE_PROFILER
endif
.PHONY: all
all: plugin toolbar
.PHONY: info
info:
@echo "VERSION $(VERSION)"
@echo "KSP PATH $(KSPDIR)"
@echo "GAMEDATA $(GAMEDATA)"
@echo "PLUGIN DIR $(PLUGINDIR)"
@echo "BUILD PATH $(BUILD)"
@echo "GMCS $(GMCS)"
@echo "CFLAGS $(CFLAGS)"
@echo "ZIPFILE $(ZIPFILE)"
@echo "IMGURL $(IMGURL)"
.PHONY: info_verbose
info_verbose: info
@echo "Source files:"
@for source in $(SOURCES); do echo "$$source"; done
.PHONY: plugin
plugin: $(PLUGIN) $(DOC)
.PHONY: toolbar
toolbar: $(TOOLBAR)
$(PLUGIN): $(SOURCES) Makefile Makefile.mine | check
@echo "\n== Compiling $(NAME)"
mkdir -p "$(BUILD)"
$(GMCS) $(CFLAGS) -t:library -lib:"$(MANAGED)" \
-r:"$(REFERENCE)" \
-out:$@ $(SOURCES)
$(TOOLBAR): $(PLUGIN) $(TOOLBAR_SRC) Makefile Makefile.mine | check
@echo "\n== Compiling toolbar support"
mkdir -p "$(BUILD)"
$(GMCS) $(CFLAGS) -t:library -lib:"$(MANAGED),$(TOOLBAR_LIB)" \
-r:$(REFERENCE_TOOLBAR),$(PLUGIN) \
-out:$@ $(TOOLBAR_SRC)
.PHONY: clean
clean:
ifndef BUILD
$(error BUILD var not defined)
else ifndef PCKPATH
$(error PCKPATH var not defined)
endif
rm -rfv "$(BUILD)"/*
rm -rfv "$(PCKPATH)/$(NAME)"
define install_plugin_at
@echo "\n== Installing $(NAME) at $(1)"
mkdir -p "$(1)/Plugins/PluginData"
mkdir -p "$(1)/Textures"
cp $(PLUGIN) "$(1)/Plugins"
cp Textures/iconAppLauncher.dds "$(1)/Textures"
cp RCSBuildAid.version "$(1)"
cp $(DOCSRC) "$(1)"
cp $(LOGFILE) "$(1)"
cp LICENSE "$(1)"
cp $(DOC) "$(1)"
endef
define install_toolbar_at
@echo "\n== Installing toolbar support at $(1)"
mkdir -p "$(1)/Plugins"
mkdir -p "$(1)/Textures"
cp $(TOOLBAR) "$(1)/Plugins"
cp Textures/iconToolbar.dds "$(1)/Textures"
cp Textures/iconToolbar_active.dds "$(1)/Textures"
endef
.PHONY: install
install: all install_plugin install_toolbar
.PHONY: install_plugin
install_plugin: plugin
$(call install_plugin_at,$(PLUGINDIR))
ifeq ($(DEBUG),1)
cp $(PLUGIN).mdb "$(PLUGINDIR)/Plugins"
endif
.PHONY: install_toolbar
install_toolbar: toolbar
$(call install_toolbar_at,$(PLUGINDIR))
ifeq ($(DEBUG),1)
cp $(TOOLBAR).mdb "$(PLUGINDIR)/Plugins"
endif
.PHONY: package
package: $(ZIPFILE)
$(ZIPFILE): $(PLUGIN) $(DOC) $(TOOLBAR)
ifndef PCKPATH
$(error PCKPATH var not defined)
endif
@echo "\n== Deleting old files"
rm -rf $(PCKPATH)/$(NAME)
$(call install_plugin_at,$(PCKPATH)/$(NAME))
$(call install_toolbar_at,$(PCKPATH)/$(NAME))
@echo "\n== Making zip"
rm -f $(PCKPATH)/$(ZIPNAME)
cd $(PCKPATH) && zip -r $(ZIPNAME) $(NAME)
.PHONY: doc
doc: $(DOC)
$(DOC): $(DOCSRC)
@echo "\n== Building HTML documentation"
asciidoctor -a imagesdir="$(IMGURL)" $(DOCSRC) -o $@
.PHONY: uninstall
uninstall: | check
rm -rfv "$(PLUGINDIR)"
.PHONY: check
check:
ifndef KSPDIR
$(error KSPDIR envar not set)
endif
.PHONY: checkrelease
checkrelease:
ifdef DEBUG
$(error Error debug build)
endif
.PHONY: push_release_curse
push_release_curse: $(ZIPFILE) | checkrelease
@echo "\n== Pushing release to CurseForge"
@scripts/release.py --curse --version "$(VERSION)" --changelog "$(LOGFILE)" --file "$(ZIPFILE)" --release
.PHONY: push_release_github
push_release_github: $(ZIPFILE) | checkrelease
@echo "\n== Pushing release to Github"
@scripts/release.py --github --version "$(VERSION)" --changelog "$(LOGFILE)" --file "$(ZIPFILE)" --release
.PHONY: push_release
push_release: push_release_curse push_release_github