-
Notifications
You must be signed in to change notification settings - Fork 19
MXE Dependencies
MXE a great project to build the dependent libraries used by Shoes and other FOSS projects for Windows cross compiling. That build process has always been painful with Shoes. MXE can ease that pain and it enables some interesting options for the future. MXE runs on Linux and OSX. It's not tied to any particular Linux or package manager.
Of course, MXE has its own set of rules but we get benefits from those rules by giving up some our notions of what is correct. One gain to be explored in the future is cross building Shoes/Windows on OSX as well as Linux. It could be just as simple as the linux steps below - Simpler if we do some MXE work.
cd to where you want things. For me, it's a ~/Projects/shoesdeps which is a nfs export and a samba mount.
git clone https://github.com/mxe/mxe.git
cd mxe
We want to default to just building 32 bit shared libraries - because that's what Shoes on Windows uses. Edit the settings.mk file and add the MXE_TARGETS setting. Mine looks like
# This variable controls the targets that will build.
#MXE_TARGETS := i686-w64-mingw32.static i686-w64-mingw32.shared x86_64-w64-mingw32.static x86_64-w64-mingw32.shared
MXE_TARGETS := i686-w64-mingw32.shared
Now build one of the some smallish dependencies used by Ruby - zlib and then we can poke around to see what's where.:
ccoupe@bronco:~/Projects/shoesdeps/mxe$ make zlib
The very first build of any MXE package is going to build the gcc cross compilers and that takes time. (10 to 30 minutes). Notice that it builds zlib for both the i686-w64-mingw32.shared arch and the build machine, x86_64-pc-linux-gnu, Lets find the dll.
find . -name 'zlib*'
./usr/i686-w64-mingw32.shared/bin/zlib1.dll
./usr/i686-w64-mingw32.shared/include/zlib.h
./usr/i686-w64-mingw32.shared/installed/zlib
./usr/i686-w64-mingw32.shared/lib/pkgconfig/zlib.pc
....
There it is: the dll, the .h and the .pc ! And log files and patches and source tar balls. Celebrate!
Now would be a good to fix up .bash_rc (or .bash_profile or ..) to put the MXE compilers in the PATH environmental variable as mentioned in the MXE instructions.
When you cloned Shoes from github you got a plugin-mxe subdirectory. It contains the mxe formulas for gdbm, openssl-1.0.2, yaml and ruby. Remember where that plugin-mxe directory is. We need to do one other thing to improve life and tell settings.mk about our plugin directory. Edit settings.mk and add a line:
# This variable controls which plugins are in use.
# See plugins/README.md for further information.
#override MXE_PLUGIN_DIRS += plugins/apps plugins/native
override MXE_PLUGIN_DIRS += plugins/native /home/ccoupe/Projects/shoes3/plugin-mxe
Of course your location will be different.
OSX Note 1: Gettext locations can get confused between Apples version and Homebrew's version. Set the path before you build anything using gettext. In our case we need it in order to build some of the shoes deps. Sigh.
export PATH=/usr/local/opt/gettext/bin:$PATH
OSX Note 2: If you are using homebrew it may have installed the very latest automake/conf/tools and it may be too new for some packages (gdbm for one). The fine folks at MXE actually have an older version you can build an use inside mxe. After the above edit for MXE_PLUGIN_DIRS do
make autoconf
make automake
Now it's going to get simple. Watch:
make shoesdeps
and watch the terminal. Thats it. You can install the packages individually if you like:
make bzip2
make libffi
make gtk3
make librsvg
make sqlite
make giflib
make MXE_PLUGIN_DIRS=~/Projects/shoes3/plugin-mxe openssl1.0
make MXE_PLUGIN_DIRS=~/Projects/shoes3/plugin-mxe yaml
make MXE_PLUGIN_DIRS=~/Projects/shoes3/plugin-mxe gdbm
make MXE_PLUGIN_DIRS=~/Projects/shoes3/plugin-mxe ruby
make nsis
The Ruby build is pretty quiet for many minutes as is the gtk3 and nsis builds. In fact, all the package builds take time. Believe me, you'll get error messages if something fails. What to do if there is an error: There are log files for the download phase and the build phase in the mxe log/ directory.
Download errors can be checksums that don't match AND/OR use the wrong url. See the log file. You can delete the downloaded file in pkg/ if you need to try it again.
Build errors are harder to debug. The log file has a lot of build information to help. You may have to remove artifacts to trigger a rebuild. for example, if you want to rebuild gdbm after you changed the gdbm.mk file:
ccoupe@bronco:~/Projects/shoesdeps/mxe$ rm usr/i686-w64-mingw32.shared/installed/gdbm
ccoupe@bronco:~/Projects/shoesdeps/mxe$ make MXE_PLUGIN_DIRS=~/Projects/shoes3/plugin-mxe gdbm
[plugin] /home/ccoupe/Projects/shoes3/plugin-mxe/
[build] gdbm i686-w64-mingw32.shared
[done] gdbm i686-w64-mingw32.shared
12220 KiB 0m15.360s
Note 3
If you run into trouble building pango: There may be conflicting options on versions and patches. The plugin's pango.mk says 1.40.14 but there may be a pango.mk in mxe/src. Remove the one in src and the pango patch file in mxe/src and then do make shoesdeps
to continue.
You need a mxe-custom.yaml file to tell Shoes where the dependencies are and what gems you want. Mine looks like:
Deps: /home/ccoupe/Projects/shoesdeps/mxe/usr/i686-w64-mingw32.shared
Ruby: /home/ccoupe/Projects/shoesdeps/mxe/usr/i686-w64-mingw32.shared
Gemloc: /home/ccoupe/Projects/gems/rb23
InclGems:
- chipmunk*
- sqlite3*
- nokogiri*
- mini_portile2*
- byebug*
- rb-readline*
- win32-shortcut*
- ffi*
# picky needs:
- activesupport*
- concurrent-ruby*
- i18n*
- multi_json*
- picky*
- rack_fast_escape*
- thread_safe*
- tzinfo*
- url_escape*
- yajl-ruby*
# typhoeus
- ethon*
- typhoeus*
# because
#- bloopsaphone-0.4
MS-Theme: true
Debug: true
Deprecations: true
Installer: nsis
InstallerLoc: /home/ccoupe/Projects/nsis/nsis3/bin/makensis
The Shoes target, 'mxe' uses the mxe cross compiler to build Shoes for Windows. Note: there is an mxe_osx target for OSX which does the same thing (given an mxe_osx-custom.yaml)
rake linux:setup:mxe
rake
OR
rake osx:setup:mxe_osx
rake
shoes.exe and cshoes.exe are in the mxe directory.
This is clever. MXE is very clever. In the mxe directory, make nsis
builds the native Linux (makensis) and the big bad makensis.exe. We can use the linux or osx version by changing our InstallerLoc: setting in the mxe-custom.yaml. Mine looks like
InstallerLoc: /home/ccoupe/Projects/shoesdeps/mxe/usr/i686-w64-mingw32.shared/bin/makensis
A rake package
will trundle off and create a Shoes installer, which only runs on Windows of course.
Menu
In This Section:
- Shoes Rakefiles
- Rake files
- App.yaml secrets
- Custom.yaml
- Gems for Shoes
- Build with Vagrant
- Building Shoes on Linux
- Building Shoes on Pi2
- Mingw Dependencies
- Building Shoes on Windows
- Cross compile mingw
- OSX 10.10 Dependencies
- OSX 10.9 Dependencies
- OSX 10.6 Dependencies
- Caution Using brew 10.6
- Build-MinGW-with-OSX
- NSIS Installer for Windows
- MSYS2 cross compiling
- Cross-compile-for-arm-(raspberry)
- MXE-Dependencies
- FreeBSD and Shoes