OSDN Git Service

Use headers copied from kernel instead of shared-core
[android-x86/external-libdrm.git] / linux-core / Makefile
1 # Makefile -- For the Direct Rendering Manager module (drm)
2 #
3 # Based on David Woodhouse's mtd build.
4 #
5 # Modified to handle the DRM requirements and builds on a wider range of
6 # platforms in a flexible way by David Dawes.  It's not clear, however,
7 # that this approach is simpler than the old one.
8 #
9 # The purpose of this Makefile is to handle setting up everything
10 # needed for an out-of-kernel source build.  Makefile.kernel contains
11 # everything required for in-kernel source builds.  It is included into
12 # this file, so none of that should be duplicated here.
13 #
14 # $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/Makefile.linux,v 1.40 2003/08/17 17:12:25 dawes Exp $
15 #
16
17 #
18 # By default, the build is done against the running linux kernel source.
19 # To build against a different kernel source tree, set LINUXDIR:
20 #
21 #    make LINUXDIR=/path/to/kernel/source
22
23 #
24 # To build only some modules, either set DRM_MODULES to the list of modules,
25 # or specify the modules as targets:
26 #
27 #    make r128.o radeon.o
28 #
29 # or:
30 #
31 #    make DRM_MODULES="r128 radeon"
32 #
33
34 SHELL=/bin/sh
35
36 .SUFFIXES:
37
38 ifndef LINUXDIR
39 RUNNING_REL := $(shell uname -r)
40
41 LINUXDIR := $(shell if [ -e /lib/modules/$(RUNNING_REL)/source ]; then \
42                  echo /lib/modules/$(RUNNING_REL)/source; \
43                  else echo /lib/modules/$(RUNNING_REL)/build; fi)
44 endif
45
46 ifndef O
47 O := $(shell if [ -e /lib/modules/$(RUNNING_REL)/build ]; then \
48                  echo /lib/modules/$(RUNNING_REL)/build; \
49                  else echo ""; fi)
50 #O := $(LINUXDIR)
51 endif
52
53 ifdef ARCH
54 MACHINE := $(ARCH)
55 else
56 MACHINE := $(shell uname -m)
57 endif
58
59 # Modules for all architectures
60 MODULE_LIST := drm.o tdfx.o r128.o radeon.o mga.o sis.o savage.o via.o \
61                mach64.o xgi.o
62
63 # Modules only for ix86 architectures
64 ifneq (,$(findstring 86,$(MACHINE)))
65 ARCHX86 := 1
66 MODULE_LIST += i810.o
67 endif
68
69 ifneq (,$(findstring sparc64,$(MACHINE)))
70 ARCHSPARC64 := 1
71 #MODULE_LIST += ffb.o
72 endif
73
74 DRM_MODULES ?= $(MODULE_LIST)
75
76 # These definitions are for handling dependencies in the out of kernel build.
77
78 DRMHEADERS =    drmP.h drm_compat.h drm_os_linux.h drm.h drm_sarea.h
79 COREHEADERS =   drm_core.h drm_sman.h drm_hashtab.h 
80
81 TDFXHEADERS =   tdfx_drv.h $(DRMHEADERS)
82 R128HEADERS =   r128_drv.h r128_drm.h $(DRMHEADERS)
83 RADEONHEADERS = radeon_drv.h radeon_drm.h r300_reg.h $(DRMHEADERS)
84 MGAHEADERS =    mga_drv.h mga_drm.h mga_ucode.h $(DRMHEADERS)
85 I810HEADERS =   i810_drv.h i810_drm.h $(DRMHEADERS)
86 SISHEADERS=     sis_drv.h sis_drm.h drm_hashtab.h drm_sman.h $(DRMHEADERS)
87 SAVAGEHEADERS=  savage_drv.h savage_drm.h $(DRMHEADERS)
88 VIAHEADERS =    via_drm.h via_drv.h via_3d_reg.h via_verifier.h $(DRMHEADERS)
89 MACH64HEADERS = mach64_drv.h mach64_drm.h $(DRMHEADERS)
90 FFBHEADERS =    ffb_drv.h $(DRMHEADERS)
91 NOUVEAUHEADERS = nouveau_drv.h nouveau_drm.h nouveau_reg.h $(DRMHEADERS)
92 XGIHEADERS = xgi_cmdlist.h xgi_drv.h xgi_misc.h xgi_regs.h $(DRMHEADERS)
93
94 CLEANFILES = *.o *.ko .depend .*.flags .*.d .*.cmd *.mod.c drm_pciids.h .tmp_versions
95
96 # VERSION is not defined from the initial invocation.  It is defined when
97 # this Makefile is invoked from the kernel's root Makefile.
98
99 ifndef VERSION
100
101 ifdef RUNNING_REL
102
103 # SuSE has the version.h and autoconf.h headers for the current kernel
104 # in /boot as /boot/vmlinuz.version.h and /boot/vmlinuz.autoconf.h.
105 # Check these first to see if they match the running kernel.
106
107 BOOTVERSION_PREFIX = /boot/vmlinuz.
108
109 V := $(shell if [ -f $(BOOTVERSION_PREFIX)version.h ]; then \
110         grep UTS_RELEASE $(BOOTVERSION_PREFIX)version.h | \
111         cut -d' ' -f3; fi)
112
113 ifeq ($(V),"$(RUNNING_REL)")
114 HEADERFROMBOOT := 1
115 GETCONFIG := MAKEFILES=$(shell /bin/pwd)/.config
116 HAVECONFIG := y
117 endif
118
119 # On Red Hat we need to check if there is a .config file in the kernel
120 # source directory.  If there isn't, we need to check if there's a
121 # matching file in the configs subdirectory.
122
123 ifneq ($(HAVECONFIG),y)
124 HAVECONFIG := $(shell if [ -e $(LINUXDIR)/.config ]; then echo y; fi)
125 endif
126
127 ifneq ($(HAVECONFIG),y)
128 REL_BASE := $(shell echo $(RUNNING_REL) | sed 's/-.*//')
129 REL_TYPE := $(shell echo $(RUNNING_REL) | sed 's/[0-9.-]//g')
130 ifeq ($(REL_TYPE),)
131 RHCONFIG := configs/kernel-$(REL_BASE)-$(MACHINE).config
132 else
133 RHCONFIG := configs/kernel-$(REL_BASE)-$(MACHINE)-$(REL_TYPE).config
134 endif
135 HAVECONFIG := $(shell if [ -e $(LINUXDIR)/$(RHCONFIG) ]; then echo y; fi)
136 ifneq ($(HAVECONFIG),y)
137 RHCONFIG :=
138 endif
139 endif
140
141 ifneq ($(HAVECONFIG),y)
142 ifneq ($(0),$(LINUXDIR))
143 GETCONFIG += O=$(O)
144 endif
145 HAVECONFIG := $(shell if [ -e $(O)/.config ]; then echo y; fi)
146 endif
147
148 ifneq ($(HAVECONFIG),y)
149 $(error Cannot find a kernel config file)
150 endif
151
152 endif
153
154 CLEANCONFIG := $(shell if cmp -s $(LINUXDIR)/.config .config; then echo y; fi)
155 ifeq ($(CLEANCONFIG),y)
156 CLEANFILES += $(LINUXDIR)/.config .config $(LINUXDIR)/tmp_include_depends
157 endif
158
159 all: modules
160
161 modules: includes
162         +make -C $(LINUXDIR) $(GETCONFIG) SUBDIRS=`/bin/pwd` DRMSRCDIR=`/bin/pwd` modules
163
164 ifeq ($(HEADERFROMBOOT),1)
165
166 BOOTHEADERS = version.h autoconf.h
167 BOOTCONFIG = .config
168
169 CLEANFILES += $(BOOTHEADERS) $(BOOTCONFIG)
170
171 includes:: $(BOOTHEADERS) $(BOOTCONFIG)
172
173 version.h: $(BOOTVERSION_PREFIX)version.h
174         rm -f $@
175         ln -s $< $@
176
177 autoconf.h: $(BOOTVERSION_PREFIX)autoconf.h
178         rm -f $@
179         ln -s $< $@
180
181 .config: $(BOOTVERSION_PREFIX)config
182         rm -f $@
183         ln -s $< $@
184 endif
185
186 # This prepares an unused Red Hat kernel tree for the build.
187 ifneq ($(RHCONFIG),)
188 includes:: $(LINUXDIR)/.config $(LINUXDIR)/tmp_include_depends .config
189
190 $(LINUXDIR)/.config: $(LINUXDIR)/$(RHCONFIG)
191         rm -f $@
192         ln -s $< $@
193
194 .config: $(LINUXDIR)/$(RHCONFIG)
195         rm -f $@
196         ln -s $< $@
197
198 $(LINUXDIR)/tmp_include_depends:
199         echo all: > $@
200 endif
201
202 # Make sure that the shared source files are linked into this directory.
203
204
205 SHAREDDIR := ../shared-core
206
207 ifeq ($(shell if [ -d $(SHAREDDIR) ]; then echo y; fi),y)
208 includes::  drm_pciids.h
209
210 drm_pciids.h: $(SHAREDDIR)/drm_pciids.txt
211         sh ../scripts/create_linux_pci_lists.sh < $(SHAREDDIR)/drm_pciids.txt
212 endif
213
214 clean cleandir:
215         rm -rf $(CLEANFILES)
216
217 $(MODULE_LIST)::
218         make DRM_MODULES=$@ modules
219
220 install:
221         make -C $(LINUXDIR) $(GETCONFIG) SUBDIRS=`/bin/pwd` DRMSRCDIR=`/bin/pwd` modules_install
222
223 else
224
225 # Check for kernel versions that we don't support.
226
227 BELOW26 := $(shell if [ $(VERSION) -lt 2 -o $(PATCHLEVEL) -lt 6 ]; then \
228                 echo y; fi)
229
230 ifeq ($(BELOW26),y)
231 $(error Only 2.6.x and later kernels are supported \
232         ($(VERSION).$(PATCHLEVEL).$(SUBLEVEL)))
233 endif
234
235 ifdef ARCHX86
236 ifndef CONFIG_X86_CMPXCHG
237 $(error CONFIG_X86_CMPXCHG needs to be enabled in the kernel)
238 endif
239 endif
240
241 # This needs to go before all other include paths.
242 CC += -I$(DRMSRCDIR)
243
244 # Check for PAGE_AGP definition
245 PAGE_AGP := $(shell cat $(LINUXDIR)/include/asm/agp.h 2>/dev/null | \
246                 grep -c PAGE_AGP)
247
248 ifneq ($(PAGE_AGP),0)
249 EXTRA_CFLAGS += -DHAVE_PAGE_AGP
250 endif
251
252 ifeq ($(OS_HAS_GEM), 1)
253 EXTRA_CFLAGS += -DOS_HAS_GEM=1
254 endif
255
256 # Start with all modules turned off.
257 CONFIG_DRM_GAMMA := n
258 CONFIG_DRM_TDFX := n
259 CONFIG_DRM_MGA := n
260 CONFIG_DRM_I810 := n
261 CONFIG_DRM_R128 := n
262 CONFIG_DRM_RADEON := n
263 CONFIG_DRM_SIS := n
264 CONFIG_DRM_FFB := n
265 CONFIG_DRM_SAVAGE := n
266 CONFIG_DRM_VIA := n
267 CONFIG_DRM_MACH64 := n
268 CONFIG_DRM_NOUVEAU := n
269 CONFIG_DRM_XGI := n
270
271 # Enable module builds for the modules requested/supported.
272
273 ifneq (,$(findstring tdfx,$(DRM_MODULES)))
274 CONFIG_DRM_TDFX := m
275 endif
276 ifneq (,$(findstring r128,$(DRM_MODULES)))
277 CONFIG_DRM_R128 := m
278 endif
279 ifneq (,$(findstring radeon,$(DRM_MODULES)))
280 CONFIG_DRM_RADEON := m
281 endif
282 ifneq (,$(findstring sis,$(DRM_MODULES)))
283 CONFIG_DRM_SIS := m
284 endif
285 ifneq (,$(findstring via,$(DRM_MODULES)))
286 CONFIG_DRM_VIA := m
287 endif
288 ifneq (,$(findstring mach64,$(DRM_MODULES)))
289 CONFIG_DRM_MACH64 := m
290 endif
291 ifneq (,$(findstring ffb,$(DRM_MODULES)))
292 CONFIG_DRM_FFB := m
293 endif
294 ifneq (,$(findstring savage,$(DRM_MODULES)))
295 CONFIG_DRM_SAVAGE := m
296 endif
297 ifneq (,$(findstring mga,$(DRM_MODULES)))
298 CONFIG_DRM_MGA := m
299 endif
300 ifneq (,$(findstring nouveau,$(DRM_MODULES)))
301 CONFIG_DRM_NOUVEAU := m
302 endif
303 ifneq (,$(findstring xgi,$(DRM_MODULES)))
304 CONFIG_DRM_XGI := m
305 endif
306
307 # These require AGP support
308
309 ifneq (,$(findstring i810,$(DRM_MODULES)))
310 CONFIG_DRM_I810 := m
311 endif
312
313 GIT_REVISION := $(shell cd "$(DRMSRCDIR)" && git describe --abbrev=17)
314 ifneq ($(GIT_REVISION),)
315 EXTRA_CFLAGS+=-D"GIT_REVISION=\"$(GIT_REVISION)\""
316 endif
317
318 include $(DRMSRCDIR)/Makefile.kernel
319
320 # Depencencies
321 $(drm-objs):    $(DRMHEADERS) $(COREHEADERS)
322 $(tdfx-objs):   $(TDFXHEADERS)
323 $(r128-objs):   $(R128HEADERS)
324 $(mga-objs):    $(MGAHEADERS)
325 $(i810-objs):   $(I810HEADERS)
326 $(radeon-objs): $(RADEONHEADERS)
327 $(sis-objs):    $(SISHEADERS)
328 $(ffb-objs):    $(FFBHEADERS)
329 $(savage-objs): $(SAVAGEHEADERS)
330 $(via-objs):    $(VIAHEADERS)
331 $(mach64-objs): $(MACH64HEADERS)
332 $(nouveau-objs): $(NOUVEAUHEADERS)
333 $(xgi-objs):    $(XGIHEADERS)
334
335 endif
336