Makefile revision 0513cf94a5a1eeca5bac1778cbb9bb64e84f396f
ac4e70ff8955669341f435bc0a734a17c01af124Mark Andrews#
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews# Makefile for the VirtualBox Linux Host Driver.
04428429c4e689333e3ef8d19a2debeb20d4d15dMark Andrews# (For 2.6.x this file must be called 'Makefile'!)
e999539fb3e45b2617571e0e3ecd651992291701Mark Andrews#
e999539fb3e45b2617571e0e3ecd651992291701Mark Andrews
2a40fdc2d34adb8a5c72a748449699666032d461Mark Andrews#
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews#
a3b428812703d22a605a9f882e71ed65f0ffdc65Mark Andrews# Copyright (C) 2006-2007 Sun Microsystems, Inc.
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews#
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington# This file is part of VirtualBox Open Source Edition (OSE), as
ac4e70ff8955669341f435bc0a734a17c01af124Mark Andrews# available from http://www.virtualbox.org. This file is free software;
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews# you can redistribute it and/or modify it under the terms of the GNU
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington# General Public License (GPL) as published by the Free Software
d56e188030368b835122d759ebbf8d9613c166f4Mark Andrews# Foundation, in version 2 as it comes in the "COPYING" file of the
c718d15a9a95054ee3c71540c02335426071fc6dMark Andrews# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews#
c718d15a9a95054ee3c71540c02335426071fc6dMark Andrews# The contents of this file may alternatively be used under the terms
4b2cb1422c7c600fbc13b1cb06a8b4693bc11af8Mark Andrews# of the Common Development and Distribution License Version 1.0
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews# VirtualBox OSE distribution, in which case the provisions of the
c718d15a9a95054ee3c71540c02335426071fc6dMark Andrews# CDDL are applicable instead of those of the GPL.
4b2cb1422c7c600fbc13b1cb06a8b4693bc11af8Mark Andrews#
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews# You may elect to license modified versions of this file under the
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews# terms and conditions of either the GPL or the CDDL or both.
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews#
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson# Clara, CA 95054 USA or visit http://www.sun.com if you need
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews# additional information or have any questions.
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews#
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews#
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington# First, figure out which architecture we're targeting and the build type.
a3b428812703d22a605a9f882e71ed65f0ffdc65Mark Andrews# (We have to support basic cross building (ARCH=i386|x86_64).)
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews# While at it, warn about BUILD_* vars found to help with user problems.
c718d15a9a95054ee3c71540c02335426071fc6dMark Andrews#
4b2cb1422c7c600fbc13b1cb06a8b4693bc11af8Mark Andrewsifneq ($(filter-out amd64 x86,$(BUILD_TARGET_ARCH)),)
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews $(warning Ignoring unknown BUILD_TARGET_ARCH value '$(BUILD_TARGET_ARCH)'.)
c718d15a9a95054ee3c71540c02335426071fc6dMark Andrews BUILD_TARGET_ARCH :=
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrewsendif
c069a20053d41ae299eb9457e50ea44ae9f73ed2Mark Andrewsifeq ($(BUILD_TARGET_ARCH),)
4b2cb1422c7c600fbc13b1cb06a8b4693bc11af8Mark Andrews ifeq ($(ARCH),x86_64)
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews BUILD_TARGET_ARCH := amd64
605bd686e437162b5ab65ac4e7c1be0bba1886ddMark Andrews else
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews ifeq ($(ARCH),i386)
3f6174bffe227be44e241a29d186add00c032ff6Mark Andrews BUILD_TARGET_ARCH := x86
4b2cb1422c7c600fbc13b1cb06a8b4693bc11af8Mark Andrews else
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews ifeq ($(filter-out x86_64 amd64 AMD64,$(shell uname -m)),)
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews BUILD_TARGET_ARCH := amd64
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson else
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews BUILD_TARGET_ARCH := x86
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews endif
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews endif
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews endif
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafssonelse
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews $(warning Using BUILD_TARGET_ARCH='$(BUILD_TARGET_ARCH)' from the $(origin BUILD_TARGET_ARCH).)
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrewsendif
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrewsifneq ($(filter-out release profile debug strict,$(BUILD_TYPE)),)
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington $(warning Ignoring unknown BUILD_TYPE value '$(BUILD_TYPE)'.)
26a77b80bb7ee886c6fa704348d5e80a011d8811Mark Andrews BUILD_TYPE :=
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrewsendif
6f046a065e5543f8cd7e2f24991c65d2372f4c8dMark Andrewsifeq ($(BUILD_TYPE),)
4b2cb1422c7c600fbc13b1cb06a8b4693bc11af8Mark Andrews BUILD_TYPE := release
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrewselse
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews $(warning Using BUILD_TYPE='$(BUILD_TYPE)' from the $(origin BUILD_TYPE).)
62ee2c9f460d2e2e45dcf1abc8b4b4a4a43f5618Mark Andrewsendif
4b2cb1422c7c600fbc13b1cb06a8b4693bc11af8Mark Andrews
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews# override is required by the Debian guys
068a66979695c77359e7a9181bb3f831c965b21cMark Andrewsoverride MODULE = vboxdrv
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark AndrewsOBJS = \
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews linux/SUPDrv-linux.o \
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews SUPDrv.o \
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson r0drv/alloc-r0drv.o \
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews r0drv/initterm-r0drv.o \
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews r0drv/memobj-r0drv.o \
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson r0drv/mpnotification-r0drv.o \
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews r0drv/linux/alloc-r0drv-linux.o \
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson r0drv/linux/initterm-r0drv-linux.o \
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews r0drv/linux/memobj-r0drv-linux.o \
96ea71632887c58a9d00f47eb318bf76b35903c3Mark Andrews r0drv/linux/mp-r0drv-linux.o \
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews r0drv/linux/mpnotification-r0drv-linux.o \
80f9a970ae6681c08529ef209eaabbe078c27ca3Mark Andrews r0drv/linux/process-r0drv-linux.o \
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews r0drv/linux/semevent-r0drv-linux.o \
46e873c835bf7d9ec3e1097e0aceb8db5b1ae93aMark Andrews r0drv/linux/semeventmulti-r0drv-linux.o \
46e873c835bf7d9ec3e1097e0aceb8db5b1ae93aMark Andrews r0drv/linux/semfastmutex-r0drv-linux.o \
dd9ad704c3800e3ab07ede8595871eac79984871Mark Andrews r0drv/linux/spinlock-r0drv-linux.o \
605bd686e437162b5ab65ac4e7c1be0bba1886ddMark Andrews r0drv/linux/thread-r0drv-linux.o \
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews r0drv/linux/time-r0drv-linux.o \
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews r0drv/linux/timer-r0drv-linux.o \
ab81f57ca0c3addfec3df3babdcea9644757cf23Mark Andrews common/err/RTErrConvertFromErrno.o
605bd686e437162b5ab65ac4e7c1be0bba1886ddMark Andrewsifeq ($(BUILD_TARGET_ARCH),x86)
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark AndrewsOBJS += math/gcc/divdi3.o \
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark Andrews math/gcc/moddi3.o \
413988c8166976498250c0ebb2e3a645d0366bd3Mark Andrews math/gcc/qdivrem.o \
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews math/gcc/udivdi3.o
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrewsendif
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark Andrewsifeq ($(BUILD_TARGET_ARCH),amd64)
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark AndrewsOBJS += alloc/heapsimple.o
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrewsendif
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark Andrews
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrewsifeq ($(BUILD_TYPE),debug)
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark AndrewsOBJS += common/log/log.o \
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews common/log/logcom.o \
642e0716c8b4ab82ebc8e60f94c9e897ee89f19aMark Andrews common/log/logformat.o \
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews common/string/strformat.o \
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark Andrews common/string/strformatrt.o \
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark Andrews common/string/strformattype.o \
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark Andrews common/string/strprintf.o \
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark Andrews common/string/strtonum.o \
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews r0drv/linux/RTLogWriteDebugger-r0drv-linux.o \
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews generic/RTLogWriteStdErr-stub-generic.o \
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews generic/RTLogWriteStdOut-stub-generic.o \
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark Andrews generic/RTLogWriteUser-generic.o \
ea935c46e8261ea10621e5b038426539fe8a7cc5Mark Andrews VBox/log-vbox.o \
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews VBox/strformat-vbox.o
d56e188030368b835122d759ebbf8d9613c166f4Mark Andrewsifeq ($(BUILD_TARGET_ARCH),x86)
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark AndrewsOBJS += math/gcc/divdi3.o \
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews math/gcc/umoddi3.o
96ea71632887c58a9d00f47eb318bf76b35903c3Mark Andrewsendif
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrewsendif # debug
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark Andrews
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrewsifneq ($(MAKECMDGOALS),clean)
b7aab05edae933e169d5f83c653935b17c7f0a8bMark Andrews
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrewsifeq ($(KERNELRELEASE),)
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark Andrews #
4b2cb1422c7c600fbc13b1cb06a8b4693bc11af8Mark Andrews # building from this directory
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews #
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews
46e873c835bf7d9ec3e1097e0aceb8db5b1ae93aMark Andrews # kernel base directory
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews ifndef KERN_DIR
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews # build for the current kernel, version check
4b2cb1422c7c600fbc13b1cb06a8b4693bc11af8Mark Andrews KERN_DIR := /lib/modules/$(shell uname -r)/build
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews ifneq ($(shell if test -d $(KERN_DIR); then echo yes; fi),yes)
4b2cb1422c7c600fbc13b1cb06a8b4693bc11af8Mark Andrews KERN_DIR := /usr/src/linux
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews ifneq ($(shell if test -d $(KERN_DIR); then echo yes; fi),yes)
0d3490f93bb980fde704055e74c1b508987a5fe4Mark Andrews $(error Error: unable to find the sources of your current Linux kernel. \
5147281cb8e25c599d759dfa65fdb6f9125efefbMark Andrews Specify KERN_DIR=<directory> and run Make again)
6a78eb0a8677dca8817233799a715de27f9c2cbbMark Andrews endif
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark Andrews $(warning Warning: using /usr/src/linux as the source directory of your \
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark Andrews Linux kernel. If this is not correct, specify \
605bd686e437162b5ab65ac4e7c1be0bba1886ddMark Andrews KERN_DIR=<directory> and run Make again.)
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington endif
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews # check if versions match -- works only for later 2.6 kernels
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews VBOX_KERN_VER := $(shell $(MAKE) -sC $(KERN_DIR) kernelrelease 2> /dev/null || true)
62ee2c9f460d2e2e45dcf1abc8b4b4a4a43f5618Mark Andrews ifneq ($(VBOX_KERN_VER),)
1eb1e1e838d2ea00b166c918bf50764a95826be8Mark Andrews ifneq ($(VBOX_KERN_VER),$(shell uname -r))
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews $(error Error: /usr/src/linux (version $(VBOX_KERN_VER)) does not match \
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews the current kernel (version $(shell uname -r)))
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews endif
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson endif
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews else
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews # build for a dedicated kernel, no version check
ca12f7f4cf72e2368ee946f3eb4915ab73576cdcMark Andrews ifneq ($(shell if test -d $(KERN_DIR); then echo yes; fi),yes)
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews $(error Error: KERN_DIR does not point to a directory)
1eb1e1e838d2ea00b166c918bf50764a95826be8Mark Andrews endif
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington endif
0d3490f93bb980fde704055e74c1b508987a5fe4Mark Andrews
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews # includes
c718d15a9a95054ee3c71540c02335426071fc6dMark Andrews ifndef KERN_INCL
4b2cb1422c7c600fbc13b1cb06a8b4693bc11af8Mark Andrews KERN_INCL = $(KERN_DIR)/include
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews endif
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews ifneq ($(shell if test -d $(KERN_INCL); then echo yes; fi),yes)
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson $(error Error: unable to find the include directory for your current Linux \
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews kernel. Specify KERN_INCL=<directory> and run Make again)
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington endif
8ae412a86ed138263796195eed82a4716e7effcbMark Andrews
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews # module install dir, only for current kernel
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews ifneq ($(filter install install_rpm,$(MAKECMDGOALS)),)
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews ifndef MODULE_DIR
4b2cb1422c7c600fbc13b1cb06a8b4693bc11af8Mark Andrews MODULE_DIR_TST := /lib/modules/$(shell uname -r)
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews ifeq ($(shell if test -d $(MODULE_DIR_TST); then echo yes; fi),yes)
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews MODULE_DIR := $(MODULE_DIR_TST)/misc
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark Andrews else
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews $(error Unable to find the folder to install the support driver to)
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews endif
4b2cb1422c7c600fbc13b1cb06a8b4693bc11af8Mark Andrews endif # MODULE_DIR unspecified
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews endif
4b2cb1422c7c600fbc13b1cb06a8b4693bc11af8Mark Andrews
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews # guess kernel version (24 or 26)
e076d0c88be69de7c190ab924d095e69d2e11f7aAndreas Gustafsson KERN_VERSION := $(if $(wildcard $(KERN_DIR)/Rules.make),24,26)
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrewselse # neq($(KERNELRELEASE),)
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews #
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews # building from kbuild (make -C <kernel_directory> M=`pwd`)
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson #
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews # guess kernel version (24 or 26)
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews KERN_VERSION := $(if $(wildcard $(PWD)/Rules.make),24,26)
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrewsendif # neq($(KERNELRELEASE),)
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews# debug - show guesses.
ac4e70ff8955669341f435bc0a734a17c01af124Mark Andrewsifdef DEBUG
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington$(warning dbg: KERN_DIR = $(KERN_DIR))
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington$(warning dbg: KERN_INCL = $(KERN_INCL))
282e38d96feb488fddbbc0b0409491094786977fMark Andrews$(warning dbg: MODULE_DIR = $(MODULE_DIR))
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews$(warning dbg: KERN_VERSION = $(KERN_VERSION))
068a66979695c77359e7a9181bb3f831c965b21cMark Andrewsendif
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews#
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews# Compiler options
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews#
abf32d940f8f674b3971ef41b306a01b3da8d2cfMark Andrewsifndef INCL
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington INCL := $(addprefix -I,$(KERN_INCL) $(EXTRA_INCL))
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews ifndef KBUILD_EXTMOD
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington KBUILD_EXTMOD := $(shell pwd)
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington endif
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington INCL += $(addprefix -I$(KBUILD_EXTMOD),/ /include /r0drv/linux)
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington export INCL
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellingtonendif
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian WellingtonKFLAGS := -D__KERNEL__ -DMODULE -DRT_OS_LINUX -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DVBOX -DRT_WITH_VBOX
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellingtonifdef VBOX_REDHAT_KABI
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington KFLAGS += -DVBOX_REDHAT_KABI
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellingtonendif
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellingtonifndef CONFIG_VBOXDRV_FIXEDMAJOR
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington KFLAGS += -DCONFIG_VBOXDRV_AS_MISC
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellingtonendif
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellingtonifeq ($(BUILD_TARGET_ARCH),amd64)
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington KFLAGS += -DRT_ARCH_AMD64
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellingtonelse
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington KFLAGS += -DRT_ARCH_X86
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellingtonendif
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellingtonifeq ($(BUILD_TYPE),debug)
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington KFLAGS += -DDEBUG -DDEBUG_$(USER)
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington # IPRT_DEBUG_SEMS indicates thread wrt sems state via the comm field.
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington KFLAGS += -DIPRT_DEBUG_SEMS
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellingtonendif
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellingtonifeq ($(KERN_VERSION),24)
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington# 2.4
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian WellingtonTOPDIR = $(KERN_DIR)
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian WellingtonMODULE_EXT := o
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian WellingtonEXTRA_CFLAGS := -DVBOX_LINUX_2_4 -DEXPORT_SYMTAB
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington$(MODULE)-objs = $(OBJS)
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellingtonelse
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington# 2.6 and later
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian WellingtonMODULE_EXT := ko
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington$(MODULE)-y := $(OBJS)
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellingtonendif
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington# build defs
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian WellingtonEXTRA_CFLAGS += $(INCL) $(KFLAGS) $(KDEBUG)
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellingtonall: $(MODULE)
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellingtonobj-m += $(MODULE).o
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington$(MODULE):
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington $(MAKE) KBUILD_VERBOSE=1 -C $(KERN_DIR) SUBDIRS=$(CURDIR) SRCROOT=$(CURDIR) modules
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellingtonifeq ($(KERN_VERSION),26)
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington#
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington# 2.4 Module linking
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington#
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington$(MODULE).o: $(OBJS)
bf54ac86eeddce16b67c525d38d1096cc956f478Mark Andrews $(LD) -o $@ -r $(OBJS)
eaccf5e805405de257b5a4840256c580fefe00e3Mark Andrews
0d3490f93bb980fde704055e74c1b508987a5fe4Mark Andrewsinclude $(KERN_DIR)/Rules.make
d4ef65050feac78554addf6e16a06c6e2e0bd331Brian Wellington
d4ef65050feac78554addf6e16a06c6e2e0bd331Brian Wellingtonendif
d4ef65050feac78554addf6e16a06c6e2e0bd331Brian Wellington
d4ef65050feac78554addf6e16a06c6e2e0bd331Brian Wellingtoninstall: $(MODULE)
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews @mkdir -p $(MODULE_DIR); \
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews install -m 0664 -o root -g root $(MODULE).$(MODULE_EXT) $(MODULE_DIR); \
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington PATH="$(PATH):/bin:/sbin" depmod -ae; \
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews rm -f /etc/vbox/module_not_compiled
d4ef65050feac78554addf6e16a06c6e2e0bd331Brian Wellington
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrewsinstall_rpm: $(MODULE)
0d3490f93bb980fde704055e74c1b508987a5fe4Mark Andrews @mkdir -p $(MODULE_DIR); \
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington install -m 0664 $(MODULE).$(MODULE_EXT) $(MODULE_DIR)
bf54ac86eeddce16b67c525d38d1096cc956f478Mark Andrews
0d3490f93bb980fde704055e74c1b508987a5fe4Mark Andrewsendif # eq($(MAKECMDGOALS),clean)
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellingtonclean:
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington for f in . linux r0drv r0drv/linux VBox common/string common/log generic math/gcc; \
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington do rm -f $$f/*.o $$f/.*.cmd $$f/.*.flags; done
bf54ac86eeddce16b67c525d38d1096cc956f478Mark Andrews rm -rf .vboxdrv* .tmp_ver* vboxdrv.* Module.symvers Modules.symvers
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews