The International Simutrans Forum

Development => Technical Documentation => Topic started by: prissi on January 02, 2011, 08:21:15 PM

Title: How to compile simutrans using MinGW
Post by: prissi on January 02, 2011, 08:21:15 PM
Original found in the Experimetnal section by Turfit: But I copied to here too:



Follow http://wiki.openttd.org/Compiling_on_MinGW down through the Compiling libpng section - Simutrans doesn't need the rest of the libraires.
Deviations I made from the guide:
  1) Selected "Use current repository catalogues".
  2) Selected "MinGW Developer ToolKit" to install.
  3) Used not installed the SDL version from there
Don't know if this would make a difference...



bzip2 is needed for Simutrans: http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz (http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz)
No MinGW configuration so edit the makefile to change:

chmod a+x $(PREFIX)/bin/bzip2
chmod a+x $(PREFIX)/bin/bunzip2
chmod a+x $(PREFIX)/bin/bzcat
chmod a+x $(PREFIX)/bin/bzip2recover

to:

chmod a+x $(PREFIX)/bin/bzip2.exe
chmod a+x $(PREFIX)/bin/bunzip2.exe
chmod a+x $(PREFIX)/bin/bzcat.exe
chmod a+x $(PREFIX)/bin/bzip2recover.exe

or simply delete the lines... else the make will abort.

In MSYS run:

make install PREFIX=/mingw

to install.



For GDI - also require libunicows: http://prdownloads.sourceforge.net/libunicows/libunicows-1.1.1-mingw32.zip (http://prdownloads.sourceforge.net/libunicows/libunicows-1.1.1-mingw32.zip)
Simply copy libunicows.a from the .zip into /mingw/lib



For SDL - also require SDL:
In MSYS:

wget http://www.libsdl.org/release/SDL-1.2.15.tar.gz
tar xvfz SDL-1.2.15.tar.gz
cd SDL-1.2.15
./configure ; make ; make install
cd ..


Will need the SDL.dll in your Simutrans directory to run. It's found in /usr/local/bin/SDL.dll in MSYS or \MinGW\msys\1.0\local\bin\SDL.dll in Windows.
or copy the precompiled/stripped .dll from inside http://www.libsdl.org/release/SDL-devel-1.2.15-mingw32.tar.gz (http://www.libsdl.org/release/SDL-devel-1.2.15-mingw32.tar.gz)



You can add

  LDFLAGS ?= -static-libgcc -static-libstdc++

to the Simutrans Makefile MinGW section so I didn't need to hunt down even more dlls ...

If you get an error message about no CC found, add

CC = gcc

to config.default.



And, if you want to use the ./distribute.sh script you'll need a zip.exe: ftp://ftp.info-zip.org/pub/infozip/win32/zip300xn.zip (http://ftp://ftp.info-zip.org/pub/infozip/win32/zip300xn.zip). I stuck it into /bin



And finally I get something that successfully compiles and runs both Simutrans-standard and -experimental in both GDI and SDL formats.
Title: Re: How to compile simutrans using MinGW
Post by: jamespetts on April 15, 2011, 09:07:56 PM
Thank you for this helpful guide. I am having some trouble, however, with installing bzip: I tried following the guidelines for zlip or libpng on the OpenTTD wiki, but they are not identical to each other, and neither worked for bzip.lib. As to the makefile amendments for bzlib - where should those additional lines go?
Title: Re: How to compile simutrans using MinGW
Post by: TurfIt on April 15, 2011, 10:09:54 PM
makefile changes aren't new lines, either delete them or add the .exe extensions.


wget http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz
tar xvfz bzip2-1.0.6.tar.gz
cd bzip2-1.0.6
{fix makefile as described above}
make install PREFIX=/mingw

doesn't work?


Title: Re: How to compile simutrans using MinGW
Post by: jamespetts on April 15, 2011, 11:43:06 PM
Ahh, that's very helpful - I had misunderstood Prissi's instructions and thought that it was Simutrans's not BZLib's makefile that needed to be edited. I have managed to make it compile now - thank you.
Title: Re: How to compile simutrans using MinGW
Post by: jamespetts on April 14, 2012, 11:39:39 PM
Hmm - trying to compile under MinGW again to have a go with profiling, and for some reason having inexplicable trouble. When I run "make" (on the -devel branch), I get the following errors:


$ make
===> CXX clipboard_w32.cc
In file included from dataobj/../tpl/stringhashtable_tpl.h:8:0,
                 from dataobj/translator.h:12,
                 from clipboard_w32.cc:18:
dataobj/../tpl/hashtable_tpl.h: In member function 'bool hashtable_tpl<key_t, value_t, hash_t>::is_contained(key_t) const':
dataobj/../tpl/hashtable_tpl.h:230:3: error: need 'typename' before 'for_sel_ref<slist_tpl<hashtable_tpl<key_t, value_t, hash_t>::node_t>, void(const int&)>::ref' because 'for_sel_
ref<slist_tpl<hashtable_tpl<key_t, value_t, hash_t>::node_t>, void(const int&)>' is a dependent scope
dataobj/../tpl/hashtable_tpl.h:230:1: error: expected ';' before 'container___230'
dataobj/../tpl/hashtable_tpl.h:230:3: error: need 'typename' before 'for_sel_iter<slist_tpl<hashtable_tpl<key_t, value_t, hash_t>::node_t>, void(const int&)>::iter' because 'for_se
l_iter<slist_tpl<hashtable_tpl<key_t, value_t, hash_t>::node_t>, void(const int&)>' is a dependent scope
dataobj/../tpl/hashtable_tpl.h:230:1: error: expected ';' before 'iter__230'
dataobj/../tpl/hashtable_tpl.h:230:1: error: 'iter__230' was not declared in this scope
dataobj/../tpl/hashtable_tpl.h:230:1: error: 'end__230' was not declared in this scope
dataobj/../tpl/hashtable_tpl.h:230:3: error: type/value mismatch at argument 1 in template parameter list for 'template<class _Iterator> struct std::iterator_traits'
dataobj/../tpl/hashtable_tpl.h:230:3: error:   expected a type, got 'for_sel_iter<slist_tpl<hashtable_tpl<key_t, value_t, hash_t>::node_t>, void(const int&)>::iter'
dataobj/../tpl/hashtable_tpl.h:230:3: error: expected initializer before 'const'
dataobj/../tpl/hashtable_tpl.h:232:4: error: duplicate 'const'
dataobj/../tpl/hashtable_tpl.h:232:31: error: 'iter' was not declared in this scope
make: *** [build/default/clipboard_w32.o] Error 1


I should be grateful for any ideas as to how to deal with this.
Title: Re: How to compile simutrans using MinGW
Post by: Dwachs on April 15, 2012, 12:53:24 PM
Imho you should use the FORT macro at tpl/hashtable_tpl.h:230 (instead of FOR).
Title: Re: How to compile simutrans using MinGW
Post by: jamespetts on April 15, 2012, 01:21:45 PM
Thank you - that is helpful. I found and fixed a few more compile errors, too, and now have managed to get it to compile.
Title: Re: How to compile simutrans using MinGW (no-cygwin)
Post by: Vonjo on June 19, 2013, 07:54:23 AM
If you get:
error: unrecognized command line option '-mno-cygwin'
...try to remove -mno-cygwin from Makefile.
It sounds like GCC 4.7.0 has finally removed the deprecated -mno-cygwin option. (http://stackoverflow.com/questions/6034390/compiling-with-cython-and-mingw-produces-gcc-error-unrecognized-command-line-o/6035864#6035864)
Title: Re: How to compile simutrans using MinGW
Post by: Ters on June 19, 2013, 02:31:02 PM
Are there still any versions of mingw out there that actually does use cygwin when this argument is missing? I can't ever remember having used it all these ten-or-so years I've used mingw, despite being aware of its existience, and the executables I get don't seem to have been cygwin-ish.