QEMUをMinGWでコンパイルする。

#QEMUをMinGWでコンパイルする。

エミュレータをコードリーディングするにあたり
Windows上で動作するソースコードをコンパイルする。

###利用環境
>
Mingw (MSYS2 64bit)
Qemu-2.6.0 on Windows
>

[QEMU ON WINDOWS](http://lassauge.free.fr/qemu/)
で配布されているソースコードと、configureのパッチを用いる。

###MSYS2のセットアップ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480709/00c97ff8-c1ad-f11e-7149-603b20f78292.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480709/5c0d1f5f-1781-c22f-3232-e6c6e6c89387.png)


###基本的な開発ツールのインストール

```
pacman -S base-devel mingw-w64-x86_64-toolchain git
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480709/5eadff57-2e5a-6268-aac7-ecc69c50f148.png)

```
pacman -S mingw-w64-x86_64-gtk3
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480709/14beabf7-c680-6a61-3f67-d5cdfa4f5f35.png)

```
pacman -S mingw-w64-x86_64-toolchain
```

```
pacman -S perl
```

###QEMUのconfigureパッチ

[QEMU ON WINDOWS](http://lassauge.free.fr/qemu/)
で配布されているソースコードと、configureのパッチを用いる。

```
patch --verbose -b configure  qemu-2.6.0.patch
```

###その他、編集
config-host.makの編集

以下のとおり、それぞれ編集する。

AR=x86_64-w64-mingw32-ar
を
AR=x86_64-w64-mingw32-gcc-ar

WINDRES=x86_64-w64-mingw32-windres
を
WINDRES=windres

NM=x86_64-w64-mingw32-nm
を
NM=x86_64-w64-mingw32-gcc-nm

OBJCOPY=x86_64-w64-mingw32-objcopy
を
OBJCOPY=objcopy

AS=x86_64-w64-mingw32-as
を
AS=as

LD=x86_64-w64-mingw32-ld
を
LD=ld

```編集結果
# Automatically generated by configure - do not modify

all:
prefix=/home/lassauge/MyDocuments/Qemu-windows
bindir=${prefix}
libdir=${prefix}/lib
libexecdir=${prefix}/libexec
includedir=${prefix}/include
mandir=${prefix}
sysconfdir=${prefix}
qemu_confdir=${prefix}/Bios
qemu_datadir=${prefix}/Bios
qemu_docdir=/home/lassauge/MyDocuments/Qemu-windows/Doc
qemu_moddir=${prefix}/lib/Bios
qemu_helperdir=${prefix}/libexec
extra_cflags=-m64 
extra_ldflags=
qemu_localedir=${prefix}/locale
libs_softmmu=-LD:/ITInst/msys64/mingw64/lib -lpixman-1 -lole32 -ldxguid -LD:/ITInst/msys64/mingw64/lib -lpng16 -lz -ljpeg -LD:/ITInst/msys64/mingw64/lib -lgtk-3 -lgdk-3 -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lwinmm -ldwmapi -lsetupapi -lcfgmgr32 -lz -lpangowin32-1.0 -lpangocairo-1.0 -lpango-1.0 -lfribidi -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl -mwindows -llzo2 -L$(BUILD_DIR)/dtc/libfdt -lfdt
ARCH=x86_64
CONFIG_WIN32=y
CONFIG_FILEVERSION=2,6,0,0
CONFIG_PRODUCTVERSION=2,6,0,0
CONFIG_QGA_NTDDDISK=y
CONFIG_SLIRP=y
CONFIG_SMBD_COMMAND="/usr/sbin/smbd"
CONFIG_AUDIO_DRIVERS=dsound
CONFIG_DSOUND=y
CONFIG_AUDIO_WIN_INT=y
CONFIG_BDRV_RW_WHITELIST=
CONFIG_BDRV_RO_WHITELIST=
CONFIG_VNC=y
CONFIG_VNC_JPEG=y
CONFIG_VNC_PNG=y
VERSION=2.6.0
PKGVERSION=
SRC_PATH=/home/m-mas/qemu-2.6.0
TARGET_DIRS=i386-softmmu arm-softmmu sparc-softmmu ppc-softmmu x86_64-softmmu mipsel-softmmu
BUILD_DOCS=yes
CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y
GLIB_CFLAGS=-pthread -mms-bitfields -ID:/ITInst/msys64/mingw64/include/glib-2.0 -ID:/ITInst/msys64/mingw64/lib/glib-2.0/include -ID:/ITInst/msys64/mingw64/include
CONFIG_GTK=y
CONFIG_GTKABI=3.0
GTK_CFLAGS=-mms-bitfields -pthread -mms-bitfields -ID:/ITInst/msys64/mingw64/include/gtk-3.0 -ID:/ITInst/msys64/mingw64/include/cairo -ID:/ITInst/msys64/mingw64/include -ID:/ITInst/msys64/mingw64/include/pango-1.0 -ID:/ITInst/msys64/mingw64/include/fribidi -ID:/ITInst/msys64/mingw64/include/atk-1.0 -ID:/ITInst/msys64/mingw64/include/cairo -ID:/ITInst/msys64/mingw64/include/pixman-1 -ID:/ITInst/msys64/mingw64/include -ID:/ITInst/msys64/mingw64/include/freetype2 -ID:/ITInst/msys64/mingw64/include -ID:/ITInst/msys64/mingw64/include/harfbuzz -ID:/ITInst/msys64/mingw64/include/libpng16 -ID:/ITInst/msys64/mingw64/include/gdk-pixbuf-2.0 -ID:/ITInst/msys64/mingw64/include/libpng16 -ID:/ITInst/msys64/mingw64/include -ID:/ITInst/msys64/mingw64/include/glib-2.0 -ID:/ITInst/msys64/mingw64/lib/glib-2.0/include -ID:/ITInst/msys64/mingw64/include -DINPUT_NEEDS_ALTGR_FIX
GTK_LIBS=-LD:/ITInst/msys64/mingw64/lib -lgtk-3 -lgdk-3 -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lwinmm -ldwmapi -lsetupapi -lcfgmgr32 -lz -lpangowin32-1.0 -lpangocairo-1.0 -lpango-1.0 -lfribidi -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl
CONFIG_TASN1=y
INSTALL_BLOBS=yes
CONFIG_FDT=y
CONFIG_LZO=y
CONFIG_BZIP2=y
BZIP2_LIBS=-lbz2
CONFIG_ZERO_MALLOC=y
CONFIG_LOCALTIME_R=y
CONFIG_QOM_CAST_DEBUG=y
CONFIG_COROUTINE_BACKEND=win32
CONFIG_COROUTINE_POOL=1
CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y
CONFIG_CPUID_H=y
CONFIG_INT128=y
HOST_USB=stub
CONFIG_TPM=$(CONFIG_SOFTMMU)
TRACE_BACKENDS=log
CONFIG_TRACE_LOG=y
CONFIG_TRACE_FILE=trace
CONFIG_THREAD_SETNAME_BYTHREAD=y
CONFIG_PTHREAD_SETNAME_NP=y
TOOLS=qemu-ga qemu-img$(EXESUF) qemu-io$(EXESUF) 
ROMS=optionrom
MAKE=make
INSTALL=install
INSTALL_DIR=install -d -m 0755
INSTALL_DATA=install -c -m 0644
INSTALL_PROG=install -c -m 0755
INSTALL_LIB=install -c -m 0644
PYTHON=/usr/bin/python2.7 -B
CC=x86_64-w64-mingw32-gcc
CC_I386=$(CC) -m32
HOST_CC=/usr/bin/gcc
CXX=x86_64-w64-mingw32-g++
OBJCC=x86_64-w64-mingw32-gcc
AR=x86_64-w64-mingw32-gcc-ar
ARFLAGS=rv
AS=as
CPP=x86_64-w64-mingw32-gcc -E
OBJCOPY=objcopy
LD=ld
NM=x86_64-w64-mingw32-gcc-nm
WINDRES=windres
CFLAGS=-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -pthread -mms-bitfields -ID:/ITInst/msys64/mingw64/include/glib-2.0 -ID:/ITInst/msys64/mingw64/lib/glib-2.0/include -ID:/ITInst/msys64/mingw64/include -g 
CFLAGS_NOPIE=
QEMU_CFLAGS=-ID:/ITInst/msys64/mingw64/include/pixman-1 -I$(SRC_PATH)/dtc/libfdt -m64 -mthreads -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  -Wendif-labels -Wmissing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -fstack-protector-strong  -ID:/ITInst/msys64/mingw64/include/libpng16 -ID:/ITInst/msys64/mingw64/include
QEMU_INCLUDES=-I$(SRC_PATH)/tcg -I$(SRC_PATH)/tcg/i386 -I. -I$(SRC_PATH) -I$(SRC_PATH)/include
AUTOCONF_HOST := --host=x86_64-w64-mingw32
LDFLAGS=-m64 -g 
LDFLAGS_NOPIE=
LIBS+=-LD:/ITInst/msys64/mingw64/lib -lgthread-2.0 -pthread -lglib-2.0 -lintl -lwinmm -lws2_32 -liphlpapi  -lz
LIBS_TOOLS+=
EXESUF=.exe
DSOSUF=.dll
LDFLAGS_SHARED=-shared
LIBS_QGA+=-lsetupapi -LD:/ITInst/msys64/mingw64/lib -lgthread-2.0 -pthread -lglib-2.0 -lintl -lws2_32 -lwinmm -lpowrprof -liphlpapi -lnetapi32 
TASN1_LIBS=-LD:/ITInst/msys64/mingw64/lib -ltasn1
TASN1_CFLAGS=-ID:/ITInst/msys64/mingw64/include
POD2MAN=pod2man --utf8
TRANSLATE_OPT_CFLAGS=
config-host.h: subdir-dtc
```

###ビルド
```
./configure --target-list="i386-softmmu arm-softmmu sparc-softmmu ppc-softmmu x86_64-softmmu mipsel-softmmu" \
 --cc=x86_64-w64-mingw32-gcc --cxx=x86_64-w64-mingw32-g++ --host-cc=/usr/bin/gcc --audio-drv-list="dsound"\
 --cross-prefix=x86_64-w64-mingw32- \
 --prefix=/home/lassauge/MyDocuments/Qemu-windows \
 --with-confsuffix=/Bios \
 --docdir=/home/lassauge/MyDocuments/Qemu-windows/Doc \
 --disable-sdl \
 --enable-gtk --with-gtkabi=3.0 \
 --disable-libusb \
 --enable-guest-agent \
 --disable-werror \
 --python=/usr/bin/python2.7 \
 --disable-strip $*

make

```


###実行
ホスト(Windows10側)に環境変数Pathを設定すること。

以上