1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
# $Id: Makefile.include.header $
## @file
# VirtualBox Guest Additions kernel module Makefile, common parts.
#
# (For 2.6.x, the main file must be called 'Makefile'!)
#
#
# Copyright (C) 2006-2019 Oracle Corporation
#
# This file is part of VirtualBox Open Source Edition (OSE), as
# available from http://www.virtualbox.org. This file is free software;
# you can redistribute it and/or modify it under the terms of the GNU
# General Public License (GPL) as published by the Free Software
# Foundation, in version 2 as it comes in the "COPYING" file of the
# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
#
# Testing:
# * Building with KERN_DIR set uses the value specified and
# the default value for the unspecified one if any.
#
# These file should be included by the Makefiles for any kernel modules we
# build as part of the Guest Additions. The intended way of doing this is as
# follows:
#
# # Linux kbuild sets this to our source directory if we are called from
# # there
# obj ?= $(CURDIR)
# include $(obj)/Makefile.include.header
# MOD_NAME = <name of the module to be built, without extension>
# MOD_OBJS = <list of object files which should be included>
# MOD_DEFS = <any additional defines which this module needs>
# MOD_INCL = <any additional include paths which this module needs>
# MOD_CFLAGS = <any additional CFLAGS which this module needs>
# include $(obj)/Makefile.include.footer
#
# The kmk kBuild define KBUILD_TARGET_ARCH is available.
#
#
# First, figure out which architecture we're targeting and the build type.
# (We have to support basic cross building (ARCH=i386|x86_64).)
# While at it, warn about BUILD_* vars found to help with user problems.
#
ifeq ($(filter-out x86_64 amd64 AMD64,$(shell uname -m)),)
BUILD_TARGET_ARCH_DEF := amd64
else
BUILD_TARGET_ARCH_DEF := x86
endif
ifneq ($(filter-out amd64 x86,$(BUILD_TARGET_ARCH)),)
$(warning Ignoring unknown BUILD_TARGET_ARCH value '$(BUILD_TARGET_ARCH)'.)
BUILD_TARGET_ARCH :=
endif
ifeq ($(BUILD_TARGET_ARCH),)
ifeq ($(ARCH),x86_64)
BUILD_TARGET_ARCH := amd64
else
ifeq ($(ARCH),i386)
BUILD_TARGET_ARCH := x86
else
BUILD_TARGET_ARCH := $(BUILD_TARGET_ARCH_DEF)
endif
endif
else
ifneq ($(BUILD_TARGET_ARCH),$(BUILD_TARGET_ARCH_DEF))
$(warning Using BUILD_TARGET_ARCH='$(BUILD_TARGET_ARCH)' from the $(origin BUILD_TARGET_ARCH).)
endif
endif
ifneq ($(filter-out release profile debug strict,$(BUILD_TYPE)),)
$(warning Ignoring unknown BUILD_TYPE value '$(BUILD_TYPE)'.)
BUILD_TYPE :=
endif
ifeq ($(BUILD_TYPE),)
BUILD_TYPE := release
else
ifneq ($(BUILD_TYPE),release)
$(warning Using BUILD_TYPE='$(BUILD_TYPE)' from the $(origin BUILD_TYPE).)
endif
endif
ifeq ($(USERNAME),)
USERNAME := noname
endif
ifeq ($(KERNELRELEASE),)
#
# building from this directory
#
# kernel base directory
ifdef KERN_DIR
ifndef KERN_VER
ifeq ($(filter %/build,$(KERN_DIR)),)
$(error The variable KERN_DIR must be a kernel build folder and end with /build without a trailing slash, or KERN_VER must be set)
endif
endif
endif
ifndef KERN_VER
ifdef KERN_DIR
KERN_VER = $(notdir $(patsubst %/build,%,$(KERN_DIR)))
ifeq ($(shell expr $(KERN_VER) : '[0-9]*\.[0-9]*.[0-9]*'),0)
$(error The kernel build folder path must end in <version>/build, or the variable KERN_VER must be set)
endif
endif
KERN_VER ?= $(shell uname -r)
endif
# guess kernel major version (24 or later)
ifeq ($(shell if grep '"2\.4\.' /lib/modules/$(KERN_VER)/build/include/linux/version.h > /dev/null 2>&1; then echo yes; fi),yes)
KERN_VERSION := 24
else
KERN_VERSION := 26
endif
else # neq($(KERNELRELEASE),)
#
# building from kbuild (make -C <kernel_directory> M=`pwd`)
#
# guess kernel version (24 or 26)
ifeq ($(shell if echo "$(VERSION).$(PATCHLEVEL)." | grep '2\.4\.' > /dev/null; then echo yes; fi),yes)
KERN_VERSION := 24
else
KERN_VERSION := 26
endif
KERN_VER := $(KERNELRELEASE)
endif # neq($(KERNELRELEASE),)
# Kernel build folder
ifeq ($(KERN_DIR),)
KERN_DIR := /lib/modules/$(KERN_VER)/build
endif
ifneq ($(shell if test -d $(KERN_DIR); then echo yes; fi),yes)
$(error Error: unable to find the headers of the Linux kernel to build against. \
Specify KERN_VER=<version> (currently $(KERN_VER)) and run Make again)
endif
# Kernel include folder
KERN_INCL := $(KERN_DIR)/include
# module install folder
INSTALL_MOD_DIR ?= misc
MODULE_DIR := $(INSTALL_MOD_PATH)/lib/modules/$(KERN_VER)/$(INSTALL_MOD_DIR)
# debug - show guesses.
ifdef DEBUG
$(warning dbg: INSTALL_MOD_PATH = $(INSTALL_MOD_PATH))
$(warning dbg: INSTALL_MOD_DIR = $(INSTALL_MOD_DIR))
$(warning dbg: KERN_DIR = $(KERN_DIR))
$(warning dbg: KERN_INCL = $(KERN_INCL))
$(warning dbg: KERN_VERSION = $(KERN_VERSION))
$(warning dbg: MODULE_DIR = $(MODULE_DIR))
endif
|