123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- $Id$
- The Free Pascal *BSD port.
- Comments, mistakes and suggestions to [email protected]
- Since the last update to this document, I added the Net and OpenBSD ports,
- so now it is a *BSD port. I don't own BSDi or a Mac OS X, or even accounts
- on an intel system so that'll have to wait. (the Mac OS X/Darwin port
- will definitely take off if the PPC codegenerator is fully working)
- In 1.1.x branch, the tree RTLs will be merged into one, for easier
- maintaining, this will hopefully increase the Open and NetBSD ports
- somewhat.
- I'm actively searching for test accounts on Open and NetBSD/i386 (and
- in the future also for other processors).
- Requirements: minimal: some MBs account, permanent connection, 100 MHz+
- (speed not that important)
- cool : 100 MB + 100MB tempspace, low latency connection
- fast machine that allows swift cycling.
- 1 *BSD status and notes. (kept on CVS because I work on several places)
- -----------------------------------------------------------------------------
- Please read these before running a *BSD snapshot/release
- 1.1 Supported OS versions.
- ---
- FREEBSD
- 4.x : Used to develop and maintain port. Should work, all
- versions. Best *BSD platform.
- 3.x : _not_ supported, (3.2, 3.4, 3.6 would probably work
- with some very minor changes to the signalhandling. The
- syscall numbers changed)
- (NON-ELF) 2.x : _not_ supported, but it might be doable. (the
- OpenBSD port works on a.out)
-
- 5.0DP1 : simple testing seemed to work without changes. Nearly
- no package tests tried though.
- NetBSD 1.5.x : Most stuff should work.
- Rest : status unknown, though some NetBSD developper said
- he didn't expect problems for 1.6.x
-
- OpenBSD 3.1 : This version should work somewhat. Needs an assembler
- from the ports tree (devel/binutils) to function
- properly. Linker of the ports tree is easier,
- but that one doesn't want to make shared files.
- The IDE also is starting to work quite nicely on FreeBSD, so it is included
- in the releases since 1.0.6. I didn't check the fixes for *BSD on the other
- two OSes yet.
- 1.2 Known bugs
- ---
- The FreeBSD/FPC port is now more or less a tested distro. There are several
- known bugs, but I can now only remember one:
- - Recover from Delphi exceptions that originate as processor exceptions
- will go wrong. (see texception4 in the test suite)
- (recovering from several processor
- exceptions in one proc will have unpredictable results (breakable hang
- probably))
- 1.3 Possible issues.
- Some things are not really bugs, but status is unknown, or there is
- something dodgy about the implementation:
- - The NetBSD and OpenBSD ports are barely tested, they build on the stable
- FreeBSD base though. Most packages (and the FCL) have been tested with
- FreeBSD, quite some with NetBSD, nearly none with OpenBSD.
- - IMPORTANT:
- !!! An explicite warning: Not all procedures and structures in Linux are
- checked, so even if they are not commented out, they can be not implemented!!!
- This specially applies to linux specific stuff. In case of doubt, use a
- scratch system, view the source, or mail the maintainer.
- I fixed a bug in truncate just a few months ago, that had gone unnoticed
- for the near two years that the port works now.!!!
- - The absence of kernel READDIR support has been fixed with a "hack", which
- means that searchpath (-Fx) and FindFirst/FindNext are more or less
- working. This "hacked" readdir implementation is now 1 1/2 year
- bugfree now (and no anomolies detected), and works on the other two BSDs
- too. Be careful with usage on "special" filesystems and files though.
- (devfs, tmpfs hardlinks)
- Together with Sebastian I developped a port of the libc routines, but
- they don't work yet (NOTE to self: retest, am a lot better with debugger
- now)
- 3 How to build a *BSD compiler/RTL ?
- -----------------------------------------------------------------------------
- To rebuild the compiler, you need a starting compiler which is either the
- last releaseversion, or the release you are building itself (but e.g. on
- other OS)
- Preparation:
- - make sure your tree is up to date and cleaned of stale object and unit files.
- - I assume ppc386 is the name of your compiler. Append PP=<compilername> and
- replace ppc386 with your compilername if it is different on your system.
- - I'll assume we are building openbsd on one of the other systems.
- - Start compiler on other OS? (tested is Linux) -> check 3.1
- (crosscompiling)
- - Already a suitable 1.0.x startcompiler on *BSD -> 3.2 is much
- easier.
- Trying to build with snapshot compiler binaries is no problem mosttimes, but
- release compilers _ought_ to work.
- 3.1 How to build a *BSD system starting on (another *BSD, Linux, or Linux
- emu on any of them).
- ---
- The procedure here is verbose, and for the most akward case. If you have
- linux support on on your FreeBSD machine, or operate on NFS or Samba share
- (so that copying and using the sources in two systems is easier) some steps
- can be omitted or simplified. Just play with it.
- create the RTL:
- 1. go to the target RTL directory. (if you want to build for OpenBSD, to
- rtl/openbsd).
- 2. If your binary format is the same (both are ELF), simply run
- (g)make OS_TARGET=openbsd
- this will be called "case A" from now on.
- Otherwise we need to build via assembler files; (CASE B) and you'll
- need to execute:
-
- (g)make OS_TARGET=openbsd OPT='-a'
- compile the compiler:
- 3. Go to the compiler/ directory
- Case A:
-
- make OS_TARGET=openbsd OPT='-Fu../rtl/openbsd -kdontlink'
- Case B:
- make OS_TARGET=openbsd OPT='-Fu../rtl/openbsd -kdontlink -a'
- 4 Collect all necessary files, put them in one directory on the target
- computer.
- Case A: - all *.o and *.ppu files in compiler/ and rtl/openbsd/
- - compiler/link.res and
- - compiler/ppas.sh
- Case B: - All *.s and *.ppu files in compiler/ and rtl/openbsd/
- - the prt0.as file in rtl/openbsd/i386, rename this file to prt0.s
- - compiler/link.res and compiler/ppas.sh
- Creating the final compiler:
- 5 edit link.res, and fix all paths (it will include ../rtl/openbsd, simply
- remove all paths in the INPUT() section, so filenames only)
- Remove "dontlink" from the commandline of the linker in the ppas.sh file,
- and make the ppas.sh file executable with chmod.
- 6 Make sure you are in the right dir.
- Case A: run ppas.sh
- Case B: run the do_s script in the appendix (which will assembler all *.s
- files to *.o on the target system), THEN run ppas.sh
- 7 Test your compiler with pp -?, brandelf if necessary. (NetBSD ident code is
- already in the prt0.s file. Will be for ELF OpenBSD too)
- Rebuild everything (compiler+RTL+FCL+pkgs) on the host system:
- 8 Go to the toplevel directory fpc/
- 9 Enter:
- gmake all
-
- Install the system
- 10 gmake install
- (will install into $PREFIX=/usr/local)
- 3.2 How to build a *BSD system if you have a suitable compiler on the
- targetsystem.
- ---
- Rebuild everything (compiler+RTL+FCL+pkgs) on the host system:
- 1 Go to the toplevel directory fpc/
- 2 Enter:
- gmake all
-
- Install the system
- 3 gmake install
- (will install into $PREFIX=/usr/local)
- ------------------
- Appendix A: The DO_S script. (C) El Znorro
- ------------------
- #!/bin/sh
- for i in *.s; do
- flup=`basename $i .s`
- as $i -o $flup.o
- echo $i
- echo $flup
- done
- {
- $Log$
- Revision 1.5 2003-11-18 21:47:19 marco
- * minor updates
- Revision 1.4 2002/09/07 16:01:17 peter
- * old logs removed and tabs fixed
- Revision 1.3 2002/08/08 20:39:26 marco
- * Practically rewritten in first update in 2 years or so.
- }
|