Skeleton nv drm driver, to enable DMA in EXA. (Lars Knoll, minor updates by
[platform/upstream/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 := $(LINUXDIR)
48 endif
49
50 MACHINE := $(shell uname -m)
51
52 # Modules for all architectures
53 MODULE_LIST := drm.o tdfx.o r128.o radeon.o mga.o sis.o savage.o via.o \
54                mach64.o nv.o
55
56 # Modules only for ix86 architectures
57 ifneq (,$(findstring 86,$(MACHINE)))
58 ARCHX86 := 1
59 MODULE_LIST += i830.o i810.o i915.o
60 endif
61
62 ifneq (,$(findstring sparc64,$(MACHINE)))
63 ARCHSPARC64 := 1
64 MODULE_LIST += ffb.o
65 endif
66
67 DRM_MODULES ?= $(MODULE_LIST)
68
69 # These definitions are for handling dependencies in the out of kernel build.
70
71 DRMSHARED =     drm.h drm_sarea.h
72 DRMHEADERS =    drmP.h drm_compat.h drm_os_linux.h $(DRMSHARED)
73 COREHEADERS =   drm_core.h 
74
75 TDFXHEADERS =   tdfx_drv.h $(DRMHEADERS)
76 TDFXSHARED =    tdfx_drv.h
77 R128HEADERS =   r128_drv.h r128_drm.h $(DRMHEADERS)
78 R128SHARED =    r128_drv.h r128_drm.h r128_cce.c r128_state.c r128_irq.c
79 RADEONHEADERS = radeon_drv.h radeon_drm.h r300_reg.h $(DRMHEADERS)
80 RADEONSHARED =  radeon_drv.h radeon_drm.h radeon_cp.c radeon_irq.c \
81                 radeon_mem.c radeon_state.c r300_cmdbuf.c r300_reg.h
82 MGAHEADERS =    mga_drv.h mga_drm.h mga_ucode.h $(DRMHEADERS)
83 MGASHARED =     mga_dma.c mga_drm.h mga_drv.h mga_irq.c mga_state.c \
84                 mga_ucode.h mga_warp.c
85 I810HEADERS =   i810_drv.h i810_drm.h $(DRMHEADERS)
86 I830HEADERS =   i830_drv.h i830_drm.h $(DRMHEADERS)
87 I915HEADERS =   i915_drv.h i915_drm.h $(DRMHEADERS)
88 I915SHARED  =   i915_drv.h i915_drm.h i915_irq.c i915_mem.c i915_dma.c
89 SISHEADERS=     sis_drv.h sis_drm.h $(DRMHEADERS)
90 SISSHARED=      sis_drv.h sis_drm.h sis_ds.c sis_ds.h sis_mm.c
91 SAVAGEHEADERS=  savage_drv.h savage_drm.h $(DRMHEADERS)
92 SAVAGESHARED=   savage_drv.h savage_drm.h savage_bci.c savage_state.c
93 VIAHEADERS =    via_drm.h via_drv.h via_mm.h via_ds.h \
94                 via_3d_reg.h via_verifier.h $(DRMHEADERS)
95 VIASHARED       = via_drm.h via_drv.h via_mm.h via_ds.h \
96                 via_3d_reg.h via_drv.c via_ds.c via_irq.c via_map.c \
97                 via_mm.c via_dma.c via_verifier.c via_verifier.h via_video.c
98 MACH64HEADERS = mach64_drv.h mach64_drm.h $(DRMHEADERS)
99 MACH64SHARED =  mach64_drv.h mach64_drm.h mach64_dma.c \
100                 mach64_irq.c mach64_state.c
101 NVHEADERS =     nv_drv.h $(DRMHEADERS)
102 NVSHARED  =     nv_drv.h
103 FFBHEADERS =    ffb_drv.h $(DRMHEADERS)
104
105 SHAREDSRC = $(DRMSHARED) $(MGASHARED) $(R128SHARED) $(RADEONSHARED) \
106         $(SISSHARED) $(TDFXSHARED) $(VIASHARED) $(MACH64SHARED) \
107         $(I915SHARED) $(SAVAGESHARED) $(NVSHARED)
108
109 PROGS = dristat drmstat
110
111 CLEANFILES = *.o *.ko $(PROGS) .depend .*.flags .*.d .*.cmd *.mod.c linux drm_pciids.h .tmp_versions
112
113 # VERSION is not defined from the initial invocation.  It is defined when
114 # this Makefile is invoked from the kernel's root Makefile.
115
116 ifndef VERSION
117
118 ifdef RUNNING_REL
119
120 # SuSE has the version.h and autoconf.h headers for the current kernel
121 # in /boot as /boot/vmlinuz.version.h and /boot/vmlinuz.autoconf.h.
122 # Check these first to see if they match the running kernel.
123
124 BOOTVERSION_PREFIX = /boot/vmlinuz.
125
126 V := $(shell if [ -f $(BOOTVERSION_PREFIX)version.h ]; then \
127         grep UTS_RELEASE $(BOOTVERSION_PREFIX)version.h | \
128         cut -d' ' -f3; fi)
129
130 ifeq ($(V),"$(RUNNING_REL)")
131 HEADERFROMBOOT := 1
132 GETCONFIG := MAKEFILES=$(shell pwd)/.config
133 HAVECONFIG := y
134 endif
135
136 # On Red Hat we need to check if there is a .config file in the kernel
137 # source directory.  If there isn't, we need to check if there's a
138 # matching file in the configs subdirectory.
139
140 ifneq ($(HAVECONFIG),y)
141 HAVECONFIG := $(shell if [ -e $(LINUXDIR)/.config ]; then echo y; fi)
142 endif
143
144 ifneq ($(HAVECONFIG),y)
145 REL_BASE := $(shell echo $(RUNNING_REL) | sed 's/-.*//')
146 REL_TYPE := $(shell echo $(RUNNING_REL) | sed 's/[0-9.-]//g')
147 ifeq ($(REL_TYPE),)
148 RHCONFIG := configs/kernel-$(REL_BASE)-$(MACHINE).config
149 else
150 RHCONFIG := configs/kernel-$(REL_BASE)-$(MACHINE)-$(REL_TYPE).config
151 endif
152 HAVECONFIG := $(shell if [ -e $(LINUXDIR)/$(RHCONFIG) ]; then echo y; fi)
153 ifneq ($(HAVECONFIG),y)
154 RHCONFIG :=
155 endif
156 endif
157
158 ifneq ($(HAVECONFIG),y)
159 ifneq ($(0),$(LINUXDIR))
160 GETCONFIG += O=$(O)
161 endif
162 HAVECONFIG := $(shell if [ -e $(O)/.config ]; then echo y; fi)
163 endif
164
165 ifneq ($(HAVECONFIG),y)
166 $(error Cannot find a kernel config file)
167 endif
168
169 endif
170
171 CLEANCONFIG := $(shell if cmp -s $(LINUXDIR)/.config .config; then echo y; fi)
172 ifeq ($(CLEANCONFIG),y)
173 CLEANFILES += $(LINUXDIR)/.config .config $(LINUXDIR)/tmp_include_depends
174 endif
175
176 all: modules
177
178 modules: includes
179         make -C $(LINUXDIR) $(GETCONFIG) SUBDIRS=`pwd` DRMSRCDIR=`pwd` modules
180
181 ifeq ($(HEADERFROMBOOT),1)
182
183 BOOTHEADERS = version.h autoconf.h
184 BOOTCONFIG = .config
185
186 CLEANFILES += $(BOOTHEADERS) $(BOOTCONFIG)
187
188 includes:: $(BOOTHEADERS) $(BOOTCONFIG)
189
190 version.h: $(BOOTVERSION_PREFIX)version.h
191         rm -f $@
192         ln -s $< $@
193
194 autoconf.h: $(BOOTVERSION_PREFIX)autoconf.h
195         rm -f $@
196         ln -s $< $@
197
198 .config: $(BOOTVERSION_PREFIX)config
199         rm -f $@
200         ln -s $< $@
201 endif
202
203 # This prepares an unused Red Hat kernel tree for the build.
204 ifneq ($(RHCONFIG),)
205 includes:: $(LINUXDIR)/.config $(LINUXDIR)/tmp_include_depends .config
206
207 $(LINUXDIR)/.config: $(LINUXDIR)/$(RHCONFIG)
208         rm -f $@
209         ln -s $< $@
210
211 .config: $(LINUXDIR)/$(RHCONFIG)
212         rm -f $@
213         ln -s $< $@
214
215 $(LINUXDIR)/tmp_include_depends:
216         echo all: > $@
217 endif
218
219 # Make sure that the shared source files are linked into this directory.
220
221
222 SHAREDDIR := ../shared-core
223
224 HASSHARED := $(shell if [ -d $(SHAREDDIR) ]; then echo y; fi)
225
226 ifeq ($(HASSHARED),y)
227 includes:: $(SHAREDSRC) drm_pciids.h
228
229 drm_pciids.h: $(SHAREDDIR)/drm_pciids.txt
230         sh ../scripts/create_linux_pci_lists.sh < $(SHAREDDIR)/drm_pciids.txt
231
232 $(SHAREDSRC):
233         @if [ -r $(SHAREDDIR)/$@ ]; then \
234                 (rm -f $@; set -x; ln -s $(SHAREDDIR)/$@ $@); fi
235
236 CLEANFILES += $(SHAREDSRC)
237 endif
238
239 includes:: linux
240
241 linux:
242         rm -f linux
243         ln -s . linux
244
245 clean cleandir:
246         rm -rf $(CLEANFILES)
247
248 $(MODULE_LIST)::
249         make DRM_MODULES=$@ modules
250
251 # Build test utilities
252
253 PRGCFLAGS = $(CFLAGS) -g -ansi -pedantic -DPOSIX_C_SOURCE=199309L \
254             -D_POSIX_SOURCE -D_XOPEN_SOURCE -D_BSD_SOURCE -D_SVID_SOURCE \
255             -I. -I../../..
256
257 DRMSTATLIBS = -L../../.. -L.. -ldrm -lxf86_os \
258               -L../../../../dummylib -ldummy -lm
259
260 programs: $(PROGS)
261
262 dristat: dristat.c
263         $(CC) $(PRGCFLAGS) $< -o $@
264
265 drmstat: drmstat.c
266         $(CC) $(PRGCFLAGS) $< -o $@ $(DRMSTATLIBS)
267
268 else
269
270 # Check for kernel versions that we don't support.
271
272 BELOW24 := $(shell if [ $(VERSION) -lt 2 -o $(PATCHLEVEL) -lt 4 ]; then \
273                 echo y; fi)
274
275 ifeq ($(BELOW24),y)
276 $(error Only 2.4.x and later kernels are supported \
277         ($(VERSION).$(PATCHLEVEL).$(SUBLEVEL)))
278 endif
279
280 ifdef ARCHX86
281 ifndef CONFIG_X86_CMPXCHG
282 $(error CONFIG_X86_CMPXCHG needs to be enabled in the kernel)
283 endif
284 endif
285
286 # This needs to go before all other include paths.
287 CC += -I$(DRMSRCDIR)
288
289 # Check for Red Hat's 4-argument do_munmap().
290 DOMUNMAP := $(shell grep do_munmap $(LINUXDIR)/include/linux/mm.h | \
291                 grep -c acct)
292
293 ifneq ($(DOMUNMAP),0)
294 EXTRA_CFLAGS += -DDO_MUNMAP_4_ARGS
295 endif
296
297 # Check for 5-argument remap_page_range() in RH9 kernel, and 2.5.x kernels
298 RPR := $(shell grep remap_page_range $(LINUXDIR)/include/linux/mm.h | \
299                 grep -c vma)
300
301 ifneq ($(RPR),0)
302 EXTRA_CFLAGS += -DREMAP_PAGE_RANGE_5_ARGS
303 endif
304
305 # Check for 4-argument vmap() in some 2.5.x and 2.4.x kernels
306 VMAP := $(shell grep -A1 'vmap.*count,$$' $(LINUXDIR)/include/linux/vmalloc.h | \
307                 grep -c prot)
308
309 ifneq ($(VMAP),0)
310 EXTRA_CFLAGS += -DVMAP_4_ARGS
311 endif
312
313 # Check for PAGE_AGP definition
314 PAGE_AGP := $(shell cat $(LINUXDIR)/include/asm/agp.h 2>/dev/null | \
315                 grep -c PAGE_AGP)
316
317 ifneq ($(PAGE_AGP),0)
318 EXTRA_CFLAGS += -DHAVE_PAGE_AGP
319 endif
320
321
322 # Start with all modules turned off.
323 CONFIG_DRM_GAMMA := n
324 CONFIG_DRM_TDFX := n
325 CONFIG_DRM_MGA := n
326 CONFIG_DRM_I810 := n
327 CONFIG_DRM_R128 := n
328 CONFIG_DRM_RADEON := n
329 CONFIG_DRM_I830 := n
330 CONFIG_DRM_I915 := n
331 CONFIG_DRM_SIS := n
332 CONFIG_DRM_FFB := n
333 CONFIG_DRM_SAVAGE := n
334 CONFIG_DRM_VIA := n
335 CONFIG_DRM_MACH64 := n
336 CONFIG_DRM_NV := n
337
338 # Enable module builds for the modules requested/supported.
339
340 ifneq (,$(findstring tdfx,$(DRM_MODULES)))
341 CONFIG_DRM_TDFX := m
342 endif
343 ifneq (,$(findstring r128,$(DRM_MODULES)))
344 CONFIG_DRM_R128 := m
345 endif
346 ifneq (,$(findstring radeon,$(DRM_MODULES)))
347 CONFIG_DRM_RADEON := m
348 endif
349 ifneq (,$(findstring sis,$(DRM_MODULES)))
350 CONFIG_DRM_SIS := m
351 endif
352 ifneq (,$(findstring via,$(DRM_MODULES)))
353 CONFIG_DRM_VIA := m
354 endif
355 ifneq (,$(findstring mach64,$(DRM_MODULES)))
356 CONFIG_DRM_MACH64 := m
357 endif
358 ifneq (,$(findstring ffb,$(DRM_MODULES)))
359 CONFIG_DRM_FFB := m
360 endif
361 ifneq (,$(findstring savage,$(DRM_MODULES)))
362 CONFIG_DRM_SAVAGE := m
363 endif
364 ifneq (,$(findstring mga,$(DRM_MODULES)))
365 CONFIG_DRM_MGA := m
366 endif
367 ifneq (,$(findstring nv,$(DRM_MODULES)))
368 CONFIG_DRM_NV := m
369 endif
370
371 # These require AGP support
372
373 ifdef CONFIG_AGP
374 ifneq (,$(findstring i810,$(DRM_MODULES)))
375 CONFIG_DRM_I810 := m
376 endif
377 ifneq (,$(findstring i830,$(DRM_MODULES)))
378 CONFIG_DRM_I830 := m
379 endif
380 ifneq (,$(findstring i915,$(DRM_MODULES)))
381 CONFIG_DRM_I915 := m
382 endif
383 endif
384
385 include $(DRMSRCDIR)/Makefile.kernel
386
387 # Depencencies
388 $(drm-objs):    $(DRMHEADERS) $(COREHEADERS)
389 $(tdfx-objs):   $(TDFXHEADERS)
390 $(r128-objs):   $(R128HEADERS)
391 $(mga-objs):    $(MGAHEADERS)
392 $(i810-objs):   $(I810HEADERS)
393 $(i830-objs):   $(I830HEADERS)
394 $(i915-objs):   $(I915HEADERS)
395 $(radeon-objs): $(RADEONHEADERS)
396 $(sis-objs):    $(SISHEADERS)
397 $(ffb-objs):    $(FFBHEADERS)
398 $(savage-objs): $(SAVAGEHEADERS)
399 $(via-objs):    $(VIAHEADERS)
400 $(mach64-objs): $(MACH64HEADERS)
401 $(nv-objs):     $(NVHEADERS)
402
403 endif
404