vbox5: unified build dir adjustments

Issue #2338
This commit is contained in:
Alexander Boettcher 2017-01-31 15:13:58 +01:00 committed by Christian Helmuth
parent 48d1141917
commit 5ebd8ae02e
13 changed files with 288 additions and 94 deletions

View File

@ -52,11 +52,9 @@ VBOX_CC_OPT += -DVBOX_WITH_E1000
VBOX_CC_OPT += -DVBOX_WITH_AHCI
ifneq ($(call select_from_ports,virtualbox5),)
VIRTUALBOX_VERSION_MAJOR := $(shell cat $(VIRTUALBOX_DIR)/Config.kmk | grep "VBOX_VERSION_MAJOR = " | grep -v "'VBOX_VERSION_MAJOR" | sed "s/^.*= //")
VIRTUALBOX_VERSION_MINOR := $(shell cat $(VIRTUALBOX_DIR)/Config.kmk | grep "VBOX_VERSION_MINOR = " | grep -v "'VBOX_VERSION_MINOR" | sed "s/^.*= //")
VIRTUALBOX_VERSION_BUILD := $(shell cat $(VIRTUALBOX_DIR)/Config.kmk | grep "VBOX_VERSION_BUILD = " | grep -v "'VBOX_VERSION_BUILD" | sed "s/^.*= //")
endif
VIRTUALBOX_VERSION_MAJOR := $(shell cat $(VIRTUALBOX_DIR)/Config.kmk 2>/dev/null | grep "VBOX_VERSION_MAJOR = " | grep -v "'VBOX_VERSION_MAJOR" | sed "s/^.*= //")
VIRTUALBOX_VERSION_MINOR := $(shell cat $(VIRTUALBOX_DIR)/Config.kmk 2>/dev/null | grep "VBOX_VERSION_MINOR = " | grep -v "'VBOX_VERSION_MINOR" | sed "s/^.*= //")
VIRTUALBOX_VERSION_BUILD := $(shell cat $(VIRTUALBOX_DIR)/Config.kmk 2>/dev/null | grep "VBOX_VERSION_BUILD = " | grep -v "'VBOX_VERSION_BUILD" | sed "s/^.*= //")
ifeq ($(VBOX_MACH),x86_32)
VIRTUALBOX_PACKAGE_STRING = GenodeOS_32BIT_GENERIC

View File

@ -0,0 +1,16 @@
include $(REP_DIR)/lib/mk/virtualbox5-common.inc
LIBS += stdcxx
SRC_CC = sup.cc
INC_DIR += $(call select_from_repositories,src/lib/libc)
INC_DIR += $(VBOX_DIR)/Main/xml
INC_DIR += $(VBOX_DIR)/Main/include
INC_DIR += $(VBOX_DIR)/VMM/include
INC_DIR += $(REP_DIR)/src/virtualbox
INC_DIR += $(REP_DIR)/src/virtualbox5/frontend
INC_DIR += $(REP_DIR)/src/virtualbox5/accloff
#vpath pgm.cc $(REP_DIR)/src/virtualbox5/
vpath sup.cc $(REP_DIR)/src/virtualbox5/accloff/

View File

@ -1 +1 @@
720a329b2f1eb7b71e8b3c7542b9f744224d370a
020f44048cce7d299293e5ebc72b356f3aff1ff0

View File

@ -119,41 +119,41 @@ UNZIP_OPT(virtualbox_sdk) := $(VIRTUALBOX_SDK_ZIP) sdk/bindings/xpcom/include/Vi
default : additional_steps
additional_steps : $(DOWNLOADS)
@xsltproc --stringparam mode declare \
$(VERBOSE)xsltproc --stringparam mode declare \
-o src/app/virtualbox/src/VBox/Main/xml/SchemaDefs.h \
src/app/virtualbox/src/VBox/Main/xml/SchemaDefs.xsl \
src/app/virtualbox/src/VBox/Main/xml/VirtualBox-settings.xsd
xsltproc -o VirtualBox_stripped.xidl \
$(VERBOSE)xsltproc -o VirtualBox_stripped.xidl \
src/app/virtualbox/src/VBox/Main/idl/docstrip.xsl \
src/app/virtualbox/src/VBox/Main/idl/VirtualBox.xidl
xsltproc --stringparam KBUILD_HOST genode \
$(VERBOSE)xsltproc --stringparam KBUILD_HOST genode \
--stringparam generating "headers" -o VBoxAPIWrap/apiwrappers-headers \
src/app/virtualbox/src/VBox/Main/idl/apiwrap-server.xsl \
VirtualBox_stripped.xidl
xsltproc --stringparam KBUILD_HOST genode \
$(VERBOSE)xsltproc --stringparam KBUILD_HOST genode \
--stringparam generating "sources" --param reminder 0 \
-o VBoxAPIWrap/apiwrappers-sources-even \
src/app/virtualbox/src/VBox/Main/idl/apiwrap-server.xsl \
VirtualBox_stripped.xidl
xsltproc --stringparam KBUILD_HOST genode \
$(VERBOSE)xsltproc --stringparam KBUILD_HOST genode \
--stringparam generating "sources" --param reminder 1 \
-o VBoxAPIWrap/apiwrappers-sources-odd \
src/app/virtualbox/src/VBox/Main/idl/apiwrap-server.xsl \
VirtualBox_stripped.xidl
mkdir -p src/app/virtualbox/VBoxAPIWrap
csplit -s -n 1 -f "VBoxAPIWrap/xx" VBoxAPIWrap/apiwrappers-headers '/##### ENDFILE.*$$/' '{*}' && \
$(VERBOSE)mkdir -p src/app/virtualbox/VBoxAPIWrap
$(VERBOSE)csplit -s -n 1 -f "VBoxAPIWrap/xx" VBoxAPIWrap/apiwrappers-headers '/##### ENDFILE.*$$/' '{*}' && \
i=0 && \
for f in $$(grep "BEGINFILE \"" VBoxAPIWrap/apiwrappers-headers | sed "s,//.*BEGINFILE \",,g" | sed "s,\",,g"); do \
mv "VBoxAPIWrap/xx$$((i++))" "src/app/virtualbox/VBoxAPIWrap/$$f"; \
done && \
rm "VBoxAPIWrap/xx$$((i))"
csplit -s -n 1 -f "VBoxAPIWrap/xx" VBoxAPIWrap/apiwrappers-sources-even '/##### ENDFILE.*$$/' '{*}' && \
$(VERBOSE)csplit -s -n 1 -f "VBoxAPIWrap/xx" VBoxAPIWrap/apiwrappers-sources-even '/##### ENDFILE.*$$/' '{*}' && \
i=0 && \
for f in $$(grep "BEGINFILE \"" VBoxAPIWrap/apiwrappers-sources-even | sed "s,//.*BEGINFILE \",,g" | sed "s,\",,g"); do \
mv "VBoxAPIWrap/xx$$((i++))" "src/app/virtualbox/VBoxAPIWrap/$$f"; \
done && \
rm "VBoxAPIWrap/xx$$((i))"
csplit -s -n 1 -f "VBoxAPIWrap/xx" VBoxAPIWrap/apiwrappers-sources-odd '/##### ENDFILE.*$$/' '{*}' && \
$(VERBOSE)csplit -s -n 1 -f "VBoxAPIWrap/xx" VBoxAPIWrap/apiwrappers-sources-odd '/##### ENDFILE.*$$/' '{*}' && \
i=0 && \
for f in $$(grep "BEGINFILE \"" VBoxAPIWrap/apiwrappers-sources-odd | sed "s,//.*BEGINFILE \",,g" | sed "s,\",,g"); do \
mv "VBoxAPIWrap/xx$$((i++))" "src/app/virtualbox/VBoxAPIWrap/$$f"; \

View File

@ -44,7 +44,7 @@
<RemoteDisplay enabled="false" authType="Null" authTimeout="5000"/>
<BIOS>
<ACPI enabled="true"/>
<IOAPIC enabled="false"/>
<IOAPIC enabled="true"/>
<Logo fadeIn="true" fadeOut="true" displayTime="0"/>
<BootMenu mode="MessageAndMenu"/>
<TimeOffset value="0"/>
@ -125,7 +125,7 @@
</Adapter>
</Network>
<UART>
<Port slot="0" enabled="false" IOBase="0x3f8" IRQ="4" path="/dev/terminal" hostMode="HostDevice"/>
<Port slot="0" enabled="true" IOBase="0x3f8" IRQ="4" path="/dev/terminal" hostMode="HostDevice"/>
<Port slot="1" enabled="false" IOBase="0x2f8" IRQ="3" hostMode="Disconnected"/>
</UART>
<LPT>

View File

@ -41,9 +41,14 @@ set boot_modules {
dynamic_rom
}
set virtualbox_binary "virtualbox-rem"
set virtualbox_binary "virtualbox-rem"
set virtualbox5_binary "virtualbox5-rem"
if {[have_spec muen]} { set virtualbox_binary "virtualbox-muen" }
if {[have_spec nova]} { set virtualbox_binary "virtualbox-nova" }
if {[have_spec nova]} {
set virtualbox_binary "virtualbox-nova"
set virtualbox5_binary "virtualbox5-nova"
}
set config_of_app {
@ -245,8 +250,8 @@ for { set i 1} { $i <= $use_vms } { incr i} {
<start name=\"vbox${i}\" priority=\"-2\">"
append_if [expr $use_vbox4] config_of_app "
<binary name=\"$virtualbox_binary\" />"
append_if [expr $use_vbox5] config_of_app {
<binary name="virtualbox5" />}
append_if [expr $use_vbox5] config_of_app "
<binary name=\"$virtualbox5_binary\" />"
append config_of_app {
<resource name="RAM" quantum="1280M"/>}

View File

@ -1,18 +1,28 @@
set use_net 0
set use_ps2 [have_spec ps2]
set use_usb 0
set use_serial 0
set use_serial 1
set virtualbox_binary "virtualbox-rem"
if {[have_spec muen]} { set virtualbox_binary "virtualbox-muen" }
if {[have_spec nova]} { set virtualbox_binary "virtualbox-nova" }
set use_vbox4 1
set use_vbox5 [expr !$use_vbox4]
set build_components {
core init virtualbox
core init
drivers/framebuffer
drivers/timer
}
if {$use_vbox4} {
append build_components virtualbox
set virtualbox_binary "virtualbox-rem"
if {[have_spec muen]} { set virtualbox_binary "virtualbox-muen" }
if {[have_spec nova]} { set virtualbox_binary "virtualbox-nova" }
} else {
append build_components virtualbox5
set virtualbox_binary "virtualbox5-rem"
if {[have_spec nova]} { set virtualbox_binary "virtualbox5-nova" }
}
source ${genode_dir}/repos/base/run/platform_drv.inc
# override defaults of platform_drv.inc
proc platform_drv_priority {} { return { priority="-1"} }

View File

@ -27,6 +27,7 @@ lappend_if [have_spec x86] build_components drivers/rtc
lappend_if [expr $use_ram_fs || $use_usb] build_components server/ram_fs
lappend_if [expr $use_cpu_load] build_components app/trace_subject_reporter
lappend_if [expr $use_cpu_load] build_components app/cpu_load_display
lappend_if [expr $use_cpu_load] build_components app/top
source ${genode_dir}/repos/base/run/platform_drv.inc
# override defaults of platform_drv.inc
@ -114,7 +115,7 @@ append_if [expr $use_rumpfs] config {
append_if [expr $use_ram_fs] config {
<start name="ram_fs" priority="-1">}
append_if [expr $use_ram_fs] config "
<resource name=\"RAM\" quantum=\"[expr $use_vms * 3 * 128]M\"/>"
<resource name=\"RAM\" quantum=\"[expr $use_vms * 8 * 128]M\"/>"
append_if [expr $use_ram_fs] config {
<provides><service name="File_system"/></provides>
<config>
@ -190,6 +191,18 @@ append_if [expr $use_cpu_load] config {
<service name="Nitpicker"><child name="nitpicker"/></service>
<any-service><parent/></any-service>
</route>
</start>
<start name="top" priorirty="-1">
<resource name="RAM" quantum="2M"/>
<config period_ms="10000"/>
<route>
<service name="TRACE"><parent/></service>
<service name="LOG"><parent/></service>
<service name="Timer"><child name="timer"/></service>
<service name="Report"><child name="report_rom"/></service>
<any-service><parent/></any-service>
</route>
</start>}
append_if [expr $use_usb] config {
@ -327,11 +340,12 @@ lappend_if [expr $use_rumpfs] boot_modules rump.lib.so
lappend_if [expr $use_rumpfs] boot_modules rump_fs.lib.so
lappend_if [expr $use_rumpfs] boot_modules rump_fs
lappend_if [expr $use_vbox4] boot_modules $virtualbox_binary
lappend_if [expr $use_vbox5] boot_modules virtualbox5
lappend_if [expr $use_vbox5] boot_modules $virtualbox5_binary
lappend_if [expr $use_ram_fs || $use_usb] boot_modules ram_fs
lappend_if [expr $use_ram_fs && !$use_overlay_from_disk] boot_modules $overlay_image
lappend_if [expr $use_cpu_load] boot_modules trace_subject_reporter
lappend_if [expr $use_cpu_load] boot_modules cpu_load_display
lappend_if [expr $use_cpu_load] boot_modules top
# platform-specific modules
lappend_if [expr $use_ps2] boot_modules ps2_drv

View File

@ -0,0 +1,140 @@
/*
* \brief Genode specific VirtualBox SUPLib supplements.
* File used by Genode platforms not supporting hardware
* virtualisation features.
* \author Alexander Boettcher
* \date 2013-11-18
*/
/*
* Copyright (C) 2013 Genode Labs GmbH
*
* This file is distributed under the terms of the GNU General Public License
* version 2.
*/
/* Genode includes */
#include <base/log.h>
#include <base/semaphore.h>
#include <timer_session/connection.h>
/* VirtualBox includes */
#include <VBox/vmm/vm.h>
#include <VBox/err.h>
/* Genode's VirtualBox includes */
#include "sup.h"
#include "vmm.h"
/* Libc include */
#include <pthread.h>
/* VirtualBox SUPLib interface */
int SUPR3QueryVTxSupported(void)
{
return VERR_INTERNAL_ERROR;
}
int SUPR3CallVMMR0Fast(PVMR0 pVMR0, unsigned uOperation, VMCPUID idCpu)
{
return VERR_INTERNAL_ERROR;
}
static Genode::Semaphore *r0_halt_sem()
{
static Genode::Semaphore sem;
return &sem;
}
int SUPR3CallVMMR0Ex(PVMR0 pVMR0, VMCPUID idCpu, unsigned
uOperation, uint64_t u64Arg, PSUPVMMR0REQHDR pReqHdr)
{
switch(uOperation)
{
case VMMR0_DO_GVMM_CREATE_VM:
genode_VMMR0_DO_GVMM_CREATE_VM(pReqHdr);
return VINF_SUCCESS;
case VMMR0_DO_GVMM_SCHED_HALT:
r0_halt_sem()->down();
return VINF_SUCCESS;
case VMMR0_DO_GVMM_SCHED_WAKE_UP:
r0_halt_sem()->up();
return VINF_SUCCESS;
case VMMR0_DO_VMMR0_INIT:
return VINF_SUCCESS;
case VMMR0_DO_GVMM_SCHED_POLL:
/* called by 'vmR3HaltGlobal1Halt' */
Genode::log(__func__, ": SUPR3CallVMMR0Ex: VMMR0_DO_GVMM_SCHED_POLL");
return VINF_SUCCESS;
default:
Genode::error("SUPR3CallVMMR0Ex: unhandled uOperation ", (int)uOperation);
return VERR_GENERAL_FAILURE;
}
}
bool create_emt_vcpu(pthread_t * thread, size_t stack_size,
const pthread_attr_t *attr,
void *(*start_routine)(void *), void *arg,
Genode::Cpu_session * cpu_session,
Genode::Affinity::Location location,
unsigned int cpu_id,
const char * name)
{
/* no hardware acceleration support */
return false;
}
/**
* Dummies and unimplemented stuff.
*/
uint64_t genode_cpu_hz() {
return 1000000000ULL; /* XXX fixed 1GHz return value */
}
void genode_update_tsc(void (*update_func)(void), unsigned long update_us)
{
using namespace Genode;
Timer::Connection timer(genode_env());
Signal_context sig_ctx;
Signal_receiver sig_rec;
Signal_context_capability sig_cap = sig_rec.manage(&sig_ctx);
timer.sigh(sig_cap);
timer.trigger_once(update_us);
for (;;) {
Signal s = sig_rec.wait_for_signal();
update_func();
timer.trigger_once(update_us);
}
}
extern "C" void pthread_yield() { Genode::warning(__func__, " unimplemented"); }
int SUPR3PageAllocEx(::size_t cPages, uint32_t fFlags, void **ppvPages,
PRTR0PTR pR0Ptr, PSUPPAGE paPages)
{
Genode::error(__func__, " unimplemented");
return VERR_GENERAL_FAILURE;
}
extern "C" bool PGMUnmapMemoryGenode(void *, ::size_t)
{
Genode::error(__func__, " unimplemented");
return VERR_GENERAL_FAILURE;
}

View File

@ -0,0 +1,9 @@
TARGET = virtualbox5-nova
REQUIRES = nova
LIBS += virtualbox5-nova
include $(REP_DIR)/src/virtualbox5/target.inc
vpath frontend/% $(REP_DIR)/src/virtualbox5/
vpath %.cc $(REP_DIR)/src/virtualbox5/

View File

@ -0,0 +1,65 @@
VBOX_CC_OPT += -DVBOX_WITH_HARDENING
VBOX_CC_OPT += -DVBOX_WITH_GENERIC_SESSION_WATCHER
include $(REP_DIR)/lib/mk/virtualbox5-common.inc
CC_WARN += -Wall
SRC_CC = frontend/main.cc frontend/console.cc \
frontend/VirtualBoxErrorInfoImpl.cpp \
devices.cc drivers.cc dummies.cc libc.cc \
logger.cc mm.cc pdm.cc pgm.cc rt.cc sup.cc \
hm.cc thread.cc dynlib.cc unimpl.cc
# use implementation of VBOX 4
vpath dynlib.cc $(REP_DIR)/src/virtualbox
vpath libc.cc $(REP_DIR)/src/virtualbox
vpath logger.cc $(REP_DIR)/src/virtualbox
vpath pdm.cc $(REP_DIR)/src/virtualbox
vpath rt.cc $(REP_DIR)/src/virtualbox
vpath thread.cc $(REP_DIR)/src/virtualbox
LIBS += base
LIBS += stdcxx
LIBS += virtualbox5-bios virtualbox5-recompiler virtualbox5-runtime \
virtualbox5-vmm virtualbox5-devices virtualbox5-drivers \
virtualbox5-storage virtualbox5-zlib virtualbox5-liblzf \
virtualbox5-xml virtualbox5-main virtualbox5-apiwrap \
virtualbox5-dis
LIBS += pthread libc_terminal libc_pipe libiconv
LIBS += qemu-usb
INC_DIR += $(call select_from_repositories,src/lib/libc)
INC_DIR += $(call select_from_repositories,src/lib/pthread)
INC_DIR += $(VBOX_DIR)/Runtime/include
SRC_CC += HostServices/SharedFolders/service.cpp
SRC_CC += HostServices/SharedFolders/mappings.cpp
SRC_CC += HostServices/SharedFolders/vbsf.cpp
SRC_CC += HostServices/SharedFolders/vbsfpath.cpp
SRC_CC += HostServices/SharedFolders/shflhandle.cpp
SRC_CC += HostServices/SharedClipboard/service.cpp
SRC_CC += frontend/dummy/errorinfo.cc frontend/dummy/virtualboxbase.cc
SRC_CC += frontend/dummy/autostart.cc frontend/dummy/rest.cc
SRC_CC += frontend/dummy/host.cc
#vbox 4 include
INC_DIR += $(REP_DIR)/src/virtualbox
INC_DIR += $(VBOX_DIR)/Main/include
INC_DIR += $(VBOX_DIR)/VMM/include
INC_DIR += $(REP_DIR)/src/virtualbox5/frontend
INC_DIR += $(VIRTUALBOX_DIR)/VBoxAPIWrap
INC_DIR += $(VBOX_DIR)/Main/xml
INC_DIR += $(VBOX_DIR)/HostServices
# search path to 'scan_code_set_2.h'
INC_DIR += $(call select_from_repositories,src/drivers/input/spec/ps2)

View File

@ -1,68 +1,5 @@
REQUIRES = nova
TARGET = virtualbox5-rem
VBOX_CC_OPT += -DVBOX_WITH_HARDENING
VBOX_CC_OPT += -DVBOX_WITH_GENERIC_SESSION_WATCHER
LIBS += virtualbox5-hwaccl-off
include $(REP_DIR)/lib/mk/virtualbox5-common.inc
CC_WARN += -Wall
TARGET = virtualbox5
SRC_CC = frontend/main.cc frontend/console.cc \
frontend/VirtualBoxErrorInfoImpl.cpp \
devices.cc drivers.cc dummies.cc libc.cc \
logger.cc mm.cc pdm.cc pgm.cc rt.cc sup.cc \
hm.cc thread.cc dynlib.cc unimpl.cc
# use implementation of VBOX 4
vpath dynlib.cc $(REP_DIR)/src/virtualbox
vpath libc.cc $(REP_DIR)/src/virtualbox
vpath logger.cc $(REP_DIR)/src/virtualbox
vpath pdm.cc $(REP_DIR)/src/virtualbox
vpath rt.cc $(REP_DIR)/src/virtualbox
vpath thread.cc $(REP_DIR)/src/virtualbox
LIBS += base
LIBS += stdcxx
LIBS += virtualbox5-bios virtualbox5-recompiler virtualbox5-runtime \
virtualbox5-vmm virtualbox5-devices virtualbox5-drivers \
virtualbox5-storage virtualbox5-zlib virtualbox5-liblzf \
virtualbox5-xml virtualbox5-main virtualbox5-apiwrap \
virtualbox5-dis virtualbox5-hwaccl
LIBS += pthread libc_terminal libc_pipe libiconv
LIBS += qemu-usb
INC_DIR += $(call select_from_repositories,src/lib/libc)
INC_DIR += $(call select_from_repositories,src/lib/pthread)
INC_DIR += $(VBOX_DIR)/Runtime/include
SRC_CC += HostServices/SharedFolders/service.cpp
SRC_CC += HostServices/SharedFolders/mappings.cpp
SRC_CC += HostServices/SharedFolders/vbsf.cpp
SRC_CC += HostServices/SharedFolders/vbsfpath.cpp
SRC_CC += HostServices/SharedFolders/shflhandle.cpp
SRC_CC += HostServices/SharedClipboard/service.cpp
SRC_CC += frontend/dummy/errorinfo.cc frontend/dummy/virtualboxbase.cc
SRC_CC += frontend/dummy/autostart.cc frontend/dummy/rest.cc
SRC_CC += frontend/dummy/host.cc
#vbox 4 include
INC_DIR += $(REP_DIR)/src/virtualbox
INC_DIR += $(VBOX_DIR)/Main/include
INC_DIR += $(VBOX_DIR)/VMM/include
INC_DIR += $(REP_DIR)/src/virtualbox5/frontend
INC_DIR += $(VIRTUALBOX_DIR)/VBoxAPIWrap
INC_DIR += $(VBOX_DIR)/Main/xml
INC_DIR += $(VBOX_DIR)/HostServices
# search path to 'scan_code_set_2.h'
INC_DIR += $(call select_from_repositories,src/drivers/input/spec/ps2)
include $(REP_DIR)/src/virtualbox5/target.inc