Difference between revisions of "Building DOSBox with MinGW"

From DOSBoxWiki
Jump to navigationJump to search
(double dashes are possible nowadays)
(update)
(42 intermediate revisions by 14 users not shown)
Line 1: Line 1:
== Building your own version of DOSBox ==
+
DOSBox is a complicated project. This document aims to provide a step by step description of how to use the MinGW developement environment to successfully build DOSBox. An alternative is to use [[Building DOSBox with Visual C 2008 Express|Microsoft Visual Studio]].
  
=== 1. Grab the source ===
+
This page will guide you through setting up MinGW to compile a current (SVN/CVS) version of DOSBox. Because of updates to compilers and libraries, this guide will not work with the 0.74 (the last official release, which is currently over 6 years old) source files.
  
First, grab the latest version of the DOSbox sourcecode. A fairly often updated CVS-Dump can be found at: http://dosbox.linuxdevel.net/dosboxcvs.tgz
+
== Installing MinGW ==
 +
* Download mingw-get-setup.exe from http://sourceforge.net/projects/mingw/
 +
* Run the installer, choosing the defaults
 +
* Once the '''MinGW Installation Manager''' application starts, select
 +
** mingw-developer-toolkit (msys-base should be automatically added)
 +
** mingw32-base
 +
** mingw32-gcc-g++
 +
* On the installation menu, apply changes, and confirm that you want to apply the changes
  
Download it and extract it to a seperate directory.
+
The installation manager is going to download a bunch of files, and at the end, start installing them. Once this is done, you can close the dialog box as well as the installation manager.
  
=== 2. SDL ===
+
Well done, MinGW is now installed! Let's start it up.
  
DOSBox utilizes SDL (Simple DirectMedia Layer) to use your graphics and sound-hardware. Ergo, you'll need to download it as well. Grab the latest source at
+
* Browse to '''C:\MinGW\msys\1.0'''
 +
* Run '''MSYS.BAT'''
  
: http://www.libsdl.org/
+
This will start up a DOS prompt like screen, lets mount the base path
 +
  mount 'c:\MinGW' /mingw
  
and extract to a seperate directory.
+
You have now completed this section, lets move on to adding the SDL libraries to MinGW.
  
When working on Windows, you might want to save a lot of effort and just use the SDL (and optionally SDL_net) .DLL files included with the latest official DOSBox release, as compiling SDL with full options (e.g. DirectX support) is a bit involved. There are also pre-built .DLL files on the SDL web site (Runtime Libraries -> Win32) that you can try at
+
== Adding the SDL libraries to MinGW ==
 +
* Download the pre compiled SDL development libraries from here http://www.libsdl.org/release/SDL-devel-1.2.15-mingw32.tar.gz
 +
* Copy the downloaded file to your MSYS home folder, it's going to be something like '''C:\MinGW\msys\1.0\home\Administrator'''
 +
* Switch back to the MSYS command prompt we started earlier
 +
* Lets extract the downloaded files
 +
  tar xvf SDL-devel-1.2.15-mingw32.tar.gz
 +
* And now add the files to MinGW
 +
  cd SDL-1.2.15
 +
  make install-sdl prefix=/mingw
 +
  cd ..
  
: http://www.libsdl.org/download-1.2.php
+
Cool, the SDL libraries have been added to MinGW, onto the next section.
  
Note that as of 12 Dec 2004, ddraw (DirectDraw) rendering mode will not work in DOSBox unless you either use the SDL.dll included with the latest version of DOSBox, or build your own SDL.dll with the changes mentioned in the "Compiling SDL" section below.
+
== Adding Direct Draw support to DOSBox (Optional) ==
 +
If you want to give DOSBox the option to use the DDRAW output option, then we need to add a couple of extra libraries to MinGW
 +
* Download the following file, http://www.libsdl.org/extras/win32/common/directx-devel.tar.gz
 +
* Copy the downloaded file to your MSYS home folder
 +
* Switch to the MSYS command prompt
 +
* Extract the files (the -C parameter, tells tar where to extract the files to)
 +
  tar xvf directx-devel.tar.gz -C /mingw
  
=== 3. Compiling enviroment ===
+
== Adding networking support to DOSBox (Optional) ==
 +
These steps show you how to add the SDL_net libraries to MinGW, which enable networking and modem for DOSBox. If you aren't going to be using DOSBox for multi player games, then you can probably skip this step.
 +
* Download the SDL_net source files from https://www.libsdl.org/projects/SDL_net/release/SDL_net-1.2.8.tar.gz
 +
* Copy the downloaded file to your MSYS home folder
 +
* Switch to the MSYS command prompt
 +
* Extract the file
 +
  tar xvf SDL_net-1.2.8.tar.gz
 +
* Lets configure the libraries
 +
  cd SDL_net-1.2.8
 +
  ./configure --prefix=/mingw
 +
* And now compile them
 +
  make
 +
* And then install them (copy the files)
 +
  make install
 +
  cd ..
  
When working on Windows, you'll most likely need a compiling enviroment. We suggest using the combination of MiniGW and MSYS, which can be found at
+
== Adding screenshot support (Optional) ==
 +
This one is a bit tricky because it relies on two libraries, zlib (libpng needs these libraries), and libpng. We are also going to be compiling the libraries statically to keep external DLL's to a minimum.
 +
* Download zlib from here http://sourceforge.net/projects/libpng/files/zlib/1.2.8/zlib-1.2.8.tar.xz/download
 +
* Copy the downloaded file to your MSYS home folder
 +
* Switch to the MSYS command prompt
 +
* Extract the file
 +
  tar xvf zlib-1.2.8.tar.xz
 +
* Lets build the static library
 +
  cd zlib-1.2.8
 +
  make -f win32/Makefile.gcc
 +
* And now copy the files to /mingw
 +
  cp libz.a /mingw/lib/
 +
  cp zlib.h zconf.h /mingw/include/
 +
  cd ..
 +
Cool, that wasn't too hard, onto libpng
 +
* Download libpng from here http://sourceforge.net/projects/libpng/files/libpng16/1.6.18/libpng-1.6.18.tar.gz/download
 +
* Copy the downloaded file to your MSYS home folder
 +
* Switch to the MSYS command prompt
 +
* Extract the file
 +
  tar xvf libpng-1.6.18.tar.gz
 +
* Configure the library
 +
  cd libpng-1.6.18
 +
  ./configure --disable-shared --prefix=/mingw
 +
* And now to compile and install the files
 +
  make
 +
  make install
 +
  cd ..
  
: http://prdownloads.sf.net/mingw/
+
== Adding support for compressed audio on diskimages (Optional) ==
 +
This is for cue/bin cdrom images with compressed (ogg) audio tracks. We will be adding the libvorbis, libogg, and sdl_sound libraries.
 +
* Download libogg from here http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz
 +
* Copy the downloaded file to your MSYS home folder
 +
* Switch to the MSYS command prompt
 +
* Extract the file
 +
  tar xvf libogg-1.3.2.tar.gz
 +
* Configure the library, disabling shared library files
 +
  cd libogg-1.3.2
 +
  ./configure --disable-shared --prefix=/mingw
 +
* Compile and install the library files
 +
  make
 +
  make install
 +
  cd ..
  
You'll need to download both the latest MiniGW and MSYS. After downloading install MiniGW and MSYS (in this order). The MSYS-Installer should ask for the installation directory of MiniGW, so you should pick the path where you installed it. After the installation, run the MSYS.BAT and you should see a unix-like command prompt.  
+
* Download libvorbis from here http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz
 +
* Copy the downloaded file to your MSYS home folder
 +
* Switch to the MSYS command prompt
 +
* Extract the file
 +
  tar xvf libvorbis-1.3.5.tar.gz
 +
* Configure the library, disabling shared library files
 +
  cd libvorbis-1.3.5
 +
  ./configure --disable-shared --prefix=/mingw
 +
* Compile and install the library files
 +
  make
 +
  make install
 +
  cd ..
  
=== 4. Compiling SDL ===
+
* Download sdl_sound from here https://www.icculus.org/SDL_sound/downloads/SDL_sound-1.0.3.tar.gz
 +
* Copy the downloaded file to your MSYS home folder
 +
* Switch to the MSYS command prompt
 +
* Extract the file
 +
  tar xvf SDL_sound-1.0.3
 +
* Unfortunately sdl_sound isn't going to compile on MinGW so we are going to have to edit some of the source files.
 +
* Using something like Notepad++ (or Wordpad in a pinch), open up '''SDL_sound-1.0.3\decoders\mpglib\mpg123_sdlsound.h'''
 +
* Replace line 8
 +
  #include    <math.h>
 +
* With the following
 +
  # define M_PI      3.14159265358979323846
 +
  # define M_SQRT2    1.41421356237309504880
 +
  # define REAL_IS_FLOAT
 +
  # define NEW_DCT9
 +
 +
  # define random rand
 +
  # define srandom srand
  
Navigate to the directory where you extracted the SDL-source (using unix commands) and type
+
* Using something like Notepad++ (or Wordpad in a pinch), open up '''SDL_sound-1.0.3\decoders\timidity\tables.h'''
 +
* Comment out line 23 with two //
 +
  //#include <math.h>
 +
* The hard part is done, lets configure and compile
 +
  cd SDL_sound-1.0.3
 +
  ./configure --disable-shared --prefix=/mingw LIBS="-lvorbisfile -lvorbis -logg"
 +
  make
 +
  make install
 +
  cd ..
  
<code><pre>
+
== Enabling the debugger (You probably don't want this) ==
./configure
+
The debugger is mainly for developers of DOSBox, so they can find out why a game isn't working.
make
+
* Download the PDCurses source files from http://sourceforge.net/projects/pdcurses/files/pdcurses/3.4/PDCurses-3.4.tar.gz
make install
+
* Copy the downloaded file to your MSYS home folder
</pre></code>
+
* Switch to the MSYS command prompt
 +
* Extract the file
 +
  tar xvf PDCurses-3.4.tar.gz
 +
* Compile the library
 +
  cd PDCurses-3.4/win32
 +
  make -f gccwin32.mak DLL=N
 +
* And now copy the files to your /mingw folders
 +
  cp pdcurses.a /mingw/lib/libpdcurses.a
 +
  cd ..
 +
  cp curses.h panel.h /mingw/include/
 +
  cd ..
  
Some MinGW-specific info on compiling SDL under Windows is available at
+
== Compiling DOSBox ==
 +
* Download the latest official DOSBox SVN source files from here: http://source.dosbox.com/dosboxsvn.tgz
 +
(There are also enhanced SVN versions containing additional fixes and/or features that are not officially part of DOSBox, see [[SVN Builds]] for more details)
 +
* Copy the file to your MSYS home folder
 +
* Extract the file
 +
  tar xvf dosboxsvn.tgz
 +
* Let's configure DOSBox, and tell it to use the static C library (-static-libgcc) and C++ library (-static-libstdc++) and stripping the final EXE of debug information (-s)
 +
  cd dosbox
 +
  ./autogen.sh
 +
  ./configure --enable-core-inline LDFLAGS="-static-libgcc -static-libstdc++ -s"
 +
* For SDL_sound support, you have to extra some extra parameters so that the configure command knows where to find the audio library files (LIBS="-lvorbisfile.....)
 +
  ./configure --enable-core-inline LDFLAGS="-static-libgcc -static-libstdc++ -s" LIBS="-lvorbisfile -lvorbis -logg"
 +
* If you want to enable debugging (you probably don't)
 +
  ./configure --enable-core-inline LDFLAGS="-static-libgcc -static-libstdc++ -s" LIBS="-lvorbisfile -lvorbis -logg" --enable-debug
 +
* And now for compiling DOSBox
 +
  make
 +
* The last step is to gather all the files together in a folder
 +
** Create a folder with a name of your choosing
 +
** Copy the dosbox.exe file located under the '''dosbox\src''' folder, e.g. '''C:\MinGW\msys\1.0\home\Administrator\dosbox\src''' to the folder you created
 +
** Copy the SDL.dll file located under '''SDL-1.2.15\bin''', e.g. '''C:\MinGW\msys\1.0\home\Administrator\SDL-1.2.15\bin''' to the folder you created
 +
** Optionally, copy the SDL_net.dll file located under '''SDL_net-1.2.8\.libs''', e.g. '''C:\MinGW\msys\1.0\home\Administrator\SDL_net-1.2.8\.libs''' to the folder you created
  
: http://www.libsdl.org/extras/win32/mingw32/README.txt
+
Start up DOSBox, and see if it works.
 
 
If you are having trouble with a message like 'no acceptable ld found in $PATH' try 'export LD=/c/gxx-2.95.2/bin/ld.exe' (or wherever you have the exe; GCC 2.95 in this case)
 
 
 
Also, if you have trouble getting ddraw (DirectDraw) working in DOSBox, see this post on the DOSBox forum for a possible fix:
 
 
 
: http://vogons.zetafleet.com/viewtopic.php?p=48050&highlight=#48050
 
 
 
==== 4b. SDL-net (optional) ====
 
 
 
If you want to benefit from DOSBox'es Modem-Emulation or IPX-Support, you'll additionally need the SDL-net library, which can be found at
 
 
 
: http://www.libsdl.org/projects/SDL_net/
 
 
 
Download, extract and compile as you did with SDL.
 
 
 
If you skipped building your own SDL.dll, you can use the one included with the latest official release of DOSBox or you can get a SDL_net win32 binary (.DLL) release on the SDL web site at the URL above.
 
 
 
=== 5. Compiling DOSBox ===
 
 
 
After compiling you'll need to adjust the PATH variable to point at the directory where the freshly built SDL-Library can be found.
 
 
 
''Note: if you want to use SDL-net, do the same with that library.''
 
 
 
Then, change to the directory where you extracted the DOSBox-Source and type
 
 
 
<code><pre>
 
./configure
 
make
 
</pre></code>
 
to compile DOSBox. If everything worked, you should have a <tt>DOSBOX.EXE</tt> in the <tt>./src</tt> - directory.
 
 
 
=== 6. Running ===
 
 
 
The easiest way to run the new executable is to copy it (and your fresh <tt>SDL.dll</tt> ''and maybe even the SDL_net.dll'') to the installation-directory of a non-CVS-version of DOSBox. That way, you have the needed directory structure and configuration files.
 
 
 
=== Example for Building DosBOX 7.1 on OpenSUSE 10.2 Linux ===
 
 
 
-Remove the existing dosbox version if you have it.
 
 
 
-Obtain and extract the dosbox source code.
 
 
 
-SUSE linux 10.2 already has SDL and alsa installed, but you need to install the SDL-devel package and alsa-devel package (for header files and libs).
 
 
 
-Obtain the SDL_Sound src from http://icculus.org/SDL_sound/downloads.  Extract the source somewhere.
 
Run configure --with-sdl-prefix=/usr/lib64 --with-sdl-exec-prefix=/usr
 
make
 
make install (need to be root)
 
 
 
-OK, now you have everything you need to compile dosbox.  cd to your dosbox directory, then run this at the shell:
 
export CPPFLAGS="-I/usr/local/include/SDL"
 
export LDFLAGS="-L/usr/local/lib"
 
configure --with-sdl-prefix=/usr/lib64 --with-sdl-exec-prefix=/usr --with-alsa-prefix=/usr/lib64
 
    --with-alsa-inc-prefix=/usr/include/alsa
 
make
 
make install (need to be root).
 
 
 
-The reason for the shell variables is that it seemed to be the only way configure could find the files it needed.  There aren't any config options to find the SDL_sound library, and I tried giving it -libdir= and -includedir=, but that didn't work.
 

Revision as of 20:57, 28 June 2016

DOSBox is a complicated project. This document aims to provide a step by step description of how to use the MinGW developement environment to successfully build DOSBox. An alternative is to use Microsoft Visual Studio.

This page will guide you through setting up MinGW to compile a current (SVN/CVS) version of DOSBox. Because of updates to compilers and libraries, this guide will not work with the 0.74 (the last official release, which is currently over 6 years old) source files.

Installing MinGW

  • Download mingw-get-setup.exe from http://sourceforge.net/projects/mingw/
  • Run the installer, choosing the defaults
  • Once the MinGW Installation Manager application starts, select
    • mingw-developer-toolkit (msys-base should be automatically added)
    • mingw32-base
    • mingw32-gcc-g++
  • On the installation menu, apply changes, and confirm that you want to apply the changes

The installation manager is going to download a bunch of files, and at the end, start installing them. Once this is done, you can close the dialog box as well as the installation manager.

Well done, MinGW is now installed! Let's start it up.

  • Browse to C:\MinGW\msys\1.0
  • Run MSYS.BAT

This will start up a DOS prompt like screen, lets mount the base path

 mount 'c:\MinGW' /mingw

You have now completed this section, lets move on to adding the SDL libraries to MinGW.

Adding the SDL libraries to MinGW

  • Download the pre compiled SDL development libraries from here http://www.libsdl.org/release/SDL-devel-1.2.15-mingw32.tar.gz
  • Copy the downloaded file to your MSYS home folder, it's going to be something like C:\MinGW\msys\1.0\home\Administrator
  • Switch back to the MSYS command prompt we started earlier
  • Lets extract the downloaded files
 tar xvf SDL-devel-1.2.15-mingw32.tar.gz
  • And now add the files to MinGW
 cd SDL-1.2.15
 make install-sdl prefix=/mingw
 cd ..

Cool, the SDL libraries have been added to MinGW, onto the next section.

Adding Direct Draw support to DOSBox (Optional)

If you want to give DOSBox the option to use the DDRAW output option, then we need to add a couple of extra libraries to MinGW

 tar xvf directx-devel.tar.gz -C /mingw

Adding networking support to DOSBox (Optional)

These steps show you how to add the SDL_net libraries to MinGW, which enable networking and modem for DOSBox. If you aren't going to be using DOSBox for multi player games, then you can probably skip this step.

 tar xvf SDL_net-1.2.8.tar.gz
  • Lets configure the libraries
 cd SDL_net-1.2.8
 ./configure --prefix=/mingw
  • And now compile them
 make
  • And then install them (copy the files)
 make install
 cd ..

Adding screenshot support (Optional)

This one is a bit tricky because it relies on two libraries, zlib (libpng needs these libraries), and libpng. We are also going to be compiling the libraries statically to keep external DLL's to a minimum.

 tar xvf zlib-1.2.8.tar.xz
  • Lets build the static library
 cd zlib-1.2.8
 make -f win32/Makefile.gcc
  • And now copy the files to /mingw
 cp libz.a /mingw/lib/
 cp zlib.h zconf.h /mingw/include/
 cd ..

Cool, that wasn't too hard, onto libpng

 tar xvf libpng-1.6.18.tar.gz
  • Configure the library
 cd libpng-1.6.18
 ./configure --disable-shared --prefix=/mingw
  • And now to compile and install the files
 make
 make install
 cd ..

Adding support for compressed audio on diskimages (Optional)

This is for cue/bin cdrom images with compressed (ogg) audio tracks. We will be adding the libvorbis, libogg, and sdl_sound libraries.

 tar xvf libogg-1.3.2.tar.gz
  • Configure the library, disabling shared library files
 cd libogg-1.3.2
 ./configure --disable-shared --prefix=/mingw
  • Compile and install the library files
 make
 make install
 cd ..
 tar xvf libvorbis-1.3.5.tar.gz
  • Configure the library, disabling shared library files
 cd libvorbis-1.3.5
 ./configure --disable-shared --prefix=/mingw
  • Compile and install the library files
 make
 make install
 cd ..
 tar xvf SDL_sound-1.0.3
  • Unfortunately sdl_sound isn't going to compile on MinGW so we are going to have to edit some of the source files.
  • Using something like Notepad++ (or Wordpad in a pinch), open up SDL_sound-1.0.3\decoders\mpglib\mpg123_sdlsound.h
  • Replace line 8
 #include    <math.h>
  • With the following
 # define M_PI       3.14159265358979323846
 # define M_SQRT2    1.41421356237309504880
 # define REAL_IS_FLOAT
 # define NEW_DCT9

 # define random rand
 # define srandom srand
  • Using something like Notepad++ (or Wordpad in a pinch), open up SDL_sound-1.0.3\decoders\timidity\tables.h
  • Comment out line 23 with two //
 //#include <math.h>
  • The hard part is done, lets configure and compile
 cd SDL_sound-1.0.3
 ./configure --disable-shared --prefix=/mingw LIBS="-lvorbisfile -lvorbis -logg"
 make
 make install
 cd ..

Enabling the debugger (You probably don't want this)

The debugger is mainly for developers of DOSBox, so they can find out why a game isn't working.

 tar xvf PDCurses-3.4.tar.gz
  • Compile the library
 cd PDCurses-3.4/win32
 make -f gccwin32.mak DLL=N
  • And now copy the files to your /mingw folders
 cp pdcurses.a /mingw/lib/libpdcurses.a
 cd ..
 cp curses.h panel.h /mingw/include/
 cd ..

Compiling DOSBox

(There are also enhanced SVN versions containing additional fixes and/or features that are not officially part of DOSBox, see SVN Builds for more details)

  • Copy the file to your MSYS home folder
  • Extract the file
 tar xvf dosboxsvn.tgz
  • Let's configure DOSBox, and tell it to use the static C library (-static-libgcc) and C++ library (-static-libstdc++) and stripping the final EXE of debug information (-s)
 cd dosbox
 ./autogen.sh
 ./configure --enable-core-inline LDFLAGS="-static-libgcc -static-libstdc++ -s"
  • For SDL_sound support, you have to extra some extra parameters so that the configure command knows where to find the audio library files (LIBS="-lvorbisfile.....)
 ./configure --enable-core-inline LDFLAGS="-static-libgcc -static-libstdc++ -s" LIBS="-lvorbisfile -lvorbis -logg"
  • If you want to enable debugging (you probably don't)
 ./configure --enable-core-inline LDFLAGS="-static-libgcc -static-libstdc++ -s" LIBS="-lvorbisfile -lvorbis -logg" --enable-debug
  • And now for compiling DOSBox
 make
  • The last step is to gather all the files together in a folder
    • Create a folder with a name of your choosing
    • Copy the dosbox.exe file located under the dosbox\src folder, e.g. C:\MinGW\msys\1.0\home\Administrator\dosbox\src to the folder you created
    • Copy the SDL.dll file located under SDL-1.2.15\bin, e.g. C:\MinGW\msys\1.0\home\Administrator\SDL-1.2.15\bin to the folder you created
    • Optionally, copy the SDL_net.dll file located under SDL_net-1.2.8\.libs, e.g. C:\MinGW\msys\1.0\home\Administrator\SDL_net-1.2.8\.libs to the folder you created

Start up DOSBox, and see if it works.