Building FlightGear - Cross Compiling
This article describes content/features that may not yet be available in the latest stable version of FlightGear (2020.3). You may need to install some extra components, use the latest development (Git) version or even rebuild FlightGear from source, possibly from a custom topic branch using special build settings: .This feature is scheduled for FlightGear 2019.x. If you'd like to learn more about getting your own ideas into FlightGear, check out Implementing new features for FlightGear. |
Started in | 05/2015 |
---|---|
Description | Windows binaries created using a cross compiler on Linux |
Maintainer(s) | Hamzaalloush and Hooray |
Contributor(s) | hamzaalloush, FlyHigh (since 05/2015) |
Status | Under active development as of 06/2016 [1] (compiles & runs OSG/osgEarth examples) |
Changelog | https://github.com/saiarcot895/mxe/commits/master-oldgcc |
News
Note Currently, MXE has OSG 3.4.0, but Simgear uses OSG 3.2.0, and there are build errors (likely resulting from API changes), so I'm reluctant to add in a new application which cannot compile. Besides this, all of Simgear's dependencies are in the main master branch. |
As of June 10, we are starting to make progress both on the shared and static builds of FlightGear/SimGear dependencies. as for a shared build of Flight Gear itself, a segmentation fault is currently occurring and being investigated. crash information
Note I'll work on getting the backtraces, but if I recall correctly, they didn't seem too helpful. PortableXDR is used in compiling hdf4; I don't think any of the other downstream libraries (gdal, netcdf, openscenegraph, simgear, flightgear) use it directly. Regarding the segfaults, they're actually happening at the end of "initializing subsystems" and the start of "finalizing subsystems". |
In addition, a 32-bit TerraGear static build has been done, although it still throws up segmentation faults. The patches are applied for Mingw64 compatibility will be reviewed by a TerraGear developer.
We will also investigate adding a means for obtaining useful backtraces in a cross-platform fashion, possibly using either CrashRpt or BreakPad.
Gallery
Roadmap
Note As of 11/2015, most patches are being merged upstream (mxe) - so that we won't need to maintain our own branches.
For the sake of simplicity, we are currently focusing on 64 bit static builds without using any optimizations at all (i.e. debug builds), this is also to simplify troubleshooting and testing (i.e. quality of backtraces). Also, to benefit from parallel builds on multicore systems, we need to review package dependencies to see which packages can be built concurrently, and which dependencies must be built sequentially. Any custom *.mxe files should be written with concurrent builds in mind, as well as supporting both use-cases: static and shared linking (see FlyHigh's simgear.mk for reference). |
Task | Description | Priority | People | Progress |
---|---|---|---|---|
mxe 32-bit static tool-chain | progress of the static mxe i686-w64-mingw32-based tool-chain | Hamzaalloush | Done | |
mxe 32-bit shared tool-chain | progress of the shared mxe i686-w64-mingw32-based tool-chain | Hamzaalloush & FlyHigh | ||
mxe 64-bit static tool-chain | progress of the static mxe x86_64-w64-mingw32-based tool-chain | Hamzaalloush & FlyHigh -saiarcot895 | ||
mxe 64-bit shared tool-chain | progress of the shared mxe x86_64-w64-mingw32-based tool-chain | Hamzaalloush & FlyHigh -saiarcot895 | ||
flightgear specific mxe tool-chain | mxe subset/progress of packages neccessary for the flightgear project, rather than the full 367 packages | Hamzaalloush | ||
osg-earth-patched FG | there's a Windows batch file created by poweroftwo demonstrating what needs to be done, see [1] | Not done | ||
leak checking support | add support for leak checking using Address Sanitizer via -fsanitize=address -fno-omit-frame-pointer [2] | ... | Not done | |
ccache | explore adding ccache support | Hooray | ||
binary packages | provide binary mxe packages (deb/ppa) - see: http://mxe.redjohn.tk/ | mxe devs | ||
VM | provide virtual appliance with mxe pre-configured and valid sg/fg build environments set up (e.g. via dmxe/docker.com) | Hooray | ||
Superbuild | Update the CMake Superbuild to support mxe ?? | Hooray | Not done | |
osg-earth | update the Superbuild to support osgEarth | priority | people | Not done |
build server | get the FlightGear Build Server updated to support mxe-based cross-builds | mid-term | Jenkins maintainers | Not done |
Simgear portability | ensure Simgear is portable upstream for different platforms. (ex. Mingw64 is a different platform) | core developers | Not done |
Dependencies
This is a list of dependencies (usually, dedicated *.mk modules for mxe)
Note All main dependencies (osg,osgearth, simgear, flightgear) will by default be built using -DCMAKE_BUILD_TYPE=DEBUG to ensure that we can easily troubleshoot problems, once all unit tests (demos/examples) of each package build/link and work correctly, the build type for the corresponding package will be promoted to RelWithDbg.
Also, Qt 5 is in MXE, but because the source code has been split into multiple source packages, the "qt5" target just builds all of the Qt 5 components. For Flightgear, I think "qtbase" (and "qtdeclarative", if it uses QML files) is sufficient. Since Qt5 is an optional dependency for a launcher, we will not focus on something that could be achieved equally using another launcher, the purpose of our MXE adventure is to help people troubleshoot and compile faster than nightly without going Windows SDK, but it is definitely "nice-to-have" the QT launcher, so that will have to wait. |
Task | Merged upstream | Build System | Description | People | Progress |
---|---|---|---|---|---|
plib.mk | Done | autotools | provide mxe build scripts for plib | Done | |
openrti.mk | Not done | cmake | add OpenRTI support | Hamzaalloush | |
optional | Not done | cmake | add support for optional dependencies (probably, separate *.mk files for each) | Not done | |
3rdParty | Not done | mxe | ensure 3rd party dependencies are built in the toolchain, and merge their *.mk packages in the clone | ||
simgear.mk | Pending | cmake | provide mxe build scripts for simgear | FlyHigh -saiarcot895 | |
openscenegraph.mk support (shared library) | Done | cmake | improve/fix up OpenSceneGraph 3.x support (i.e. shared,non-static, builds using plugins) | Hamzaalloush & FlyHigh | |
osg examples/demos | Pending | cmake | ensure that all OSG examples build/link properly via -DBUILD_OSG_EXAMPLES=ON and -DBUILD_OSG_APPLICATIONS=ON | ||
osg-earth.mk | Not done | cmake | add dedicated osgearth.mk module for mxe (ensure that the examples are working properly) also see gdal issue discussed at [3] |
Hamzaalloush | |
flightgear.mk | Not done | cmake | provide mxe build script for flightgear | FlyHigh -saiarcot895 | |
breakpad.mk | Not done | autotools | provide mxe build script for breakpad Windows integration instructions at [4] |
Hooray & Hamzaalloush | |
sigar.mk | Not done | cmake | provide mxe build script for sigar -System Information Gatherer And Reporter (cmake based, for better startup/run-time diagnostics on CPU/RAM utilization) | Hooray | Not done |
Makefile SVN support | Not done | make | tailor the MXE Makefile to resolve the commit suffix in file names of SVN snapshot's. specific to SG/FG by using ${PKG} conditionals | Hamzaalloush | |
terragear.mk | Not done | cmake | build static monolithic TerraGear (compiles but segfaults) | Hamzaalloush |
Goals
The FlightGear forum has a subforum related to: FlightGear/osgEarth |
We want to allow Linux-based contributors to easily provide customized FlightGear binaries to Windows end users by cross-compiling FlightGear and all its dependencies (OpenSceneGraph, PLIB, OpenAL, SimGear etc), including support for the new osgEarth mode, developed by poweroftwo.
For the sake of simplicity, we are hoping to provide a toolchain that is compatible with common *nix tools like ccache/distcc to help speed up compilation (especially on multi-core platforms), the focus of the underlying mxe-based tool chain will be building OpenSceneGraph 3.xx based applications like FlightGear and osgEarth. To keep mxe installation straightforward, we may provide deb/ppa packages (possibly using the OpenSuse Build Service) or even set up a VirtualBox appliance with mxe.osg pre-installed and configured for building OSG applications (including SG/FG).
In addition, one challenge frequently encountered on the FlightGear forums is that RCs (release candidates) usually get very little, if any, thorough testing by end users and that Windows-based end-users form the largest share of our users, but most of them are unable to provide action-able bug reports, e.g. due to being unable to provide backtraces or running/using diagnostic tools like gdb, valgrind, google perftools etc.
Given the huge number of Windows based end-users, cross-compiled Windows binaries would ideally provide integrated diagnostics to deal with segfaults, memory leaks and to help with profiling, so that better bug reports can be provided by end-users, without them having to be developers, and without having to build FG from source.
This is also an issue identified by other developers (e.g. TerraGear). And it was one of the original reasons for integrating support for CrashRpt.
Given the focus on creating binaries specifically for Windows end-users, we are also investigating options for patching FlightGear to provide better diagnostic tools if necessary, especially invovling Google BreakPad for providing backtraces:
Is there somewhere an option to get a stacktrace when FG crashes?
|
a number of users have asked for such a feature, I have added the idea to our "Lessons learned" section in the wiki for 2.10.0: Release_Plan#2.10
|
BreakPad would be useful in getting higher quality crash reports
— zakalawe (Sat Oct 19). Re: Loading forever: "loading navigation data".
(powered by Instant-Cquotes) |
regarding backtraces/stacktraces, these are obviously difficult to provide for people who are not developers - which is why we talked about adding a corresponding feature to FG by linking in a "backtrace library" like BreakPad: http://www.flightgear.org/forums/viewto ... 42#p176669
|
If we could teach the build server to build fgfs binaries with Google BreakPad support, it should be much easier for Windows-based users to provide the required info without having to build from source. I don't have a Windows system here, but I can help with the Linux-integration.
|
we should probably consider adding a simple strack trace signal handler via backtrace() on *nix platforms (i.e. Mac and Linux), or just by linking in libSegFault.a And we already have optional Google PerfTools support, so we could just as well support Google BreakPad, too - which would give us this functionality for all supported FG platforms (used by Mozilla, Chrome etc): http://code.google.com/p/google-breakpa ... thBreakpad |
I noticed the open source crash reporting software Breakpad being worked on by Mozilla/Google. I am wondering if this is something could be used to aid FlightGear development.
|
What caught my attention is that it could make it easier to report and see crashes. There is a Socorro web server software connected to breakpad development.
For instance, if somone releases a new model, all the errors people have with it could be reported to the server, then they could go and look see how stable it is. Then it would be easier to see if it is a problem with FG, or the new model. So a model developer could log on and see just the crashes that happen with the new aircraft (or a new FDM, etc.). Here is some more about breakpad; down at the bottom it show the thing for looking at crash reports.<br/ http://kb.mozillazine.org/Breakpad |
Background
anyone who cares about [..] free-as-in-speech is invited and encouraged to work on mingw support, which used to work and James suspects is not so hard to get working again. But he asked several times in the last years and no-one ever offered to help with MinGW, so it seems is a small niche of people [2]
Linux/Unix users are generally more accustomed to building software from source - on Unix-based platforms it isn't rare even for non-developers to regularly configure/compile and install software - whereas it is much less common on Windows, which is why you need to install a bunch of things to even end up with a working build environment, whereas a Unix-based system will often have everything pre-installed. In addition, FlightGear is a complex piece of software, especially in terms of build-time/run-time dependencies - so people entirely new to the whole process of building software from source are likely to find this pretty frustrating. Personally, I also find setting up a build environment on Linux much easier than doing the same on Windows, despite being pretty familiar with the required workflows - but that doesn't have to do much with FG - the superbuild should help automate most of the required steps these days. Then again, like I said previously, people struggling with even just building stock FG from source, will definitely not appreciate having to deal with git and other command line tools to build a customized FG versions, such as the osgEarth branch. — Hooray (Mon Apr 06). Re: Help me! Install osgEarth feature on Win7 64b with FG gi.
(powered by Instant-Cquotes) |
most people on Windows are unlikely to even install a compiler/build environment at all. And those few who do, can still make up their own minds about what tool chain to use. — Hooray (Thu Apr 09). Re: Help me! Install osgEarth feature on Win7 64b with FG gi.
(powered by Instant-Cquotes) |
I agree completely, introducing cross-compiling support could be a good idea.
— elgaton (Thu Apr 09). Re: Help me! Install osgEarth feature on Win7 64b with FG gi.
(powered by Instant-Cquotes) |
Testing & Development
See Howto:Cross platform development for the main article about this subject. |
We may benefit from getting access to the Suse build service (or the gcc compile farm) for testing/running and developing the mxe specific parts.
OpenSceneGraph
should build & test shipped demos/examples (osgviewer) to ensure that integration works reliably
OsgEarth
should build & test shipped demos/examples to ensure that integration works reliably
SimGear
should build & test SimGear unit tests to ensure that integration works reliably
FlightGear
should build & test flightgear end-result(i.e make flight) and check whether we have any performance deficiencies.
Compiled binaries status
This is a list of binaries compiled and tested. (usually, but not always have dedicated *.mk modules for mxe)
Note All main dependencies (osg,osgearth, simgear, flightgear) will by default be built using -DCMAKE_BUILD_TYPE=DEBUG to ensure that we can easily troubleshoot problems, once all unit tests (demos/examples) of each package build/link and work correctly, the build type for the corresponding package will be promoted to RelWithDbg. |
Binary | Status | Description |
---|---|---|
fgjs | working (build/link & run-time) | "Joystick" on my laptop detected, but haven't checked the configuration process. |
fgviewer | working | |
fgfs | run-time error/segfault | crash information |
terragear | run-time error/segfault | still working on getting helpful backtrace, +sent msg to psadro_gm for questions on patches applied[5] |
for starters, will be using utilities (/utils, e.g. fgviewer) and the minimal startup profile as detailed below:
Note The following FlightGear startup profile assumes that you have a $FG_ROOT environment variable set up, or that you are explicitly setting fg-root using the --fg-root command line argument, this startup profile is intended to be put into your Fgfsrc file or to be used when starting FlightGear from the command line.
For FlightGear 2020.3 LTS and later versions: you can simply copy and paste the profile in Flightgear Qt launcher > Settings tab > Additional Settings . This is a minimum startup profile. After using it, you can turn up settings one by one as performance allows - and observe your performance bottlenecks. See Hardware recommendations for discussion of performance bottlenecks. The profile listed below is
|
# --ignore-autosave # uncomment this for FlightGear versions >= 2.99 --disable-terrasync --disable-splash-screen --airport=ksfo --offset-distance=4000 --offset-azimuth=90 --altitude=500 --heading=0 --model-hz=60 --disable-random-objects --prop:/sim/rendering/texture-compression=off --prop:/sim/rendering/quality-level=0 --prop:/sim/rendering/shaders/quality-level=0 --disable-ai-traffic --prop:/sim/ai/enabled=0 --aircraft=ufo --disable-sound --prop:/sim/rendering/random-vegetation=0 --prop:/sim/rendering/random-buildings=0 --disable-specular-highlight --disable-ai-models --disable-clouds --disable-clouds3d # --disable-textures --fog-fastest --visibility=5000 --disable-distance-attenuation --disable-real-weather-fetch --prop:/sim/rendering/particles=0 --prop:/sim/rendering/multi-sample-buffers=1 --prop:/sim/rendering/multi-samples=2 --prop:/sim/rendering/draw-mask/clouds=false --prop:/sim/rendering/draw-mask/aircraft=false --prop:/sim/rendering/draw-mask/models=false --prop:/sim/rendering/draw-mask/terrain=false --disable-random-vegetation --disable-random-buildings --disable-horizon-effect
Development branches
Maintainer | Feature | Architichture | Link type | clone command | binaries archive | minidump/backtraces |
---|---|---|---|---|---|---|
Hamzaalloush | Terragear | i686-w64-mingw32 | static | git clone -b master-oldgcc-terragear https://github.com/hamzaalloush/mxe-clone.git
|
TODO:terragear binaries | N/A |
Hamzaalloush | osgEarth | i686-w64-mingw32 | shared | git clone -b master-oldgcc-osgearth https://github.com/hamzaalloush/mxe-clone.git
|
TODO:osgEarth binaries | N/A |
WinDbg (debugging using Windows SDK)
- Generating PDB Symbols (cv2pdb to convert the DWARF debug info into PDB format, for use by Windows SDK)
WineDbg (debugging under WINE)
GDB under Windows
If you're familiar with using GDB, you can compile GDB to be used in Windows through MXE. Just run
make gdb
for the same target as the target of the application you're planning on debugging (i.e. x86_64-w64-mingw32.shared gdb for x86_64-w64-mingw32.shared applications). To use GDB, you can try running it under Wine, but for me, the GDB prompt didn't work correctly. Whatever I typed into the GDB prompt (run, continue, etc.) resulted in nothing happening, and I had to end GDB by issuing a killall command in Linux. (Now that I think about it, it could be that GDB is looking for a Windows newline (\r\n), when only a Linux newline is being sent instead (\n).)
Instead I recommend you run GDB in an actual Windows machine. To do so, from Windows Explorer, you can Shift+Right Click and then select "Open new command prompt" (or some working to that effect). Then, you can run gdb.exe name-of-program.exe. All features of Linux GDB seem to work except for interrupting a program through Control-C.
MXE
What is MXE
MXE is essentially a set of useful tools and a Makefile, that provides a compact, command-line driven environment for which to cross-compile Windows binaries on Unix-like platforms.
MXE's Makefile
the Makefile provides a set of Unix portable target-rules for the native GNU make utility.
for the full set of targets that can be passed as arguments to the GNU make utility, visit: http://mxe.cc/#usage
for example, a simple:
$ cd mxe/
$ make
by use of native tools such as the GNU Make Standard Library functions and simple substitution, the Makefile parses through a list of package names, that are contained within an index.html file, and stores them into a white-space separated string.
MXE's Makefile, Line:47
PKGS := $(call set_create,\
$(shell $(SED) -n 's/^.* class="package">\([^<]*\)<.*$$/\1/p' '$(TOP_DIR)/index.html'))
packages are contained in index.html as html table elements, the name of the package is the value of html subtype "package":
<tr>
<td class="package">simgear</td>
<td class="website"><a href="https://sourceforge.net/projects/flightgear/">SimGear - Simulator Construction Tools</a></td>
</tr>
<tr>
<td class="package">fgfs</td>
<td class="website"><a href="https://sourceforge.net/projects/flightgear/">FlightGear Flight Simulator</a></td>
</tr>
MXE's Makefile build process
MXE's Makefile, does not build software by itself. or rather, it does not generate configuration for software.
For example, if you were to pass the name of a package to be cross-compiled to the GNU make utility in MXE, such as:
$ make fgfs
a file in the src/ directory will be invoked that matches the name of the package followed by a suffix of ".mk", this ".mk" file does the necessary configuration and Makefile generation of software.
*.mk file template
Work in progress This article or section will be worked on in the upcoming hours or days. See history for the latest developments. |
Note This is a CMake-based template (e.g. for adding support for OpenSceneGraph, osgEarth, SimGear and FlightGear would look like this (with configuration options obviously being specific to the corresponding package) - for autotools, refer to [6] or any other autoconf based packages |
# This file is part of MXE: http://mxe.cc
# This file specifies how to build: FOO http://www.foo.org
# See index.html for further information.
PKG := foo
$(PKG)_IGNORE :=
$(PKG)_VERSION := 9000
# to compute the checksum use: openssl sha256 tarball.tar.gz
$(PKG)_CHECKSUM := 5c666531f7d487075fd692d89f1e05036306192a
$(PKG)_SUBDIR := foo-$($(PKG)_VERSION)
$(PKG)_FILE := foo-$($(PKG)_VERSION).tar.gz
$(PKG)_URL := http://www.foo.org/downloads/developer_releases/$($(PKG)_FILE)
$(PKG)_DEPS := gcc bar baz
define $(PKG)_UPDATE
echo 'TODO: write update script for $(PKG).' >&2;
echo $($(PKG)_VERSION)
endef
define $(PKG)_BUILD
mkdir '$(1).build'
cd '$(1).build' && cmake '$(1)' \
-DCMAKE_TOOLCHAIN_FILE='$(CMAKE_TOOLCHAIN_FILE)' \
-DENABLE_BAR=ON \
-DENABLE_BAZ=OFF \
# this is for static builds:
$(if $(BUILD_STATIC), \
-DSTATIC_FLAGS=1 , \
-DELSE_SHARED_STUFF=1 )
$(MAKE) -C '$(1).build' -j '$(JOBS)' install VERBOSE=1
endef
See [Creating mxe packages] for the main article about this subject. |
Applying Patches
MXE patches are written in the git-format-patch style, there is a useful tool for automatic patch generation to this style:
cd mxe/
./tools/patch-tool-mxe init fgfs # this will download, extract and initialize package as a git repository into the mxe/gits directory.
cd gits/fgfs-version
# make changes here
git commit -a # commit your changes and descibe them
../tools/patch-tool-mxe export fgfs 1-patchname
this will automatically write your patches in git format, and move them to the /src directory, so they become src/fgfs-1-patchname, and are applied before compilation.
Further reading
- Compiling Mupen64Plus from source code under Linux for Windows
- Building native Windows libs on Linux
- mxe and dynamic linking using the MXE_TARGETS environment variable
- MXE: cross-compile windows binaries on ubuntu
Project inspiration
Note In its current form, this section/article is largely based on quotes collected from various related discussions/channels (devel list, forum etc) using the Instant-Cquotes script. Wiki users and other contributors are encouraged to help rewrite/edit contents accordingly to help get rid of unnecessary quoting (i.e. while the wiki is not intended to be a collection of quotes, quotes are sometimes the best/easiest way to bootstrap new articles, while also providing a good way to link back to related discussions in the archives).
While rewriting usually only entails changing first person speech to 3rd person. However, please try to retain references/links to the original discussion whenever possible. |
Your best would then be, mxe: http://mxe.cc/ It's a massive compiler suite for cross-compiling Windows stuff on Linux - and comes with a ton of dependencies already. — Hooray (Wed Apr 08). Re: Help me! Install osgEarth feature on Win7 64b with FG gi.
(powered by Instant-Cquotes) |
mxe is based on mingw, and comes with all libraries required for cross-compilation included, including even OSG 3.x
— Hooray (Fri Apr 17). Re: Help me! Install osgEarth feature on Win7 64b with FG gi.
(powered by Instant-Cquotes) |
As of 10/2014, the mxe project also contains updated support for building OSG based applications using OSG 3.2.1 for 64 bit Windows, as per: https://github.com/mxe/mxe/commit/c7deb ... 1486926850
— Hooray (Wed Apr 08). Re: Help me! Install osgEarth feature on Win7 64b with FG gi.
(powered by Instant-Cquotes) |
plib is already supported in master (see /src/plib.mk)
— Hooray (Sat Apr 18). Re: Help me! Install osgEarth feature on Win7 64b with FG gi.
(powered by Instant-Cquotes) |
Contributing
For now, please see:
- Requirements: http://mxe.cc/#requirements
- Getting started: http://mxe.cc/#tutorial
- Getting mxe: http://mxe.cc/#download
- Building mxe: http://mxe.cc/#usage
- Creating packages: http://mxe.cc/#creating-packages
Regarding building in general, there is now a MXE_TMP variable that lets you configure where builds occur. This means that if you have sufficient RAM, then you may be able to use /dev/shm for the builds and get rid of the I/O overhead. Specifying this in MXE_TMP should be sufficient.
Regarding ccache, there isn't any ccache setup available in MXE. If this can be used without having to divert the actual compiler location or anything (just like "ccache x86_64-w64-mingw32.shared-gcc temp.c"), then this might be easy to do.
Before building mxe, you should consider installing ccache first, which also requires adapting the pkgconf.mk file in mxe:
sudo apt-get install ccache
Next, open src/pkgconf.mk and add the ccache executable in front of the compiler executable (this will only affect mxe-conf.cmake, so it will only benefit cmake-based projects in its current form).
diff --git a/src/pkgconf.mk b/src/pkgconf.mk
index 9a23619..c1e30e4 100644
--- a/src/pkgconf.mk
+++ b/src/pkgconf.mk
@@ -52,9 +52,9 @@ define $(PKG)_BUILD_COMMON
echo 'set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)'; \
echo 'set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)'; \
echo 'set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)'; \
- echo 'set(CMAKE_C_COMPILER $(PREFIX)/bin/$(TARGET)-gcc)'; \
- echo 'set(CMAKE_CXX_COMPILER $(PREFIX)/bin/$(TARGET)-g++)'; \
- echo 'set(CMAKE_Fortran_COMPILER $(PREFIX)/bin/$(TARGET)-gfortran)'; \
+ echo 'set(CMAKE_C_COMPILER ccache $(PREFIX)/bin/$(TARGET)-gcc)'; \
+ echo 'set(CMAKE_CXX_COMPILER ccache $(PREFIX)/bin/$(TARGET)-g++)'; \
+ echo 'set(CMAKE_Fortran_COMPILER ccache $(PREFIX)/bin/$(TARGET)-gfortran)'; \
echo 'set(CMAKE_RC_COMPILER $(PREFIX)/bin/$(TARGET)-windres)'; \
echo 'set(CMAKE_MODULE_PATH "$(PWD)/src/cmake" $${CMAKE_MODULE_PATH}) # For mxe FindPackage scripts'; \
echo 'set(CMAKE_INSTALL_PREFIX $(PREFIX)/$(TARGET) CACHE PATH "Installation Prefix")'; \
You should see pkgconf being rebuilt when running make again. Beginning with cmake 2.8, you can also directly add this at the top of mxe-conf.cmake:
# http://stackoverflow.com/a/24305849
SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
diff --git a/src/pkgconf.mk b/src/pkgconf.mk
index 9a23619..8de707b 100644
--- a/src/pkgconf.mk
+++ b/src/pkgconf.mk
@@ -44,6 +44,9 @@ define $(PKG)_BUILD_COMMON
# individual packages (e.g. hdf5) should remove/append their own entries
[ -d '$(dir $(CMAKE_TOOLCHAIN_FILE))' ] || mkdir -p '$(dir $(CMAKE_TOOLCHAIN_FILE))'
(echo 'set(CMAKE_SYSTEM_NAME Windows)'; \
+ echo '# http://stackoverflow.com/a/24305849'; \
+ echo 'SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)'; \
+ echo 'SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)'; \
echo 'set(MSYS 1)'; \
echo 'set(BUILD_SHARED_LIBS $(if $(BUILD_SHARED),ON,OFF))'; \
echo 'set(LIBTYPE $(if $(BUILD_SHARED),SHARED,STATIC))'; \
To see if you were successful adding ccache, check the generated toolchain file:
cat usr/x86_64-w64-mingw32.shared/share/cmake/mxe-conf.cmake
it should look like this:
set(CMAKE_SYSTEM_NAME Windows)
set(MSYS 1)
set(BUILD_SHARED_LIBS ON)
set(LIBTYPE SHARED)
set(CMAKE_BUILD_TYPE Release)
set(CMAKE_FIND_ROOT_PATH /home/hooray/mxe/usr/x86_64-w64-mingw32.shared)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_C_COMPILER ccache /home/hooray/mxe/usr/bin/x86_64-w64-mingw32.shared-gcc)
set(CMAKE_CXX_COMPILER ccache /home/hooray/mxe/usr/bin/x86_64-w64-mingw32.shared-g++)
set(CMAKE_Fortran_COMPILER ccache /home/hooray/mxe/usr/bin/x86_64-w64-mingw32.shared-gfortran)
set(CMAKE_RC_COMPILER /home/hooray/mxe/usr/bin/x86_64-w64-mingw32.shared-windres)
set(CMAKE_MODULE_PATH "/home/hooray/mxe/src/cmake" ${CMAKE_MODULE_PATH}) # For mxe FindPackage scripts
set(CMAKE_INSTALL_PREFIX /home/hooray/mxe/usr/x86_64-w64-mingw32.shared CACHE PATH "Installation Prefix")
set(CMAKE_BUILD_TYPE Release CACHE STRING "Debug|Release|RelWithDebInfo|MinSizeRel")
set(CMAKE_CROSS_COMPILING ON) # Workaround for http://www.cmake.org/Bug/view.php?id=14075
set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> -O coff <FLAGS> <DEFINES> -o <OBJECT> <SOURCE>") # Workaround for buggy windres rules
set(PKG_CONFIG_EXECUTABLE /home/hooray/mxe/usr/bin/x86_64-w64-mingw32.shared-pkg-config)
to review ccache statistics, use (default cache is 1gb, so better raise this to ~3-5gb) :
$ ccache -s
Note At least on Ubuntu, openscenegraph.mk needs to be edited to add libgomp as a dependency for now |
$ cd mxe
$ make openscenegraph --jobs=2 JOBS=2
Dependencies should be resolved automatically, so that building osgearth should implicitly build osg first:
$ cd mxe
$ make osgearth --jobs=2 JOBS=2
Status
Note as of now, mxe-clone is able to cross-compile OSG 3.2.1 with shared library support on Ubuntu 14.04.2 distributions. so i'm raising the roadmap objective to 70% until i get the OSG examples and applications working. -- Hamzaalloush (talk) 16:06, 27 May 2015 (EDT) |
$ find . -iname "*osg*" ./i686-w64-mingw32.shared/bin/libosgText.dll ./i686-w64-mingw32.shared/bin/libosgTerrain.dll ./i686-w64-mingw32.shared/bin/libosgVolume.dll ./i686-w64-mingw32.shared/bin/libosgGA.dll ./i686-w64-mingw32.shared/bin/libosgDB.dll ./i686-w64-mingw32.shared/bin/libosgParticle.dll ./i686-w64-mingw32.shared/bin/libosg.dll ./i686-w64-mingw32.shared/bin/libosgShadow.dll ./i686-w64-mingw32.shared/bin/libosgPresentation.dll ./i686-w64-mingw32.shared/bin/libosgManipulator.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1 ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_bvh.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_rot.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_exr.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_lwo.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_osc.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_deprecated_osgfx.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_tga.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_osgtgz.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_dxf.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_pic.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_ive.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_deprecated_osg.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_serializers_osgmanipulator.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_p3d.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_deprecated_osganimation.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_deprecated_osgtext.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_jpeg.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_jp2.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_ogr.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_ktx.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_txp.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_osgterrain.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_qfont.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_serializers_osgparticle.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_serializers_osganimation.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_serializers_osgga.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_ffmpeg.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_png.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_gta.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_logo.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_dot.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_trk.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_sdl.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_pnm.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_stl.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_serializers_osgtext.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_vtf.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_obj.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_pvr.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_serializers_osgfx.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_bsp.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_rgb.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_openflight.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_txf.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_serializers_osg.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_hdr.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_bmp.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_dds.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_dw.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_lws.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_dicom.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_deprecated_osgwidget.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_gz.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_osga.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_md2.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_osgshadow.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_tiff.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_3ds.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_deprecated_osgsim.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_3dc.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_gif.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_deprecated_osgshadow.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_serializers_osgterrain.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_curl.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_serializers_osgviewer.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_serializers_osgshadow.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_x.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_deprecated_osgviewer.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_mdl.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_serializers_osgvolume.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_normals.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_pov.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_serializers_osgsim.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_zip.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_shp.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_pdf.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_trans.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_tgz.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_ac.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_ply.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_gdal.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_deprecated_osgterrain.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_cfg.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_deprecated_osgparticle.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_osg.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_deprecated_osgvolume.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_scale.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_glsl.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_osgviewer.dll ./i686-w64-mingw32.shared/bin/osgPlugins-3.2.1/mingw_osgdb_revisions.dll ./i686-w64-mingw32.shared/bin/libosgQt.dll ./i686-w64-mingw32.shared/bin/libosgAnimation.dll ./i686-w64-mingw32.shared/bin/libosgSim.dll ./i686-w64-mingw32.shared/bin/libosgUtil.dll ./i686-w64-mingw32.shared/bin/libosgViewer.dll ./i686-w64-mingw32.shared/bin/libosgWidget.dll ./i686-w64-mingw32.shared/bin/libosgFX.dll ./i686-w64-mingw32.shared/lib/libosgViewer.dll.a ./i686-w64-mingw32.shared/lib/libosgPresentation.dll.a ./i686-w64-mingw32.shared/lib/libosgTerrain.dll.a ./i686-w64-mingw32.shared/lib/libosgManipulator.dll.a ./i686-w64-mingw32.shared/lib/libosg.dll.a ./i686-w64-mingw32.shared/lib/libosgAnimation.dll.a ./i686-w64-mingw32.shared/lib/libosgQt.dll.a ./i686-w64-mingw32.shared/lib/libosgWidget.dll.a ./i686-w64-mingw32.shared/lib/libosgParticle.dll.a ./i686-w64-mingw32.shared/lib/libosgText.dll.a ./i686-w64-mingw32.shared/lib/libosgDB.dll.a ./i686-w64-mingw32.shared/lib/libosgSim.dll.a ./i686-w64-mingw32.shared/lib/libosgVolume.dll.a ./i686-w64-mingw32.shared/lib/libosgUtil.dll.a ./i686-w64-mingw32.shared/lib/libosgFX.dll.a ./i686-w64-mingw32.shared/lib/libosgGA.dll.a ./i686-w64-mingw32.shared/lib/pkgconfig/openscenegraph-osgDB.pc ./i686-w64-mingw32.shared/lib/pkgconfig/openscenegraph-osgViewer.pc ./i686-w64-mingw32.shared/lib/pkgconfig/openscenegraph-osgGA.pc ./i686-w64-mingw32.shared/lib/pkgconfig/openscenegraph-osgShadow.pc ./i686-w64-mingw32.shared/lib/pkgconfig/openscenegraph-osgSim.pc ./i686-w64-mingw32.shared/lib/pkgconfig/openscenegraph-osg.pc ./i686-w64-mingw32.shared/lib/pkgconfig/openscenegraph-osgAnimation.pc ./i686-w64-mingw32.shared/lib/pkgconfig/openscenegraph-osgTerrain.pc ./i686-w64-mingw32.shared/lib/pkgconfig/openscenegraph-osgUtil.pc ./i686-w64-mingw32.shared/lib/pkgconfig/openscenegraph-osgWidget.pc ./i686-w64-mingw32.shared/lib/pkgconfig/openscenegraph-osgVolume.pc ./i686-w64-mingw32.shared/lib/pkgconfig/openscenegraph-osgText.pc ./i686-w64-mingw32.shared/lib/pkgconfig/openscenegraph-osgQt.pc ./i686-w64-mingw32.shared/lib/pkgconfig/openscenegraph-osgParticle.pc ./i686-w64-mingw32.shared/lib/pkgconfig/openscenegraph-osgManipulator.pc ./i686-w64-mingw32.shared/lib/pkgconfig/openscenegraph-osgFX.pc ./i686-w64-mingw32.shared/lib/libosgShadow.dll.a ./i686-w64-mingw32.shared/include/osgShadow ./i686-w64-mingw32.shared/include/osgViewer ./i686-w64-mingw32.shared/include/osgWidget ./i686-w64-mingw32.shared/include/osgVolume ./i686-w64-mingw32.shared/include/osgSim ./i686-w64-mingw32.shared/include/osgParticle ./i686-w64-mingw32.shared/include/osgGA ./i686-w64-mingw32.shared/include/osgUtil ./i686-w64-mingw32.shared/include/osgManipulator ./i686-w64-mingw32.shared/include/osgText ./i686-w64-mingw32.shared/include/osgFX ./i686-w64-mingw32.shared/include/osg ./i686-w64-mingw32.shared/include/osgAnimation ./i686-w64-mingw32.shared/include/osgDB ./i686-w64-mingw32.shared/include/osgDB/DotOsgWrapper ./i686-w64-mingw32.shared/include/osgTerrain ./i686-w64-mingw32.shared/include/osgPresentation ./i686-w64-mingw32.shared/include/osgQt
Thursday, May 28, 2015 : OSG Applications/Examples built and tested working.
Note examples and the osgviewer in action recorded, was using Wine at the time, but i tried it on Windows dual booted to same machine and it worked! -- Hamzaalloush (talk) 13:25, 28 May 2015 (EDT) |
Note Building full (non-headless) Simgear now works. I've bumped up the progress to 50%, and once Flightgear is built, I'll set it to 100%. -- Flyhigh (talk) 14:16, 29 May 2015 (EDT) |
$ find . -iname "*simgear*"
./i686-w64-mingw32.shared/lib/libSimGearCore.dll.a
./i686-w64-mingw32.shared/lib/libSimGearScene.dll.a
./i686-w64-mingw32.shared/installed/simgear
./i686-w64-mingw32.shared/include/simgear
./i686-w64-mingw32.shared/include/simgear/simgear_config.h
./i686-w64-mingw32.shared/share/SimGearCore
./i686-w64-mingw32.shared/share/SimGearCore/SimGearCoreConfig-release.cmake
./i686-w64-mingw32.shared/share/SimGearCore/SimGearCoreConfig.cmake
Sunday, May 31, 2015 : OSG-Earth built and examples tested.
optirun ./osgearth_version.exe --caps
osgEarth Library 2.6.0 ()
fixme:win:EnumDisplayDevicesW ((null),0,0x61f088,0x00000000), stub!
fixme:win:EnumDisplayDevicesW ((null),1,0x61f088,0x00000000), stub!
[osgEarth] [Capabilities] Detected hardware capabilities:
[osgEarth] [Capabilities] Vendor = NVIDIA Corporation
[osgEarth] [Capabilities] Renderer = GeForce GT 540M/PCIe/SSE2
[osgEarth] [Capabilities] Version = 4.4.0 NVIDIA 331.113
[osgEarth] [Capabilities] Max FFP texture units = 4
[osgEarth] [Capabilities] Max GPU texture units = 32
[osgEarth] [Capabilities] Max GPU texture coord indices = 8
[osgEarth] [Capabilities] Max GPU attributes = 16
[osgEarth] [Capabilities] Depth buffer bits = 24
[osgEarth] [Capabilities] Max texture size = 16384
[osgEarth] [Capabilities] Max lights = 8
[osgEarth] [Capabilities] GLSL = yes
[osgEarth] [Capabilities] GLSL Version = 440
[osgEarth] [Capabilities] Texture arrays = yes
[osgEarth] [Capabilities] 3D textures = yes
[osgEarth] [Capabilities] Multitexturing = yes
[osgEarth] [Capabilities] Stencil wrapping = yes
[osgEarth] [Capabilities] 2-sided stencils = yes
[osgEarth] [Capabilities] depth-packed stencil = yes
[osgEarth] [Capabilities] occlusion query = yes
[osgEarth] [Capabilities] draw instanced = yes
[osgEarth] [Capabilities] max uniform block size = 65536
[osgEarth] [Capabilities] uniform buffer objects = yes
[osgEarth] [Capabilities] NPOT textures = yes
[osgEarth] [Capabilities] Compression = ARB S3 RG
Note I've uploaded the fgfs.log file, the command I ran, and the wine memory dump to a Github Gist. As for fgviewer, after including the path to the data directory, fgviewer works correctly. -- Flyhigh (talk) 11:38, 9 June 2015 (EDT) |
Issues
Note This section contains sub-sections with open issues - which can be removed once they're solved/committed |
OpenSceneGraph
- For development purposes, it would make sense to focus on debug builds for now, and only begin supporting optimized builds when everything else is working correctly - or at least use RelWithDbg, as per Building_using_CMake#Debug_Builds.
- For building OSG applications out-of-source-trees, it would make sense to introduce -DCMAKE_INSTALL_PREFIX, so that FindOpenSceneGraph.cmake can easily locate pre-installed OSG versions (as per our docs, and the existing cmake machinery in place in SG/FG), which also means that OSG would not need to be installed system-wide, while also supporting different versions at the same time.
- We keep seeing people asking for ways to have an entirely self-contained FlightGear setup that doesn't require any installation (e.g. either all files residing in a single folder or the whole binary linked statically) - we used to support this a few years go, and we even had people using FG on a USB drive, or on boot-able drives - and we commonly suggest that people first try running FG on computers before purchasing any new hardware - so it would make sense to look at what's needed to still support static builds using the mxe tool chain. This may involve making the static/dynamic configuration options configurable in the corresponding *.mk files.
TerraGear
- As request for custom scenery generation arises among end-users/data developers, we see the need for a cross-platform ready set of tools handy. since then the effort started for providing Terragear on Windows(initially by Hamzaalloush). It was expected that Terragear, as a scenery generation tool, that was made to deployed on a Linux server, would have portability problems. this effort would at least pinpoint issues with portability for the underlying structure of FlightGear.
- The Terragear tools for scenery generation would be the ideal environment on which to bring "Small, stable, incremental changes which are preferable to larger monolithic changes for ease of review", adhering to the FG roadmap for development, since we are mainly dealing with the basic building blocks for Flightgear, where a Simgear based environment is the only prerequisite. the SG abstraction layer for threading, as well as for maths are good points to investigate in this setup(as it is used throughly), as well as providing small patches upstream towards getting Simgear, Mingw64 compatible as the end-goal.
- The relatively smaller number of static symbols collected from such an effort, is a good basis for investigating debugging facilities on cross-compiled binaries.
- ↑ https://github.com/saiarcot895.atom
- ↑ James Turner (Jun 2nd, 2016). [Flightgear-devel] VisualStudio versions / support .