Makefile.module revision 9868c07279330f31ed91aa986bec707b7e8635a3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# VirtualBox Guest Additions Module Makefile.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# (For 2.6.x this file must be 'Makefile'!)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# Copyright (C) 2006-2007 innotek GmbH
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# This file is part of VirtualBox Open Source Edition (OSE), as
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# available from http://www.virtualbox.org. This file is free software;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# you can redistribute it and/or modify it under the terms of the GNU
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# General Public License (GPL) as published by the Free Software
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# Foundation, in version 2 as it comes in the "COPYING" file of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncMODULE = vboxvfs
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncOBJS = \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync vfsmod.o \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync dirops.o \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync regops.o \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync utils.o \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync GenericRequest.o \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SysHlp.o \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PhysHeap.o \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Init.o \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VMMDev.o \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HGCM.o \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VBoxCalls.o \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync r0drv/alloc-r0drv.o \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync r0drv/linux/alloc-r0drv-linux.o \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync r0drv/linux/semevent-r0drv-linux.o \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync r0drv/linux/semfastmutex-r0drv-linux.o \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync divdi3.o \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync moddi3.o \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync udivdi3.o \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync umoddi3.o \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync qdivrem.o
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEXTRA_CFLAGS = -fshort-wchar
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncifneq ($(MAKECMDGOALS),clean)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncifeq ($(KERNELRELEASE),)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # building from this directory
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # kernel base directory
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ifndef KERN_DIR
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync KERN_DIR := /lib/modules/$(shell uname -r)/build
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ifneq ($(shell if test -d $(KERN_DIR); then echo yes; fi),yes)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync KERN_DIR := /usr/src/linux
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ifneq ($(shell if test -d $(KERN_DIR); then echo yes; fi),yes)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync $(error Error: unable to find the sources of your current Linux kernel. \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Specify KERN_DIR=<directory> and run Make again)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync $(warning Warning: using /usr/src/linux as the source directory of your \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Linux kernel. If this is not correct, specify \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync KERN_DIR=<directory> and run Make again.)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ifneq ($(shell if test -d $(KERN_DIR); then echo yes; fi),yes)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync $(error Error: KERN_DIR does not point to a directory)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # includes
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ifndef KERN_INCL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync KERN_INCL = $(KERN_DIR)/include
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ifneq ($(shell if test -d $(KERN_INCL); then echo yes; fi),yes)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync $(error Error: unable to find the include directory for your current Linux \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync kernel. Specify KERN_INCL=<directory> and run Make again)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # module install dir.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ifneq ($(filter install install_rpm,$(MAKECMDGOALS)),)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ifndef MODULE_DIR
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MODULE_DIR_TST := /lib/modules/$(shell uname -r)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ifeq ($(shell if test -d $(MODULE_DIR_TST); then echo yes; fi),yes)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MODULE_DIR := $(MODULE_DIR_TST)/misc
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync $(error Unable to find the folder to install the shared folders driver to)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync endif # MODULE_DIR unspecified
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # guess kernel version (24 or 26)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ifeq ($(shell if grep '"2.4.' $(KERN_INCL)/linux/version.h > /dev/null; then echo yes; fi),yes)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync KERN_VERSION := 24
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync KERN_VERSION := 26
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # KERN_VERSION := $(if $(wildcard $(KERN_DIR)/Rules.make),24,26)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncelse # neq($(KERNELRELEASE),)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # building from Linux-2.6-kbuild (make -C <kernel_directory> M=`pwd`)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync #
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync KERN_VERSION := 26
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncendif # neq($(KERNELRELEASE),)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# debug - show guesses.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncifdef DEBUG
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync$(warning dbg: KERN_DIR = $(KERN_DIR))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync$(warning dbg: KERN_INCL = $(KERN_INCL))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync$(warning dbg: MODULE_DIR = $(MODULE_DIR))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync$(warning dbg: KERN_VERSION = $(KERN_VERSION))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncendif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# Compiler options
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncifndef INCL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync INCL := $(addprefix -I, $(KERN_INCL) $(EXTRA_INCL))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ifndef KBUILD_EXTMOD
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync KBUILD_EXTMOD := $(shell pwd)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync INCL += $(addprefix -I$(KBUILD_EXTMOD),/ /include /r0drv/linux)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync export INCL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncendif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncKFLAGS := -D__KERNEL__ -DMODULE -DRT_OS_LINUX -DIN_RING0 -D_X86_ -DIN_RT_R0 \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -DIN_SUP_R0 -DVBOX -DVBOX_HGCM -DLOG_TO_BACKDOOR -DIN_MODULE \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -DIN_GUEST_R0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncifeq ($(BUILD_TYPE),debug)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncKFLAGS += -DDEBUG
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncendif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncifeq ($(KERN_VERSION), 24)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# 2.4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCFLAGS := -O2 -DVBOX_LINUX_2_4 $(INCL) $(KFLAGS) $(KDEBUG)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncMODULE_EXT := o
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# 2.4 Module linking
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync$(MODULE).o: $(OBJS)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync $(LD) -o $@ -r $(OBJS)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync.PHONY: $(MODULE)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncall: $(MODULE)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync$(MODULE): $(MODULE).o
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncelse
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# 2.6 and later
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncMODULE_EXT := ko
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync$(MODULE)-y := $(OBJS)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# detect FC6 2.6.18
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncKFLAGS += $(foreach inc,$(KERN_INCL),\
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync $(if $(wildcard $(inc)/linux/utsrelease.h),\
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync $(if $(shell if grep -q '"2.6.18.*fc6.*"' $(inc)/linux/utsrelease.h;\
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync then echo yes; fi),-DKERNEL_FC6,),))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# detect rhel5 2.6.18
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncKFLAGS += $(foreach inc,$(KERN_INCL),\
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync $(if $(wildcard $(inc)/linux/utsrelease.h),\
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync $(if $(shell if grep -q '"2.6.18.*el5.*"' $(inc)/linux/utsrelease.h;\
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync then echo yes; fi),-DKERNEL_FC6,),))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# build defs
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEXTRA_CFLAGS += $(INCL) $(KFLAGS) $(KDEBUG)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncall: $(MODULE)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncobj-m += $(MODULE).o
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync$(MODULE):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync $(MAKE) KBUILD_VERBOSE=1 -C $(KERN_DIR) SUBDIRS=$(CURDIR) SRCROOT=$(CURDIR) modules
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncendif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncinstall: $(MODULE)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @mkdir -p $(MODULE_DIR); \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync install -m 0664 -o root -g root $(MODULE).$(MODULE_EXT) $(MODULE_DIR); \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PATH="$(PATH):/bin:/sbin" depmod -ae;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncendif # eq($(MAKECMDGOALS),clean)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncclean:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for f in . linux r0drv r0drv/linux; do rm -f $$f/*.o $$f/.*.cmd $$f/.*.flags; done
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync rm -rf .vboxvfs* .tmp_ver* vboxvfs.* Module.symvers Modules.symvers
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync