The change to use an extern version variable in 24d83a12 produces a
linker error with Visual Studio due to the `version.c` source file being
compiled as C instead of C++.
Rename:
`version.c` -> `version.cpp`
`version_c.h` -> `version_cpp.h`
And update all references accordingly.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Make a `version.c` with `const char*` variables to store the version
strings used by other files, to make recompiles slightly faster when the
git state changes.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Visual Studio 2017 only allows `/std:c++14` and higher, so remove the
`/std:c++11` option, we'll take the default of C++14 standard.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
We protect all code relevant to disabling this property with either
`BKPT_SUPPORT` or `NO_DEBUGGER`. This is mostly debugging options or
prints scattered around the code.
We also adjust cmake to ignore the specific files surround it, but
allowing the rest of the GUI to work.
- Fix#431.
We check if the compiler has asan support when the option is enabled.
If it does not, then we stop compiling with the proper message.
To test this, we use `gcc (GCC) 4.4.7` (no asan support) and
`gcc (GCC) 9.1.0` (asan is supported). Call cmake like this:
`cmake .. -DCMAKE_BUILD_TYPE=Debug -DENABLE_ASAN=On` and
`CXX=g++-4.4 cmake .. -DCMAKE_BUILD_TYPE=Debug -DENABLE_ASAN=On`
we then check that it fails for the older version and it works for
the newer gcc, like expected.
- Fix#409.
Check for the specific `ffmpeg` lib versions in `ffmpeg` `4.0.4` "Wu",
Do not pass `-DENABLE_FFMPEG=OFF` to the xenial travis job, as this is
detected automatically now.
Add a note about the required ffmpeg version to `README.md`.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Fix the cmake ffmpeg detection and make it not print the detection
messages twice.
Add `-D__STDC_FORMAT_MACROS` to compiler flags, some versions of ffmpeg
require this.
Redefine `static_assert(x)` to the `static_assert(x, msg)` form in
`xbrz.cpp`. This is a C++17 feature and some versions of gcc wrongly set
`__cpp_static_assert` even though they do not support it.
Also we want to stick to C++11 for the time being, until there is
consensus to support a newer a version.
For that reason, change the MSVC flag `/std:c++latest` to `/std:c++11`
as well.
Remove `-DENABLE_OPENAL=ON` and `-DENABLE_LINK=ON` from travis config,
as these are now automatic.
In `installdeps` remove the hacks for supporting the `https://` apt url
for mxe and use an `http://` url instead. This works perfectly on Ubuntu
14 (trusty).
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Use `/std:c++latest` for Visual Studio because the XBRZ 1.7 code
requires at least C++17.
Replace the use of `bool++` in `GBALink.cpp` which is now apparently an
error with `bool = !bool` to flip the value.
Use `/W4` to enable a good amount of warnings in Debug mode, and `/W0`
to disable warnings entirely in release modes.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Get files from here `https://sourceforge.net/projects/xbrz/files/xBRZ/`.
Then, update the src to handle pitch params. For our case, the pitch
is necessary because we deal with borders (top and right) of our source
image. Normally, we would want to scale without it, and therefore we
need to adjust the pointers to skip the borders.
If we have a `width + 1 pixel border` per line, the we need to scale
a image with `width` line size, but advancing the pointer for each new
line processed including the border on the count.
Also, since our output pointer also allocates for the border, we need
to adjust the output moving pointer for each line in a custom way.
(output border in this case)
- Fix#164.
In cmake detect if the dependencies for link (sfml), recording (ffmpeg)
and openal are installed and default the features to `ON` if they are,
otherwise to `OFF`.
This simplifies the cmake usage.
Update the default column in the `README.md` table to `AUTO` as well.
Remove the cmake options from `installdeps` instructions, since they are
auto-detected.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
- default ENABLE_NLS to ON except for vcpkg, broken in e2f06210
- update zlib URL
- use openssl 1.1.1c instead of 1.0.2p, parallel build works now!
- add osslsigncode for mingw to codesign windows binaries, and
automatically sign in `build_project()`
- add curl (for osslsigncode, which needs libcurl)
- use current master for wxwidgets instead of 3.1.2
- make the `translations.zip` in `build_project()` for windows
- on mac, unlock the login keychain before codesigning (this is
necessary if using e.g. ssh.)
- do not fail if the user does not have codesigning or gpg keys
- fix wxwidgets configure options on mac (need to append to
`DIST_CONFIGURE_OVERRIDES` instead of `DIST_ARGS`.)
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
We create a namespace to deal with most of our recording solution.
Besides that, we also add some functions to remove the need of
including libavutil headers on other part of the code. This is meant to
isolate most of recording solution components on the proper files.
We will start with a limited number of codecs supported; slowly we
should add them as they are tested (the previous one did not work for
most codecs listed).
This should support `ffmpeg 4.1` and further, including removing
all compilation warnings related to versions discrepancy.
Add option to remove all configuration related to checking for updates
online. Although it is not implemented at the moment, these options
appeared on our menu `Options` > `General ...`.
- Fix need of patch on #140.
Replace the vcpkg code with a newer and better version. In this version
the `vcpkg` directory is on the same level as the source directory, so
that IntelliSense does not get confused scanning for files.
The cmake variable `VCPKG_TARGET_TRIPLET` is required to activate vcpkg
support, it must be set to e.g. `x64-windows` or `x86-windows`.
Update `CMakeSettings.json` for the new code for the GUI.
Fix a problem copying the `SDL2.dll` file to the binary directory.
Update `README.md` with commandline instructions.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Black screen reported on linux with `LEGACY` OpenGL type, set it back to
`GLVND` and only use `LEGACY` on FreeBSD.
Broken in 2fedaa63.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Make some changes to support out-of-the-box builds on FreeBSD:
- set cmake OpenGL type to `LEGACY`, the new `GLVND` type produces
unusable binaries on FreeBSD
- on FreeBSD add -I/usr/local/include to compiler flags, why this is
necessary I don't know
- look for llvm tools such as `llvm-ar` in `/usr/local/llvm-devel/bin`,
LTO works
- improve the `find_wx_util()` cmake function to handle `wx-config`
scripts named in the form e.g. `wxgtk3u-3.1-config`
- add FreeBSD support to `installdeps`
- make some minor changes to included headers based on macros such as
`__FreeBSD__` to compile on FreeBSD, including adding a `BSD.h` header
with some defines for e.g. `fseeko64`
- move the cmake X11 detection to before the wx compile tests, because
otherwise the extra compile flags for the wx tests make the X11 tests
fail
- make some minor changes to fix wx 2.8 compatibilty again, we don't
actually use 2.8 for FreeBSD but I was testing it
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Add support for RHEL/centos to installdeps. There is no SFML package.
Add some string compatibility stuff so that everything builds on wx 2.8
unicode builds.
TODO: add travis slaves for 2.8, with and without unicode
Disable the game frame spacer code on 2.8 because it does not work (the
frame does not expand.)
cmake improvements:
- set ENABLE_LTO=OFF for Debug builds by default
- set ENABLE_LINK=OFF if SFML cannot be found and continue
- use better logic for finding wx utilities wx-config and wxrc
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Closes#395Closes#297
Do some reformatting towards the more modern cmake style.
Clean up some code.
Support linking to gcc compiled wxWidgets by setting
`-D__GXX_ABI_VERSION=` appropriately for clang.
Use the new method of calling `FindwxWidgets.cmake`, the old method
causes some problems now.
Set all necessary policies in both cmake files.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
When using LTO with gcc or clang, try to compile and link something to
make sure it works, and disable it if it doesn't.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Check `if(POLICY CMP0077)` before trying to set it, because setting a
policy a version of cmake does not know about is an error.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Ninja requires `-fdiagnostics-color=always` instead of
`-fdiagnostics-color=auto` with gcc because it pipes output from the
compiler unlike regular makes.
Use `-fcolor-diagnostics` for clang, which also works correctly with
ninja to show colors.
Information for this taken from here:
https://medium.com/@alasher/colored-c-compiler-output-with-ninja-clang-gcc-10bfe7f2b949
Set all cmake policies in both the root `CMakeLists.txt` and
`src/wx/CMakeLists.txt` to silence warnings about unset policies from
cmake.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Use vcpkg to build deps when Visual Studio on Windows is detected, this
only happens on first build, but does take a while because things like
wxWidgets need to be built. Building from the developer command line is
also supported.
I considered making a pre-built tarball available, but the resulting
files are just too big for this to be practical.
Make the necessary cmake code changes for this to work and to use the
vcpkg packages, which work just like on linux or have other cmake glue
code available.
To do this, we make vcpkg a submodule, use git to checkout all
submodules, then just build and use the `vcpkg.exe`. Then we set the
CMAKE_TOOLCHAIN_FILE to the vcpkg toolchain and also include it
directly, why this is necessary I don't know, without it it doesn't work
in the IDE but does on the command line.
All of this requires no vcpkg integration with either the user or the
project. A user-wide `ENV{VCPKG_ROOT}` is also supported.
Fix the dynamic arrays in the GBA core, MSVC follows the C++ standard on
this and gcc does not.
TODO: add the necessary gcc flags to make this an error in cmake.
Use `wxArrayString` instead of `std::vector<wxString>` in
`src/wx/strutils.cpp` which is used in options parsing. This was
necessary because of a bizarre linker error with wxWidgets when using
Visual Studio:
https://trac.wxwidgets.org/ticket/10884#comment:46
In `src/wx/panel.cpp` make sure the unimplemented D3D renderer code does
not get compiled if it's actually `OFF`.
Also fix the new spacer code for the drawing panel to not combine
`wxEXPAND` with `wxALIGN_CENTER`, which is an error on wxWidgets 3.1.2,
which is what vcpkg uses. The drawing panel seems to be automatically
stretched to the max size automatically anyway.
TODO: if all of this works, we'll need an Appveyor set up for visual
studio.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Use `clang -print-prog-path=<tool>` to find the locations of llvm
toolchain utilities such as `llvm-ranlib` and set the appropriate cmake
variables to the resultant paths.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Do not add the -fPIC (position independent code) compiler flag on 32 bit
x86 architectures because that breaks inline assembly, and some included
libraries like fex require inline assembly to work.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
When using msys ccache with a mingw ninja, the compiler fails to
execute.
Don't try to detect ccache when using the Ninja generator on msys2, it
can still be specified through cmake variables.
Do not check for the mingw ccache because it is broken and I will assume
not being used.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
Test for the -fdiagnostics-color=auto compiler option supported by gcc
and probably clang, and turn it on if it's available.
This option colorizes compiler warnings/errors/etc. when output to a
terminal.
Also fix a typo above when adding the -fopenmp flag.
Older versions of mingw64 do not have the versionhelpers.h header, add
it to the dependencies submodule include/ directory and add it to
include_directories() for mingw in cmake.
In cmake on Win32, don't try to find librt or libpthread using
find_library(), and on mingw just include -lpthread.
For some reason the msys versions of librt and libpthread were being
picked up when find_library() was being used.
Make gcc -fstack-protector-strong and associated options controlled by
the cmake option ENABLE_SSP which defaults to OFF.
This option causes a segfault on startup with gcc 8.2.0.
Remove -fpermissive from the list of flags passed to gcc and clang.
Remove -fpermissive from the cxxflags from wxWidgets config as well.
When checking wxWidgets ABI compatibility version, temporarily add
-fpermissive to compiler flags on Win32 because minhook requires it.
Make mac builder use -m32 in CFLAGS etc. to produce a 32 bit binary
targetting 10.7 (Lion.) This provides the greatest backward
compatibility for older macs, and also allows for asm filters.
Fix an issue with m4 on 10.13 using a patch from macports.
Support `-pX` patch level args in DIST_PATCHES in builder.
Fix an issue with bison on 10.13 by bumping the version to 3.0.5.
Build libxslt `--without-crypto` so that it doesn't try to link the brew
libgcrypt.
Invoke cmake for dists with -DCMAKE_C_COMPILER_LAUNCHER=ccache and
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache to use ccache, and set
CMAKE_C_COMPILER and CMAKE_CXX_COMPILER to the actual compilers not
prefixed by ccache.
When checking for ccache in vbam cmake code, check that
CMAKE_CXX_COMPILER_LAUNCHER and CMAKE_C_COMPILER_LAUNCHER were not
already defined (generally on the command line.)
Remove align attributes from sections in 2xSaImmx.asm, macho format on
mac does not support this and the filter works fine without them.
In the Quartz2D renderer, pass the NSRect view.bounds through
NSRectToCGRect when calling CGContextDrawImage(), this is necessary for
the 32 bit API.
Bump openssl to 1.0.2o.
Bump libxml2 to 2.9.8.
Update URL for urw fonts, and improve the dist downloading/unpacking
code to handle URLs that do not contain the filename (for .tar.gz and
.zip as identified by `file`.)
Change post-build for harfbuzz from `rebuild_dist freetype;` to
`rebuild_dist freetype --with-harfbuzz=yes;` as it was supposed to have
been.
Build cmake itself with --parallel and --enable-ccache.
Silence errors from killed jobs due to tmp directory being gone.
Write a couple of string functions, rtrim() and gsub().
Make path_exists() handle globs with spaces in them, by escaping the
space.
Use --host and --build args to autoconf configure to "cross-compile" for
32 bits, this is necessary for some dists, and does not work for others,
remove it for dists where it does not work.
Add COMMAND_MODE=unix2003 to the build environment, this is necessary to
fix some build errors, why I have no clue, found it on stackoverflow.
Pass -Wl,-no_compact_unwind in LDFLAGS to openssl, this is necessary for
32 bits.
Force sfml to compile as 32 bit, it normally does not allow this.
Remove shared-mime-info from this build, it's not necessary for anything
and there are issues XML::Parser linked to our expat and brew perl that
need to be resolved.
Use a matrix of 4 jobs, linux (ubuntu trusty), mingw i686, mingw x86-64
and mac.
Automatically detect ccache in the cmake config and cache the
`~/.ccache` directory for faster rebuilds.
Instructions for ccache in cmake are here:
https://stackoverflow.com/a/24305849
Change build status badge in README.md to Travis.
under `tools/` add some scripts to invoke the build system to build all
deps for vbam and vbam itself:
- `tools/linux/builder`
This builds a mostly static linux binary with a few dynamic deps for
xorg and wayland. Using gtk3. This will run on just about any dist.
- `tools/osx/builder`
Builds a static mac app targetting 10.7.
- `tools/win/linux-cross-builder`
Builds a static windows binary using the mingw-w64 toolchain.
- `tools/win/msys2-builder`
Builds a static windows binary in the MSYS2 environment, this may be
suffering from a few regressions.
Change some cmake code to support the build system, refactor a few
things in it.
`git submodule update --remote --recursive` must be called with `--init`
if the submodules have never been initialized, add the flag to the cmake
code that does this. If they are already initialized, it will not cause
any harm.
Improve, refactor and clean up `tools/osx/builder` to build a relatively
full-featured ffmpeg as well. This requires lots of other dists. It's
kind of like a mini port system now. Will generalize it shortly to a
sourced library for using with both the mac and the mingw builds. Will
hopefully become a separate repo on github at some point.
Add perl dist support to the builder.
Add an `--env` flag to the builder to print the build environment
variables so that they can be read in with `eval` for debugging
purposes.
Also add the `FFMPEG_STATIC` cmake option to link static ffmpeg
libraries correctly.
Move the codesigning and zipping of the `.app` bundle to the builder
script and out of cmake, as this is something most users don't need.
Add `tools/osx/builder`, a POSIX sh script to build all dependant
libraries as static, targetted to OS X 10.7, and build the project with
them (also targetted to OS X 10.7.)
ffmpeg currently does not link, as recording functionality is currently
non-functional anyway, this will be fixed later.
MISC:
- set WORKING_DIRECTORY and ERROR_QUIET for all git commands, for the
cases when the build directory is not under the git checkout
- #include <cerrno> in ConfigManager.cpp as it uses errno
- change `build*` in `.gitignore` to `build/*` so that files starting
with "build" are not affected
If git tags are not available, set the version and revision by finding
the first version tag in `CHANGELOG.md` of the form
```
```
Where N.N.N is the number version (number of components can vary) and
the revision (as speicified by -REV) is optional.
TODO: support named revision without a version number of the form
`[REV]`.
Fix `cmake/GitTagVersion.cmake` to not throw errors when in a shallow
git clone, or any git clone that has no tags.
And when either git or git tag version info is not available, set the
version variables to the defaults, which are:
```
VERSION = '2.0.0'
REVISION = 'unknown'
VERSION_RELEASE = 0
```
To get the version, find the last tag in git tag of the form "v2.0.0" or
"2.0.0". If this is the last tag and the current commit matches the ref
of this tag, the revision will be empty.
In the case that the current commit is not tagged with a version, to get
the revision, use the short sha unless the current commit is tagged with
something that is not a version string, e.g. "feature-foo", in which
case the revision will be "feature-foo".
If the current commit is tagged as e.g. "v2.0.1-foo" or "2.0.1-foo" then
the version will be "2.0.1" and the revision will be "foo". Tags of this
form are also checked when finding the current version.
This is all done in cmake. If there is no git detected, the version will
be "2.0.0" and the revision will be "unknown".
64 bit MinGW (e.g. msys2 64 bit) produces a binary that immediately
segfaults when built with LTO.
Make ENABLE_LTO default to OFF on 64 bit MinGW (32 bit will still
default to ON.)
Use the `cmake` `ProcessorCount` module to determine the number of CPU
threads, and set the `-flto` flag for gcc to `-flto=${num_cpus}` if the
number of CPU threads is detected and is greater than `1`.
clang does not support this.
Use `git submodule update --remote --recursive` instead of `git
submodule update --init --recursive` so that the latest version of the
repo is always installed.
Run the command from cmake instead of throwing an error if the submodule
is not checked out. Only throw an error if the checkout failed or the
source tree is not a git checkout.
Don't add the `mingw-xaudio` include directory if using MSVC.
Remove the submodule check from src/wx/CMakeLists.txt, having it in the
main CMakeLists.txt is enough.
gcc lto wrapper commands such as `gcc-ar` will segfault with some
versions of gcc 7.x when called via an absolute path, see:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80717
Generalize the mechanism for compiling a small C program on the host
(currently used for bin2c for Wx resources) and use it to wrap the gcc
wrappers in a little executable that prepends their dirname to PATH and
runs them with `execvp()`.
Make LTO default to ON again, except on win32 with gcc < 7, because
those toolchains produce broken binaries with LTO enabled.
Also add `-ffat-lto-objects` to compiler flags for gcc when LTO is
enabled, this will increase the chances that the LTO build will succeed
even if there are issues with the binutils wrappers. Clang does not
support this.
In 4e665ae I hardcoded -fabi-version=2 for g++ flags, and @ArtiiP
pointed out that this is wrong, because Wx may be compiled with other
ABI versions.
Add cmake check_cxx_source_runs() tests to determine the correct ABI
version flag to use with Wx.
Use the g++ `-fabi-version=2` compiler option, as suggested by @ArtiiP
to fix problems similar to:
```
Fatal Error: Mismatch between the program and library build versions
detected.
The library used 3.0 (wchar_t,compiler with C++ ABI 1002,wx
containers,compatible with 2.8),
and your program used 3.0 (wchar_t,compiler with C++ ABI 1009,wx
containers,compatible with 2.8).
Aborted
```
Turn LTO off by default until I fix it for newer gcc/binutils, currently
with gcc7 ar segfaults linking vbamcore.
This flags breaks the build on e.g. ARM, so only use it when a PC
architecture (x86 or amd64) has been detected. Thanks to ZachBacon for
spotting this.
ConfigManager does not use any version info, but is part of libvbamcore,
so removing the `#include` makes rebuilds after git changes much much
faster.
Remove the AutoBuild.h includes from ConfigManager.cpp and SDL.cpp (the
SDL port) because the information in that file does not seem to be used
and it also includes version.h, forcing those files to rebuild
unnecessarily.
Use cmake to generate the version.h from version.h.in which is a cleaned
up version of the old version.h with the git short sha into the build
directory, and include the version.h from there.
Continue to use the GetGitRevisionDescription plugin to make the cmake
configuration state depend on the current sha of HEAD, but throw away
the results (for the time being.)
This makes rebuilds after git changes such as a commit only recompile a
couple of files instead of the whole tree.
As cmake now warns when policies are set to OLD, change the CMP0005
policy to NEW.
What this does is have cmake escape -D preprocessor definitions passed
to e.g. add_definitions() starting in cmake 2.6 . This is fine since the
minimum cmake version we support is 2.8.12 . It also makes the code
cleaner since we don't have to escape quotes anymore ourselves. This
will also work better on different platforms, where different escapes
may be needed.
Remove all quote escapes from string params to add_definitions() for
this policy change to work.
The inline assembly in src/gba/GBA-thumb.cpp which is turned on with the
cmake ENABLE_ASM_CORES option, sometimes causes weird behavior on
windows (see: #54) and a crash on startup in linux (see: #98, confirmed
on both Fedora and Arch Linux.)
Previously the default for this option was ON for 32 bit builds, set the
default to OFF always for the time being, until it is either fixed or
replaced.
In 82c8a1e3 I made "--param ssp-buffer-size=4" one argument instead of
two because when added to CMAKE_REQUIRED_LIBRARIES the ssp-buffer-size=4
part was being recognized as a library, breaking the compile tests.
This broke the build on mac, which I fixed in 915e2d1e by using ssp
flags for gcc only and not clang.
Now apparently it is breaking mxe, so instead of adding this particular
parameter to the MY_C_FLAGS variable which is then added to
CMAKE_REQUIRED_* variables for compile tests, add it directly via
ADD_COMPILE_OPTIONS().
This should hopefully resolve any remaining issues with this compiler
flag.
In 82c8a1e3 I made "--param ssp-buffer-size=4" one argument instead of
two to fix another problem when passing compiler flags to
CMAKE_REQUIRED_LIBRARIES, clang cannot deal with this and this breaks
the build on mac.
Enable libssp related flags for gcc only, because clang does not support
them anyway. This fixes the build issue on mac.
Stop saving and restoring the CMAKE_REQUIRED_* variables for the compile
test, because the subsequent Wx header symbol tests need them set up for
Wx support as well.
Also --param foo=bar needs to be a single string in the list of compiler
flags, or cmake can misinterpret the second part as a library when it is
passed to libraries/link-options.
mxe leaves CMAKE_SYSTEM_PROCESSOR empty, so detect if mxe is being used
and set the variable based on CMAKE_TOOLCHAIN_FILE, this allows the
32bit asm to compile under mxe.
Also if no toolchain file is being used and CMAKE_SYSTEM_PROCESSOR is
empty, fall back to CMAKE_HOST_SYSTEM_PROCESSOR.
When determining gcc/clang flags, save resulting C flags as MY_C_FLAGS,
C++ flags as MY_CXX_FLAGS, and linker flags as MY_C_LINKER_FLAGS, then
use them in the Wx OpenGL compile test.
This fixes the test erroneously failing on git mxe on mac.
Also, don't use -fPIC on Win32, set Wx defines separately from the test,
and save all CMAKE_REQUIRED_* variables before the test and restore them
afterwards.
Add -fpermissive and -fexceptions to CMAKE_CXX_COMPILE_OBJECT so that
they only affect C++. -std=gnu++11 was already there from b4ba9d9d, but
this is a cleaner method (which is also used for NASM) where we use
STRING(REGEX REPLACE ...) to append options after the <FLAGS>
placeholder in CMAKE_CXX_COMPILE_OBJECT.
Add a hack to the root CMakeLists.txt to SET(MSYS ON) for the Ninja
generator when running under msys2, otherwise it cannot find libs.
The quoting fixes from #70 allow all of this to work.
Move the check for dependencies/msvc into the previous IF(WIN32) block
adding an IF(MSVC) level.
Remove duplicate call to INCLUDE_DIRECTORIES(dependencies/msvc) from
later on in the main CMakeLists.txt.
Add -std=gnu+11 to CMAKE_CXX_COMPILE_OBJECT in the main CMakeLists.txt
to force the option for all C++ sources.
The right way to do this is to use a generator expression with
ADD_COMPILE_OPTIONS, but this is only available in cmake 3.3 and we must
maintain 2.8.12 compatibility to support Ubuntu 14.
This fixes the mac build (clang.)
XCode 4.2 generates a broken binary if -fomit-frame-pointer and/or -flto
is used for compile and link flags.
Check for Clang version less than 4.3 on APPLE and remove these flags in
the compile options setting cmake code.
cmake automatically passes -std=gnu++11 in some cases, while we were
passing -std=c++11, and this was causing incompatibilites in name
mangling between different objects.
Fix this by using -std=gnu++11 for gcc.
The last commit removed generator expressions from ADD_COMPILE_OPTIONS()
which made C/C++ flags apply to nasm as well.
Fix this by removing <FLAGS> from CMAKE_ASM_NASM_COMPILE_OBJECT and
replacing it with the flags we want.
Fix some porting issues to make everything work on Debian 8 "Jessie"
and Ubuntu 14 "Trusty":
- set cmake minimum version to 2.8.12, this is the Ubuntu 14 version
- combine C and C++ flags and add all of them using
ADD_COMPILE_OPTIONS() without using generator expressions, which is a
cmake 3.2 or so feature
- add -fpermissive to force some non-const type casts to compile on
older versions of gcc
- add -std=c++11 for gcc to enable support on older versions of gcc
- check that the compiler supports -fstack-protector-strong before
adding it, older versions of gcc do not
- fix the debian section of ./installdeps to include libpng-dev instead
of libpng16-dev and add gettext for msginit etc.
- fix compat checks in src/common/ffmpeg.cpp and src/wx/cmdevents.cpp to
check for libavcodec >= 56 instead of > 56, the Debian Jessie version
is exactly version 56 . With the one exception of
AV_CODEC_FLAG_GLOBAL_HEADER which is defined in later versions.
Fix backcompat with wx 2.8. This involved writing
wxPositiveDoubleValidator and rewiring the DrawingPanel inheritance tree
and event handling mechanisms (because 2.8 does not have ->Bind, only
->Connect which is less flexible.) As a result all the event handling
has been gathered into GameArea and the affected code is somewhat
cleaner. 2.8 support is untested on Mac because it requires 32 bit libs
and Carbon.
Add support for cross-compiling for windows using the Fedora MinGW
packages in ./installdeps.
Check for OpenGL support in the wx library being linked, this was
necessary because the Fedora MinGW wx library does not have OpenGL
support.
Remove vbamDebug() in favor of wxLogDebug(), and add an override for it
so that it works in non-debug builds of wx as well as on Windows. Turn
off buffering on stdout and stderr on startup so that debug logging
works in msys2/cygwin mintty as well.
On Windows, build a console binary for debug builds.
Update README.md to reflect Fedora MinGW support and debug logging
support.
Add -Wextra to cflags for debug builds.
Fix all cmake issues related to building for win32 with mxe.
Add support for ./installdeps win32 on Debian/Ubuntu using the mxe apt
repository.
Details:
* default to ENABLE_LTO=OFF on mxe
* set SFML_STATIC_LIBRARIES=TRUE on mxe
* fix the libintl/gettext checking logic
* fix the git dependencies submodule checking logic, and check that it
triggers for mxe
* revert FindSFML.cmake to upstream version, works fine with mxe
* make 'win32' an alias for the 'MinGW-w64-i686' target for
./installdeps, add support for mxe apt repository for Debian/Ubuntu
* change bin2c related cmake code to compile the tool on the host always
even when cross-compiling
* copy src/win32/res/VBA.ico to src/wx/icons since src/win32 has been
removed
TODO: generic mxe installer for other unix-likes
Add a more general purpose ./installdeps script to replace
./installdeps-msys2 that handles: Debian Linux, Arch Linux, MSYS2+MinGW,
Mac Homebrew, MacPorts and Fink for Mac. More OSes and distributions
will be added in the future, and the script may be generalized for use
in other projects.
Move Mac package manager setup code into MacPackageManagers.cmake and
greatly improve it. Handles Homebrew, MacPorts and Fink correctly.
Minor tweaks for FindSDL2.cmake: better include dir searching that works
on cygwin, fix flags for MinGW, and quiet pkg-config program errors.
Add MinGW cross-compilation toolchain files, they can be specified on
the cmake command line with:
-DCMAKE_TOOLCHAIN_FILE=../CMakeScripts/Toolchain-cross-MinGW-w64-i686.cmake
or
-DCMAKE_TOOLCHAIN_FILE=../CMakeScripts/Toolchain-cross-MinGW-w64-x86_64.cmake
these work for Cygwin and should work for MinGW on Linux as well.
I'm not sure if this was changed in cmake recently, but "SYSCONFDIR" is incorrect. It should be SYSCONF_INSTALL_DIR.
As well CMAKE_INSTALL_PREFIX refers to /usr or /usr/local in linux, so installing it into ${CMAKE_INSTALL_PREFIX}/${SYSCONFDIR} would be incorrect. I've wrapped it in the existing IF( WIN32 ) to preserve the installation for windows, a window dev should fix that if it's incorrect.
Add ENABLE_LTO cmake option that defaults to ON except on GCC building
for AMD64 on Win32.
Also set the cmake variables AMD64 or X86_32 when one of these
architectures is detected.
Add support for Link Time Optimization (LTO) on gcc and Clang.
Link libssp only when it is on the system, some toolchains like Ubuntu's
do not require explicitly linking to libssp. On Win32 try to link it
statically.
In debug builds with GCC, use -ggdb3 -Og, otherwise use -g .
Two new cmake modules were written for this:
* FindSSP.cmake -- this is for finding libssp on the system.
* UseGCCBinUtilsWrappers.cmake -- this is for using gcc binutils
wrappers such as gcc-ar, which is required for gcc LTO to work.
These will be distributed separately as well.