-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathREADME
146 lines (104 loc) · 4.91 KB
/
README
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
See file INSTALL for the list of software requirements and
installation instructions. See file PROBLEMS if installation turns
out to be difficult.
oo2c translates Oberon-2 source code into a variant of C supported by
the gcc family of compilers. It uses a variant of SSA for its
intermediate representation, and performs common optimizations like
common subexpression elimination, invariant code motion, constant
propagation, algebraic transformations, and dead code removal. The
compiler relies on Boehm's gc for garbage collection. A summary of
the user visible changes from oo2c-1.5.9 to oo2c-2.0.x can be found in
directory doc/from-v1-to-v2/.
Operating system, architecture, and gcc combinations that are known to
work:
Linux 2.4.19/i386/gcc 2.95.4 & 3.2.1
Linux 2.6.7/x86 and x86-64/gcc 3.4.1
SunOS 5.6/sparc/gcc 2.95.2 (32 bit)
SunOS 5.8/sparcv9/gcc 3.2.1 (64 bit)
Mac OS X/G3/gcc 2.95.2
Windows 2000/i386/cygwin gcc 2.95.3-5
Starting with oo2c-2.0.11, there is an interface for POSIX threads.
For this to work, both the garbage collector and oo2c must be build
with `--enable-threads=pthreads'. You can check that threading works
by running the program src/TestThread.Mod. If it completes without
crashing or failed assertions you can be fairly sure that
synchronization, exceptions, and heap management work as expected.
See lib/src/liboo2c.Mod for some caveats regarding threading and other
library modules. Threads have been tested with Debian 3.0 (Linux 2.4,
glibc 2.3.1, gc6.0+ and gc6.2) and Solaris 2.6 (gc6.2).
Typical installation is quite simple:
tar xfvj oo2c_32-2.0.0.tar.bz2
cd oo2c_32-2.0.0
./configure --prefix ~/mydir
make install
For a fast and small installation, you can do
env OFLAGS="--no-rtc" CFLAGS="-O2 -pipe" ./configure --prefix ~/mydir
make install-strip
More information is available in INSTALL.
Building programs is simple as well:
mkdir /tmp/test
cd /tmp/test
mkdir src
cat >src/T.Mod
MODULE T;
IMPORT Out;
BEGIN
Out.String("Hello");Out.Ln;
END T.
~/mydir/bin/oo2c --make T
And then `bin/T' should say `Hello'. For more information, please
refer to the man page of oo2c.
Please use Sourceforge
https://sourceforge.net/tracker/?atid=103539&group_id=3539
to report bugs and include the version you are using in the summary
line. This ensures that bug reports are not lost, and provides a
convenient central location to collect information about bugs.
For miscompiled code, that is, correct input code that produces a
broken binary, please try to create a small program that will
reproduce the error. Ideally this program is a single module with
just enough lines of code to trigger the bug. Send me this module,
together with the information on how the bug manifests itself, how to
trigger the bug, and the version of oo2c you are using.
For input modules that hang or crash the compiler, please send me the
module or modules that trigger the problem. This does not need to be
small. Don't send me module fragments! Getting fragments into shape
for the compiler to compile takes time that I would rather spend on
debugging.
Reporting about bugs can be a surprisingly difficult excercise in
communication. There is a very nice essay "How to Report Bugs
Effectively" at http://www.chiark.greenend.org.uk/~sgtatham/bugs.html
It should be recommended reading for everyone who will ever write --
or read -- a bug report.
Build and Install Using a CVS Working Copy
==========================================
To install a compiler from the bleeding edge CVS sources, you need to
have the latest file release compiler installed. Then, using this
baseline compiler, create a bootstrap compiler from the CVS sources.
Finally, run "make install" with the bootstrap compiler.
Here are the recommended steps in detail. First, the usual setup:
~/sf-ooc/ooc2$ make cvsclean
~/sf-ooc/ooc2$ cvs update -d
~/sf-ooc/ooc2$ ./configure --prefix /tmp/test
Then create a compiler binary bin/oo2c from the current sources
(~/local-ooc2/bin/oo2c is the local installation of the latest file
release in this example):
~/sf-ooc/ooc2$ . ENV
~/sf-ooc/ooc2$ make $OOC_DEV_ROOT/oo2crc-install.xml
~/sf-ooc/ooc2$ ~/local-ooc2/bin/oo2c -M --config oo2crc-install.xml oo2c
Use bin/oo2c to do "make install":
~/sf-ooc/ooc2$ make install BOOTSTRAP_COMPILER=bin/oo2c
This installs the compiler's data under the configured prefix,
`/tmp/test' from the call to ./configure above.
How to Create a Patch
=====================
To create a patch file relative to the current state of the CVS, first
eliminate all derived files in the local working copy:
make cvsclean
Update the working copy to the current head of the CVS:
cvs update -dP
Resolve conflicts caused by the update (if any) and run the diff
command:
cvs diff -u >../mypatch
If "diff -u" does not work use "diff -c" as fallback. The resulting
file can be applied with "patch -p0 <file".
-- Michael van Acken <mva@users.sf.net>