204 lines
6.3 KiB
Plaintext
204 lines
6.3 KiB
Plaintext
THE AMSTERDAM COMPILER KIT V6.1pre1
|
|
===================================
|
|
|
|
© 1987-2005 Vrije Universiteit, Amsterdam
|
|
2022-08-19
|
|
|
|
|
|
INTRODUCTION
|
|
============
|
|
|
|
The Amsterdam Compiler Kit is a complete compiler toolchain consisting of
|
|
front end compilers for a number of different languages, code generators,
|
|
support libraries, and all the tools necessary to go from source code to
|
|
executable on any of the platforms it supports.
|
|
|
|
This is an early prerelease of the apocryphal version 6.1 release. Not a
|
|
lot is supported, the build mechanism needs work, and a lot of things are
|
|
probably broken. However, what's there should be sufficient to get things
|
|
done and to evaluate how the full 6.1 release should work.
|
|
|
|
|
|
|
|
SUPPORT
|
|
=======
|
|
|
|
Languages:
|
|
|
|
ANSI C, B, Pascal, Modula 2, Basic. K&R is supported via the ANSI C compiler.
|
|
|
|
Platforms:
|
|
|
|
pc86 produces bootable floppy disk images for 8086 PCs
|
|
linux386 produces ELF executables for PC Linux systems
|
|
linux68k produces ELF executables for m68020 Linux systems
|
|
linuxppc produces ELF executables for PowerPC Linux systems
|
|
linuxmips produces ELF executables for little-endian MIPS32r2 Linux systems
|
|
cpm produces i80 CP/M .COM files
|
|
rpi produces Raspberry Pi GPU binaries
|
|
pdpv7 produces PDP/11 V7 Unix binaries
|
|
msdos86 produces i86 MS-DOS .COM files
|
|
msdos386 produces i386 MS-DOS 32-bit DPMI .EXE files
|
|
|
|
|
|
|
|
INSTALLATION
|
|
============
|
|
|
|
The version 5.0 build mechanism has been completely rewritten. Installation
|
|
ought to be fairly straightforward. It will build on Unixishes including Linux,
|
|
OSX, and Windows using MSYS2 and mingw32.
|
|
|
|
Requirements:
|
|
|
|
- an ANSI C compiler. This defaults to gcc. You can change this by setting
|
|
the CC make variable.
|
|
|
|
- flex and yacc.
|
|
|
|
- GNU make.
|
|
|
|
- Lua (any version) with the lua-posix library installed.
|
|
|
|
- (optionally) ninja; if you've got this, this will be autodetected and give
|
|
you faster builds.
|
|
|
|
- (optionally) the qemu suite: if you have this installed, the build system
|
|
will detect it automatically and run the test suites for the supported
|
|
architectures. Get both the qemu-system-* platform emulators and the qemu-*
|
|
userland emulators (only works on Linux).
|
|
|
|
- about 115MB free in /tmp (or some other temporary directory).
|
|
|
|
- about 15MB in the target directory.
|
|
|
|
Instructions:
|
|
|
|
- edit the Makefile. There's a small section at the top where you can change
|
|
the configuration. Probably the only one you may want to edit is PREFIX,
|
|
which changes where the ACK installs to.
|
|
|
|
- Run:
|
|
|
|
make
|
|
|
|
...from the command line. This will do the build.
|
|
|
|
The make system is fully parallelisable. If you have a multicore system,
|
|
install ninja and it'll use all your cores. If you don't have ninja, you
|
|
can still use make for parallel builds with:
|
|
|
|
make -r -j8 # or however many cores you have
|
|
|
|
...but frankly, I recommend ninja.
|
|
|
|
- Run:
|
|
|
|
sudo make install
|
|
|
|
...from the command line. This will install the ACK in your PREFIX
|
|
directory (by default, /usr/local).
|
|
|
|
The ACK should now be ready to use.
|
|
|
|
|
|
|
|
USAGE
|
|
=====
|
|
|
|
Currently I haven't sorted out all the documentation --- it's supplied in the
|
|
distribution, but not all of it gets installed yet --- so here is a quickstart
|
|
guide.
|
|
|
|
The main command to use is 'ack'. This invokes the compiler and the linker.
|
|
Some useful options include:
|
|
|
|
-m<platform> build for the specified platform
|
|
-o <file> specifies the output file
|
|
-c produce a .o file
|
|
-c.s produce a .s assembly file
|
|
-O enable optimisation (optimisation levels go up to 6)
|
|
-ansi compile ANSI C (when using the C compiler)
|
|
-v be more verbose (repeatable)
|
|
<file> build file
|
|
|
|
ack figures out which language to use from the file extension:
|
|
|
|
.c C (ANSI or K&R)
|
|
.b the PDP-11 dialect of B
|
|
.bas Basic
|
|
.mod Modula-2
|
|
.ocm Occam 1
|
|
.p Pascal
|
|
.o object files
|
|
.s assembly files
|
|
.e ACK intermediate code assembly files
|
|
|
|
For further information, see the man page (which actually does get
|
|
installed, but is rather out of date).
|
|
|
|
There are some (known working) example programs in the 'examples' directory.
|
|
A sample command line is:
|
|
|
|
ack -mlinux386 -O examples/paranoia.c
|
|
|
|
|
|
|
|
GOTCHAS
|
|
=======
|
|
|
|
There are some things you should be aware of.
|
|
|
|
- Look at plat/<PLATFORMNAME>/README for information about the supported
|
|
platforms.
|
|
|
|
- The library support is fairly limited; for C, it's at roughly the ANSI C
|
|
level, and for the other languages it's similar.
|
|
|
|
- When compiling languages other than C, the ACK will usually look at the
|
|
first character of the file. If it's a #, then the file will be run through
|
|
the C preprocessor anyway.
|
|
|
|
- BSD systems may need to up the number of file descriptors (e.g.
|
|
'ulimit -n 200') before the ACK will compile.
|
|
|
|
- The ACK uses its own .o format. You won't be able to mix the ACK's object
|
|
files and another compiler's.
|
|
|
|
- When compiling together multiple B source files, you need to do some extra
|
|
work to initialise them properly otherwise your program will crash on
|
|
startup; see the ack(1) and abmodules(1) man pages.
|
|
|
|
- The distribution contains *everything*, including the weird, ancient,
|
|
archaic stuff that doesn't work any more and never will, such as the int EM
|
|
interpreter and the assembler-linkers. Only some of it builds. Look for
|
|
build.lua files.
|
|
|
|
|
|
|
|
DISCLAIMER
|
|
==========
|
|
|
|
The ACK is mature, well-tested software, but the environment in which it was
|
|
developed for and tested under is rather different from that available on
|
|
today's machines. There will probably be little in the way of logical bugs,
|
|
but there may be many compilation and API bugs.
|
|
|
|
If you wish to use the ACK, *please* join the mailing list. We are interested
|
|
in any reports of success and particularly, failure. If it does fail for you,
|
|
we would love to know why, in as much detail as possible. Bug fixes are even
|
|
more welcome.
|
|
|
|
The ACK is licensed under a BSD-like license. Please see the 'Copyright' file
|
|
for the full text.
|
|
|
|
You can find the mailing list on the project's web site:
|
|
|
|
http://tack.sourceforge.net/
|
|
|
|
Please enjoy.
|
|
|
|
David Given (davidgiven on Github)
|
|
dg@cowlark.com
|
|
2018-09-18
|