This code should now build the x86_x64-softmmu part.
This commit is contained in:
parent
d56d09e5e1
commit
37f9a248ea
|
@ -0,0 +1,265 @@
|
|||
|
||||
|
||||
Unicorn-Engine MSVC Native Port Notes
|
||||
|
||||
These notes are to help myself and others with the upkeep of the msvc native port
|
||||
of unicorn-engine.
|
||||
|
||||
|
||||
:: CPU specific libraries
|
||||
|
||||
The gnu/gcc way of building the qemu portion of unicorn-engine involves makefile magic
|
||||
that builds the same set of sourcecode files multiple times. They are built once for each
|
||||
supported CPU type and force "#include" a CPU specific header file to re-"#define"
|
||||
function and variable names that would otherwise be the same for each build.
|
||||
These multiple builds of the same files are then all linked together to form
|
||||
the unicorn library.
|
||||
|
||||
As an example when building for "x86_64" cpu type the generated header file "x86_64.h"
|
||||
is force included and it contains a bunch of defines such as:
|
||||
#define phys_mem_clean phys_mem_clean_x86_64
|
||||
So you can see that it adds the cpu type on to the end of each name in order
|
||||
to keep the names unique over the multiple builds.
|
||||
|
||||
The way I handle this in MSVC is to build a seperate cpu specific library, containing
|
||||
this set of repeatedly used sourcecode files, for each supported cpu type.
|
||||
These cpu specific libraries are then linked together to build the unicorn library.
|
||||
|
||||
|
||||
For each supported CPU type
|
||||
|
||||
* Each CPU specific lib has a "forced include" file specified at:
|
||||
Configuration Properties -> C/C++ -> Advanced -> Forced Include File
|
||||
so for x86-64 this is "the file "x86_64.h" which is a generated file.
|
||||
|
||||
|
||||
|
||||
* cpu specific config
|
||||
there is a "config-target.h" inside each ???-softmmu dir.
|
||||
there is a "config-target.h-timestamp" inside each ???-softmmu dir.
|
||||
"config-target.h" is only included in "qemu/include/config.h".
|
||||
|
||||
"config-target.mak" looks like target specific makefile stuff. (very simple)
|
||||
"qemu/configure" appears to generate these
|
||||
"qemu/Makefile.target" appears to be used as the template for "qemu/????-softmmu/Makefile"
|
||||
|
||||
|
||||
|
||||
|
||||
* are the following files required? it looks like they might be used by target specific stuff:
|
||||
gen_all_header.sh (not called)
|
||||
header_gen.py (can be called by Makefile in unicorn root, but is it ever called)
|
||||
qemu/aarch64.h
|
||||
qemu/arm.h
|
||||
qemu/m68k.h
|
||||
qemu/mips.h
|
||||
qemu/mipsel.h
|
||||
qemu/mips64.h
|
||||
qemu/mips64el.h
|
||||
qemu/sparc.h
|
||||
qemu/sparc64.h
|
||||
qemu/x86_64.h
|
||||
|
||||
|
||||
|
||||
|
||||
might have to make intermediate libs, one or each target
|
||||
|
||||
* make intermediate libs for every ???-softmmu.
|
||||
|
||||
* each intermediate lib has makefiles:
|
||||
qemu/x86_64-softmmu/Makefile
|
||||
qemu/config-host.mak
|
||||
qemu/x86_64-softmmu/config-target.mak
|
||||
qemu/x86_64-softmmu/config-devices.mak
|
||||
qemu/Makefile.objs
|
||||
|
||||
|
||||
QEMU_INCLUDES=-I$(SRC_PATH)/tcg -I$(SRC_PATH)/tcg/$(ARCH) -I. -I$(SRC_PATH) -I$(SRC_PATH)/include
|
||||
QEMU_CFLAGS=-m32 -D__USE_MINGW_ANSI_STDIO=1 -DWIN32_LEAN_AND_MEAN -DWINVER=0x501 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -DUNICORN_HAS_X86 -DUNICORN_HAS_ARM -DUNICORN_HAS_M68K -DUNICORN_HAS_ARM64 -DUNICORN_HAS_MIPS -DUNICORN_HAS_MIPSEL -DUNICORN_HAS_MIPS64 -DUNICORN_HAS_MIPS64EL -DUNICORN_HAS_SPARC -fPIC
|
||||
QEMU_CFLAGS += -I.. -I$(SRC_PATH)/target-$(TARGET_BASE_ARCH) -DNEED_CPU_H
|
||||
QEMU_CFLAGS+=-I$(SRC_PATH)/include
|
||||
QEMU_CFLAGS+=-include x86_64.h
|
||||
|
||||
includes
|
||||
-I$(SRC_PATH)/tcg
|
||||
-I$(SRC_PATH)/tcg/$(ARCH)
|
||||
-I.
|
||||
-I$(SRC_PATH)
|
||||
-I$(SRC_PATH)/include
|
||||
-I..
|
||||
-I$(SRC_PATH)/target-$(TARGET_BASE_ARCH)
|
||||
-I$(SRC_PATH)/include
|
||||
-include x86_64.h
|
||||
|
||||
defines
|
||||
-D__USE_MINGW_ANSI_STDIO=1
|
||||
-DWIN32_LEAN_AND_MEAN
|
||||
-DWINVER=0x501
|
||||
-D_GNU_SOURCE
|
||||
-D_FILE_OFFSET_BITS=64
|
||||
-D_LARGEFILE_SOURCE
|
||||
-DNEED_CPU_H
|
||||
-DUNICORN_HAS_X86
|
||||
-DUNICORN_HAS_ARM
|
||||
-DUNICORN_HAS_M68K
|
||||
-DUNICORN_HAS_ARM64
|
||||
-DUNICORN_HAS_MIPS
|
||||
-DUNICORN_HAS_MIPSEL
|
||||
-DUNICORN_HAS_MIPS64
|
||||
-DUNICORN_HAS_MIPS64EL
|
||||
-DUNICORN_HAS_SPARC
|
||||
|
||||
|
||||
qemu/config-host.mak
|
||||
extra_cflags=-m32 -DUNICORN_HAS_X86 -DUNICORN_HAS_ARM -DUNICORN_HAS_M68K -DUNICORN_HAS_ARM64 -DUNICORN_HAS_MIPS -DUNICORN_HAS_MIPSEL -DUNICORN_HAS_MIPS64 -DUNICORN_HAS_MIPS64EL -DUNICORN_HAS_SPARC -fPIC
|
||||
extra_ldflags=
|
||||
libs_softmmu=
|
||||
ARCH=i386
|
||||
CONFIG_WIN32=y
|
||||
CONFIG_FILEVERSION=2,2,1,0
|
||||
CONFIG_PRODUCTVERSION=2,2,1,0
|
||||
VERSION=2.2.1
|
||||
PKGVERSION=
|
||||
SRC_PATH=/f/GitHub/unicorn/qemu
|
||||
TARGET_DIRS=x86_64-softmmu arm-softmmu m68k-softmmu aarch64-softmmu mips-softmmu mipsel-softmmu mips64-softmmu mips64el-softmmu sparc-softmmu sparc64-softmmu
|
||||
GLIB_CFLAGS=-pthread -mms-bitfields -IC:/msys64/mingw32/include/glib-2.0 -IC:/msys64/mingw32/lib/glib-2.0/include
|
||||
CONFIG_ZERO_MALLOC=y
|
||||
CONFIG_CPUID_H=y
|
||||
CONFIG_THREAD_SETNAME_BYTHREAD=y
|
||||
CONFIG_PTHREAD_SETNAME_NP=y
|
||||
CFLAGS=-pthread -mms-bitfields -IC:/msys64/mingw32/include/glib-2.0 -IC:/msys64/mingw32/lib/glib-2.0/include -g
|
||||
|
||||
QEMU_CFLAGS=-m32 -D__USE_MINGW_ANSI_STDIO=1 -DWIN32_LEAN_AND_MEAN -DWINVER=0x501 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -DUNICORN_HAS_X86 -DUNICORN_HAS_ARM -DUNICORN_HAS_M68K -DUNICORN_HAS_ARM64 -DUNICORN_HAS_MIPS -DUNICORN_HAS_MIPSEL -DUNICORN_HAS_MIPS64 -DUNICORN_HAS_MIPS64EL -DUNICORN_HAS_SPARC -fPIC
|
||||
QEMU_INCLUDES=-I$(SRC_PATH)/tcg -I$(SRC_PATH)/tcg/$(ARCH) -I. -I$(SRC_PATH) -I$(SRC_PATH)/include
|
||||
LDFLAGS=-Wl,--nxcompat -Wl,--no-seh -Wl,--dynamicbase -Wl,--warn-common -m32 -g
|
||||
LIBS+=-LC:/msys64/mingw32/lib -lgthread-2.0 -pthread -lglib-2.0 -lintl -lwinmm -lws2_32 -liphlpapi -lz
|
||||
|
||||
|
||||
qemu/x86_64-softmmu/Makefile
|
||||
QEMU_CFLAGS += -I.. -I$(SRC_PATH)/target-$(TARGET_BASE_ARCH) -DNEED_CPU_H
|
||||
QEMU_CFLAGS+=-I$(SRC_PATH)/include
|
||||
|
||||
|
||||
qemu/x86_64-softmmu/config-target.mak
|
||||
TARGET_X86_64=y
|
||||
TARGET_NAME=x86_64
|
||||
TARGET_BASE_ARCH=i386
|
||||
TARGET_ABI_DIR=x86_64
|
||||
CONFIG_SOFTMMU=y
|
||||
LDFLAGS+=
|
||||
QEMU_CFLAGS+=
|
||||
QEMU_CFLAGS+=-include x86_64.h
|
||||
|
||||
|
||||
qemu/x86_64-softmmu/config-devices.mak
|
||||
CONFIG_VGA=y
|
||||
CONFIG_QXL=$(CONFIG_SPICE)
|
||||
CONFIG_VGA_PCI=y
|
||||
CONFIG_VGA_ISA=y
|
||||
CONFIG_VGA_CIRRUS=y
|
||||
CONFIG_VMWARE_VGA=y
|
||||
CONFIG_VMMOUSE=y
|
||||
CONFIG_SERIAL=y
|
||||
CONFIG_PARALLEL=y
|
||||
CONFIG_I8254=y
|
||||
CONFIG_PCSPK=y
|
||||
CONFIG_PCKBD=y
|
||||
CONFIG_FDC=y
|
||||
CONFIG_ACPI=y
|
||||
CONFIG_APM=y
|
||||
CONFIG_I8257=y
|
||||
CONFIG_IDE_ISA=y
|
||||
CONFIG_IDE_PIIX=y
|
||||
CONFIG_NE2000_ISA=y
|
||||
CONFIG_PIIX_PCI=y
|
||||
CONFIG_HPET=y
|
||||
CONFIG_APPLESMC=y
|
||||
CONFIG_I8259=y
|
||||
CONFIG_PFLASH_CFI01=y
|
||||
CONFIG_TPM_TIS=$(CONFIG_TPM)
|
||||
CONFIG_PCI_HOTPLUG_OLD=y
|
||||
CONFIG_MC146818RTC=y
|
||||
CONFIG_PAM=y
|
||||
CONFIG_PCI_PIIX=y
|
||||
CONFIG_WDT_IB700=y
|
||||
CONFIG_XEN_I386=$(CONFIG_XEN)
|
||||
CONFIG_ISA_DEBUG=y
|
||||
CONFIG_ISA_TESTDEV=y
|
||||
CONFIG_VMPORT=y
|
||||
CONFIG_SGA=y
|
||||
CONFIG_LPC_ICH9=y
|
||||
CONFIG_PCI_Q35=y
|
||||
CONFIG_APIC=y
|
||||
CONFIG_IOAPIC=y
|
||||
CONFIG_ICC_BUS=y
|
||||
CONFIG_PVPANIC=y
|
||||
CONFIG_MEM_HOTPLUG=y
|
||||
CONFIG_PCI=y
|
||||
CONFIG_VIRTIO_PCI=y
|
||||
CONFIG_VIRTIO=y
|
||||
CONFIG_USB_UHCI=y
|
||||
CONFIG_USB_OHCI=y
|
||||
CONFIG_USB_EHCI=y
|
||||
CONFIG_USB_XHCI=y
|
||||
CONFIG_NE2000_PCI=y
|
||||
CONFIG_EEPRO100_PCI=y
|
||||
CONFIG_PCNET_PCI=y
|
||||
CONFIG_PCNET_COMMON=y
|
||||
CONFIG_AC97=y
|
||||
CONFIG_HDA=y
|
||||
CONFIG_ES1370=y
|
||||
CONFIG_LSI_SCSI_PCI=y
|
||||
CONFIG_VMW_PVSCSI_SCSI_PCI=y
|
||||
CONFIG_MEGASAS_SCSI_PCI=y
|
||||
CONFIG_RTL8139_PCI=y
|
||||
CONFIG_E1000_PCI=y
|
||||
CONFIG_VMXNET3_PCI=y
|
||||
CONFIG_IDE_CORE=y
|
||||
CONFIG_IDE_QDEV=y
|
||||
CONFIG_IDE_PCI=y
|
||||
CONFIG_AHCI=y
|
||||
CONFIG_ESP=y
|
||||
CONFIG_ESP_PCI=y
|
||||
CONFIG_SERIAL=y
|
||||
CONFIG_SERIAL_PCI=y
|
||||
CONFIG_IPACK=y
|
||||
CONFIG_WDT_IB6300ESB=y
|
||||
CONFIG_PCI_TESTDEV=y
|
||||
CONFIG_NVME_PCI=y
|
||||
CONFIG_SB16=y
|
||||
CONFIG_ADLIB=y
|
||||
CONFIG_GUS=y
|
||||
CONFIG_CS4231A=y
|
||||
CONFIG_USB_TABLET_WACOM=y
|
||||
CONFIG_USB_STORAGE_BOT=y
|
||||
CONFIG_USB_STORAGE_UAS=y
|
||||
CONFIG_USB_STORAGE_MTP=y
|
||||
CONFIG_USB_SMARTCARD=y
|
||||
CONFIG_USB_AUDIO=y
|
||||
CONFIG_USB_SERIAL=y
|
||||
CONFIG_USB_NETWORK=y
|
||||
CONFIG_USB_BLUETOOTH=y
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
compiler.h is in "qemu/include/qemu/compiler.h"
|
||||
it includes "config-host.h"
|
||||
|
||||
config.h is in "qemu/include/config.h"
|
||||
it includes "config-host.h"
|
||||
|
||||
config-host.h is bindings/msvc_native/config-host.h
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
:: Other things
|
||||
|
||||
* GNU seems to rely on __i386__ or __x86_64__ defined if the host is 32bit or 64bit respectively.
|
Loading…
Reference in New Issue