VirtualBox

source: vbox/trunk/src/VBox/HostDrivers/Support/linux/Makefile@ 59743

Last change on this file since 59743 was 59453, checked in by vboxsync, 9 years ago

ticketref:15069: Minor issue with file permissions - fail SCAP security validation: change the permissions with which Linux kernel module files (host and guest) are installed under /lib/modules from 0664 to 0644. I note in passing that the host module make files have not yet been changed to use the generic make file template code, so four changes are needed for the host modules versus one for the guest ones.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 10.1 KB
Line 
1# $Id: Makefile 59453 2016-01-25 09:40:06Z vboxsync $
2## @file
3# Makefile for the VirtualBox Linux Host Driver.
4#
5
6#
7#
8# Copyright (C) 2006-2015 Oracle Corporation
9#
10# This file is part of VirtualBox Open Source Edition (OSE), as
11# available from http://www.virtualbox.org. This file is free software;
12# you can redistribute it and/or modify it under the terms of the GNU
13# General Public License (GPL) as published by the Free Software
14# Foundation, in version 2 as it comes in the "COPYING" file of the
15# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
16# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
17#
18# The contents of this file may alternatively be used under the terms
19# of the Common Development and Distribution License Version 1.0
20# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
21# VirtualBox OSE distribution, in which case the provisions of the
22# CDDL are applicable instead of those of the GPL.
23#
24# You may elect to license modified versions of this file under the
25# terms and conditions of either the GPL or the CDDL or both.
26#
27
28#
29# First, figure out which architecture we're targeting and the build type.
30# (We have to support basic cross building (ARCH=i386|x86_64).)
31# While at it, warn about BUILD_* vars found to help with user problems.
32#
33ifeq ($(filter-out x86_64 amd64 AMD64,$(shell uname -m)),)
34 BUILD_TARGET_ARCH_DEF := amd64
35else
36 BUILD_TARGET_ARCH_DEF := x86
37endif
38ifneq ($(filter-out amd64 x86,$(BUILD_TARGET_ARCH)),)
39 $(warning Ignoring unknown BUILD_TARGET_ARCH value '$(BUILD_TARGET_ARCH)'.)
40 BUILD_TARGET_ARCH :=
41endif
42ifeq ($(BUILD_TARGET_ARCH),)
43 ifeq ($(ARCH),x86_64)
44 BUILD_TARGET_ARCH := amd64
45 else
46 ifeq ($(ARCH),i386)
47 BUILD_TARGET_ARCH := x86
48 else
49 BUILD_TARGET_ARCH := $(BUILD_TARGET_ARCH_DEF)
50 endif
51 endif
52else
53 ifneq ($(BUILD_TARGET_ARCH),$(BUILD_TARGET_ARCH_DEF))
54 $(warning Using BUILD_TARGET_ARCH='$(BUILD_TARGET_ARCH)' from the $(origin BUILD_TARGET_ARCH).)
55 endif
56endif
57
58ifneq ($(filter-out release profile debug strict,$(BUILD_TYPE)),)
59 $(warning Ignoring unknown BUILD_TYPE value '$(BUILD_TYPE)'.)
60 BUILD_TYPE :=
61endif
62ifeq ($(BUILD_TYPE),)
63 BUILD_TYPE := release
64else
65 ifneq ($(BUILD_TYPE),release)
66 $(warning Using BUILD_TYPE='$(BUILD_TYPE)' from the $(origin BUILD_TYPE).)
67 endif
68endif
69
70# override is required by the Debian guys
71override MODULE = vboxdrv
72OBJS = \
73 linux/SUPDrv-linux.o \
74 SUPDrv.o \
75 SUPDrvGip.o \
76 SUPDrvSem.o \
77 SUPDrvTracer.o \
78 SUPLibAll.o \
79 r0drv/alloc-r0drv.o \
80 r0drv/initterm-r0drv.o \
81 r0drv/memobj-r0drv.o \
82 r0drv/mpnotification-r0drv.o \
83 r0drv/powernotification-r0drv.o \
84 r0drv/linux/assert-r0drv-linux.o \
85 r0drv/linux/alloc-r0drv-linux.o \
86 r0drv/linux/initterm-r0drv-linux.o \
87 r0drv/linux/memobj-r0drv-linux.o \
88 r0drv/linux/memuserkernel-r0drv-linux.o \
89 r0drv/linux/mp-r0drv-linux.o \
90 r0drv/linux/mpnotification-r0drv-linux.o \
91 r0drv/linux/process-r0drv-linux.o \
92 r0drv/linux/semevent-r0drv-linux.o \
93 r0drv/linux/semeventmulti-r0drv-linux.o \
94 r0drv/linux/semfastmutex-r0drv-linux.o \
95 r0drv/linux/semmutex-r0drv-linux.o \
96 r0drv/linux/spinlock-r0drv-linux.o \
97 r0drv/linux/thread-r0drv-linux.o \
98 r0drv/linux/thread2-r0drv-linux.o \
99 r0drv/linux/threadctxhooks-r0drv-linux.o \
100 r0drv/linux/time-r0drv-linux.o \
101 r0drv/linux/timer-r0drv-linux.o \
102 r0drv/generic/semspinmutex-r0drv-generic.o \
103 common/alloc/alloc.o \
104 common/checksum/crc32.o \
105 common/checksum/ipv4.o \
106 common/checksum/ipv6.o \
107 common/err/RTErrConvertFromErrno.o \
108 common/err/RTErrConvertToErrno.o \
109 common/log/log.o \
110 common/log/logellipsis.o \
111 common/log/logrel.o \
112 common/log/logrelellipsis.o \
113 common/log/logcom.o \
114 common/log/logformat.o \
115 common/misc/RTAssertMsg1Weak.o \
116 common/misc/RTAssertMsg2.o \
117 common/misc/RTAssertMsg2Add.o \
118 common/misc/RTAssertMsg2AddWeak.o \
119 common/misc/RTAssertMsg2AddWeakV.o \
120 common/misc/RTAssertMsg2Weak.o \
121 common/misc/RTAssertMsg2WeakV.o \
122 common/misc/assert.o \
123 common/misc/handletable.o \
124 common/misc/handletablectx.o \
125 common/misc/thread.o \
126 common/string/RTStrCopy.o \
127 common/string/RTStrCopyEx.o \
128 common/string/RTStrCopyP.o \
129 common/string/RTStrNCmp.o \
130 common/string/RTStrNLen.o \
131 common/string/stringalloc.o \
132 common/string/strformat.o \
133 common/string/strformatrt.o \
134 common/string/strformattype.o \
135 common/string/strprintf.o \
136 common/string/strtonum.o \
137 common/table/avlpv.o \
138 common/time/time.o \
139 r0drv/linux/RTLogWriteDebugger-r0drv-linux.o \
140 generic/RTAssertShouldPanic-generic.o \
141 generic/RTLogWriteStdErr-stub-generic.o \
142 generic/RTLogWriteStdOut-stub-generic.o \
143 generic/RTLogWriteUser-generic.o \
144 generic/RTMpGetArraySize-generic.o \
145 generic/RTMpGetCoreCount-generic.o \
146 generic/RTSemEventWait-2-ex-generic.o \
147 generic/RTSemEventWaitNoResume-2-ex-generic.o \
148 generic/RTSemEventMultiWait-2-ex-generic.o \
149 generic/RTSemEventMultiWaitNoResume-2-ex-generic.o \
150 generic/RTTimerCreate-generic.o \
151 generic/errvars-generic.o \
152 generic/mppresent-generic.o \
153 generic/uuid-generic.o \
154 VBox/log-vbox.o
155ifeq ($(BUILD_TARGET_ARCH),x86)
156OBJS += math/gcc/divdi3.o \
157 math/gcc/moddi3.o \
158 math/gcc/qdivrem.o \
159 math/gcc/udivdi3.o \
160 math/gcc/divdi3.o \
161 math/gcc/umoddi3.o
162endif
163ifeq ($(BUILD_TARGET_ARCH),amd64)
164OBJS += common/alloc/heapsimple.o
165endif
166ifdef VBOX_WITH_NATIVE_DTRACE
167OBJS += SUPDrvDTrace.o
168endif
169
170ifneq ($(MAKECMDGOALS),clean)
171
172ifeq ($(KERNELRELEASE),)
173
174 #
175 # building from this directory
176 #
177
178 # kernel base directory
179 ifndef KERN_DIR
180 # build for the current kernel, version check
181 KERN_DIR := /lib/modules/$(shell uname -r)/build
182 ifneq ($(shell if test -d $(KERN_DIR); then echo yes; fi),yes)
183 KERN_DIR := /usr/src/linux
184 ifneq ($(shell if test -d $(KERN_DIR); then echo yes; fi),yes)
185 $(error Error: unable to find the sources of your current Linux kernel. \
186 Specify KERN_DIR=<directory> and run Make again)
187 endif
188 $(warning Warning: using /usr/src/linux as the source directory of your \
189 Linux kernel. If this is not correct, specify \
190 KERN_DIR=<directory> and run Make again.)
191 endif
192 else
193 ifneq ($(shell if test -d $(KERN_DIR); then echo yes; fi),yes)
194 $(error Error: KERN_DIR does not point to a directory)
195 endif
196 endif
197
198 # includes
199 ifndef KERN_INCL
200 KERN_INCL = $(KERN_DIR)/include
201 endif
202 ifneq ($(shell if test -d $(KERN_INCL); then echo yes; fi),yes)
203 $(error Error: unable to find the include directory for your current Linux \
204 kernel. Specify KERN_INCL=<directory> and run Make again)
205 endif
206
207 # module install dir, only for current kernel
208 ifneq ($(filter install install_rpm,$(MAKECMDGOALS)),)
209 ifndef MODULE_DIR
210 MODULE_DIR_TST := /lib/modules/$(shell uname -r)
211 ifeq ($(shell if test -d $(MODULE_DIR_TST); then echo yes; fi),yes)
212 MODULE_DIR := $(MODULE_DIR_TST)/misc
213 else
214 $(error Unable to find the folder to install the support driver to)
215 endif
216 endif # MODULE_DIR unspecified
217 endif
218
219else # neq($(KERNELRELEASE),)
220
221 #
222 # building from kbuild (make -C <kernel_directory> M=`pwd`)
223 #
224
225endif # neq($(KERNELRELEASE),)
226
227# debug - show guesses.
228ifdef DEBUG
229$(warning dbg: KERN_DIR = $(KERN_DIR))
230$(warning dbg: KERN_INCL = $(KERN_INCL))
231$(warning dbg: MODULE_DIR = $(MODULE_DIR))
232endif
233
234KBUILD_VERBOSE ?= 1
235
236#
237# Compiler options
238#
239ifndef INCL
240 INCL := $(addprefix -I,$(KERN_INCL) $(EXTRA_INCL))
241 ifndef KBUILD_EXTMOD
242 KBUILD_EXTMOD := $(shell pwd)
243 endif
244 INCL += $(addprefix -I$(KBUILD_EXTMOD),/ /include /r0drv/linux)
245 INCL += $(addprefix -I$(KBUILD_EXTMOD)/vboxdrv,/ /include /r0drv/linux)
246 ifdef VBOX_WITH_NATIVE_DTRACE
247 INCL += -I/usr/include/linux -I/usr/include
248 endif
249 export INCL
250endif
251ifneq ($(wildcard $(KBUILD_EXTMOD)/vboxdrv),)
252 MANGLING := $(KBUILD_EXTMOD)/vboxdrv/include/VBox/SUPDrvMangling.h
253else
254 MANGLING := $(KBUILD_EXTMOD)/include/VBox/SUPDrvMangling.h
255endif
256KFLAGS := -D__KERNEL__ -DMODULE -DRT_OS_LINUX -DIN_RING0 -DIN_RT_R0 \
257 -DIN_SUP_R0 -DVBOX -DRT_WITH_VBOX -DVBOX_WITH_HARDENING \
258 -DSUPDRV_WITH_RELEASE_LOGGER -DVBOX_WITH_EFLAGS_AC_SET_IN_VBOXDRV -DIPRT_WITH_EFLAGS_AC_PRESERVING \
259 -Wno-declaration-after-statement
260ifdef VBOX_REDHAT_KABI
261 KFLAGS += -DVBOX_REDHAT_KABI
262endif
263ifndef CONFIG_VBOXDRV_FIXEDMAJOR
264 KFLAGS += -DCONFIG_VBOXDRV_AS_MISC
265endif
266ifdef VBOX_WITH_NATIVE_DTRACE
267 KFLAGS += -DVBOX_WITH_NATIVE_DTRACE
268endif
269ifeq ($(BUILD_TARGET_ARCH),amd64)
270 KFLAGS += -DRT_ARCH_AMD64
271else
272 KFLAGS += -DRT_ARCH_X86
273endif
274# must be consistent with Config.kmk!
275KFLAGS += -DVBOX_WITH_64_BITS_GUESTS
276ifeq ($(BUILD_TYPE),debug)
277 KFLAGS += -DDEBUG -DDEBUG_$(USER) -g
278 # IPRT_DEBUG_SEMS indicates thread wrt sems state via the comm field.
279 #KFLAGS += -DIPRT_DEBUG_SEMS
280endif
281ifdef VBOX_WITH_TEXT_MODMEM_HACK
282 KFLAGS += -DRTMEMALLOC_EXEC_HEAP -DVBOX_WITH_TEXT_MODMEM_HACK
283endif
284
285# 2.6 and later
286MODULE_EXT := ko
287$(MODULE)-y := $(OBJS)
288
289# build defs
290EXTRA_CFLAGS += -include $(MANGLING) $(INCL) $(KFLAGS) $(KDEBUG) -fno-omit-frame-pointer
291
292all: $(MODULE)
293
294obj-m += $(MODULE).o
295
296# OL/UEK: disable module signing for external modules -- we don't have any private key
297$(MODULE):
298 $(MAKE) KBUILD_VERBOSE=$(KBUILD_VERBOSE) SUBDIRS=$(CURDIR) SRCROOT=$(CURDIR) CONFIG_MODULE_SIG= -C $(KERN_DIR) modules
299
300install: $(MODULE)
301 @mkdir -p $(MODULE_DIR); \
302 install -m 0644 -o root -g root $(MODULE).$(MODULE_EXT) $(MODULE_DIR); \
303 PATH="$(PATH):/bin:/sbin" depmod -a; \
304 rm -f /etc/vbox/module_not_compiled
305
306install_rpm: $(MODULE)
307 @mkdir -p $(MODULE_DIR); \
308 install -m 0644 $(MODULE).$(MODULE_EXT) $(MODULE_DIR)
309
310else # eq ($(MAKECMDGOALS),clean)
311
312 ifndef KERN_DIR
313 KERN_DIR := /lib/modules/$(shell uname -r)/build
314 ifeq ($(wildcard $(KERN_DIR)/Makefile),)
315 KERN_DIR := /usr/src/linux
316 endif
317 endif
318 ifeq ($(wildcard $(KERN_DIR)/Makefile),)
319
320clean:
321 find . \( -name \*.o -o -name \*.cmd \) -print0 | xargs -0 rm -f
322 rm -rf .tmp_ver* $(MODULE).* Module.symvers Modules.symvers modules.order
323
324 else
325
326clean:
327 $(MAKE) KBUILD_VERBOSE=$(KBUILD_VERBOSE) SUBDIRS=$(CURDIR) SRCROOT=$(CURDIR) -C $(KERN_DIR) clean
328
329 endif
330
331endif # eq($(MAKECMDGOALS),clean)
332
333check: $(MODULE)
334 @if ! readelf -p __ksymtab_strings vboxdrv.ko | grep -E "\[.*\] *(RT|g_..*RT.*)"; then \
335 echo "All exported IPRT symbols are properly renamed!"; \
336 else \
337 echo "error: Some exported IPRT symbols was not properly renamed! See above." >&2; \
338 false; \
339 fi
340
Note: See TracBrowser for help on using the repository browser.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette