1 # Makefile -- For the Direct Rendering Manager module (drm)
3 # Based on David Woodhouse's mtd build.
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.
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.
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 $
18 # By default, the build is done against the running linux kernel source.
19 # To build against a different kernel source tree, set LINUXDIR:
21 # make LINUXDIR=/path/to/kernel/source
24 # To build only some modules, either set DRM_MODULES to the list of modules,
25 # or specify the modules as targets:
27 # make r128.o radeon.o
31 # make DRM_MODULES="r128 radeon"
39 RUNNING_REL := $(shell uname -r)
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)
50 MACHINE := $(shell uname -m)
52 # Modules for all architectures
53 MODULE_LIST := drm.0 tdfx.o r128.o radeon.o mga.o sis.o savage.o via.o mach64.o
55 # Modules only for ix86 architectures
56 ifneq (,$(findstring 86,$(MACHINE)))
58 MODULE_LIST += i830.o i810.o i915.o
61 ifneq (,$(findstring sparc64,$(MACHINE)))
66 DRM_MODULES ?= $(MODULE_LIST)
68 # These definitions are for handling dependencies in the out of kernel build.
70 DRMSHARED = drm.h drm_sarea.h
71 DRMHEADERS = drmP.h drm_compat.h drm_os_linux.h $(DRMSHARED)
72 COREHEADERS = drm_core.h
74 TDFXHEADERS = tdfx_drv.h $(DRMHEADERS)
75 TDFXSHARED = tdfx_drv.h
76 R128HEADERS = r128_drv.h r128_drm.h $(DRMHEADERS)
77 R128SHARED = r128_drv.h r128_drm.h r128_cce.c r128_state.c r128_irq.c
78 RADEONHEADERS = radeon_drv.h radeon_drm.h $(DRMHEADERS)
79 RADEONSHARED = radeon_drv.h radeon_drm.h radeon_cp.c radeon_irq.c \
80 radeon_mem.c radeon_state.c
81 MGAHEADERS = mga_drv.h mga_drm.h mga_ucode.h $(DRMHEADERS)
82 MGASHARED = mga_dma.c mga_drm.h mga_drv.h mga_irq.c mga_state.c \
83 mga_ucode.h mga_warp.c
84 I810HEADERS = i810_drv.h i810_drm.h $(DRMHEADERS)
85 I830HEADERS = i830_drv.h i830_drm.h $(DRMHEADERS)
86 I915HEADERS = i915_drv.h i915_drm.h $(DRMHEADERS)
87 I915SHARED = i915_drv.h i915_drm.h i915_irq.c i915_mem.c i915_dma.c
88 SISHEADERS= sis_drv.h sis_drm.h $(DRMHEADERS)
89 SISSHARED= sis_drv.h sis_drm.h sis_ds.c sis_ds.h sis_mm.c
90 SAVAGEHEADERS= savage_drv.h savage_drm.h $(DRMHEADERS)
91 SAVAGESHARED= savage_drv.h savage_drm.h savage_bci.c savage_state.c
92 VIAHEADERS = via_drm.h via_drv.h via_mm.h via_ds.h \
93 via_3d_reg.h $(DRMHEADERS)
94 VIASHARED = via_drm.h via_drv.h via_mm.h via_ds.h \
95 via_3d_reg.h via_drv.c via_ds.c via_irq.c via_map.c \
96 via_mm.c via_dma.c via_verifier.c
97 MACH64HEADERS = mach64_drv.h mach64_drm.h $(DRMHEADERS)
98 MACH64SHARED = mach64_drv.h mach64_drm.h mach64_dma.c \
99 mach64_irq.c mach64_state.c
100 FFBHEADERS = ffb_drv.h $(DRMHEADERS)
102 SHAREDSRC = $(DRMSHARED) $(MGASHARED) $(R128SHARED) $(RADEONSHARED) \
103 $(SISSHARED) $(TDFXSHARED) $(VIASHARED) $(MACH64SHARED) \
104 $(I915SHARED) $(SAVAGESHARED)
106 PROGS = dristat drmstat
108 CLEANFILES = *.o *.ko $(PROGS) .depend .*.flags .*.d .*.cmd *.mod.c linux drm_pciids.h .tmp_versions
110 # VERSION is not defined from the initial invocation. It is defined when
111 # this Makefile is invoked from the kernel's root Makefile.
117 # SuSE has the version.h and autoconf.h headers for the current kernel
118 # in /boot as /boot/vmlinuz.version.h and /boot/vmlinuz.autoconf.h.
119 # Check these first to see if they match the running kernel.
121 BOOTVERSION_PREFIX = /boot/vmlinuz.
123 V := $(shell if [ -f $(BOOTVERSION_PREFIX)version.h ]; then \
124 grep UTS_RELEASE $(BOOTVERSION_PREFIX)version.h | \
127 ifeq ($(V),"$(RUNNING_REL)")
129 GETCONFIG := MAKEFILES=$(shell pwd)/.config
133 # On Red Hat we need to check if there is a .config file in the kernel
134 # source directory. If there isn't, we need to check if there's a
135 # matching file in the configs subdirectory.
137 ifneq ($(HAVECONFIG),y)
138 HAVECONFIG := $(shell if [ -e $(LINUXDIR)/.config ]; then echo y; fi)
141 ifneq ($(HAVECONFIG),y)
142 REL_BASE := $(shell echo $(RUNNING_REL) | sed 's/-.*//')
143 REL_TYPE := $(shell echo $(RUNNING_REL) | sed 's/[0-9.-]//g')
145 RHCONFIG := configs/kernel-$(REL_BASE)-$(MACHINE).config
147 RHCONFIG := configs/kernel-$(REL_BASE)-$(MACHINE)-$(REL_TYPE).config
149 HAVECONFIG := $(shell if [ -e $(LINUXDIR)/$(RHCONFIG) ]; then echo y; fi)
150 ifneq ($(HAVECONFIG),y)
155 ifneq ($(HAVECONFIG),y)
156 ifneq ($(0),$(LINUXDIR))
159 HAVECONFIG := $(shell if [ -e $(O)/.config ]; then echo y; fi)
162 ifneq ($(HAVECONFIG),y)
163 $(error Cannot find a kernel config file)
168 CLEANCONFIG := $(shell if cmp -s $(LINUXDIR)/.config .config; then echo y; fi)
169 ifeq ($(CLEANCONFIG),y)
170 CLEANFILES += $(LINUXDIR)/.config .config $(LINUXDIR)/tmp_include_depends
176 make -C $(LINUXDIR) $(GETCONFIG) SUBDIRS=`pwd` DRMSRCDIR=`pwd` modules
178 ifeq ($(HEADERFROMBOOT),1)
180 BOOTHEADERS = version.h autoconf.h
183 CLEANFILES += $(BOOTHEADERS) $(BOOTCONFIG)
185 includes:: $(BOOTHEADERS) $(BOOTCONFIG)
187 version.h: $(BOOTVERSION_PREFIX)version.h
191 autoconf.h: $(BOOTVERSION_PREFIX)autoconf.h
195 .config: $(BOOTVERSION_PREFIX)config
200 # This prepares an unused Red Hat kernel tree for the build.
202 includes:: $(LINUXDIR)/.config $(LINUXDIR)/tmp_include_depends .config
204 $(LINUXDIR)/.config: $(LINUXDIR)/$(RHCONFIG)
208 .config: $(LINUXDIR)/$(RHCONFIG)
212 $(LINUXDIR)/tmp_include_depends:
216 # Make sure that the shared source files are linked into this directory.
219 SHAREDDIR := ../shared-core
221 HASSHARED := $(shell if [ -d $(SHAREDDIR) ]; then echo y; fi)
223 ifeq ($(HASSHARED),y)
224 includes:: $(SHAREDSRC) drm_pciids.h
226 drm_pciids.h: $(SHAREDDIR)/drm_pciids.txt
227 sh ../scripts/create_linux_pci_lists.sh < $(SHAREDDIR)/drm_pciids.txt
230 @if [ -r $(SHAREDDIR)/$@ ]; then \
231 (rm -f $@; set -x; ln -s $(SHAREDDIR)/$@ $@); fi
233 CLEANFILES += $(SHAREDSRC)
246 make DRM_MODULES=$@ modules
248 # Build test utilities
250 PRGCFLAGS = $(CFLAGS) -g -ansi -pedantic -DPOSIX_C_SOURCE=199309L \
251 -D_POSIX_SOURCE -D_XOPEN_SOURCE -D_BSD_SOURCE -D_SVID_SOURCE \
254 DRMSTATLIBS = -L../../.. -L.. -ldrm -lxf86_os \
255 -L../../../../dummylib -ldummy -lm
260 $(CC) $(PRGCFLAGS) $< -o $@
263 $(CC) $(PRGCFLAGS) $< -o $@ $(DRMSTATLIBS)
267 # Check for kernel versions that we don't support.
269 BELOW24 := $(shell if [ $(VERSION) -lt 2 -o $(PATCHLEVEL) -lt 4 ]; then \
273 $(error Only 2.4.x and later kernels are supported \
274 ($(VERSION).$(PATCHLEVEL).$(SUBLEVEL)))
278 ifndef CONFIG_X86_CMPXCHG
279 $(error CONFIG_X86_CMPXCHG needs to be enabled in the kernel)
283 # This needs to go before all other include paths.
286 # Check for Red Hat's 4-argument do_munmap().
287 DOMUNMAP := $(shell grep do_munmap $(LINUXDIR)/include/linux/mm.h | \
290 ifneq ($(DOMUNMAP),0)
291 EXTRA_CFLAGS += -DDO_MUNMAP_4_ARGS
294 # Check for 5-argument remap_page_range() in RH9 kernel, and 2.5.x kernels
295 RPR := $(shell grep remap_page_range $(LINUXDIR)/include/linux/mm.h | \
299 EXTRA_CFLAGS += -DREMAP_PAGE_RANGE_5_ARGS
302 # Check for 4-argument vmap() in some 2.5.x and 2.4.x kernels
303 VMAP := $(shell grep -A1 'vmap.*count,$$' $(LINUXDIR)/include/linux/vmalloc.h | \
307 EXTRA_CFLAGS += -DVMAP_4_ARGS
310 # Check for PAGE_AGP definition
311 PAGE_AGP := $(shell cat $(LINUXDIR)/include/asm/agp.h 2>/dev/null | \
314 ifneq ($(PAGE_AGP),0)
315 EXTRA_CFLAGS += -DHAVE_PAGE_AGP
319 # Start with all modules turned off.
320 CONFIG_DRM_GAMMA := n
325 CONFIG_DRM_RADEON := n
330 CONFIG_DRM_SAVAGE := n
332 CONFIG_DRM_MACH64 := n
334 # Enable module builds for the modules requested/supported.
336 ifneq (,$(findstring tdfx,$(DRM_MODULES)))
339 ifneq (,$(findstring r128,$(DRM_MODULES)))
342 ifneq (,$(findstring radeon,$(DRM_MODULES)))
343 CONFIG_DRM_RADEON := m
345 ifneq (,$(findstring sis,$(DRM_MODULES)))
348 ifneq (,$(findstring via,$(DRM_MODULES)))
351 ifneq (,$(findstring mach64,$(DRM_MODULES)))
352 CONFIG_DRM_MACH64 := m
354 ifneq (,$(findstring ffb,$(DRM_MODULES)))
358 # These require AGP support
361 ifneq (,$(findstring mga,$(DRM_MODULES)))
364 ifneq (,$(findstring i810,$(DRM_MODULES)))
367 ifneq (,$(findstring i830,$(DRM_MODULES)))
370 ifneq (,$(findstring i915,$(DRM_MODULES)))
373 ifneq (,$(findstring savage,$(DRM_MODULES)))
374 CONFIG_DRM_SAVAGE := m
378 include $(DRMSRCDIR)/Makefile.kernel
381 $(drm-objs): $(DRMHEADERS) $(COREHEADERS)
382 $(tdfx-objs): $(TDFXHEADERS)
383 $(r128-objs): $(R128HEADERS)
384 $(mga-objs): $(MGAHEADERS)
385 $(i810-objs): $(I810HEADERS)
386 $(i830-objs): $(I830HEADERS)
387 $(i915-objs): $(I830HEADERS)
388 $(radeon-objs): $(RADEONHEADERS)
389 $(sis-objs): $(SISHEADERS)
390 $(ffb-objs): $(FFBHEADERS)
391 $(savage-objs): $(SAVAGEHEADERS)
392 $(via-objs): $(VIAHEADERS)
393 $(mach64-objs): $(MACH64HEADERS)