Difference between revisions of "Compiling ScummVM/MinGW"

Jump to navigation Jump to search
5,016 bytes added ,  08:47, 23 November 2018
→‎SDL: Add note about needing to edit sdl-config / pkg-config outputs for MinGW toolchains
m (Layout)
(→‎SDL: Add note about needing to edit sdl-config / pkg-config outputs for MinGW toolchains)
(47 intermediate revisions by 11 users not shown)
Line 4: Line 4:


More information can be found at the [http://www.mingw.org/ MinGW homepage]
More information can be found at the [http://www.mingw.org/ MinGW homepage]


== Things needed ==
== Things needed ==
Line 10: Line 9:
=== MinGW and MSYS ===
=== MinGW and MSYS ===


To download MinGW, visit its [http://www.mingw.org/download.shtml download page]
Download MinGW:  


Downloading MinGW for the first time can be a daunting task, as there are a lot of packages to download. The ones you need are in the "Current" section (apart from MinGW-5.0.0.exe, which is in the "Proposed" section).  
*[http://sourceforge.net/projects/mingw/files/MinGW/Base/binutils/binutils-2.21/binutils-2.21-3-mingw32-bin.tar.lzma/ binutils]
*[http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/gcc-4.6.2-1/gcc-core-4.6.2-1-mingw32-bin.tar.lzma/download gcc-core dev]
*[http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/gcc-4.6.2-1/libgcc-4.6.2-1-mingw32-dll-1.tar.lzma/download gcc-core dll]
*[http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/gcc-4.6.2-1/gcc-c%2B%2B-4.6.2-1-mingw32-bin.tar.lzma/download gcc-g++ dev]
*[http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/gcc-4.6.2-1/libstdc%2B%2B-4.6.2-1-mingw32-dll-6.tar.lzma/download gcc-g++ dll]
*[http://sourceforge.net/projects/mingw/files/MinGW/Base/gmp/gmp-5.0.1-1/gmp-5.0.1-1-mingw32-dev.tar.lzma/download gmp dev]
*[http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/gcc-4.6.2-1/libgomp-4.6.2-1-mingw32-dll-1.tar.lzma/download gmp dll]
*[http://sourceforge.net/projects/mingw/files/MinGW/Base/gettext/gettext-0.17-1/libintl-0.17-1-mingw32-dll-8.tar.lzma/download iconv]
*[http://sourceforge.net/projects/mingw/files/MinGW/Base/libiconv/libiconv-1.13.1-1/libiconv-1.13.1-1-mingw32-dev.tar.lzma/download intl dev]
*[http://sourceforge.net/projects/mingw/files/MinGW/Base/libiconv/libiconv-1.13.1-1/libiconv-1.13.1-1-mingw32-dll-2.tar.lzma/download intl dll]
*[http://sourceforge.net/projects/mingw/files/MinGW/Base/gmp/gmp-5.0.1-1/libgmp-5.0.1-1-mingw32-dll-10.tar.lzma/download libgmp]
*[http://sourceforge.net/projects/mingw/files/MinGW/Base/mingwrt/mingwrt-3.18/mingwrt-3.18-mingw32-dev.tar.gz/download mingw-runtime dev]
*[http://sourceforge.net/projects/mingw/files/MinGW/Base/mingwrt/mingwrt-3.18/mingwrt-3.18-mingw32-dll.tar.gz/download mingw-runtime  dll]
*[http://sourceforge.net/projects/mingw/files/MinGW/Base/mpc/mpc-0.8.1-1/mpc-0.8.1-1-mingw32-dev.tar.lzma/download mpc dev]
*[http://sourceforge.net/projects/mingw/files/MinGW/Base/mpc/mpc-0.8.1-1/libmpc-0.8.1-1-mingw32-dll-2.tar.lzma/download mpc dll]
*[http://sourceforge.net/projects/mingw/files/MinGW/Base/mpfr/mpfr-2.4.1-1/mpfr-2.4.1-1-mingw32-dev.tar.lzma/download mpfr dev]
*[http://sourceforge.net/projects/mingw/files/MinGW/Base/mpfr/mpfr-2.4.1-1/libmpfr-2.4.1-1-mingw32-dll-1.tar.lzma/download mpfr dll]
*[http://sourceforge.net/projects/mingw/files/MinGW/Base/pthreads-w32/pthreads-w32-2.8.0-3/pthreads-w32-2.8.0-3-mingw32-dev.tar.lzma/download pthreads dev]
*[http://sourceforge.net/projects/mingw/files/MinGW/Base/pthreads-w32/pthreads-w32-2.8.0-3/libpthread-2.8.0-3-mingw32-dll-2.tar.lzma/download pthreads dll]
*[http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/gcc-4.6.2-1/libssp-4.6.2-1-mingw32-dll-0.tar.lzma/download ssp]
*[http://sourceforge.net/projects/mingw/files/MinGW/Base/w32api/w32api-3.17/w32api-3.17-2-mingw32-dev.tar.lzma/download w32api]


Download the following:
Download MSYS and the MSYS Developer Tools:


*[http://prdownloads.sf.net/mingw/MinGW-5.0.0.exe?download The MinGW automated installer 5.0.0]
*[http://sourceforge.net/projects/mingw/files/MSYS/Base/msys-core/msys-1.0.11/MSYS-1.0.11.exe/download MSYS 1.0.11]
*[http://prdownloads.sf.net/mingw/MSYS-1.0.10.exe?download MSYS 1.0.10]
*[http://sourceforge.net/projects/mingw/files/Other/Unsupported/MSYS/msysDTK/msysDTK-1.0.1/msysDTK-1.0.1.exe/download msysDTK]
*[http://prdownloads.sf.net/mingw/msysDTK-1.0.1.exe?download msysDTK]


Check the "'''Installing MinGW and MSYS'''" section below for instructions on how to create your ScummVM compilation environment


The following are downloaded through the automated installer, but you can install them here to have everything ready:
=== Libraries needed ===


*[http://prdownloads.sf.net/mingw/binutils-2.15.91-20040904-1.tar.gz?download binutils]
* [http://www.libsdl.org/download-1.2.php SDL 1.2].  
*[http://prdownloads.sf.net/mingw/gcc-core-3.4.2-20040916-1.tar.gz?download gcc-core]
** You need the latest Development Libraries file for Mingw32.  
*[http://prdownloads.sf.net/mingw/gcc-g++-3.4.2-20040916-1.tar.gz?download gcc-g++]
*[http://prdownloads.sf.net/mingw/mingw32-make-3.80.0-3.tar.gz?download mingw32-make]
*[http://prdownloads.sf.net/mingw/mingw-runtime-3.8.tar.gz?download mingw-runtime 3.8] (downloaded automatically) OR [http://prdownloads.sf.net/mingw/mingw-runtime-3.9.tar.gz?download mingw-runtime 3.9] (the current version)
*[http://prdownloads.sf.net/mingw/w32api-3.3.tar.gz?download w32api 3.3] (downloaded automatically) OR [http://prdownloads.sf.net/mingw/w32api-3.5.tar.gz?download w32api 3.5] (the current version)
 
 
Note that the above downloads are the current ones, and can change in the future. To get the latest versions (if one of the links above is broken), visit the [http://www.mingw.org/download.shtml MinGW download page] and download the latest versions there. The latest packages for MinGW (but not MSYS) can be downloaded through the automated installer MinGW-5.0.0.exe.
 
 
Check the "'''Installing MinGW and MSYS'''" section below for instructions on how to create your ScummVM compilation environment


* [http://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D NASM] Optional, for faster compile of scalers
** You need the latest Win32 binary ([http://www.nasm.us/pub/nasm/releasebuilds/2.10.07/win32/ 2.10.07] at the time of writing).


=== Libraries needed ===
* [http://flac.sourceforge.net/download.html FLAC]. Optional, for FLAC support
** You need the latest flac source code.


* [http://www.libsdl.org/download-1.2.php SDL 1.2].
* [http://downloads.xiph.org/releases/ogg/ libogg] and [http://downloads.xiph.org/releases/vorbis/ libvorbis] Optional, for OGG support
You need the file SDL-devel-1.2.9-mingw32.tar.gz (1.2.9 is the latest version at this time)
** You need the latest libogg and libvorbis (not vorbis) source code.


* [http://www.kernel.org/pub/software/devel/nasm/binaries/win32/ NASM]
* [ftp://ftp.mars.org/pub/mpeg/ libmad] Optional, for MP3 support
** You need the latest libmad source code.


* [http://downloads.xiph.org/releases/ogg/ libogg] and [http://downloads.xiph.org/releases/vorbis/ libvorbis] for OGG support
* [http://libmpeg2.sourceforge.net/ libmpeg2] Optional, for MPEG2 cutscene support.
** You need the latest libmpeg2 source code, currently v0.5.1.


Note that the libraries included in the "vorbis" package won't work. You need libogg and libvorbis, not vorbis
* [http://www.zlib.net/ zlib]. Optional, for compressed saved games.
** You need the latest zlib source code.


* [ftp://ftp.mars.org/pub/mpeg/ libmad] for MP3 support
* [http://downloads.xiph.org/releases/theora/ libtheora]. Optional, for Broken Sword 2.5.
** You need the latest libtheora source code.


* [http://libmpeg2.sourceforge.net/downloads.html libmpeg2] for MPEG-2 support
* [http://www.audiocoding.com/downloads.html libfaad2]. Optional, for AAC support.
** You need the latest libfaad2 source code.


Get the latest mpeg2dec release from this page, libmpeg2 is included there
* [http://www.libpng.org/pub/png/libpng.html libpng]. Optional, for PNG support.
** You need the latest libpng source code.


* [http://www.zlib.net/ zlib]. You need the latest zlib source code.
* [http://download.savannah.gnu.org/releases/freetype/ freetype]. Optional, for TTF support.
** You need the latest freetype source code.


* [http://flac.sourceforge.net/download.html FLAC]. You need the latest full source code (1.1.3).
* [http://sourceforge.net/apps/trac/fluidsynth fluidsynth]. Optional, for soundfont MIDI support.
** You need at least v1.0.9. Newer versions than this should work, but require GTK's glib and CMAKE to build.


=== Precompiled libraries ===
To ease the whole process, a package of all the needed precompiled libraries has been created.
All you need to do is:
* Download the precompiled libraries and the [http://www.libsdl.org/release/SDL-1.2.15-win32.zip latest SDL runtime library] - latest version is 1.2.15 at the time this was written, you can find the latest version [http://www.libsdl.org/download-1.2.php here]. Precompiled libraries:
** [http://www.scummvm.org/frs/build/scummvm-required-libs-mingw.zip Precompiled libraries]


== Installing MinGW and MSYS ==
== Installing MinGW and MSYS ==
Line 63: Line 88:
Both MinGW and MSYS need to be installed and working to compile ScummVM.  
Both MinGW and MSYS need to be installed and working to compile ScummVM.  


 
* Create a directory called mingw in the root directory of drive (ie C:\MinGW\ )
* First, install MinGW through its automated installer.
* Extract all the mingw packages to the mingw directory
* Then, install MSYS. After installation, a new console window will appear, asking if you wish to proceed with the post install. Answer 'y' to that prompt. You will then be asked if you have MinGW installed. Answer 'y' to that and then type in the path of your MinGW directory using forward slashes (e.g. C:/MinGW). Make sure that there is no "make" utility in the MinGW bin folder, as this will clash with the make utility in MSYS. With the recent packages described in the section above, you shouldn't have that problem.
* Then, install MSYS. After installation, a new console window will appear, asking if you wish to proceed with the post install. Answer 'y' to that prompt. You will then be asked if you have MinGW installed. Answer 'y' to that and then type in the path of your MinGW directory using forward slashes (e.g. C:/MinGW). Make sure that there is no "make" utility in the MinGW bin folder, as this will clash with the make utility in MSYS. With the recent packages described in the section above, you shouldn't have that problem.
* After both MinGW and MSYS are installed correctly, install MSYS DTK
* After both MinGW and MSYS are installed correctly, install MSYS DTK
Line 75: Line 100:


Make sure that the MinGW bin directory is included in the path (e.g. C:\MinGW\bin), which should already be included there from the MinGW installer. Also, make sure that the libexec path is included too (e.g. C:\MinGW\libexec\gcc\mingw32\3.4.2), which is needed in Vista to get MinGW properly working
Make sure that the MinGW bin directory is included in the path (e.g. C:\MinGW\bin), which should already be included there from the MinGW installer. Also, make sure that the libexec path is included too (e.g. C:\MinGW\libexec\gcc\mingw32\3.4.2), which is needed in Vista to get MinGW properly working


== MSYS primer ==
== MSYS primer ==
Line 118: Line 142:
=== NASM ===
=== NASM ===


First of all, we need nasm. So unzip the nasm archive in a directory, copy "nasmw.exe" to "nasm.exe" (because some projects call one and others call the other) and copy both files in MinGW's bin directory. Alternatively, you can include the folder you unzipped the files in your system path. To do this, go to Control Panel->System, Advanced tab->environment variables and edit the "PATH" variable in the system variables list, adding the folder where you placed the aforementioned files. Directories in the system path are split with a semicolon (;), e.g. "C:\MinGW\msys\1.0\bin;C:\MinGW\bin;C:\nasm".  
First of all, we need nasm. So unzip the nasm archive in a directory, and copy both files to MinGW's bin directory. Alternatively, you can include the folder you unzipped the files in your system path. To do this, go to Control Panel->System, Advanced tab->environment variables and edit the "PATH" variable in the system variables list, adding the folder where you placed the aforementioned files. Directories in the system path are split with a semicolon (;), e.g. "C:\MinGW\msys\1.0\bin;C:\MinGW\bin;C:\nasm".  


Note that changes to the PATH will be reflected on newly opened command prompts only, so if you got any open already, close them to avoid confusion
Note that changes to the PATH will be reflected on newly opened command prompts only, so if you got any open already, close them to avoid confusion


=== SDL ===
=== SDL ===


SDL is already compiled and needs no further changes, so we can skip the compilation step for it
SDL is already provided in compiled development archives, so we can skip the compilation step for it
 
 
After extracting the contents of the SDL archive in a folder, copy all the files in SDL's include folder in MinGW's include folder and all the files in SDL's lib folder in MinGW's lib folder. Also, copy SDL.dll and i386-mingw32msvc-sdl-config in MinGW's bin folder. Rename i386-mingw32msvc-sdl-config to sdl-config


This can be found from [https://www.libsdl.org here], going to the latest stable download and choosing the Development Libraries - MinGW 32/64-bit option.


Now, we need to setup SDL. Go to SDL's folder and type:
After extracting the contents of this archive in a folder, copy all the files in the 'include/SDL' folder to MinGW's include folder, copy all the files in the 'lib' folder to MinGW's lib folder and copy all the files in the 'bin' folder to MinGW's bin folder.
make install prefix=/mingw


Note the forward slash, since you are using MSYS.
It may be necessary to modify the bin/sdl-config and lib/pkgconfig/sdl2.pc files which are just text. These files provide the compiler option information to ScummmVM and SDL2 is passing the -mwindows compiler option by default which will result in a valid executable, but with broken console / command-line output. These should be removed or replaced by -mconsole (though this will affect all SDL compiled binaries made by the MinGW toolchain). ScummVM's configure script should deal automatically with this issue in future as the upstream SDL project has indicated that removing this "forced" option is a WONTFIX issue.


If you do wish to recompile SDL from source code, please note the following:
* Check that the libSDL source file src/main/win32/version.rc contains the correct version. This was incorrectly listed as v1.2.14 for the v1.2.15 release, needed an additional patch.
* Note the README [http://www.libsdl.org/extras/win32/mingw32/README.txt here], especially the need to include the DirectX development header and libraries from [http://www.libsdl.org/extras/win32/common/directx-devel.tar.gz here] to ensure that the "dsound" rather than the "waveout" / "winmm" fallback audio driver is used.


=== zlib ===
=== zlib ===
Line 157: Line 180:
Unzip the libogg archive in a folder, open MSYS, go to the libogg folder and issue these commands to compile the library:
Unzip the libogg archive in a folder, open MSYS, go to the libogg folder and issue these commands to compile the library:


  ./configure --disable-shared
  ./configure --disable-shared --prefix=/mingw
make
 
To install the library, type:
make install prefix=/mingw
 
 
=== libvorbis ===
 
Unzip the libvorbis archive in a folder, open MSYS, go to the libvorbis folder and issue these commands to compile the library:
 
./configure --disable-shared --prefix=/mingw
  make
  make


Line 163: Line 197:
  make install prefix=/mingw
  make install prefix=/mingw


Alternatively, when everything is compiled, copy the include\ogg folder inside MinGW's include folder. So, you should end up with an ogg folder in MinGW's include folder. Also, copy the src\.libs folder as-is inside MinGW's lib folder, and also copy the files from the src\.libs folder inside MinGW's lib folder (because ogg libraries are searched both in the lib and in the lib\.libs folder)


=== libmad ===
Unzip the libmad archive in a folder. Open MSYS, go to the libmad folder. If you are using gcc 4.4 or higher, run the following command:
sed -i '/-fforce-mem/d' configure


You can do this using Explorer or by typing these commands in MSYS inside the libogg folder:
Then issue these commands to compile the library:
./configure --disable-shared --prefix=/mingw
make


cp -p include/ogg /mingw/include
To install the library, type:
cp -p src/.libs /mingw/lib
  make install prefix=/mingw
  cp -p src/.libs/* /mingw/lib




=== libvorbis ===
=== libmpeg2 ===


Unzip the libvorbis archive in a folder, open MSYS, go to the libvorbis folder and issue these commands to compile the library:
Unzip the libmpeg2 archive into a folder. Open MSYS, go to the libmpeg2 folder.


  ./configure --disable-shared
Then issue these commands to compile the library:
  ./configure --disable-sdl --disable-shared --prefix=/mingw
  make
  make


Line 183: Line 222:
  make install prefix=/mingw
  make install prefix=/mingw


Alternatively, when everything is compiled, copy the include\vorbis folder inside MinGW's include folder. So, you should end up with a vorbis folder in MinGW's include folder. Also, copy lib\.libs folder from libvorbis folder as-is inside MinGW's lib folder, and also copy the files from the lib\.libs folder from libvorbis folder inside MinGW's lib folder (because vorbis libraries are searched both in the lib and in the lib\.libs folder)
Note that if you are compiling x64 i.e. for a 64-bit target, then currently (v0.5.1), the following patch is needed:
<syntaxhighlight lang="diff">
--- libvo/video_out_dx.c.orig  2014-02-17 16:38:24.000000000 +0100
+++ libvo/video_out_dx.c        2014-02-17 16:39:34.000000000 +0100
@@ -92,7 +92,7 @@
    switch (message) {
    case WM_WINDOWPOSCHANGED:
-      instance = (dx_instance_t *) GetWindowLong (hwnd, GWL_USERDATA);
+      instance = (dx_instance_t *) GetWindowLongPtr (hwnd, GWLP_USERDATA);
        /* update the window position and size */
        point_window.x = 0;
@@ -173,7 +173,7 @@
    /* store a directx_instance pointer into the window local storage
      * (for later use in event_handler).
      * We need to use SetWindowLongPtr when it is available in mingw */
-    SetWindowLong (instance->window, GWL_USERDATA, (LONG) instance);
+    SetWindowLongPtr (instance->window, GWLP_USERDATA, (LONG_PTR) instance);
    ShowWindow (instance->window, SW_SHOW);
</syntaxhighlight>
 
=== FLAC ===
 
Unzip the flac archive in a folder, open MSYS, go to the flac folder and issue these commands to compile the library:


./configure --disable-shared --prefix=/mingw
make
To install the library, type:
make install prefix=/mingw


You can do this using Explorer or by typing these commands in MSYS inside the libvorbis folder:


cp -p include/vorbis /mingw/include
=== FluidSynth ===
cp -p src/.libs /mingw/lib
cp -p src/.libs/* /mingw/lib


We use fluidsynth 1.0.9, since later versions requires GTK.


=== libmpeg2 ===
Unzip the fluidsynth archive in a folder, open MSYS, go to the fluidsynth folder and apply the following patch:


Unzip the mpeg2dec archive in a folder, open MSYS, go to the mpeg2dec folder and issue these commands to compile the library:
<syntaxhighlight lang="diff">
--- include/fluidsynth.h
+++ include/fluidsynth.h
@@ -28,13 +28,7 @@
#endif
#if defined(WIN32)
-#if defined(FLUIDSYNTH_DLL_EXPORTS)
-#define FLUIDSYNTH_API __declspec(dllexport)
-#elif defined(FLUIDSYNTH_NOT_A_DLL)
-#define FLUIDSYNTH_API
-#else
-#define FLUIDSYNTH_API __declspec(dllimport)
-#endif
+#define FLUIDSYNTH_API
#elif defined(MACOS9)
#define FLUIDSYNTH_API __declspec(export)
</syntaxhighlight>


  ./configure --disable-shared
Then issue these commands to compile the library:
  ./configure --disable-shared --prefix=/mingw
  make
  make


Line 203: Line 289:
  make install prefix=/mingw
  make install prefix=/mingw


Alternatively, after you compile mpeg2dec, go to its include directory, create a folder "mpeg2dec" in there and copy all files from the include folder in this subfolder. So you should end up with 2 directories, "include" and "include\mpeg2dec" with the same files. This is needed, as ScummVM includes files from the "mpeg2dec" directory. Copy this mpeg2dec folder inside MinGW's include folder. Then, copy lib\.libs folder from libmpeg2 folder as-is inside MinGW's lib folder, and also copy the files from the lib\.libs folder from libmpeg2 folder inside MinGW's lib folder (because libmpeg2 libraries are searched both in the lib and in the lib\.libs folder)
=== libpng ===


Unzip the libpng archive in a folder, open MSYS, go to the libpng folder and issue these commands to compile the library:


You can do this using Explorer or by typing these commands in MSYS inside the mpeg2dec folder:
./configure --disable-shared --prefix=/mingw
make


mkdir include/mpeg2dec
To install the library, type:
cp -p include/* include/mpeg2dec
  make install prefix=/mingw
  cp -p include/mpeg2dec /mingw/include
cp -p libmpeg2/.libs /mingw/lib
cp -p libmpeg2/.libs/* /mingw/lib




=== libmad ===
=== libtheora ===


Unzip the libmad archive in a folder, open MSYS, go to the libmad folder and issue these commands to compile the library:
Unzip the libtheora archive in a folder, open MSYS, go to the libtheora folder and issue these commands to compile the library:


  ./configure --disable-shared
  ./configure --disable-shared --disable-examples --prefix=/mingw
  make
  make


Line 225: Line 310:
  make install prefix=/mingw
  make install prefix=/mingw


Alternatively, when everything is compiled, copy (...) inside MinGW's include folder.
[TODO]


=== libfaad2 ===


=== FLAC ===
Unzip the libfaad2 archive in a folder, open MSYS, go to the libfaad2 folder and apply the following patch:


Unzip the flac archive in a folder, open MSYS, go to the flac folder and issue these commands to compile the library:
<syntaxhighlight lang="diff">
--- frontend/main.c
+++ frontend/main.c
@@ -31,7 +31,9 @@
#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
+#ifndef __MINGW32__
#define off_t __int64
+#endif
#else
#include <time.h>
#endif
</syntaxhighlight>


  ./configure --disable-shared
Then issue these commands to compile the library:
  ./configure --disable-shared --prefix=/mingw
  make
  make


Line 239: Line 337:
  make install prefix=/mingw
  make install prefix=/mingw


Alternatively, when everything is compiled, copy (...) inside MinGW's include folder.
[TODO]


=== freetype ===
Unzip the freetype archive in a folder, open MSYS, go to the freetype folder and issue these commands to compile the library:
./configure --disable-shared --prefix=/mingw
make
To install the library, type:
make install prefix=/mingw


== Compiling ScummVM ==
== Compiling ScummVM ==
TrustedUser
574

edits

Navigation menu