summaryrefslogtreecommitdiff
path: root/README
blob: 9798546bcd51884527d8c93470c7678669cc8cbb (plain)
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227

	Notes on building Xenocara for OpenBSD X hackers

This document presents some techniques that can be useful for people
wanting to hack the xenocara tree. It assumes some basic knowledge of
the OpenBSD build system, as described in the release(8) manual page.

o About Xenocara
  --------------
Xenocara is the name chosen for OpenBSD's version of X. It's
currently based on X.Org 7.7 and its dependencies. The goal of
Xenocara is to provide a framework to host local modifications and to
automate the build of the modular X.Org components, including 3rd
party packages and some software maintained by OpenBSD developers.

o Source tree
  -----------

The organisation of the xenocara directory follows the general
organisation used in X.Org:

- app:	     X applications and utilities
- data:	     various data files (keyboard mappings and bitmaps)
- doc:	     documentation
- driver:    input and video drivers
- font:	     fonts
- lib:	     libraries
- proto:     X protocol headers
- util:	     utilities that don't fit anywhere else
- xserver:   the source for the X servers

In addition Xenocara uses the following directories:

- dist:	    contains some of the 3rd party sources, when keeping them
  	    separate helps the build system (Mesa and xkeyboard-config)
- distrib:  all binary distribution related tools and data
- etc:	    mtree(8) data files
- share:    make(1) configuration for Xenocara

At the top-level directory two files describe the individual
components of Xenocara:

- MODULES  lists all X.Org components (imported from the X.Org
	   distribution at http://xorg.freedesktop.org/archive/)
- 3RDPARTY lists all 3rd party software components provided in Xenocara,
	   either as dependencies of the X.Org software, or as
	   complements to it to provide a more useable default
	   environment.

o Compiling and installing
  ------------------------

Xenocara is made up of almost three hundred different independent
packages that need to be built and installed in the right order,
especially while bootstrapping (while /usr/X11R6 is still empty). The
Xenocara Makefiles take care of that using the 'build' target.

  Quick startup guide

The following steps will build and install everything for the first time.

 cd xenocara
 make bootstrap
 make obj
 make build

If you want to use another obj directory see below.

  Requirements

A freshly checked out xenocara tree is buildable without any external
tool. Only the xenocara and the src (currently only the
src/sys/dev/pci/pcidevs file) trees are needed.

However if you start modifying things in the automake build
system used by many packages, you will need to have the following
GNU autotools packages installed:

    - automake 1.12 (devel/automake/1.12)
    - autoconf 2.69 (devel/autoconf/2.69)
    - metaauto 0.9 (or later) (devel/metaauto)
    - libtool 2.4.2 (or later) (devel/libtool)

If you have your source tree on an NFS partition, make sure the clock
of your server and client are properly synchronised. Any significant
drift will cause various problems during builds.

  Path

To build Xenocara, you need to have /usr/X11R6/bin in your PATH.

  Sudo

If the SUDO variable points to your sudo(8) binary in /etc/mk.conf,
'make build' can be run as a normal user. It will raise its privileges
whenever needed with sudo. Otherwise, you need to run make build as
root.

If you have installed the full Xenocara X sets on your system, you
don't need to build all of Xenocara to patch one element. You can go
to any module sub-directory and run 'make build' from there.

  Source directory

The variable XSRCDIR can be set either in the environment or in
/etc/mk.conf to point to the xenocara source tree, in case you keep it
in a non-standard directory (the default is /usr/xenocara).

  Objdirs

Xenocara supports objdirs (and it's even the recommended way to build
things). Just run 'make obj' at any level before 'make build' to make
sure that the object directories are created.
XOBJDIR defines the obj directory that is used (defaults to /usr/xobj).
It should be created before running 'make obj'.

o Regenerating configure scripts
  ------------------------------

Whenever you touched an import file for GNU autotools (Makefile.am,
configure.ac mostly), you need to rebuild the configure script and
makefiles skeletons. For that use the following command in the
directory where you edited the autotools source files:

 env XENOCARA_RERUN_AUTOCONF=Yes make -f Makefile.bsd-wrapper build

You can also set XENOCARA_RERUN_AUTOCONF in /etc/mk.conf or in the
environment to force the regeneration of configure scripts
in every component during a make build.

o Building Gallium3D rasterizer for Mesa
  --------------------------------------

The Gallium3D software rasterizer can be built to be used as an
alternative to the default Mesa software rasterizer. For that, use
the following command in the libGL build directory (the default is 
/usr/xenocara/lib/libGL):

 env XENOCARA_BUILD_GALLIUM=Yes make obj
 env XENOCARA_BUILD_GALLIUM=Yes make build

This software rasertizer can also benefit from the LLVM infrastructure
and use a special pipe if it is built with LLVM support. You will need
to have the llvm package installed and use the following command in the
libGL build directory:

 env XENOCARA_BUILD_GALLIUM=llvm make obj
 env XENOCARA_BUILD_GALLIUM=llvm make build

Alternatively, you can also set XENOCARA_BUILD_GALLIUM in /etc/mk.conf
or in your environment.

o Cleaning in packages managed by autotools
  -----------------------------------------

One common problem when building xenocara is the case where the obj
directory didn't exist (or the symbolic link pointed to a non-existent
directory) when the source was first built. After fixing this problem,
'configure' will refuse to work in the obj dir, because the source
is already configured.

To recover from this in one package:

 rm -f obj
 make -f Makefile.bsd-wrapper cleandir
 mkdir XOBJDIR
 make -f Makefile.bsd-wrapper obj
 make -f Makefile.bsd-wrapper build

or from the root of the xenocara tree:

 find . -type l -name obj | xargs rm -f
 make cleandir
 mkdir XOBJDIR
 make obj
 make build

for more desperate cases, remove all files from XSRCDIR not in CVS:

 cd XSRCDIR
 cvs -q update -PAd -I - | awk '$1=="?" {print $2}' | xargs rm -f

o How to build something with debug information?
  ----------------------------------------------

You can use "env CFLAGS=-g make -f Makefile.bsd-wrapper build" to
build any module with debugging information, but you'll need to remove
XOBJDIR/xorg-config.cache.${MACHINE} before doing that because
autoconf caches the value of CFLAGS in its cache.

o How to get a core file out of the X server?
  -------------------------------------------

Several things are needed:

1) set kern.nosuidcoredump=2 in /etc/sysctl.conf
2) put

        Option  "NoTrapSignals" "true"

   in the "ServerFlags" section of /etc/X11/xorg.conf. If such a section
   doesn't exist, it can be added as follow:

   Section "ServerFlags"
        Option  "NoTrapSignals" "true"
   EndSection

   anywhere in the configuration file.

3) start the X server as root, with the -keepPriv option. A regular
   user is not allowed to use this option. If you use xdm, you can add
   the option in /etc/X11/xdm/Xservers. If you want to use startx, you
   need to run it as root, like this:

   startx -- /usr/X11R6/bin/X -keepPriv

Now the X server will dump core when catching a fatal signal. But it
will also not be able to restore the text mode on exit. So be prepared
to log in remotely (serial terminal or ssh) to reboot your machine or
to restart X.

The core dump will be in /var/crash.

See also <http://xorg.freedesktop.org/wiki/Development/Documentation/ServerDebugging>

-- 
$OpenBSD: README,v 1.33 2013/05/14 07:55:46 ajacoutot Exp $