Things you need to install the compiler: You must have an ANSI C compiler. Gcc works well. Your linker must be able to distinguish identifiers up to 32 characters. You must be able to compile the Boehm garbage collector. You'll need plenty of memory. The exact requirements depend on the tools you use, but 40MB virtual memeory is a start. You'll want >=16MB real memory to avoid thrashing during installation when the compiler compiles itself. Less is fine for smaller programs, or for installing overnight. To install, follow these steps. Your system may have particular requirements; if I know these, they are listed at the end of this file. 1. You may need to edit the file System/CONFIG.proto to have features appropriate to your site. This will be run through cpp, so you can #ifdef your specific needs. Notice that the C compiler should be given whatever options it needs to be ANSI. If you don't have 32b longs, you may need to modify System/MACROS.proto to #ifdef your architecture to reflect the larger word size. Use a parallel make utility if you have one. 2. Edit the variables at the beginning of the Makefile to be appropriate. SHOME must be set to be the current directory. 3. If you intend to use a precompiled binary from someone on the net, go to the top directory and type `make system'. Then copy the binary into the file `Compiler/cs'. You are done. Otherwise, go to the top directory and type `make testall'. That should do the following things: Make the Boehm garbage collector (GC/gc.a) Make the Sather runtime library (base.a) Make the system specific compiler files (EXTERN, MACROS, CONFIG) Compile the bootstrap C for the compiler (Boot/cs) Compile the compiler using the bootstrap (Compiler/cs) Compile and execute some test classes (in Test). If you want to do a stress test compiling the compiler with itself, do a `make testall'. 4. If all went well, you may want to install the compiler executable (Compiler/cs) and documentation (Doc/cs.1) someplace appropriate. It is convenient to have users set their environment variable SATHER_COMMANDS to be -home -com /Library/base.commands and append ":/Doc/man" to their MANPATH. Problems you might encounter: It's possible that you'll run into prototype conflicts, due to system differences or non-ANSI header files. These can be remedied by adding declarations to the System/EXTERNS file. Sometimes there are simple namespace conflicts. These can be permanently eliminated by having me add the offending identifier to FORBID, and in the meantime add it yourself and do a textual search-and-replace in the boot code to change it to something else. If you have to modify the garbage collector, please send the changes to the author, Hans Boehm (boehm@parc.xerox.com), so he can include them in his next release. If one wants to encapsulate existing c++ classes for use with Sather, one would wish to have access to the c++ extensions in the GC library. This can be accomplished by changing "make" to "make c++" in the rule for "System/GC/gc.a". This does not hinder using straight Sather or Sather with external C code while enabling the use of the garbage collector with GC compliant c++ classes. Be sure to let me know what you had to add to get things running so I can include them in the next release. Whether it works or not, let me know by sending mail to "sather-bugs@icsi.berkeley.edu". Good luck! - Dave ----------------------------------------------------------------- Known changes necessary to compile on ported systems: ----------------------------------------------------------------- Systems on which it runs without changes: SunOS 4.1.3, gcc 2.5.8 Ultrix 4.3 Linux 1.0.8, gcc 2.5.8 and 1.1.x, libc4.6.x, gcc 2.6.0 HPUX 8.07, using gcc 2.5.8 Ultrix 4.4, DEC cc 3.0 (C. R. Thewalt ): GC changes needed. In Makefile, CC= cc -std1 -G0 -w In System/CONFIG.proto, for debugging use "-g3" Under IRIX, lots of conflicting reports: SGI IRIX 4.0.5H: no changes SGI IRIX 5.2 with the native compiler: Modify CONFIG to turn off warning message reporting "-w". Possibly set "RANLIB= echo". SCO Unix 3.2.4, gcc 2.5.8: (Michael Arnoldus ) CFLAGS = -O -DSCO In System/GC/Makefile: CC= gcc CFLAGS= -O -DALL_INTERIOR_POINTERS -DSILENT -DSCO SPECIALCFLAGS = -DSCO You'll need to get the GC mods too. SunOS 5.3, gcc 2.5.8: I found no changes needed. You may also try: CPP= gcc -traditional-cpp -x c -E -C -P RANLIB= ar st SunOS 5.3, cc: CPP = /usr/ccs/lib/cpp -C -P RANLIB = ar st CC = cc CFLAGS = -O -Xa -xcg92 Alpha, DEC OSF/1 V2.0, gcc 2.5.8: In Makefile: Use CPP= /usr/ucb/cpp -C -P -DALPHA CC= gcc -DALPHA GC_CC= cc (for some reason it breaks with gcc) On an alpha Sather INT is "int" instead of "long". This seems to work under gcc, but not "cc -std -taso" which would be slightly safer. I'd like to hear from somebody who can get 64 bits working. Under OSF/1 V3.0, stay away from the gcc 2.6.0 compiler; 2.5.8 works. (Frank Horowitz ) NetBSD 1.0_BETA: CPP= /usr/bin/cpp FreeBSD 1.1.5.1: d87-mal@nada.kth.se found: in Makefile, use "CPP= cpp -C -P" NeXTStep 3.2, gcc: Seems to be okay except some minor floating point result differences in the tests. This is caused by a bug in NeXT's printf, which doesn't do "%g" correctly. OS/2, emx 0.8h, gcc 2.5.7: Install other additional utilities: GNU make, GNU fileutils, bash (any sh-compliant shell), cmp (not essential) Modify the top-level Makefile: CPP= /emx/bin/cpp -C -P RANLIB= ar s CFLAGS= -O -D__EMX__ -D__32BIT__ CS= cs.exe TEST= test.exe GC_MKFL= EMX_Makefile Run command "set COMSPEC=bash.exe". Continue installation normally. Questions to Ari Juhani Huttunen . These systems needed GC changes which have been forwarded to Hans and I hope will be in the next version of the GC: Sony NEWSOS 4.1R, gcc 2.5.4 MIPS RISC os 4.53C, gcc 2.5 Ultrix 4.4, DEC cc 3.0 SCO Unix 3.2.4, gcc 2.5.8 If you have ported it successfully to a system, send the changes to "sather-bugs@icsi.berkeley.edu" so I can incorporate them; or let me know that it runs without changes.