diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2012-10-26 16:25:44 +0000 |
---|---|---|
committer | <> | 2012-11-12 12:15:52 +0000 |
commit | 58ed4748338f9466599adfc8a9171280ed99e23f (patch) | |
tree | 02027d99ded4fb56a64aa9489ac2eb487e7858ab /include/Makefile.kmk | |
download | VirtualBox-58ed4748338f9466599adfc8a9171280ed99e23f.tar.gz |
Imported from /home/lorry/working-area/delta_VirtualBox/VirtualBox-4.2.4.tar.bz2.VirtualBox-4.2.4
Diffstat (limited to 'include/Makefile.kmk')
-rw-r--r-- | include/Makefile.kmk | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/include/Makefile.kmk b/include/Makefile.kmk new file mode 100644 index 00000000..5d5a0ae7 --- /dev/null +++ b/include/Makefile.kmk @@ -0,0 +1,149 @@ +# $Id: Makefile.kmk $ +## @file +# Some hacks to allow syntax and prerequisite include checking of headers. +# This makefile doesn't and shouldn't build successfully. +# + +# +# Copyright (C) 2006-2012 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. +# + +DEPTH = .. +include $(KBUILD_PATH)/header.kmk + +LIBRARIES = SyntaxVBoxIncludeR3 SyntaxVBoxIncludeR0 SyntaxVBoxIncludeRC + +# Omit headers that are using C++ features and upsets gcc. +cpp_features_hdrs := \ + VBox/vmm/hwaccm.h \ + VBox/vmm/hwacc_vmx.h \ + VBox/HostServices/GuestControlSvc.h \ + VBox/VBoxCrHgsmi.h \ + VBox/VBoxUhgsmi.h + +# Omit headers that are C++ and ring-3. +r3_cpp_hdrs := \ + VBox/dbggui.h \ + VBox/settings.h \ + VBox/com/Guid.h \ + VBox/HostServices/GuestPropertySvc.h \ + $(wildcard iprt/*_cpp.h iprt/cpp/*.h VBox/com/*.h ) + +# Ring-3 only headers. +r3_only_hdrs := \ + VBox/vrdpapi.h \ + VBox/vrdpusb.h \ + VBox/VBoxHDD.h \ + VBox/VBoxHDD-Plugin.h \ + VBox/VBoxCrHgsmi.h \ + VBox/VBoxUhgsmi.h \ + VBox/dbus.h \ + VBox/vd.h \ + VBox/vd-plugin.h \ + VBox/vd-cache-plugin.h \ + VBox/vmm/uvm.h \ + VBox/vscsi.h \ + $(wildcard VBox/ExtPack/*.h ) \ + iprt/alloca.h \ + iprt/tcp.h \ + iprt/localipc.h \ + iprt/linux/sysfs.h \ + iprt/socket.h + +# We omit a few headers which have platform specific issues or are templates. +hdrs := $(filter-out \ + VBox/HostServices/glext.h \ + VBox/HostServices/glxext.h \ + VBox/HostServices/wglext.h \ + VBox/VBoxGuest16.h \ + VBox/VBoxGL2D.h \ + VBox/WinNetConfig.h \ + VBox/usblib-win.h \ + VBox/usblib-solaris.h \ + VBox/VDEPlug.h \ + $(if-expr "$(KBUILD_TARGET)" != "win", \ + VBox/VBoxDrvCfg-win.h \ + VBox/VBoxNetCfg-win.h \ + ,) \ + \ + VBox/dbus-calls.h \ + VBox/VDEPlugSymDefs.h \ + VBox/VBoxKeyboard.h \ + iprt/runtime-loader.h \ + iprt/mangling.h \ + \ + $(foreach os,$(filter-out $(KBUILD_TARGET),$(KBUILD_OSES)),iprt/$(os)/% VBox/$(os)/%) \ + $(xforeach arch,$(KBUILD_ARCHES),iprt/nocrt/$(arch)/%) \ + , $(wildcard VBox/*.h VBox/*/*.h iprt/*.h iprt/*/*.h)) + +# ring-3, ring-0 and raw-mode context specific exclusions. +hdrs.r3 := $(filter-out , $(hdrs)) +hdrs-c.r3 := $(filter-out $(cpp_features_hdrs) $(r3_cpp_hdrs), $(hdrs.r3)) +hdrs.r0 := $(filter-out $(r3_cpp_hdrs) $(r3_only_hdrs), $(hdrs)) +hdrs-c.r0 := $(filter-out $(cpp_features_hdrs), $(hdrs.r0)) +hdrs.rc := $(filter-out \ + VBox/VBoxGuestLib.h \ + VBox/vmm/gvm.h \ + iprt/thread.h \ + iprt/mem.h \ + iprt/alloc.h \ + $(r3_cpp_hdrs) \ + $(r3_only_hdrs) \ + , $(hdrs)) +hdrs-c.rc := $(filter-out $(cpp_features_hdrs), $(hdrs.rc)) + +SyntaxVBoxIncludeR3_TEMPLATE = VBOXMAINEXE +SyntaxVBoxIncludeR3_DEFS = VBOX_WITH_HGCM +SyntaxVBoxIncludeR3_CDEFS = VBOX_WITHOUT_UNNAMED_UNIONS +SyntaxVBoxIncludeR3_SOURCES := \ + $(addprefix $(PATH_TARGET)/,$(subst .h,-c.c, $(subst /,_,$(hdrs-c.r3)))) \ + $(addprefix $(PATH_TARGET)/,$(subst .h,-cpp.cpp, $(subst /,_,$(hdrs.r3)))) + +SyntaxVBoxIncludeR0_TEMPLATE = VBoxR0 +SyntaxVBoxIncludeR0_DEFS = VBOX_WITH_HGCM +SyntaxVBoxIncludeR0_CDEFS = VBOX_WITHOUT_UNNAMED_UNIONS +SyntaxVBoxIncludeR0_SOURCES := \ + $(addprefix $(PATH_TARGET)/,$(subst .h,-c.c, $(subst /,_,$(hdrs-c.r0)))) \ + $(addprefix $(PATH_TARGET)/,$(subst .h,-cpp.cpp, $(subst /,_,$(hdrs.r0)))) + +SyntaxVBoxIncludeRC_TEMPLATE = VBoxRc +SyntaxVBoxIncludeRC_DEFS = VBOX_WITH_HGCM +SyntaxVBoxIncludeRC_CDEFS = VBOX_WITHOUT_UNNAMED_UNIONS +SyntaxVBoxIncludeRC_SOURCES := \ + $(addprefix $(PATH_TARGET)/,$(subst .h,-c.c, $(subst /,_,$(hdrs-c.rc)))) \ + $(addprefix $(PATH_TARGET)/,$(subst .h,-cpp.cpp, $(subst /,_,$(hdrs.rc)))) + + +# Comment out the next line to simplify header correction. +VBOX_ROOT_INCLUDE_MAKEFILE = $(PATH_ROOT)/include/Makefile.kmk + +include $(FILE_KBUILD_FOOTER) + + +define def_hdr +$(eval flatname := $(subst /,_,$(basename $(hdr)))) +$$(PATH_TARGET)/$(flatname)-cpp.cpp: $(VBOX_ROOT_INCLUDE_MAKEFILE) | $$(PATH_TARGET)/ + $(QUIET)$$(APPEND) -t -n $$@ '#include <$(hdr)>' 'int main(int argc, char **argv) {(void)argc; (void)argv; return 0;}' + +$$(PATH_TARGET)/$(flatname)-c.c: $(VBOX_ROOT_INCLUDE_MAKEFILE) | $$(PATH_TARGET)/ + $(QUIET)$$(APPEND) -t -n $$@ '#include <$(hdr)>' 'int main(int argc, char **argv) {(void)argc; (void)argv; return 0;}' + +$(subst .h,.o,$(notdir $(hdr))):: +if1of ($(hdr), $(r3_cpp_hdrs) $(cpp_features_hdrs)) + $$(MAKE) -f $(MAKEFILE) $(flatname)-cpp.o +else + $$(MAKE) -f $(MAKEFILE) $(flatname)-c.o $(flatname)-cpp.o +endif + +endef + +$(foreach hdr,$(hdrs), $(eval $(def_hdr))) + |