forked from virtualagc/virtualagc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
470 lines (422 loc) · 16 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
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
# Copyright 2003-2007,2009-2010,2016 Ronald S. Burkey <[email protected]>
#
# This file is part of yaAGC.
#
# yaAGC is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# yaAGC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with yaAGC; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# Filename: Makefile
# Purpose: This makefile is used (recursively) to build all
# components of the Virtual AGC project, for Linux and
# similar targets.
# Mods: 10/22/03 RSB Wrote.
# 11/02/03 RSB Added Luminary131.
# 11/13/03 RSB Added Colossus249.
# 05/01/04 RSB Now provide yadsky also as yaDSKY, after install.
# 05/06/04 RSB Now installs *.ini.
# 05/13/04 RSB Now excludes *CVS* and *snprj* from the tarball.
# 05/14/04 RSB Added PREFIX (for setting the installation
# directory.
# 05/18/04 RSB Added a datestamp to the dev. snapshot.
# 05/31/04 RSB Move snapshot to ftp.
# 07/03/04 RSB Added the Validation directory.
# 07/14/04 RSB Added ControlPulseSim
# 08/09/04 RSB Eliminate the contents of autom4te.cache/* when
# building a snapshot. (These contents mess up
# 'configure' on some systems.)
# 08/10/04 RSB Added the Sim* shell scripts to the installable
# files.
# 08/12/04 RSB Added NVER. Went to v0.90.
# 08/13/04 RSB Went to v20040813
# 08/24/04 RSB Exclude ephemeris data from development snapshot,
# but make a second file for it.
# 08/25/04 RSB Added yaIMU.
# 08/29/04 RSB Made snapshot-ephemeris a separate target from
# snapshot.
# 08/30/04 RSB Moved the directory for snapshots from ftp space
# into http space.
# 09/02/04 RSB Changed yaIMU to yaUniverse.
# 01/10/05 RSB Added binLEMAP.
# 04/30/05 RSB Added CFLAGS
# 05/08/05 RSB Added a 'snapshot' target.
# 05/14/05 RSB Made some Mac OS X related changes for 'snapshot'.
# 05/28/05 RSB Added yaDEDA.
# 06/02/05 RSB Added yaAGS.
# 06/14/05 RSB Updated the version code.
# 06/19/05 RSB Added the NOGUI=yes command-line option.
# 07/06/05 RSB Added Artemis072
# 07/28/05 RSB Oops! Had multiple "snapshot" targets.
# 08/04/05 RSB Added the CURSES variable.
# 08/06/05 RSB Now detect build-platform type using the
# OSTYPE environment variable, which seems to
# be reasonably consistent in distinguishing
# at least the following cases:
# OSTYPE=linux
# OSTYPE=darwin (MacOS X)
# OSTYPE=msys (Msys on Win32)
# OSTYPE=cygwin (CygWin on Win32)
# All of these cases use the "linux" Makefile,
# but with very minor flourishes, except the
# Msys case, which uses Makefile.Win32 instead.
# 01/09/06 RSB Removed the prefix '-' from the lines that
# build Artemis072.
# 02/26/06 RSB Now creates a script called VirtualAgcUninstall
# during installation.
# 03/05/07 RSB Changed the default compiler flags to include
# "-DALLOW_BSUB". This allows yaAGC and friends
# to pass instructions in the BSUB register upon
# exiting from an interrupt-service routine.
# 03/01/09 RSB Updated the version code.
# 03/05/09 RSB Now builds VirtualAGC.
# 03/06/09 RSB There are new targets: 'default' is the same
# as 'all'. 'all-archs' is like 'all', except
# that 'all' builds only for the native platform
# while 'all-archs' is used when running under
# Linux to create the Linux, Win32, and Mac
# stuff.
# 03/11/09 RSB yaTelemetry added.
# 03/12/09 RSB yaDSKY replaced by yaDSKY2, by default..
# 03/13/09 RSB Added provisions for replacing yaDEDA by yaDEDA2.
# 03/16/09 RSB "make clean" would fail if ./configure hadn't
# been performed due to the fact that it isn't
# needed when yaDSKY and yaDEDA aren't built.
# 03/19/09 RSB Will now *try* to build yaDSKY/yaDEDA even if
# yaDSKY2/yaDEDA2 are selected, and vice-versa.
# However, failure won't a fatal error. If find
# it useful for both to be available for
# debugging.
# 03/28/09 RSB Merged in yaACA3.
# 04/14/09 RSB Made some mods to help this build in Solaris.
# 04/25/09 RSB Fixed dev snapshots to exclude .svn directories.
# 04/26/09 RSB Backed out all of the stuff that relies on
# Makefile.Win32, and most stuff for OS
# auto-detection. Removed the "os" target.
# Removed the "install" target.
# 05/02/09 RSB Added DEV_STATIC to change builds of binary
# installers so that the wxWidgets-based programs
# are dynamic-linked rather than static-linked.
# However, it doesn't appear to me as though it
# would change the size of the binary packages
# in any significant way to use the dynamic
# libraries, so I don't bother to do it.
# Updated to make work with FreeBSD (PC-BSD 7.1).
# Adjusted for SOLARIS.
# 05/23/09 RSB Added Comanche055 to the normal build sequence.
# 06/07/09 RSB Added Luminary099 to the normal build sequence.
# 06/29/09 RSB Added the 'listings' target.
# 08/02/09 RSB Now that I got rid of libreadline on the Win32
# productin build (yesterday), I'm beginning to
# experience readline-related problems (but
# different ones) on Linux. I'm completely
# disabling readline for all platforms for now,
# until these problems can be fixed.
# 09/08/09 JL Commented out Artemis072 from main build.
# 01/30/10 RSB Added yaASM.
# 02/16/10 RSB Adjustments associated with getting
# Artemis072 into the installers.
# 02/20/10 RSB Updated version to 20100220 for release.
# 2011-04-27 JL Added Colossus237.
# 2011-05-26 JL Cleanup and rearrange. Add a 'missions' target to
# build all mission versions. Make use of
# parens/braces consistent. Add some shortcut
# variables for use in sub-make actions.
# 2016-08-07 RSB Wasn't building the Validation "mission", needed
# for the VirtualAGC installers.
# 2016-08-24 RSB Solarium055 added to mission list.
# 2016-08-28 RSB Somehow, the missions weren't being built before
# the VirtualAGC installer, so neither the mission
# binaries nor syntax-highlighted assembly listings
# were included in the installer.
# 2016-08-29 RSB Mods related to my personal-build situation, which
# shouldn't affect anyone else.
#
# The build box is always Linux for cross-compiles. For native compiles:
# Use "make MACOSX=yes" for Mac OS X.
# Use "make SOLARIS=yes" for Solaris.
# Use "make WIN32=yes" for Windows.
# Use "gmake FREEBSD=yes" for FreeBSD.
# Use "make" for Linux.
# NVER is the overall version code for the release.
NVER:=\\\"2016-08-21-working\\\"
DATE:=`date +%Y%m%d`
# DON'T CHANGE THE FOLLOWING SWITCH *********************************
# This switch determines whether or not wxWidgets programs are built
# statically linked or dynamically linked for the binary installers
# associated with the development snapshots. It has nothing whatever
# to do with normal builds by normal users. Uncommented, they're
# static. Commented, they're dynamic. And yes, DEV_STATIC *should*
# be repeated. I haven't fully worked out yet how to get the dynamic
# libraries into the installers, however, so don't use them!
DEV_STATIC=DEV_STATIC=yes
# *******************************************************************
# Comment out the following line(s) to use yaDSKY rather than yaDSKY2 and/or
# yaDEDA by yaDEDA2. yaDSKY/yaDEDA have been replaced by yaDSKY2/yaDEDA2
# principally because yaDSKY/yaDEDA are gtk+ based while yaDSKY2/yaDEDA2
# are wxWidgets based. At present, I consider wxWidgets superior to gtk+
# (in this particular application) because: a) I can get it to work on a
# wider range of platforms; b) I can link statically to it rather than
# being forced to use shared libraries. yaDSKY2/yaDEDA2 are drop-in
# identically-featured replacements for yaDSKY/yaDEDA, except that certain
# options useful only in debugging or *only* for GTK+ aren't implemented.
# These include the --test-downlink, --relative-pixmaps, and --show-packets
# switches. yaTelemetry has already been made available (and is the preferred
# method) to provide the --test-downlink functionaly. And, of course, the
# original versions of yaDSKY/yaDEDA are still available even though not
# compiled by default.
YADSKY_SUFFIX=2
YADEDA_SUFFIX=2
# Uncomment the following line (or do 'make NOREADLINE=yes') if the build
# gives errors related to readline.
NOREADLINE=yes
# The following line, if uncommented, allows my production builds for Win32
# to use libreadline. If commented, they can't. Native Win32 builds aren't
# affected.
#ReadlineForWin32=yes
# Uncomment the following line (or do 'make CURSES=yes') if the build fails
# with an indication that libcurses.a is needed.
#CURSES=yes
SNAP_PREFIX = /usr/local/yaAGC
# Some adjustments for building in Solaris
ifdef SOLARIS
#NOREADLINE=yes
LIBS+=-L/usr/local/lib
LIBS+=-lsocket
LIBS+=-lnsl
endif
# Some adjustments for building in Mac OS X
ifeq ($(OS),Darwin)
MACOSX=yes
endif
ifdef MACOSX
#NOREADLINE=yes
ISMACOSX:=MACOSX=yes
endif
# Some adjustments for building in FreeBSD
ifdef FREEBSD
LIBS+=`pkg-config --libs gtk+-2.0`
LIBS+=`pkg-config --libs glib`
endif
# GROUP is the main group to which the USER belongs. This seems to be defined
# as an environment variable in Mac OS X, but not in Linux. You can override this
# with a command-line assignment, but it is only used for the 'snapshot' target.
# For example, "make GROUP=wheel snapshot". However, the default behavior should
# be okay in Linux or Mac OS X (I hope).
ifndef GROUP
GROUP = users
endif
# Note: The default build uses no CFLAGS; this makes it easier for a user in
# the field to build it, since unexpected problems won't throw them for a loop.
# But I personally want to build with
# CFLAGS=-Wall -Werror
# to catch every possible problem before sending it out into the world.
ifeq ($(USER),rburkey)
WEBSITE=../sandroid.org/public_html/apollo
CFLAGS=-Wall -Werror -DALLOW_BSUB -g -O0
yaACA=
else
ifdef DEV_BUILD
CFLAGS=-Wall -Werror -DALLOW_BSUB -g -O0
yaACA=
else
ifdef DEBUG_BUILD
CFLAGS=-DALLOW_BSUB -g -O0
yaACA=-
else
CFLAGS=-DALLOW_BSUB
yaACA=-
endif
endif
WEBSITE=..
endif
# Note: The CURSES variable is misnamed. It really is just any special libraries
# for yaAGC, yaAGS, or yaACA3 that depend on Win32 vs. non-Win32 native builds.
ifdef WIN32
EXT=.exe
CFLAGS+=-I/usr/local/include
LIBS+=-L/usr/local/lib
LIBS+=-lkernel32
LIBS+=-lwsock32
CURSES=../yaAGC/random.c
CURSES+=-lregex
else
CURSES=-lcurses
endif
# We assume a *nix build environment.
include Makefile.yaAGC
ifndef PREFIX
PREFIX=/usr/local
endif
BUILD = $(MAKE) PREFIX=$(PREFIX) NVER=$(NVER) CFLAGS="$(CFLAGS)" CURSES="$(CURSES)" LIBS2="$(LIBS)" NOREADLINE=$(NOREADLINE) ReadlineForWin32=$(ReadlineForWin32) $(ARCHS) EXT=$(EXT)
# List of mission software directories to be built.
MISSIONS = Validation Luminary131 Colossus249 Comanche055 Luminary099 Artemis072 Colossus237 Solarium055
# The base set of targets to be built always.
SUBDIRS = Tools yaLEMAP yaAGC yaAGS yaYUL ControlPulseSim yaUniverse
SUBDIRS += $(MISSIONS)
ifndef NOGUI
ifeq "$(YADEDA_SUFFIX)" ""
SUBDIRS += yaDEDA/src
else
SUBDIRS += yaDEDA2
endif
ifeq "$(YADSKY_SUFFIX)" ""
SUBDIRS += yaDSKY/src
else
SUBDIRS += yaDSKY2
endif
ifndef WIN32
SUBDIRS += yaACA
endif
SUBDIRS += yaACA2
SUBDIRS += yaACA3
SUBDIRS += yaTelemetry
SUBDIRS += jWiz
SUBDIRS += VirtualAGC
endif # NOGUI
.PHONY: $(SUBDIRS)
.PHONY: default
default: all
.PHONY: missions $(MISSIONS) clean-missions
missions: $(MISSIONS)
$(MISSIONS): yaYUL Tools
$(BUILD) -C $@
clean-missions:
for subdir in $(MISSIONS) ; do make -C $$subdir clean ; done
.PHONY: corediffs
corediffs: yaYUL Tools
for subdir in $(MISSIONS) ; do make -C $$subdir corediff.txt ; done
.PHONY: all all-archs
all: ARCHS=default
all-archs: ARCHS=all-archs
all all-archs: $(SUBDIRS)
.PHONY: Tools yaLEMAP yaAGC yaAGS yaYUL yaUniverse yaACA2 yaACA ControlPulseSim
Tools yaLEMAP yaAGC yaAGS yaYUL yaUniverse yaACA2 yaACA yaACA3 ControlPulseSim:
$(BUILD) -C $@
.PHONY: yaACA3
yaACA3:
${yaACA}$(BUILD) -C $@
.PHONY: yaDEDA
yaDEDA:
$(BUILD) -C yaDEDA/src -f Makefile.all-archs
-$(BUILD) -C yaDEDA2 $(DEV_STATIC)
.PHONY: yaDEDA2
yaDEDA2:
-$(BUILD) -C yaDEDA/src -f Makefile.all-archs
$(BUILD) -C $@ $(DEV_STATIC)
.PHONY: yaDSKY
yaDSKY:
-$(BUILD) -C yaDSKY/src -f Makefile.all-archs
-cp yaDSKY/src/yadsky yaDSKY/src/yaDSKY
$(BUILD) -C yaDSKY2 $(DEV_STATIC)
.PHONY: yaDSKY2
yaDSKY2:
-$(BUILD) -C yaDSKY/src -f Makefile.all-archs
-cp yaDSKY/src/yadsky yaDSKY/src/yaDSKY
$(BUILD) -C $@ $(DEV_STATIC)
.PHONY: yaTelemetry
yaTelemetry:
$(BUILD) -C $@ $(DEV_STATIC)
.PHONY: jWiz
jWiz:
$(BUILD) -C $@ $(ISMACOSX) $(DEV_STATIC)
.PHONY: VirtualAGC
VirtualAGC:
$(BUILD) -C $@ "YADSKY_SUFFIX=$(YADSKY_SUFFIX)" "YADEDA_SUFFIX=$(YADEDA_SUFFIX)" $(ISMACOSX) $(DEV_STATIC)
# This target is for making HTML assembly listings for the website.
.PHONY: listings
AGC_LISTINGS = $(addprefix listing-agc-, $(MISSIONS))
listings: $(AGC_LISTINGS) listing-aea-FP6 listing-aea-FP8
listing-agc-%:
rm -f $(WEBSITE)/listings/$*/*.html
mkdir -p $(WEBSITE)/listings/$*
cd $* && ../yaYUL/yaYUL --html MAIN.agc >MAIN.lst
mv $*/*.agc.html $(WEBSITE)/listings/$*
cp Apollo32.png $(WEBSITE)/listings/$*
listing-aea-%:
rm -f $(WEBSITE)/listings/$*/*.html
mkdir -p $(WEBSITE)/listings/$*
cd $* && ../yaLEMAP/yaLEMAP --html $*.aea
mv $*/*.aea.html $(WEBSITE)/listings/$*
cp Apollo32.png $(WEBSITE)/listings/$*
# Here are targets for building the development snapshot,
# creating the binary installers, and updating local directory
# which sources the Virtual AGC website. The "snapshot" target
# does this locally, whilst the "buildbox" target does it on a
# (remote) box with a controlled build environment.
.PHONY: snapshot
snapshot: dev binaries
.PHONY: buildbox
buildbox: dev
sh ./BuildBox.sh
.PHONY: binaries
binaries: clean all-archs
cp -a VirtualAGC/VirtualAGC-installer $(WEBSITE)/Downloads
cp -a VirtualAGC/VirtualAGC-setup.exe $(WEBSITE)/Downloads
cp -a VirtualAGC/VirtualAGC.app.tar.gz $(WEBSITE)/Downloads
ls -ltr $(WEBSITE)/Downloads | tail -4
# I used this only for creating a development snapshot. It's no use to anybody
# else, I expect.
.PHONY: dev
dev: clean
rm -f $(WEBSITE)/Downloads/yaAGC-dev-$(DATE).tar.bz2
tar -C .. --exclude=*CVS* --exclude=*snprj* --exclude="*.core" \
--exclude=yaAGC/yaDSKY/autom4te.cache/* \
--exclude=yaAGC/yaDSKY/configure \
--exclude=yaAGC/yaDSKY/config.log \
--exclude=yaAGC/yaDSKY/config.status \
--exclude=yaAGC/yaDSKY/aclocal.m4 \
--exclude=yaAGC/yaDSKY/Makefile.in \
--exclude=yaAGC/yaDSKY/Makefile \
--exclude=yaAGC/yaDEDA/autom4te.cache/* \
--exclude=yaAGC/yaDEDA/configure \
--exclude=yaAGC/yaDEDA/config.log \
--exclude=yaAGC/yaDEDA/config.status \
--exclude=yaAGC/yaDEDA/aclocal.m4 \
--exclude=yaAGC/yaDEDA/Makefile.in \
--exclude=yaAGC/yaDEDA/Makefile \
--exclude=*~ --exclude=*.bak \
--exclude=*.svn* \
--exclude=*xvpics* \
--bzip2 -cvf $(WEBSITE)/Downloads/yaAGC-dev-$(DATE).tar.bz2 yaAGC
ls -ltr $(WEBSITE)/Downloads
snapshot-ephemeris:
cd .. ; tar --bzip2 -cvf $(WEBSITE)/Downloads/yaAGC-ephemeris.tar.bz2 yaAGC/yaUniverse/*.txt
ls -l $(WEBSITE)/Downloads
clean: clean-missions
$(MAKE) -C yaLEMAP clean
$(MAKE) -C yaASM clean
$(MAKE) -C yaAGC clean
$(MAKE) -C yaAGS clean
$(MAKE) -C yaDSKY/src -f Makefile.all-archs clean
rm -f yaDSKY/src/yaDSKY
$(MAKE) -C yaDEDA/src -f Makefile.all-archs clean
$(MAKE) -C yaYUL clean
$(MAKE) -C yaUniverse clean
$(yaACA)$(MAKE) -C yaACA clean
$(yaACA)$(MAKE) -C yaACA2 clean
$(yaACA)$(MAKE) -C yaACA3 clean
$(MAKE) -C ControlPulseSim clean
$(MAKE) -C VirtualAGC clean
$(MAKE) -C yaTelemetry clean
$(MAKE) -C jWiz clean
$(MAKE) -C yaDSKY2 clean
$(MAKE) -C yaDEDA2 clean
$(MAKE) -C yaACA2 clean
$(MAKE) -C Tools clean
-rm -f `find . -name "core"` FP6/*.aea.html FP8/*.aea.html
autogen:
echo PREFIX=$(PREFIX) >Makefile.yaAGC
ifndef NOGUI
cd yaDSKY && ./autogen.sh --prefix=$(PREFIX)
cd yaDEDA && ./autogen.sh --prefix=$(PREFIX)
endif