VirtualBox

source: vbox/trunk/src/VBox/Additions/Makefile.kmk@ 63206

Last change on this file since 63206 was 62531, checked in by vboxsync, 8 years ago

(C) 2016

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 12.8 KB
Line 
1# $Id: Makefile.kmk 62531 2016-07-22 19:25:36Z vboxsync $
2## @file
3# Top-level makefile for the VirtualBox Guest Additions.
4#
5
6#
7# Copyright (C) 2006-2016 Oracle Corporation
8#
9# This file is part of VirtualBox Open Source Edition (OSE), as
10# available from http://www.virtualbox.org. This file is free software;
11# you can redistribute it and/or modify it under the terms of the GNU
12# General Public License (GPL) as published by the Free Software
13# Foundation, in version 2 as it comes in the "COPYING" file of the
14# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16#
17
18SUB_DEPTH = ../../..
19include $(KBUILD_PATH)/subheader.kmk
20
21#
22# Globals
23#
24VBOX_PATH_ADDITIONS_SRC := $(PATH_SUB_CURRENT)
25
26#
27# Cross building of the additions is generally done by remote building
28# by means of smbfs, cifs, VBOX_ONLY_ADDITIONS=1 and setting KBUILD_TARGET
29# and KBUILD_TARGET_ARCH to the desired target and architecture.
30#
31# Limited support for cross building the windows additions using wine
32# is provided. There are a couple of issues with the approach (lack of
33# signing, no VC++ 8 support, ++) that makes it unsuitable for releases.
34#
35#
36# Note! VBOX_WITH_ADDITIONS is checked for by our parent makefile.
37#
38# Note! VBOX_WITH_X11_ADDITIONS is set in Config.kmk
39#
40# Note! The additions build box will set the VBOX_WITH_ADDITIONS_ISO.win.x86
41# variables before invoking us from the root makefile.
42#
43# ==> All we have to worry about is what to do on the target we're on.
44#
45VBOX_WITH_ADDITIONS_ISO.$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH) = 1
46
47# Include sub-makefiles.
48include $(PATH_SUB_CURRENT)/common/Makefile.kmk
49
50ifndef VBOX_ONLY_VALIDATIONKIT
51 ifdef VBOX_WITH_X11_ADDITIONS
52 include $(PATH_SUB_CURRENT)/x11/Makefile.kmk
53 endif
54
55 ifeq ($(KBUILD_TARGET),freebsd)
56 include $(PATH_SUB_CURRENT)/freebsd/Makefile.kmk
57 endif
58 ifeq ($(KBUILD_TARGET),linux)
59 include $(PATH_SUB_CURRENT)/linux/Makefile.kmk
60 endif
61 ifeq ($(KBUILD_TARGET),os2)
62 include $(PATH_SUB_CURRENT)/os2/Makefile.kmk
63 endif
64 ifeq ($(KBUILD_TARGET),solaris)
65 include $(PATH_SUB_CURRENT)/solaris/Makefile.kmk
66 endif
67 ifeq ($(KBUILD_TARGET),win)
68 include $(PATH_SUB_CURRENT)/WINNT/Makefile.kmk
69 endif
70 ifeq ($(KBUILD_TARGET),darwin)
71 include $(PATH_SUB_CURRENT)/darwin/Makefile.kmk
72 endif
73 ifeq ($(KBUILD_TARGET),haiku)
74 include $(PATH_SUB_CURRENT)/haiku/Makefile.kmk
75 endif
76
77 ifeq ($(KBUILD_TARGET),linux)
78
79 INSTALLS += LnxAddIso-scripts
80 LnxAddIso-scripts_INST = $(INST_ADDITIONS)
81 LnxAddIso-scripts_MODE = a+rx,u+w
82 LnxAddIso-scripts_SOURCES = \
83 ../Installer/linux/runasroot.sh \
84 linux/installer/autorun.sh
85
86 endif # KBUILD_TARGET == linux
87 ifeq ($(KBUILD_TARGET),win)
88 #
89 # Inf2Cat requires all the files referenced in the .inf file
90 # to be present in the directory, so we have to do this from here,
91 # since VBoxGuest.sys is being built from the common sources.
92 #
93 INSTALLS += VBoxGuest-inf
94 VBoxGuest-inf_INST = $(INST_ADDITIONS)
95 VBoxGuest-inf_MODE = a+r,u+w
96 VBoxGuest-inf_SOURCES = \
97 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.inf
98 ifdef VBOX_SIGN_ADDITIONS
99 VBoxGuest-inf_SOURCES += \
100 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.cat \
101 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.sys \
102 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxControl.exe \
103 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxTray.exe
104 endif # signing
105 VBoxGuest-inf_CLEAN = $(VBoxGuest-inf_SOURCES)
106 VBoxGuest-inf_BLDDIRS = \
107 $(PATH_TARGET)/VBoxGuestCat.dir
108
109 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.inf: $(PATH_SUB_CURRENT)/common/VBoxGuest/win/VBoxGuest.inf $(MAKEFILE_CURRENT) | $$(dir $$@)
110 $(call MSG_GENERATE,VBoxGuest-inf,$@,$<)
111 $(call VBOX_EDIT_INF_FN,$<,$@)
112
113 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.sys: $$(VBoxGuest_1_TARGET) | $$(dir $$@)
114 $(INSTALL) -m 644 $< $(@D)
115
116 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxControl.exe: $$(VBoxControl_1_TARGET) | $$(dir $$@)
117 $(INSTALL) -m 755 $< $(@D)
118
119 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxTray.exe: $$(VBoxTray_1_TARGET) | $$(dir $$@)
120 $(INSTALL) -m 755 $< $(@D)
121
122 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.cat: \
123 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.inf \
124 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.sys \
125 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxControl.exe \
126 $(PATH_TARGET)/VBoxGuestCat.dir/VBoxTray.exe
127 $(call MSG_TOOL,Inf2Cat,VBoxGuest-inf,$@,$<)
128 $(call VBOX_MAKE_CAT_FN, $(@D),$@)
129 endif # KBUILD_TARGET == win
130
131 # The packing target rule, but only if we're on the local build box.
132 # (VBOX_WITHOUT_ADDITIONS_ISO is used by the additions build box, see the root makefile.)
133 ifndef VBOX_WITHOUT_ADDITIONS_ISO
134 PACKING += $(VBOX_PATH_ADDITIONS_ISO)/VBoxGuestAdditions.zip
135 endif
136endif # !VBOX_ONLY_VALIDATIONKIT
137
138include $(FILE_KBUILD_SUB_FOOTER)
139
140#
141# File per-OS/arch file specs for the additions iso (alphabetical order).
142#
143# We test for the VBOX_WITH_ADDITIONS_ISO.os.arch so that we don't have to
144# do the $(if )'ing down where the GUESTADDITIONS_FILESPEC.os.arch down
145# in the dependency list and mkisofs command.
146#
147
148# Darwin / Mac OS X
149## @todo Create .pkg files not run files. The build server shall create a combined packaged, goverend by
150# the VBOX_WITH_COMBINED_DARWIN_GUEST_PACKAGE macro.
151ifdef VBOX_WITH_ADDITIONS_ISO.darwin.x86
152 VBOX_PATH_ADDITIONS.darwin.x86 = $(PATH_OUT_BASE)/darwin.x86/$(KBUILD_TYPE)/dist
153 GUESTADDITIONS_FILESPEC.darwin.x86 = \
154 VBoxDarwinAdditions-x86.dmg=$(VBOX_PATH_ADDITIONS.darwin.x86)/VBoxDarwinAdditions.dmg
155endif
156
157ifdef VBOX_WITH_ADDITIONS_ISO.darwin.amd64
158 VBOX_PATH_ADDITIONS.darwin.amd64 = $(PATH_OUT_BASE)/darwin.amd64/$(KBUILD_TYPE)/dist
159 GUESTADDITIONS_FILESPEC.darwin.amd64 = \
160 VBoxDarwinAdditions-amd64.dmg=$(VBOX_PATH_ADDITIONS.darwin.amd64)/VBoxDarwinAdditions.dmg
161endif
162
163# FreeBSD
164ifdef VBOX_WITH_ADDITIONS_ISO.freebsd.amd64
165 VBOX_PATH_ADDITIONS.freebsd.amd64 = $(PATH_OUT_BASE)/freebsd.amd64/$(KBUILD_TYPE)/bin/additions
166 GUESTADDITIONS_FILESPEC.freebsd.amd64 = \
167 VBoxFreeBSDAdditions-amd64.tbz=$(VBOX_PATH_ADDITIONS.freebsd.amd64)/VBoxFreeBSDAdditions.tbz
168endif
169ifdef VBOX_WITH_ADDITIONS_ISO.freebsd.x86
170 VBOX_PATH_ADDITIONS.freebsd.x86 = $(PATH_OUT_BASE)/freebsd.x86/$(KBUILD_TYPE)/bin/additions
171 GUESTADDITIONS_FILESPEC.freebsd.x86 = \
172 VBoxFreeBSDAdditions-x86.tbz=$(VBOX_PATH_ADDITIONS.freebsd.x86)/VBoxFreeBSDAdditions.tbz
173endif
174
175# GNU/Linux
176ifdef VBOX_WITH_ADDITIONS_ISO.linux.amd64
177 VBOX_PATH_ADDITIONS.linux.amd64 = $(PATH_OUT_BASE)/linux.amd64/$(KBUILD_TYPE)/bin/additions
178 ifdef VBOX_WITH_COMBINED_LINUX_GUEST_PACKAGE
179 VBOX_LNX_ADD_AMD64_RUN_PKG=VBoxLinuxAdditions.run
180 else
181 VBOX_LNX_ADD_AMD64_RUN_PKG=VBoxLinuxAdditions-amd64.run
182 endif
183 GUESTADDITIONS_FILESPEC.linux.amd64 = \
184 $(VBOX_LNX_ADD_AMD64_RUN_PKG)=$(VBOX_PATH_ADDITIONS.linux.amd64)/VBoxLinuxAdditions.run
185endif
186ifdef VBOX_WITH_ADDITIONS_ISO.linux.x86
187 VBOX_PATH_ADDITIONS.linux.x86 = $(PATH_OUT_BASE)/linux.x86/$(KBUILD_TYPE)/bin/additions
188## @todo 64-bit additions: rename this package, update docs (?) and tests (?). create wrapper? create gnome/kde autorun app (xplatform) ?
189 ifdef VBOX_WITH_COMBINED_LINUX_GUEST_PACKAGE
190 VBOX_LNX_ADD_X86_RUN_PKG=VBoxLinuxAdditions.run
191 else
192 VBOX_LNX_ADD_X86_RUN_PKG=VBoxLinuxAdditions-x86.run
193 endif
194 GUESTADDITIONS_FILESPEC.linux.x86 = \
195 $(VBOX_LNX_ADD_X86_RUN_PKG)=$(VBOX_PATH_ADDITIONS.linux.x86)/VBoxLinuxAdditions.run \
196 runasroot.sh=$(VBOX_PATH_ADDITIONS.linux.x86)/runasroot.sh \
197 autorun.sh=$(VBOX_PATH_ADDITIONS.linux.x86)/autorun.sh
198endif
199
200# IBM OS/2
201ifdef VBOX_WITH_ADDITIONS_ISO.os2.x86
202 VBOX_PATH_ADDITIONS.os2.x86 = $(PATH_OUT_BASE)/os2.x86/$(KBUILD_TYPE)/bin/additions
203 GUESTADDITIONS_FILESPEC.os2.x86 = \
204 OS2/VBoxGuest.sys=$(VBOX_PATH_ADDITIONS.os2.x86)/VBoxGuest.sys \
205 OS2/VBoxService.exe=$(VBOX_PATH_ADDITIONS.os2.x86)/VBoxService.exe \
206 OS2/VBoxControl.exe=$(VBOX_PATH_ADDITIONS.os2.x86)/VBoxControl.exe \
207 OS2/VBoxReplaceDll.exe=$(VBOX_PATH_ADDITIONS.os2.x86)/VBoxReplaceDll.exe \
208 OS2/libc06.dll=$(VBOX_PATH_ADDITIONS.os2.x86)/libc06.dll \
209 OS2/libc061.dll=$(VBOX_PATH_ADDITIONS.os2.x86)/libc061.dll \
210 OS2/libc062.dll=$(VBOX_PATH_ADDITIONS.os2.x86)/libc062.dll \
211 OS2/libc063.dll=$(VBOX_PATH_ADDITIONS.os2.x86)/libc063.dll \
212 OS2/libc064.dll=$(VBOX_PATH_ADDITIONS.os2.x86)/libc064.dll \
213 OS2/libc065.dll=$(VBOX_PATH_ADDITIONS.os2.x86)/libc065.dll \
214 OS2/readme.txt=$(VBOX_PATH_ADDITIONS.os2.x86)/readme.txt \
215 \
216 OS2/gengradd.dll=$(VBOX_PATH_ADDITIONS.os2.x86)/gengradd.dll \
217 OS2/vboxmouse.sys=$(VBOX_PATH_ADDITIONS.os2.x86)/vboxmouse.sys
218endif
219
220# Oracle Solaris.
221ifdef VBOX_WITH_ADDITIONS_ISO.solaris.amd64
222 VBOX_PATH_ADDITIONS.solaris.amd64 = $(PATH_OUT_BASE)/solaris.amd64/$(KBUILD_TYPE)/bin/additions
223 GUESTADDITIONS_FILESPEC.solaris.amd64 = \
224 VBoxSolarisAdditions-amd64.pkg=$(VBOX_PATH_ADDITIONS.solaris.amd64)/VBoxSolarisAdditions.pkg
225endif
226ifdef VBOX_WITH_ADDITIONS_ISO.solaris.x86
227 VBOX_PATH_ADDITIONS.solaris.x86 = $(PATH_OUT_BASE)/solaris.x86/$(KBUILD_TYPE)/bin/additions
228 GUESTADDITIONS_FILESPEC.solaris.x86 = \
229 VBoxSolarisAdditions-x86.pkg=$(VBOX_PATH_ADDITIONS.solaris.x86)/VBoxSolarisAdditions.pkg
230endif
231ifdef VBOX_WITH_COMBINED_SOLARIS_GUEST_PACKAGE
232 # Build combined 32bit and 64bit solaris additions, not just a single arch.
233 # This assumes that the 32bit build directory contains the combined additions
234 # for 32bit and 64bit solaris. This just modifies variables set above.
235 GUESTADDITIONS_FILESPEC.solaris.x86 = \
236 VBoxSolarisAdditions.pkg=$(VBOX_PATH_ADDITIONS.solaris.x86)/VBoxSolarisAdditions.pkg
237 GUESTADDITIONS_FILESPEC.solaris.amd64 =
238endif
239
240# Microsoft Windows.
241ifdef VBOX_WITH_ADDITIONS_ISO.win.amd64
242 VBOX_PATH_ADDITIONS.win.amd64 = $(PATH_OUT_BASE)/win.amd64/$(KBUILD_TYPE)/bin/additions
243 GUESTADDITIONS_FILESPEC.win.amd64 = \
244 VBoxWindowsAdditions-amd64.exe=$(VBOX_PATH_ADDITIONS.win.amd64)/VBoxWindowsAdditions-amd64.exe
245 ifndef VBOX_WITH_ADDITIONS_ISO.win.x86
246 GUESTADDITIONS_FILESPEC.win.amd64 += \
247 cert/oracle-vbox.cer=$(VBOX_PATH_ADDITIONS_SRC)/WINNT/tools/oracle-vbox.cer \
248 cert/VBoxCertUtil.exe=$(VBOX_PATH_ADDITIONS.win.amd64)/VBoxCertUtil.exe
249 endif
250endif
251
252ifdef VBOX_WITH_ADDITIONS_ISO.win.x86
253 VBOX_PATH_ADDITIONS.win.x86 = $(PATH_OUT_BASE)/win.x86/$(KBUILD_TYPE)/bin/additions
254 GUESTADDITIONS_FILESPEC.win.x86 = \
255 VBoxWindowsAdditions-x86.exe=$(VBOX_PATH_ADDITIONS.win.x86)/VBoxWindowsAdditions-x86.exe \
256 VBoxWindowsAdditions.exe=$(VBOX_PATH_ADDITIONS.win.x86)/VBoxWindowsAdditions.exe \
257 AUTORUN.INF=$(VBOX_PATH_ADDITIONS_SRC)/WINNT/Installer/ISO/AUTORUN.INF \
258 32Bit/Readme.txt=$(VBOX_PATH_ADDITIONS_SRC)/WINNT/Installer/ISO/ReadmeDrivers.txt \
259 64Bit/Readme.txt=$(VBOX_PATH_ADDITIONS_SRC)/WINNT/Installer/ISO/ReadmeDrivers.txt \
260 cert/oracle-vbox.cer=$(VBOX_PATH_ADDITIONS_SRC)/WINNT/tools/oracle-vbox.cer \
261 cert/VBoxCertUtil.exe=$(VBOX_PATH_ADDITIONS.win.x86)/VBoxCertUtil.exe
262endif # win.x86
263
264ifdef VBOX_WITH_ADDITIONS_ISO.haiku.x86
265 VBOX_PATH_ADDITIONS.haiku.x86 = $(PATH_OUT_BASE)/haiku.x86/$(KBUILD_TYPE)/bin/additions
266 # or bfs?
267 GUESTADDITIONS_FILESPEC.haiku.x86 = \
268 VBoxHaikuAdditions-x86.run=$(VBOX_PATH_ADDITIONS.haiku.x86)/VBoxHaikuAdditions-x86.run
269endif
270
271
272#
273# Build the Guest Additions ISO image.
274#
275ifndef VBOX_WITHOUT_ADDITIONS_ISO
276$(VBOX_PATH_ADDITIONS_ISO)/VBoxGuestAdditions.iso: \
277 $(filter-out %=deleteme=,\
278 $(subst =,=deleteme= ,\
279 $(GUESTADDITIONS_FILESPEC.win.x86) \
280 $(GUESTADDITIONS_FILESPEC.win.amd64) \
281 $(GUESTADDITIONS_FILESPEC.solaris.x86) \
282 $(GUESTADDITIONS_FILESPEC.solaris.amd64) \
283 $(GUESTADDITIONS_FILESPEC.os2.x86) \
284 $(GUESTADDITIONS_FILESPEC.linux.x86) \
285 $(GUESTADDITIONS_FILESPEC.linux.amd64) \
286 $(GUESTADDITIONS_FILESPEC.freebsd.x86) \
287 $(GUESTADDITIONS_FILESPEC.freebsd.amd64) \
288 $(GUESTADDITIONS_FILESPEC.haiku.x86) \
289 $(GUESTADDITIONS_FILESPEC.darwin.x86) \
290 $(GUESTADDITIONS_FILESPEC.darwin.amd64) \
291 )\
292 ) \
293 $(VBOX_SVN_REV_KMK) \
294 $(VBOX_PATH_ADDITIONS_SRC)/Makefile.kmk
295 $(call MSG_TOOL,mkisofs,,$@)
296 $(QUIET)$(MKDIR) -p $(@D)
297 @# use iso-level 3 which is the most ISO conforming level with least restrictions; iso-level 4 maps to iso-level 2
298 @# with some extra restrictions removal (not conforming to ISO9660) which some platforms like Solaris 10 does not like.
299 $(VBOX_MKISOFS) -rational-rock -joliet -iso-level 3 \
300 -volid "VBOXADDITIONS_$(VBOX_VERSION_STRING_RAW)_$(VBOX_SVN_REV)" -l -graft-points -o $@ \
301 $(GUESTADDITIONS_FILESPEC.win) \
302 $(GUESTADDITIONS_FILESPEC.win.x86) \
303 $(GUESTADDITIONS_FILESPEC.win.amd64) \
304 $(GUESTADDITIONS_FILESPEC.solaris.x86) \
305 $(GUESTADDITIONS_FILESPEC.solaris.amd64) \
306 $(GUESTADDITIONS_FILESPEC.os2.x86) \
307 $(GUESTADDITIONS_FILESPEC.linux.x86) \
308 $(GUESTADDITIONS_FILESPEC.linux.amd64) \
309 $(GUESTADDITIONS_FILESPEC.freebsd.x86) \
310 $(GUESTADDITIONS_FILESPEC.freebsd.amd64) \
311 $(GUESTADDITIONS_FILESPEC.haiku.x86) \
312 $(GUESTADDITIONS_FILESPEC.darwin.x86) \
313 $(GUESTADDITIONS_FILESPEC.darwin.amd64)
314
315$(VBOX_PATH_ADDITIONS_ISO)/VBoxGuestAdditions.zip: $(VBOX_PATH_ADDITIONS_ISO)/VBoxGuestAdditions.iso
316 $(call MSG_L1,Zipping image $@)
317 $(QUIET)$(RM) -f $@
318 $(QUIET)$(REDIRECT) -C $(VBOX_PATH_ADDITIONS_ISO) -- zip$(HOSTSUFF_EXE) -9 $@ $(notdir $^)
319
320# Alias for creating the iso.
321.PHONY: additions-iso
322additions-iso: $(VBOX_PATH_ADDITIONS_ISO)/VBoxGuestAdditions.zip
323
324endif
325
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use