Makefile revision e91f2a55ed5a30342ec79ce273f3f4bad8283336
fa9e4066f08beec538e775443c5be79dd423fcabahrens# $Revision$
fa9e4066f08beec538e775443c5be79dd423fcabahrens## @file
fa9e4066f08beec538e775443c5be79dd423fcabahrens# VirtualBox Guest Additions Module Makefile.
fa9e4066f08beec538e775443c5be79dd423fcabahrens#
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrock
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrock#
fa9e4066f08beec538e775443c5be79dd423fcabahrens# Copyright (C) 2006-2010 Oracle Corporation
fa9e4066f08beec538e775443c5be79dd423fcabahrens#
fa9e4066f08beec538e775443c5be79dd423fcabahrens# This file is part of VirtualBox Open Source Edition (OSE), as
fa9e4066f08beec538e775443c5be79dd423fcabahrens# available from http://www.virtualbox.org. This file is free software;
fa9e4066f08beec538e775443c5be79dd423fcabahrens# you can redistribute it and/or modify it under the terms of the GNU
fa9e4066f08beec538e775443c5be79dd423fcabahrens# General Public License (GPL) as published by the Free Software
fa9e4066f08beec538e775443c5be79dd423fcabahrens# Foundation, in version 2 as it comes in the "COPYING" file of the
fa9e4066f08beec538e775443c5be79dd423fcabahrens# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
fa9e4066f08beec538e775443c5be79dd423fcabahrens# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
fa9e4066f08beec538e775443c5be79dd423fcabahrens#
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens#
fa9e4066f08beec538e775443c5be79dd423fcabahrens# First, figure out which architecture we're targeting and the build type.
fa9e4066f08beec538e775443c5be79dd423fcabahrens# (We have to support basic cross building (ARCH=i386|x86_64).)
fa9e4066f08beec538e775443c5be79dd423fcabahrens# While at it, warn about BUILD_* vars found to help with user problems.
a3f829ae41ece20e7f5f63604e177aeeb8b24628Bill Moore#
fa9e4066f08beec538e775443c5be79dd423fcabahrensifeq ($(filter-out x86_64 amd64 AMD64,$(shell uname -m)),)
fa9e4066f08beec538e775443c5be79dd423fcabahrens BUILD_TARGET_ARCH_DEF := amd64
fa9e4066f08beec538e775443c5be79dd423fcabahrenselse
283b84606b6fc326692c03273de1774e8c122f9aGeorge.Wilson BUILD_TARGET_ARCH_DEF := x86
283b84606b6fc326692c03273de1774e8c122f9aGeorge.Wilsonendif
283b84606b6fc326692c03273de1774e8c122f9aGeorge.Wilsonifneq ($(filter-out amd64 x86,$(BUILD_TARGET_ARCH)),)
283b84606b6fc326692c03273de1774e8c122f9aGeorge.Wilson $(warning Ignoring unknown BUILD_TARGET_ARCH value '$(BUILD_TARGET_ARCH)'.)
fa9e4066f08beec538e775443c5be79dd423fcabahrens BUILD_TARGET_ARCH :=
fa9e4066f08beec538e775443c5be79dd423fcabahrensendif
fa9e4066f08beec538e775443c5be79dd423fcabahrensifeq ($(BUILD_TARGET_ARCH),)
fa9e4066f08beec538e775443c5be79dd423fcabahrens ifeq ($(ARCH),x86_64)
fa9e4066f08beec538e775443c5be79dd423fcabahrens BUILD_TARGET_ARCH := amd64
614409b5be5411058e7e9b6cc93dddaff9fb13f7ahrens else
614409b5be5411058e7e9b6cc93dddaff9fb13f7ahrens ifeq ($(ARCH),i386)
614409b5be5411058e7e9b6cc93dddaff9fb13f7ahrens BUILD_TARGET_ARCH := x86
614409b5be5411058e7e9b6cc93dddaff9fb13f7ahrens else
614409b5be5411058e7e9b6cc93dddaff9fb13f7ahrens BUILD_TARGET_ARCH := $(BUILD_TARGET_ARCH_DEF)
614409b5be5411058e7e9b6cc93dddaff9fb13f7ahrens endif
614409b5be5411058e7e9b6cc93dddaff9fb13f7ahrens endif
614409b5be5411058e7e9b6cc93dddaff9fb13f7ahrenselse
614409b5be5411058e7e9b6cc93dddaff9fb13f7ahrens ifneq ($(BUILD_TARGET_ARCH),$(BUILD_TARGET_ARCH_DEF))
c33e334fd3eb2b3d91c4b9667d7a465b6924e8d3Matthew Ahrens $(warning Using BUILD_TARGET_ARCH='$(BUILD_TARGET_ARCH)' from the $(origin BUILD_TARGET_ARCH).)
614409b5be5411058e7e9b6cc93dddaff9fb13f7ahrens endif
614409b5be5411058e7e9b6cc93dddaff9fb13f7ahrensendif
d3d50737e566cade9a08d73d2af95105ac7cd960Rafael Vanoni
614409b5be5411058e7e9b6cc93dddaff9fb13f7ahrensifneq ($(filter-out release profile debug strict,$(BUILD_TYPE)),)
614409b5be5411058e7e9b6cc93dddaff9fb13f7ahrens $(warning Ignoring unknown BUILD_TYPE value '$(BUILD_TYPE)'.)
614409b5be5411058e7e9b6cc93dddaff9fb13f7ahrens BUILD_TYPE :=
614409b5be5411058e7e9b6cc93dddaff9fb13f7ahrensendif
614409b5be5411058e7e9b6cc93dddaff9fb13f7ahrensifeq ($(BUILD_TYPE),)
614409b5be5411058e7e9b6cc93dddaff9fb13f7ahrens BUILD_TYPE := release
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhalelse
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal ifneq ($(BUILD_TYPE),release)
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal $(warning Using BUILD_TYPE='$(BUILD_TYPE)' from the $(origin BUILD_TYPE).)
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal endif
614409b5be5411058e7e9b6cc93dddaff9fb13f7ahrensendif
614409b5be5411058e7e9b6cc93dddaff9fb13f7ahrens
6f708f7c79bbe8e239e0f588bb846b4ccbc14bf3Jeff Bonwick
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal# override is required by the Debian guys
614409b5be5411058e7e9b6cc93dddaff9fb13f7ahrensoverride MODULE = vboxguest
fa9e4066f08beec538e775443c5be79dd423fcabahrensOBJS = \
fa9e4066f08beec538e775443c5be79dd423fcabahrens VBoxGuest-linux.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens VBoxGuest.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens VBoxGuest2.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens GenericRequest.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens HGCMInternal.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens Init.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens PhysHeap.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens SysHlp.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens VMMDev.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens r0drv/alloc-r0drv.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens r0drv/initterm-r0drv.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens r0drv/memobj-r0drv.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens r0drv/mpnotification-r0drv.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens r0drv/powernotification-r0drv.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens r0drv/linux/alloc-r0drv-linux.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens r0drv/linux/assert-r0drv-linux.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens r0drv/linux/initterm-r0drv-linux.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens r0drv/linux/memobj-r0drv-linux.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens r0drv/linux/memuserkernel-r0drv-linux.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens r0drv/linux/mp-r0drv-linux.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens r0drv/linux/mpnotification-r0drv-linux.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens r0drv/linux/process-r0drv-linux.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens r0drv/linux/semevent-r0drv-linux.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens r0drv/linux/semeventmulti-r0drv-linux.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens r0drv/linux/semfastmutex-r0drv-linux.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens r0drv/linux/spinlock-r0drv-linux.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens r0drv/linux/thread-r0drv-linux.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens r0drv/linux/thread2-r0drv-linux.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens r0drv/linux/time-r0drv-linux.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens r0drv/linux/RTLogWriteDebugger-r0drv-linux.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens r0drv/generic/semspinmutex-r0drv-generic.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/alloc/alloc.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/err/RTErrConvertFromErrno.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/err/RTErrConvertToErrno.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/log/log.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/log/logellipsis.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/log/logrel.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/log/logrelellipsis.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/log/logcom.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/log/logformat.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/misc/RTAssertMsg1Weak.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/misc/RTAssertMsg2.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/misc/RTAssertMsg2Add.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/misc/RTAssertMsg2AddWeak.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/misc/RTAssertMsg2AddWeakV.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/misc/RTAssertMsg2Weak.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/misc/RTAssertMsg2WeakV.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/misc/assert.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/misc/thread.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/string/RTStrCopy.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/string/strformat.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/string/strformatrt.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/string/strformattype.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/string/strprintf.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/string/strtonum.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/table/avlpv.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/time/time.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens generic/RTAssertShouldPanic-generic.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens generic/RTLogWriteStdErr-stub-generic.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens generic/RTLogWriteStdOut-stub-generic.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens generic/RTSemEventWait-2-ex-generic.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens generic/RTSemEventWaitNoResume-2-ex-generic.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens generic/RTSemEventMultiWait-2-ex-generic.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens generic/RTSemEventMultiWaitNoResume-2-ex-generic.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens VBox/log-vbox.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens VBox/logbackdoor.o
fa9e4066f08beec538e775443c5be79dd423fcabahrensifeq ($(BUILD_TARGET_ARCH),x86)
fa9e4066f08beec538e775443c5be79dd423fcabahrensOBJS += \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/math/gcc/divdi3.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/math/gcc/moddi3.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/math/gcc/udivdi3.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/math/gcc/umoddi3.o \
fa9e4066f08beec538e775443c5be79dd423fcabahrens common/math/gcc/qdivrem.o
fa9e4066f08beec538e775443c5be79dd423fcabahrensendif
fa9e4066f08beec538e775443c5be79dd423fcabahrensifeq ($(BUILD_TARGET_ARCH),amd64)
fa9e4066f08beec538e775443c5be79dd423fcabahrensOBJS += common/alloc/heapsimple.o
fa9e4066f08beec538e775443c5be79dd423fcabahrensendif
fa9e4066f08beec538e775443c5be79dd423fcabahrens
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrockifneq ($(MAKECMDGOALS),clean)
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrock
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrockifeq ($(KERNELRELEASE),)
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrock
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrock #
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrock # building from this directory
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrock #
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrock
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrock # kernel base directory
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrock ifndef KERN_DIR
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrock KERN_DIR := /lib/modules/$(shell uname -r)/build
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrock ifneq ($(shell if test -d $(KERN_DIR); then echo yes; fi),yes)
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrock KERN_DIR := /usr/src/linux
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrock ifneq ($(shell if test -d $(KERN_DIR); then echo yes; fi),yes)
fa9e4066f08beec538e775443c5be79dd423fcabahrens $(error Error: unable to find the sources of your current Linux kernel. \
fa9e4066f08beec538e775443c5be79dd423fcabahrens Specify KERN_DIR=<directory> and run Make again)
fa9e4066f08beec538e775443c5be79dd423fcabahrens endif
a3f829ae41ece20e7f5f63604e177aeeb8b24628Bill Moore $(warning Warning: using /usr/src/linux as the source directory of your \
fa9e4066f08beec538e775443c5be79dd423fcabahrens Linux kernel. If this is not correct, specify \
a3f829ae41ece20e7f5f63604e177aeeb8b24628Bill Moore KERN_DIR=<directory> and run Make again.)
fa9e4066f08beec538e775443c5be79dd423fcabahrens endif
a3f829ae41ece20e7f5f63604e177aeeb8b24628Bill Moore else
a3f829ae41ece20e7f5f63604e177aeeb8b24628Bill Moore ifneq ($(shell if test -d $(KERN_DIR); then echo yes; fi),yes)
fa9e4066f08beec538e775443c5be79dd423fcabahrens $(error Error: KERN_DIR does not point to a directory)
fa9e4066f08beec538e775443c5be79dd423fcabahrens endif
fa9e4066f08beec538e775443c5be79dd423fcabahrens endif
fa9e4066f08beec538e775443c5be79dd423fcabahrens
6f708f7c79bbe8e239e0f588bb846b4ccbc14bf3Jeff Bonwick # includes
6f708f7c79bbe8e239e0f588bb846b4ccbc14bf3Jeff Bonwick ifndef KERN_INCL
6f708f7c79bbe8e239e0f588bb846b4ccbc14bf3Jeff Bonwick KERN_INCL = $(KERN_DIR)/include
6f708f7c79bbe8e239e0f588bb846b4ccbc14bf3Jeff Bonwick endif
6f708f7c79bbe8e239e0f588bb846b4ccbc14bf3Jeff Bonwick ifneq ($(shell if test -d $(KERN_INCL); then echo yes; fi),yes)
6f708f7c79bbe8e239e0f588bb846b4ccbc14bf3Jeff Bonwick $(error Error: unable to find the include directory for your current Linux \
6f708f7c79bbe8e239e0f588bb846b4ccbc14bf3Jeff Bonwick kernel. Specify KERN_INCL=<directory> and run Make again)
6f708f7c79bbe8e239e0f588bb846b4ccbc14bf3Jeff Bonwick endif
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens # module install dir, only for current kernel
e05725b117836db173257fae43fb0746eb857fb5bonwick ifneq ($(filter install install_rpm,$(MAKECMDGOALS)),)
fa9e4066f08beec538e775443c5be79dd423fcabahrens ifndef MODULE_DIR
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal MODULE_DIR_TST := /lib/modules/$(shell uname -r)
a3f829ae41ece20e7f5f63604e177aeeb8b24628Bill Moore ifeq ($(shell if test -d $(MODULE_DIR_TST); then echo yes; fi),yes)
8ad4d6dd86f5bc65fb3afa566c8133f3bac21648Jeff Bonwick MODULE_DIR := $(MODULE_DIR_TST)/misc
6f708f7c79bbe8e239e0f588bb846b4ccbc14bf3Jeff Bonwick else
6f708f7c79bbe8e239e0f588bb846b4ccbc14bf3Jeff Bonwick $(error Unable to find the folder to install the additions driver to)
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal endif
fa9e4066f08beec538e775443c5be79dd423fcabahrens endif # MODULE_DIR unspecified
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal endif
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens # guess kernel version (24 or 26)
fa9e4066f08beec538e775443c5be79dd423fcabahrens ifeq ($(shell if grep '"2\.4\.' $(KERN_INCL)/linux/version.h > /dev/null; then echo yes; fi),yes)
fa9e4066f08beec538e775443c5be79dd423fcabahrens KERN_VERSION := 24
fa9e4066f08beec538e775443c5be79dd423fcabahrens else
fa9e4066f08beec538e775443c5be79dd423fcabahrens KERN_VERSION := 26
fa9e4066f08beec538e775443c5be79dd423fcabahrens endif
fa9e4066f08beec538e775443c5be79dd423fcabahrens
a3f829ae41ece20e7f5f63604e177aeeb8b24628Bill Mooreelse # neq($(KERNELRELEASE),)
8ad4d6dd86f5bc65fb3afa566c8133f3bac21648Jeff Bonwick
6f708f7c79bbe8e239e0f588bb846b4ccbc14bf3Jeff Bonwick #
8ad4d6dd86f5bc65fb3afa566c8133f3bac21648Jeff Bonwick # building from kbuild (make -C <kernel_directory> M=`pwd`)
8ad4d6dd86f5bc65fb3afa566c8133f3bac21648Jeff Bonwick #
8ad4d6dd86f5bc65fb3afa566c8133f3bac21648Jeff Bonwick
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal # guess kernel version (24 or 26)
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal ifeq ($(shell if echo "$(VERSION).$(PATCHLEVEL)." | grep '2\.4\.' > /dev/null; then echo yes; fi),yes)
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal KERN_VERSION := 24
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal else
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal KERN_VERSION := 26
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal endif
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhalendif # neq($(KERNELRELEASE),)
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal# debug - show guesses.
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhalifdef DEBUG
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal$(warning dbg: KERN_DIR = $(KERN_DIR))
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal$(warning dbg: KERN_INCL = $(KERN_INCL))
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal$(warning dbg: MODULE_DIR = $(MODULE_DIR))
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal$(warning dbg: KERN_VERSION = $(KERN_VERSION))
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhalendif
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal
8ad4d6dd86f5bc65fb3afa566c8133f3bac21648Jeff BonwickKBUILD_VERBOSE ?= 1
a3f829ae41ece20e7f5f63604e177aeeb8b24628Bill Moore
8ad4d6dd86f5bc65fb3afa566c8133f3bac21648Jeff Bonwick#
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal# Compiler options
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal#
8ad4d6dd86f5bc65fb3afa566c8133f3bac21648Jeff Bonwickifndef INCL
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal INCL := $(addprefix -I,$(KERN_INCL) $(EXTRA_INCL))
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal ifndef KBUILD_EXTMOD
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal KBUILD_EXTMOD := $(shell pwd)
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal endif
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal INCL += $(addprefix -I$(KBUILD_EXTMOD),/ /include /r0drv/linux)
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal INCL += $(addprefix -I$(KBUILD_EXTMOD)/vboxguest,/ /include /r0drv/linux)
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal export INCL
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhalendif
f94275ce205810a201404c5f35f4cc96057022b1Adam LeventhalKFLAGS := -D__KERNEL__ -DMODULE \
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal -DVBOX -DRT_OS_LINUX -DIN_RING0 -DIN_RT_R0 -DIN_GUEST -DIN_GUEST_R0 \
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal -DIN_MODULE -DRT_WITH_VBOX -DVBGL_VBOXGUEST -DVBOX_WITH_HGCM
6f708f7c79bbe8e239e0f588bb846b4ccbc14bf3Jeff Bonwickifeq ($(BUILD_TARGET_ARCH),amd64)
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal KFLAGS += -DRT_ARCH_AMD64 -DVBOX_WITH_64_BITS_GUESTS
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhalelse
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal KFLAGS += -DRT_ARCH_X86
a3f829ae41ece20e7f5f63604e177aeeb8b24628Bill Mooreendif
8ad4d6dd86f5bc65fb3afa566c8133f3bac21648Jeff Bonwickifeq ($(BUILD_TYPE),debug)
f94275ce205810a201404c5f35f4cc96057022b1Adam LeventhalKFLAGS += -DDEBUG
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhalendif
8ad4d6dd86f5bc65fb3afa566c8133f3bac21648Jeff Bonwick
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhalifeq ($(KERN_VERSION), 24)
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal#
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal# 2.4
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal#
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhalifeq ($(BUILD_TARGET_ARCH),amd64)
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal KFLAGS += -mcmodel=kernel
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhalendif
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal
f94275ce205810a201404c5f35f4cc96057022b1Adam LeventhalCFLAGS := -O2 -DVBOX_LINUX_2_4 -DEXPORT_SYMTAB $(INCL) $(KFLAGS) $(KDEBUG)
f94275ce205810a201404c5f35f4cc96057022b1Adam LeventhalMODULE_EXT := o
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal# 2.4 Module linking
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal$(MODULE).o: $(OBJS)
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal $(LD) -o $@ -r $(OBJS)
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal.PHONY: $(MODULE)
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhalall: $(MODULE)
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal$(MODULE): $(MODULE).o
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhalelse
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal#
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal# 2.6 and later
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal#
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal
f94275ce205810a201404c5f35f4cc96057022b1Adam LeventhalMODULE_EXT := ko
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal$(MODULE)-y := $(OBJS)
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal# build defs
f94275ce205810a201404c5f35f4cc96057022b1Adam LeventhalEXTRA_CFLAGS += -include $(KBUILD_EXTMOD)/include/VBox/VBoxGuestMangling.h $(INCL) $(KFLAGS) $(KDEBUG)
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhalall: $(MODULE)
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhalobj-m += $(MODULE).o
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal$(MODULE):
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal $(MAKE) KBUILD_VERBOSE=$(KBUILD_VERBOSE) -C $(KERN_DIR) SUBDIRS=$(CURDIR) SRCROOT=$(CURDIR) modules
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal
fa9e4066f08beec538e775443c5be79dd423fcabahrensendif
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensinstall: $(MODULE)
6f708f7c79bbe8e239e0f588bb846b4ccbc14bf3Jeff Bonwick @mkdir -p $(MODULE_DIR); \
614409b5be5411058e7e9b6cc93dddaff9fb13f7ahrens install -m 0664 -o root -g root $(MODULE).$(MODULE_EXT) $(MODULE_DIR); \
fa9e4066f08beec538e775443c5be79dd423fcabahrens PATH="$(PATH):/bin:/sbin" depmod -a;
e14bb3258d05c1b1077e2db7cf77088924e56919Jeff Bonwick
80eb36f241abf8c076119fb4c49a55fd61ebc710George Wilsonendif # eq($(MAKECMDGOALS),clean)
8ad4d6dd86f5bc65fb3afa566c8133f3bac21648Jeff Bonwick
fa9e4066f08beec538e775443c5be79dd423fcabahrenscheck: $(MODULE)
283b84606b6fc326692c03273de1774e8c122f9aGeorge.Wilson @if ! readelf -p __ksymtab_strings vboxguest.ko | grep -E "\[.*\] *(RT|g_..*RT.*)"; then \
fa9e4066f08beec538e775443c5be79dd423fcabahrens echo "All exported IPRT symbols are properly renamed!"; \
6f708f7c79bbe8e239e0f588bb846b4ccbc14bf3Jeff Bonwick else \
6f708f7c79bbe8e239e0f588bb846b4ccbc14bf3Jeff Bonwick echo "error: Some exported IPRT symbols was not properly renamed! See above." >&2; \
6f708f7c79bbe8e239e0f588bb846b4ccbc14bf3Jeff Bonwick false; \
6f708f7c79bbe8e239e0f588bb846b4ccbc14bf3Jeff Bonwick fi
fa9e4066f08beec538e775443c5be79dd423fcabahrens
a3f829ae41ece20e7f5f63604e177aeeb8b24628Bill Mooreclean:
a3f829ae41ece20e7f5f63604e177aeeb8b24628Bill Moore for f in . linux r0drv generic r0drv/linux r0drv/generic VBox \
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal common/alloc common/err common/log common/math/gcc common/misc common/string common/time; \
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal do rm -f $$f/*.o $$f/.*.cmd $$f/.*.flags; done
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal rm -rf .vboxguest* .tmp_ver* vboxguest.* Module.symvers Modules.symvers modules.order
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal