User Tools

Site Tools


user:draugthewhopper:windowsbuild

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
user:draugthewhopper:windowsbuild [2021/01/03 11:59]
draugthewhopper
user:draugthewhopper:windowsbuild [2021/08/31 14:14] (current)
draugthewhopper
Line 1: Line 1:
 ====== Windows client builds ====== ====== Windows client builds ======
  
-Throughout 2019 and 2020, I've been able to build the GTK2 client ​on Windows, with relatively good success, except that everything explodes when I take it out of the build environment.+As of Aug 2021, I finally got a stable Windows GTK client ​build method. I submitted a Powershell script which is reasonably well documented in crossfire-client/​gtk-v2/​win32/​autobuild.ps1
  
 +The script and instructions are specifically for x86_64 builds. Suites like MSYS2 and MinGW are deprecating support for pure 32-bit x86, so producing 32-bit binaries maybe not be feasible moving forward. Regardless, if you can get the MinGW/MSYS2 toolchain working, the powershell script can probably be adapted to work.
  
 ====== Links ====== ====== Links ======
Line 18: Line 19:
 ====== My Notes ====== ====== My Notes ======
  
-loosely based on the makegho 2018 instructions:​ +If trying to adapt between ​32-bit and 64-bitthe package names may change. A few examples that may help or hurt:
- +
-These instructions assume a fresh, clean 32-bit ​windows 10 machine. +
- +
-Install compiler tools: +
- +
-Go to http://​www.msys2.org/​ +
- +
-Download ​and run latest i686 installer (msys2-i686-20190524.exe) +
- +
-Start an msys2 32-bit shell (“MSYS2 MinGW 32-bit” in the start menu) and type:+
  
  pacman -S mingw-w64-i686-gcc ​  pacman -S mingw-w64-i686-gcc ​
Line 37: Line 28:
  pacman -S mingw-w64-i686-SDL_mixer  pacman -S mingw-w64-i686-SDL_mixer
  
-Alternatively,​ do a oneliner: 
- 
- pacman -S mingw-w64-i686-gcc mingw-w64-i686-make mingw-w64-i686-pkg-config mingw-w64-i686-vala mingw-w64-i686-SDL_image mingw-w64-i686-SDL_mixer 
- 
-Add c:​\msys32\mingw32\bin to path 
   
-Install PERL:+I recommend using perl from MSYS2, rather than a third party Perl. If you want to anyway, a few tips:
  
-http://​strawberryperl.com/​releases.html+<​del>​Install PERL:</del>
  
-Download portable 32 bit edition+<​del>​http://​strawberryperl.com/​releases.html</​del>​
  
-Extract to C:\perl+<​del>​Download portable 32 bit edition</​del>​
  
-Add C:\perl\perl\bin to path.+<​del>​Extract to C:\perl</​del>​
  
-Note that this can cause some issues, especially if CMake tries to use perl-supplied components instead of those from MSYS/MinGW. But, perl is still needed "for def-keys and msgtypes generation"​+<​del>​Add C:\perl\perl\bin to path.</​del>​
  
-Download and extract CrossFire source ​to e.g. c:​\cfsource.rxxxxx.+<​del>​Note that this can cause some issues, especially if CMake tries to use perl-supplied components instead of those from MSYS/MinGWBut, perl is still needed "for def-keys and msgtypes generation"</​del>​
  
-https://​sourceforge.net/​projects/​crossfire/​files/​crossfire-client/+<​del>​If CMake fails near a pkgconfig or gtk/gio item, check to make sure that it hasn’t defaulted the PKG_CONFIG_EXECUTABLE to a perl directoryIf so, revert it to the msys32 one, probably C:​\msys32\mingw32\bin\pkg-config.exe<​/del>
  
-Install latest CMake 32-bit: +Other misc bits:
- +
-https://​cmake.org/​download/​ +
- +
-Run CMake gui: +
- +
-Set source code directory, e.g. c:/​cfsource.rxxxxx +
- +
-Set binary directory, e.g. c:/​cfbuild +
- +
-Click '​Configure'​ and choose 'MinGW Makefiles'​ +
- +
-Change CMAKE_INSTALL_PREFIX to something reasonable +
- +
-(C:\Program Files (x86)\... is probably read only). +
- +
-(Nothing seems to be put in this folder anyway?) +
- +
-(I use "​.",​ but I don't know if it makes any difference at all) +
- +
-<​del>​If CMake finds wrong include directories,​ e.g. from Visual Studio, change them manually to '​C:​\msys32\mingw32\include'​ </​del>​ +
- +
-If CMake fails near a pkgconfig or gtk/gio item, check to make sure that it hasn’t defaulted the PKG_CONFIG_EXECUTABLE to a perl directory. If so, revert it to the msys32 one, probably C:​\msys32\mingw32\bin\pkg-config.exe +
- +
-Click “Configure” again, hope no errors occur. +
- +
-Once it finally doesn’t have warnings or errors, Click '​generate'​. +
- +
-If configuring goes wrong, delete the contents of C:\cfbuild\ and try again. +
- +
-Compile: +
- +
-Open msys32 32-bit shell (“MSYS2 MinGW 32-bit” in the Start Menu) +
- +
-cd /​c/​cfbuild/​ +
- +
-run mingw32-make.exe +
- +
-Create release package: +
- +
-Run '​mingw32-make install'​ +
- +
-Make directory '​release',​ somewhere in your system +
- +
-Copy cfbuild\bin\crossfire-client-gtk2.exe to release\ +
- +
-<​del>​Create dir release\bin,​ and copy \cfbuild\bin\cfsndserv.exe to it</​del>​ sound server has been merged to main executable since r21700  +
- +
-Copy directory cfbuild\share to release\ +
- +
-<​del>​At this point, the client should run more or less fine, at least in your dev environment. Now we need to prep it so it can be run on other systems (but this is the broken part).</​del>​ +
-  - Ordered List Item +
-In release, create a folder called “lib”, and copy “gdk-pixbuf-2.0” and “gtk-2.0” from “C:​\msys32\mingw32\lib”. +
- +
-This fixes some xpm warnings, and makes a few GUI icons render correctly, apparently a very few gui elements are xpm? +
- +
-Fetch “msys32\mingw32\share\themes” and place it in “release\share\”. This fixes an issue that breaks the GTK theme. +
- +
-Find sounds from somewhere, and put them in release\share\crossfire-client\sounds\ +
- +
-Find the DLLs, and put them in release\ +
- +
-Most of the DLLs can be found in c:​\msys32\bin. Currently includes: +
- +
- libatk-1.0-0.dll +
- libbrotlicommon.dll +
- libbrotlidec.dll +
- libbz2-1.dll +
- libcairo-2.dll +
- libcrypto-1_1.dll +
- libcurl-4.dll +
- libdatrie-1.dll +
- libexpat-1.dll +
- libffi-6.dll +
- libfontconfig-1.dll +
- libfreetype-6.dll +
- libfribidi-0.dll +
- libgcc_s_dw2-1.dll +
- libgdk-win32-2.0-0.dll +
- libgdk_pixbuf-2.0-0.dll <​del>​Adding this causes a deluge of warnings about XPM not being supported. To fix, in release, create a folder called “lib”, and copy “gdk-pixbuf-2.0” and “gtk-2.0” from “C:​\msys32\mingw32\lib”. This fixes some xpm warnings, and makes a few GUI icons render correctly, apparently a very few gui elements are xpm?</​del>​ +
- libgio-2.0-0.dll +
- libglib-2.0-0.dll <​del>​Adding this causes the sound server to fail to spawn, message "Could not spawn sound server: Failed to execute helper program (Invalid argument)"​ Skip for now, and it will work in the dev enrions.</​del>​ <​del>​The sound server will fail to spawn if you do not get the glib helper program. This is a Windows-specific thing.</​del>​ Sawning the sound server is no longer an issue since r21700, when it was merged into the main binary. +
- libgmodule-2.0-0.dll +
- libgobject-2.0-0.dll +
- libgraphite2.dll +
- libgtk-win32-2.0-0.dll Adding this breaks the GTK theme. Fetch “msys32\mingw32\share\themes” and place it in “release\share\”. This only works if you have also copied the above items into "​lib"​ +
- libharfbuzz-0.dll +
- libiconv-2.dll +
- libidn2-0.dll +
- libintl-8.dll +
- libmikmod-3.dll (skipping this doesn'​t seem to break anything, but the client still looks for it) +
- libnghttp2-14.dll +
- libopenal-1.dll (skipping this doesn'​t seem to break anything, but the client still looks for it) +
- libpango-1.0-0.dll +
- libpangocairo-1.0-0.dll +
- libpangoft2-1.0-0.dll +
- libpangowin32-1.0-0.dll +
- libpcre-1.dll (skipping this doesn'​t seem to break anything, but the client still looks for it) +
- libpixman-1-0.dll +
- libpng16-16.dll +
- libpsl-5.dll +
- libssl-1_1.dll +
- libstdc++-6.dll +
- libthai-0.dll +
- libunistring-2.dll +
- libwinpthread-1.dll +
- SDL.dll +
- zlib1.dll +
- +
-<​del>​These DLLs go in release\bin\,​ since they are used by the sound server:<​del>​ +
-Since r21700, these dlls go with all the others. +
- +
- libmad-0.dll +
- libSDL_mixer-1-2-0.dll +
- libogg-0.dll +
- libvorbis-0.dll +
- libvorbisfile-3.dll +
- +
-<​del>​It works to put them in release\, but the sound server checks for them in .\, so it helps if they'​re in the same folder as cfsndserv.exe</​del>​ +
- +
-At this point, the client runs in your dev environs, no warnings, sound works, etc+
  
 <​del>​Get the glib helper program from C:​\msys32\mingw32\bin\gspawn-win32-helper-console.exe,​ and copy it to release\</​del>​ Not needed since r21700 <​del>​Get the glib helper program from C:​\msys32\mingw32\bin\gspawn-win32-helper-console.exe,​ and copy it to release\</​del>​ Not needed since r21700
- 
-Pull the release\ folder to another machine, and run. 
- 
-Weep because everything'​s on fire: 
-  * Sound works in the dev environs, but not once you bring it to another machine. 
-  * If client.ini exists, then it will barf errors about gtk_scrolled_window_add_with_viewport() and accelgroup1. But, these are not fatal. 
- 
-There are various non-fatal build warnings: 
- 
-  * \script.c:​608:​47:​ warning: multi-character character constant [-Wmultichar] 
-  * /​msys32/​mingw32/​include/​gtk-2.0/​gtk/​gtktypeutils.h:​236:​1:​ warning: '​GTypeDebugFlags'​ is deprecated [-Wdeprecated-declarations] 
-  * /​msys32/​mingw32/​include/​gtk-2.0/​gtk/​gtktooltips.h:​73:​3:​ warning: '​GTimeVal'​ is deprecated: Use '​GDateTime'​ instead [-Wdeprecated-declarations] 
-  * \crossfire-code-r21708-client-trunk\gtk-v2\src\sdl.c:​895:​13:​ warning: '​mapdata_face'​ is deprecated [-Wdeprecated-declarations] 
user/draugthewhopper/windowsbuild.txt · Last modified: 2021/08/31 14:14 by draugthewhopper