4 BUILDING THE DISTRIBUTION

Contents of this section

Refer to xc/programs/Xserver/hw/xfree86/INSTALL for details about building and configuring the distribution.

I build XFree86 under a Tahoe Binary Environment with a Mach 2.5 kernel and I make sure that the Mach 3.0 "release" include files and libraries are not on my path. The Mach interface (API) is slightly different between the Mach 2.5 kernel and Mach 3.0 kernel, but the Mach 3.0 kernel was designed to be upwardly compatible with Mach 2.5 kernel. This means that if you build XFree86 with Mach 2.5 includes and libraries the default in the Tahoe Environment the binaries will run on either Mach 3.0 or Mach 2.5.

If you choose to build with the Mach 3.0 headers and libraries, the applications will only work with the Mach 3.0 kernel. The Mach kernel calls made in some of the vga*/*/*driver.c and SuperProbe use the Mach 2.5 calls names. To build with Mach 3.0 these latter few Mach 2.5 dependencies must be changed.

There are several different Mach Operating Systems available. One is distributed by Mt.Xinu. The others are distributed by CMU; CMU distributes two different OS's; Mach 2.5 - a monolithic kernel and Mach 3.0 a micro kernel with Unix as a server. Both OS's from CMU use the same set of binaries which were developed from the BSD4.3 Tahoe release. (Note the Mt.Xinu system uses a later "generation" of application programs. Lastly, the environment used internally at CMU is still different from what is distributed externally. This environment supports AFS and Kerberos and ...) The CMU Tahoe environment uses a gcc 1.36 compiler with a bsd derived cpp (not __STDC__); the Mt.Xinu system uses gcc 1.37.

We do not build XFree86 under all these systems, just one -- CMU Tahoe environment distributed with Mach 2.5. It should be possible to build XFree86 using any application environment and with either Mach 2.5 or Mach 3.0. Please let us know of any difficulties.

>
++Some changes are necessary to the Original Tahoe environment to build++
++X11R6.  A few "new" functions are called and were thus added to      ++
++/lib/libc.a(mbtowc.c, putenv.c, strdup.c, and strtol.c) and a few old++
++ header files were modified to guard against multiple inclusions     ++
++(/usr/include/{time.h,utmp.h}).  These three files should be         ++
++dated May 31 1994; if they are not, "sup" to get the latest copies.  ++
++The X11R6 build was done with the gcc 2.3.3 compiler that is shipped ++
++with Mach 3.0.  You probably want to use this gcc, or maybe even get ++
++a later version.  THERE IS ONE DEPENDENCY ON THE COMPILER IN         ++
++xc/config/cf/mach.cf; CPP IS SPECIFIED AS:			       ++
++#define CppCmd	/usr/mach3/lib/gcc-lib/i386-mach/2.3.3/cpp     ++
++#define PreProcessCmd	/usr/mach3/lib/gcc-lib/i386-mach/2.3.3/cpp     ++
++THIS ASSUMES THAT THE COMPILER AND MACH3 "RELEASE" ARE ROOTED AT     ++
++/usr/mach3.  IF YOU DO NOT FOLLOW THIS PRACTICE OR USE ANOTHER       ++
++COMPILER, YOU MUST CHANGE THESE TWO LINES ACCORDINGLY.  Before you   ++
++start the compilation you must type:				       ++
++	limit datasize unlimited				       ++
++Two of the .c files (lib/X11/StrKeysym.c and			       ++
++programs/Xserver/XIE/mixie/fax/faxtabs.c) generate intermediaries    ++
++that exceed the default limit of 6Meg for data.  Lastly, if you are  ++
++building the Local CMU Environment make sure that /usr/cs/include is ++
++NOT on your CPATH.						       ++
The normal XFree86 distribution makes all the servers in bin/ setuid root; this is not necessary. In Mach, access to I/O privileges is not controlled by root; rather it is controlled by /dev/iopl. What is necessary for Mach is that the X servers be able to open /dev/iopl for read/write. There are many ways to achieve this effect.

$XConsortium: Mach.sgml,v 1.3 95/01/27 16:14:25 kaleb Exp $
$XFree86: xc/programs/Xserver/hw/xfree86/doc/sgml/Mach.sgml,v 3.4 1995/01/28 16:01:49 dawes Exp $

Next Chapter, Previous Chapter

Table of contents of this chapter, General table of contents

Top of the document, Beginning of this Chapter