auto deps for visual studio, take 1
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>
2019-03-21 23:01:46 +00:00
|
|
|
if(COMMAND cmake_policy)
|
|
|
|
cmake_policy(SET CMP0003 NEW) # link to full path of libs
|
|
|
|
cmake_policy(SET CMP0005 NEW) # escapes in add_definitions
|
2019-03-26 13:40:35 +00:00
|
|
|
|
|
|
|
if(POLICY CMP0077)
|
|
|
|
cmake_policy(SET CMP0077 NEW) # use vars for options
|
|
|
|
endif()
|
2019-03-26 00:35:23 +00:00
|
|
|
|
2019-04-16 13:07:51 +00:00
|
|
|
if(POLICY CMP0043)
|
2019-03-26 00:35:23 +00:00
|
|
|
cmake_policy(SET CMP0043 NEW) # for wxWidgets, use generator expressions
|
|
|
|
endif()
|
auto deps for visual studio, take 1
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>
2019-03-21 23:01:46 +00:00
|
|
|
endif()
|
|
|
|
|
2019-07-03 23:28:48 +00:00
|
|
|
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
|
auto deps for visual studio, take 1
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>
2019-03-21 23:01:46 +00:00
|
|
|
|
|
|
|
set(VCPKG_DEPS zlib libpng SDL2 SFML gettext wxWidgets)
|
|
|
|
|
2019-07-03 23:28:48 +00:00
|
|
|
include(Set-Toolchain-vcpkg)
|
auto deps for visual studio, take 1
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>
2019-03-21 23:01:46 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
project(VBA-M C CXX)
|
2010-03-15 03:36:45 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
cmake_minimum_required(VERSION 2.8.12)
|
2016-11-20 19:11:52 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
if(NOT CMAKE_PREFIX_PATH AND (NOT ("$ENV{CMAKE_PREFIX_PATH}" STREQUAL "")))
|
|
|
|
set(CMAKE_PREFIX_PATH "$ENV{CMAKE_PREFIX_PATH}")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(CMAKE_BUILD_TYPE STREQUAL "")
|
|
|
|
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build Type" FORCE)
|
|
|
|
endif()
|
2016-11-20 19:11:52 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
set(ALL_TARGETS fex visualboyadvance-m vbamcore vbam)
|
2016-11-21 20:37:21 +00:00
|
|
|
|
2019-10-05 02:37:05 +00:00
|
|
|
add_custom_target(generate)
|
|
|
|
|
2015-03-27 17:48:42 +00:00
|
|
|
#Output all binaries at top level
|
2018-02-24 19:39:29 +00:00
|
|
|
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR})
|
|
|
|
|
|
|
|
option(ENABLE_SDL "Build the SDL port" OFF)
|
|
|
|
option(ENABLE_WX "Build the wxWidgets port" ON)
|
|
|
|
option(ENABLE_DEBUGGER "Enable the debugger" ON)
|
2019-01-02 16:23:26 +00:00
|
|
|
option(ENABLE_ASAN "Enable -fsanitize=<option>, address by default, requires debug build" OFF)
|
2018-02-24 19:39:29 +00:00
|
|
|
|
|
|
|
option(VBAM_STATIC "Try to link all libraries statically" OFF)
|
|
|
|
|
|
|
|
if(VBAM_STATIC)
|
|
|
|
set(SDL2_STATIC ON)
|
|
|
|
set(SFML_STATIC_LIBRARIES ON)
|
|
|
|
set(FFMPEG_STATIC ON)
|
|
|
|
set(SSP_STATIC ON)
|
|
|
|
set(OPENAL_STATIC ON)
|
|
|
|
endif()
|
|
|
|
|
auto deps for visual studio, take 1
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>
2019-03-21 23:01:46 +00:00
|
|
|
set(ENABLE_BUNDLED_LIBS_DEFAULT OFF)
|
|
|
|
|
|
|
|
# on visual studio use all bundled stuff
|
|
|
|
if(MSVC)
|
|
|
|
set(ENABLE_BUNDLED_LIBS_DEFAULT ON)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
# XXX: do some stuff with this
|
|
|
|
#option(ENABLE_BUNDLED_LIBS "Use bundled libraries instead of system libraries" ${ENABLE_BUNDLED_LIBS_DEFAULT})
|
2018-02-24 19:39:29 +00:00
|
|
|
|
support older 32 bit macs running 10.7, fix build
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.
2018-06-30 10:38:22 +00:00
|
|
|
# use ccache if available, and not already enabled on the command line
|
2019-02-14 22:58:13 +00:00
|
|
|
# but not with ninja and msys ccache on msys2
|
|
|
|
if(NOT (WIN32 AND (NOT $ENV{MSYSTEM} STREQUAL "") AND CMAKE_GENERATOR STREQUAL Ninja))
|
|
|
|
if(NOT CMAKE_CXX_COMPILER_LAUNCHER AND NOT CMAKE_C_COMPILER_LAUNCHER)
|
|
|
|
find_program(CCACHE_FOUND ccache)
|
|
|
|
if(CCACHE_FOUND)
|
|
|
|
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
|
|
|
|
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
|
|
|
|
endif(CCACHE_FOUND)
|
|
|
|
endif()
|
support older 32 bit macs running 10.7, fix build
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.
2018-06-30 10:38:22 +00:00
|
|
|
endif()
|
2018-06-27 02:15:22 +00:00
|
|
|
|
2018-08-10 23:35:49 +00:00
|
|
|
set(SSP_DEFAULT OFF)
|
|
|
|
|
|
|
|
option(ENABLE_SSP "Enable gcc stack protector support" ${SSP_DEFAULT})
|
|
|
|
|
auto deps for visual studio, take 1
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>
2019-03-21 23:01:46 +00:00
|
|
|
set(ASM_DEFAULT OFF)
|
|
|
|
|
|
|
|
include(Architecture)
|
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
option(ENABLE_ASM "Enable x86 ASM related options" ${ASM_DEFAULT})
|
2017-03-06 09:40:55 +00:00
|
|
|
|
2017-03-19 02:04:39 +00:00
|
|
|
# The ARM ASM core seems to be very buggy, see #98 and #54. Default to it being
|
|
|
|
# OFF for the time being, until it is either fixed or replaced.
|
2018-02-24 19:39:29 +00:00
|
|
|
option(ENABLE_ASM_CORE "Enable x86 ASM CPU cores" OFF)
|
2017-03-19 02:04:39 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
if(ENABLE_ASM_CORE)
|
|
|
|
message(WARNING "!!!!!! The x86 ASM cores are considered buggy and dangerous, use at your own risk. !!!!!!")
|
|
|
|
endif()
|
2017-03-19 02:04:39 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
set(ASM_SCALERS_DEFAULT ${ENABLE_ASM})
|
|
|
|
set(MMX_DEFAULT ${ENABLE_ASM})
|
2017-03-06 09:40:55 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
option(ENABLE_ASM_SCALERS "Enable x86 ASM graphic filters" ${ASM_SCALERS_DEFAULT})
|
2016-11-18 16:59:27 +00:00
|
|
|
|
|
|
|
if(ENABLE_ASM_SCALERS)
|
2018-02-24 19:39:29 +00:00
|
|
|
option(ENABLE_MMX "Enable MMX" ${MMX_DEFAULT})
|
|
|
|
endif()
|
2016-11-18 16:59:27 +00:00
|
|
|
|
2019-08-20 08:21:38 +00:00
|
|
|
set(ENABLE_LINK_DEFAULT OFF)
|
|
|
|
|
|
|
|
# msys2 does not have static sfml libs atm
|
|
|
|
# while on mxe we use static libs
|
|
|
|
if(WIN32 AND ((NOT (MINGW AND MSYS)) OR CMAKE_TOOLCHAIN_FILE MATCHES mxe) AND NOT CMAKE_TOOLCHAIN_FILE MATCHES vcpkg)
|
2019-05-30 11:50:45 +00:00
|
|
|
set(SFML_STATIC_LIBRARIES TRUE)
|
2019-08-20 08:21:38 +00:00
|
|
|
endif()
|
|
|
|
|
|
|
|
find_package(SFML 2 COMPONENTS network system)
|
|
|
|
|
|
|
|
if(SFML_FOUND)
|
2019-05-30 11:50:45 +00:00
|
|
|
set(ENABLE_LINK_DEFAULT ON)
|
2019-08-20 08:21:38 +00:00
|
|
|
endif()
|
|
|
|
|
|
|
|
option(ENABLE_LINK "Enable GBA linking functionality" ${ENABLE_LINK_DEFAULT})
|
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
option(ENABLE_LIRC "Enable LIRC support" OFF)
|
2016-11-14 18:56:50 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
set(FFMPEG_DEFAULT OFF)
|
2016-11-14 18:56:50 +00:00
|
|
|
|
2019-08-20 08:21:38 +00:00
|
|
|
find_package(PkgConfig)
|
|
|
|
|
2019-09-01 20:37:39 +00:00
|
|
|
set(FFMPEG_LIBS_LIST libavcodec>=58.18.100 libavformat>=58.12.100 libswscale>=5.1.100 libavutil>=56.14.100 libswresample>=3.1.100)
|
|
|
|
|
2019-08-20 08:21:38 +00:00
|
|
|
if(PKGCONFIG_FOUND)
|
2019-08-31 22:58:59 +00:00
|
|
|
set(FFMPEG_DEFAULT ON)
|
2019-08-20 08:21:38 +00:00
|
|
|
|
2019-09-01 20:37:39 +00:00
|
|
|
foreach(ffmpeg_lib ${FFMPEG_LIBS_LIST})
|
|
|
|
string(REGEX REPLACE ">=.*" "" ffmpeg_lib_name ${ffmpeg_lib})
|
|
|
|
|
|
|
|
pkg_check_modules(FFMPEG_LIB_${ffmpeg_lib_name} ${ffmpeg_lib} QUIET)
|
2019-08-20 08:21:38 +00:00
|
|
|
|
2019-09-01 20:37:39 +00:00
|
|
|
if(NOT FFMPEG_LIB_${ffmpeg_lib_name}_FOUND)
|
2019-08-31 22:58:59 +00:00
|
|
|
set(FFMPEG_DEFAULT OFF)
|
|
|
|
break()
|
|
|
|
endif()
|
|
|
|
endforeach()
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
2016-11-14 18:56:50 +00:00
|
|
|
|
|
|
|
option(ENABLE_FFMPEG "Enable ffmpeg A/V recording" ${FFMPEG_DEFAULT})
|
|
|
|
|
2019-07-10 23:47:16 +00:00
|
|
|
option(ENABLE_ONLINEUPDATES "Enable online update checks" ON)
|
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
set(LTO_DEFAULT ON)
|
2017-09-17 02:47:39 +00:00
|
|
|
|
2019-03-28 21:45:06 +00:00
|
|
|
# lto produces buggy binaries for 64 bit win32
|
|
|
|
# and we generally don't want it when debugging because it makes linking slow
|
2019-04-25 16:22:07 +00:00
|
|
|
if(CMAKE_BUILD_TYPE MATCHES Debug OR (WIN32 AND CMAKE_COMPILER_IS_GNUCXX AND AMD64))
|
2018-02-24 19:39:29 +00:00
|
|
|
set(LTO_DEFAULT OFF)
|
|
|
|
endif()
|
2016-11-27 23:37:24 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
option(ENABLE_LTO "Compile with Link Time Optimization (gcc and clang only)" ${LTO_DEFAULT})
|
2016-11-27 23:37:24 +00:00
|
|
|
|
2019-07-03 23:28:48 +00:00
|
|
|
if(WIN32 OR CMAKE_TOOLCHAIN_FILE MATCHES "[Mm][Ii][Nn][Gg][Ww]")
|
|
|
|
# Win32 deps submodule
|
|
|
|
if(NOT EXISTS "${CMAKE_SOURCE_DIR}/dependencies/mingw-xaudio/include")
|
|
|
|
set(git_checkout FALSE)
|
|
|
|
|
|
|
|
if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
|
|
|
|
set(git_checkout TRUE)
|
|
|
|
execute_process(
|
|
|
|
COMMAND git submodule update --init --remote --recursive
|
|
|
|
RESULT_VARIABLE git_status
|
|
|
|
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
|
|
|
)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(NOT (git_checkout AND git_status EQUAL 0))
|
|
|
|
message(FATAL_ERROR "Please pull in git submodules, e.g.\nrun: git submodule update --init --remote --recursive")
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
2017-02-11 02:57:35 +00:00
|
|
|
if(MSVC)
|
2019-07-03 23:28:48 +00:00
|
|
|
include_directories("${CMAKE_SOURCE_DIR}/dependencies/msvc")
|
2018-02-24 19:39:29 +00:00
|
|
|
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
|
|
|
endif()
|
2017-02-11 02:57:35 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
option(ENABLE_GBA_LOGGING "Enable extended GBA logging" ON)
|
|
|
|
if(ENABLE_GBA_LOGGING)
|
2019-03-27 03:25:43 +00:00
|
|
|
add_definitions(-DGBA_LOGGING )
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
2011-05-24 07:39:29 +00:00
|
|
|
if(ENABLE_MMX)
|
2019-03-27 03:25:43 +00:00
|
|
|
add_definitions(-DMMX)
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
2011-02-24 11:14:59 +00:00
|
|
|
|
|
|
|
# The SDL port can't be built without debugging support
|
2018-02-24 19:39:29 +00:00
|
|
|
if(NOT ENABLE_DEBUGGER AND ENABLE_SDL)
|
2019-03-27 03:25:43 +00:00
|
|
|
message(SEND_ERROR "The SDL port can't be built without debugging support")
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
2008-06-06 10:17:20 +00:00
|
|
|
|
auto deps for visual studio, take 1
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>
2019-03-21 23:01:46 +00:00
|
|
|
# this has to run after the toolchain is initialized so it can't be in
|
|
|
|
# Win32deps.cmake
|
|
|
|
if(MINGW)
|
|
|
|
include_directories("${CMAKE_SOURCE_DIR}/dependencies/mingw-include")
|
|
|
|
include_directories("${CMAKE_SOURCE_DIR}/dependencies/mingw-xaudio/include")
|
|
|
|
endif()
|
|
|
|
|
2017-08-27 20:15:29 +00:00
|
|
|
find_package(Git)
|
|
|
|
if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git")
|
2017-10-07 21:00:47 +00:00
|
|
|
include(GitTagVersion)
|
|
|
|
git_version(VERSION REVISION VERSION_RELEASE)
|
2017-08-27 20:15:29 +00:00
|
|
|
|
|
|
|
# only use the plugin to tie the configure state to the sha to force rebuilds
|
|
|
|
# of files that depend on version.h
|
|
|
|
include(GetGitRevisionDescription)
|
|
|
|
get_git_head_revision(REFSPEC COMMITHASH)
|
2017-10-08 01:17:52 +00:00
|
|
|
endif()
|
2017-08-27 20:15:29 +00:00
|
|
|
|
2017-10-12 02:17:25 +00:00
|
|
|
# no git or no tags, use ChangeLog
|
2017-10-08 01:17:52 +00:00
|
|
|
if(NOT VERSION)
|
2017-10-12 02:17:25 +00:00
|
|
|
include(ChangeLogVersion)
|
|
|
|
changelog_version(VERSION REVISION VERSION_RELEASE)
|
2017-08-27 20:15:29 +00:00
|
|
|
endif()
|
|
|
|
|
|
|
|
# generate version.h
|
|
|
|
include_directories(${CMAKE_BINARY_DIR})
|
2019-10-02 23:32:35 +00:00
|
|
|
string(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+).*" "\\1,\\2,\\3,0" WIN_VERSION "${VERSION}")
|
2017-08-27 20:15:29 +00:00
|
|
|
configure_file("${CMAKE_SOURCE_DIR}/src/version.h.in" "${CMAKE_BINARY_DIR}/version.h" @ONLY)
|
2008-06-06 10:17:20 +00:00
|
|
|
|
2019-03-28 21:45:06 +00:00
|
|
|
if(CMAKE_BUILD_TYPE MATCHES Debug)
|
2018-02-24 19:39:29 +00:00
|
|
|
add_definitions(-DDEBUG)
|
|
|
|
else()
|
|
|
|
add_definitions(-DNDEBUG)
|
|
|
|
endif()
|
2016-11-20 14:15:27 +00:00
|
|
|
|
2017-02-11 22:18:38 +00:00
|
|
|
# hack for ninja in msys2
|
2018-02-24 19:39:29 +00:00
|
|
|
if(WIN32 AND CMAKE_GENERATOR STREQUAL Ninja AND (NOT $ENV{MSYSTEM} STREQUAL ""))
|
|
|
|
set(MSYS ON)
|
|
|
|
endif()
|
2017-02-11 22:18:38 +00:00
|
|
|
|
Mac OS X HiDPI fixes + other misc
Use a high-res surface on HiDPI (e.g. retina) Macs for the OpenGL
renderer, and scale window accordingly. Also fix fullscreen toggle not
working in HiDPI mode. And some other stuff.
Aside from the .app not being linked statically, the app is now fully
functional on Mac and ready to ship.
Full change details:
* add -DDEBUG or -DNDEBUG based on CMAKE_BUILD_TYPE (-DNDEBUG for
Release and -DDEBUG for Debug)
* properly search for homebrew/macports/fink directories, and only add
them if they exist
* fix building with wx debug support, when available
* use explicit OpenGL context on Mac too for new versions of wx
* add main_frame pointer in GameArea back to MainFrame, and a
SetMainFrame(MainFrame* parent) public method to set it in guinit
* add full support for reading and writing double value config options
(the GUI still needs to be updated for options that can take doubles,
such as video_scale)
* change video_scale option (Display/Scale) to a double, putting a
double value such as 3.6 in the config file works correctly
* add a HiDPIAware mixin class for GameArea and DrawingPanel, with the
method HiDPIScaleFactor which returns the current window's
backingScaleFactor
* change the GameArea sizing methods (DelBorder(), AdjustMinSize() and
AdjustSize()) to divide the window size by the
HiDPIAware::HiDPIScaleFactor so that the window is scaled properly
* change GameArea::ShowFullScreen to ignore fullscreen events for a
maximized window on Mac, because maximized windows on OS X are
actually native fullscreen windows
* change scale variables to double from int, and use std::ceil() to
round scaled pixel or memory size values
* make a default base class DrawingPane::DrawingPanelInit() virtual
method, call by all concrete class constructors based on the did_init
flag
* call setWantsBestResolutionOpenGLSurface:YES on the view backing the
wxGLCanvas for the OpenGL renderer (GLDrawingPanel) to get a high res
OpenGL surface in HiDPI mode
* remove GLDrawingPanel::OnSize event, the OpenGL viewport resizes
automatically without the need to call glViewport()
* do not hide the mouse pointer if the main frame has menus or dialogs
open
* add variadic vbamDebug(const char* format, ...) function, active only
#ifdef DEBUG, which sets the wx log target to STDERR and logs a
message to it
* use full name of app "visualboyadvance-m" instead of "vbam" when
getting configuration paths, this way the config is saved to
~/Library/Application Support/visualboyadvance-m rather than
~/Library/Application Support/vbam
* listen to the MENU_HIGHLIGHT_ALL event as well, as an extra way to
check when the menus are open
* add public MainFrame::SetMenusOpened(bool state) method to force the
main frame to change the internal menus_opened state, this is
necessary because in HiDPI mode on Mac the keyboard accelerator for
toggle fullscreen sends a menu open event, but not a menu close event,
so on switch to fullscreen the state is changed to menus closed and
the emu is unpaused
TODO:
* GUI option to change toggle fullscreen behavior between native and
non-native fullscreen on Mac
* GUI support for double config values like Display/Scale
* add HiDPI support to simple renderer
* fix SDL sound, or disable the option
* fix Cairo suport on Mac, or disable the option
* use dynamic_cast<> to implement GetWindow() for DrawingPanel instead
of pure virtual method, likewise for Delete()
* link .app statically by default so it can be shipped
* add Homebrew formula
2016-10-22 12:20:46 +00:00
|
|
|
# Add support for Homebrew, MacPorts and Fink on OS X
|
2018-02-24 19:39:29 +00:00
|
|
|
if(APPLE)
|
|
|
|
include(MacPackageManagers)
|
|
|
|
endif()
|
more minor improvements for OS X build
Add Homebrew and MacPorts paths for findings headers and libraries.
Add -x objective-c++ to the C++ compile command so that conditionally
compiled ObjectiveC code for OS X can be supported.
Throw a fatal error if the user tries to enable ENABLE_ASM_CORE,
ENABLE_ASM_SCALERS or ENABLE_MMX on AMD64, as this is not supported yet.
If ENABLE_ASM_SCALERS is enabled, try to find a Homebrew or MacPorts
nasm before using the outdated XCode nasm.
For the future, if the user has only the old XCode nasm which does not
support 64 bit objects and the build is 64 bit, throw a fatal error.
For 32 bit builds with the old XCode nasm, use -f macho instead of -f
macho32, which is used if the version of nasm is > 2.0 .
Pass -DMACHO instead of -DELF and, on AMD64 (for the future) -D__AMD64__
for nasm on OS X.
Pass -D__AMD64__ to C++ compilation as well on AMD64, this will help
when we support AMD64 inline assembly.
Add support for automatically linking Homebrew keg-only gettext from
/usr/local/opt/gettext for ENABLE_NLS.
Fix copying Info.plist and vbam.icns to the .app bundle.
Add a key to the Info.plist to support sharp text on retina displays, as
per:
https://wiki.wxwidgets.org/WxMac-specific_topics#Retina_display_support
Set wxWidgets_USE_DEBUG to ON if CMAKE_BUILD_TYPE is "Debug". I'm not
sure this does anything or if I'm doing this correctly though.
Also set wxWidgets_USE_UNICODE to ON. Again, I'm not sure this does
anything or is in the right place.
Fix a bug in the config dir finding code in
wxvbamApp::GetConfigurationPath() updated in 8b8f2f7 to only use the
more top level dirs if there is a vbam.ini in them, not if they are
writable as well, and use the reverse order (starting with user local
dirs) to check for writable dirs and their writable parents. This fixes
a problem with the vbam.ini being written to the Plugins directory of
the .app bundle if it's writable instead of ~/Library/Application
Support/vbam as was intended.
2015-11-17 02:56:23 +00:00
|
|
|
|
|
|
|
# We do not support amd64 asm yet
|
2018-02-24 19:39:29 +00:00
|
|
|
if(AMD64 AND (ENABLE_ASM_CORE OR ENABLE_ASM_SCALERS OR ENABLE_MMX))
|
|
|
|
message(FATAL_ERROR "The options ASM_CORE, ASM_SCALERS and MMX are not supported on AMD64 yet.")
|
|
|
|
endif()
|
more minor improvements for OS X build
Add Homebrew and MacPorts paths for findings headers and libraries.
Add -x objective-c++ to the C++ compile command so that conditionally
compiled ObjectiveC code for OS X can be supported.
Throw a fatal error if the user tries to enable ENABLE_ASM_CORE,
ENABLE_ASM_SCALERS or ENABLE_MMX on AMD64, as this is not supported yet.
If ENABLE_ASM_SCALERS is enabled, try to find a Homebrew or MacPorts
nasm before using the outdated XCode nasm.
For the future, if the user has only the old XCode nasm which does not
support 64 bit objects and the build is 64 bit, throw a fatal error.
For 32 bit builds with the old XCode nasm, use -f macho instead of -f
macho32, which is used if the version of nasm is > 2.0 .
Pass -DMACHO instead of -DELF and, on AMD64 (for the future) -D__AMD64__
for nasm on OS X.
Pass -D__AMD64__ to C++ compilation as well on AMD64, this will help
when we support AMD64 inline assembly.
Add support for automatically linking Homebrew keg-only gettext from
/usr/local/opt/gettext for ENABLE_NLS.
Fix copying Info.plist and vbam.icns to the .app bundle.
Add a key to the Info.plist to support sharp text on retina displays, as
per:
https://wiki.wxwidgets.org/WxMac-specific_topics#Retina_display_support
Set wxWidgets_USE_DEBUG to ON if CMAKE_BUILD_TYPE is "Debug". I'm not
sure this does anything or if I'm doing this correctly though.
Also set wxWidgets_USE_UNICODE to ON. Again, I'm not sure this does
anything or is in the right place.
Fix a bug in the config dir finding code in
wxvbamApp::GetConfigurationPath() updated in 8b8f2f7 to only use the
more top level dirs if there is a vbam.ini in them, not if they are
writable as well, and use the reverse order (starting with user local
dirs) to check for writable dirs and their writable parents. This fixes
a problem with the vbam.ini being written to the Plugins directory of
the .app bundle if it's writable instead of ~/Library/Application
Support/vbam as was intended.
2015-11-17 02:56:23 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
if(ENABLE_ASM_CORE OR ENABLE_ASM_SCALERS)
|
2019-10-16 14:23:20 +00:00
|
|
|
enable_language(ASM)
|
2018-02-24 19:39:29 +00:00
|
|
|
set(ASM_ENABLED ON)
|
|
|
|
endif()
|
2011-02-24 11:14:59 +00:00
|
|
|
|
2010-03-15 03:36:45 +00:00
|
|
|
# Look for some dependencies using CMake scripts
|
2018-02-24 19:39:29 +00:00
|
|
|
find_package(ZLIB REQUIRED)
|
2019-03-28 21:45:06 +00:00
|
|
|
|
2019-04-27 22:52:42 +00:00
|
|
|
set(OpenGL_GL_PREFERENCE GLVND)
|
|
|
|
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL FreeBSD)
|
|
|
|
set(OpenGL_GL_PREFERENCE LEGACY)
|
|
|
|
endif()
|
2019-03-28 21:45:06 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
find_package(OpenGL REQUIRED)
|
2019-03-28 21:45:06 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
find_package(PNG REQUIRED)
|
2016-10-26 23:58:21 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
if(EXISTS /etc/redhat-release)
|
|
|
|
set(FEDORA_HOST ON)
|
|
|
|
endif()
|
2016-10-26 23:58:21 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
if((APPLE AND NOT MACPORTS) OR (WIN32 AND FEDORA_HOST))
|
|
|
|
set(SDL2_STATIC ON)
|
|
|
|
endif()
|
2017-01-25 18:53:05 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
if(WIN32 AND SDL2_STATIC)
|
|
|
|
set(SDL2_BUILDING_LIBRARY TRUE) # try not to link SDL2main
|
|
|
|
endif()
|
2017-01-25 18:53:05 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
find_package(SDL2 REQUIRED)
|
|
|
|
add_definitions(${SDL2_DEFINITIONS})
|
2011-02-24 11:14:59 +00:00
|
|
|
|
2019-04-15 03:28:18 +00:00
|
|
|
if(WIN32)
|
2019-04-15 13:11:00 +00:00
|
|
|
find_library(SETUPAPI_LIBRARY SetupAPI)
|
|
|
|
|
|
|
|
if(SETUPAPI_LIBRARY)
|
|
|
|
set(SDL2_LIBRARY ${SDL2_LIBRARY} ${SETUPAPI_LIBRARY})
|
|
|
|
endif()
|
2019-04-15 03:28:18 +00:00
|
|
|
endif()
|
|
|
|
|
2011-05-25 11:55:46 +00:00
|
|
|
# set the standard libraries all ports use
|
2019-03-27 03:25:43 +00:00
|
|
|
set(
|
|
|
|
VBAMCORE_LIBS
|
2011-05-25 11:55:46 +00:00
|
|
|
vbamcore
|
|
|
|
fex
|
2015-11-19 02:34:38 +00:00
|
|
|
${SDL2_LIBRARY}
|
2015-05-06 01:27:09 +00:00
|
|
|
${SFML_LIBRARIES}
|
2011-05-25 11:55:46 +00:00
|
|
|
${OPENGL_LIBRARIES}
|
|
|
|
${ZLIB_LIBRARY}
|
2015-03-27 17:48:42 +00:00
|
|
|
${PNG_LIBRARY}
|
|
|
|
)
|
2011-02-24 11:14:59 +00:00
|
|
|
|
2011-05-24 07:39:29 +00:00
|
|
|
if(ENABLE_FFMPEG)
|
2018-02-24 19:39:29 +00:00
|
|
|
find_package(PkgConfig REQUIRED)
|
2011-05-24 07:39:29 +00:00
|
|
|
|
2019-09-01 20:37:39 +00:00
|
|
|
pkg_check_modules(FFMPEG REQUIRED ${FFMPEG_LIBS_LIST})
|
2017-10-22 22:35:56 +00:00
|
|
|
|
|
|
|
if(FFMPEG_STATIC)
|
|
|
|
set(FFMPEG_LIBRARIES ${FFMPEG_STATIC_LIBRARIES})
|
|
|
|
set(FFMPEG_LDFLAGS ${FFMPEG_STATIC_LDFLAGS} ${FFMPEG_STATIC_OTHER_LDFLAGS})
|
|
|
|
|
|
|
|
if(APPLE)
|
|
|
|
set(FFMPEG_LDFLAGS ${FFMPEG_LDFLAGS} -framework CoreText -framework ApplicationServices)
|
|
|
|
endif()
|
|
|
|
else()
|
|
|
|
set(FFMPEG_LIBRARIES ${FFMPEG_LIBRARIES})
|
|
|
|
set(FFMPEG_LDFLAGS ${FFMPEG_LDFLAGS} ${FFMPEG_OTHER_LDFLAGS})
|
|
|
|
endif()
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
2011-05-24 07:39:29 +00:00
|
|
|
|
2019-07-10 23:47:16 +00:00
|
|
|
if(NOT ENABLE_ONLINEUPDATES)
|
|
|
|
add_definitions(-DNO_ONLINEUPDATES)
|
|
|
|
endif()
|
|
|
|
|
2011-05-24 07:39:29 +00:00
|
|
|
if(NOT ENABLE_FFMPEG)
|
2018-02-24 19:39:29 +00:00
|
|
|
add_definitions(-DNO_FFMPEG)
|
|
|
|
endif()
|
2011-05-24 07:39:29 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
if(ENABLE_LIRC)
|
2019-03-27 03:25:43 +00:00
|
|
|
set(WITHLIRC 1)
|
2018-02-24 19:39:29 +00:00
|
|
|
else()
|
2019-03-27 03:25:43 +00:00
|
|
|
set(WITHLIRC 0)
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
2008-06-06 10:17:20 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
include(GNUInstallDirs)
|
2008-06-06 10:17:20 +00:00
|
|
|
|
|
|
|
# C defines
|
2018-02-24 19:39:29 +00:00
|
|
|
add_definitions(-DHAVE_NETINET_IN_H -DHAVE_ARPA_INET_H -DHAVE_ZLIB_H -DFINAL_VERSION -DSDL -DUSE_OPENGL -DSYSCONF_INSTALL_DIR="${CMAKE_INSTALL_FULL_SYSCONFDIR}" -DWITH_LIRC=${WITHLIRC})
|
|
|
|
add_definitions(-DPKGDATADIR="${CMAKE_INSTALL_FULL_DATADIR}/vbam" -DPACKAGE=)
|
2008-06-06 10:17:20 +00:00
|
|
|
|
2019-08-31 22:58:59 +00:00
|
|
|
add_definitions(-D__STDC_FORMAT_MACROS)
|
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
if(ENABLE_LINK)
|
2012-09-07 19:09:16 +00:00
|
|
|
# IPC linking code needs sem_timedwait which can be either in librt or pthreads
|
2018-08-10 23:47:17 +00:00
|
|
|
if(NOT WIN32)
|
|
|
|
find_library(RT_LIB rt)
|
|
|
|
if(RT_LIB)
|
|
|
|
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${RT_LIB})
|
|
|
|
set(VBAMCORE_LIBS ${VBAMCORE_LIBS} ${RT_LIB})
|
|
|
|
endif()
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
|
|
|
|
2018-08-10 23:47:17 +00:00
|
|
|
if(NOT WIN32)
|
|
|
|
find_library(PTHREAD_LIB pthread)
|
|
|
|
if(PTHREAD_LIB)
|
|
|
|
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${PTHREAD_LIB})
|
|
|
|
set(VBAMCORE_LIBS ${VBAMCORE_LIBS} ${PTHREAD_LIB})
|
|
|
|
endif()
|
|
|
|
elseif(MINGW)
|
|
|
|
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} -lpthread)
|
|
|
|
set(VBAMCORE_LIBS ${VBAMCORE_LIBS} -lpthread)
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
|
|
|
|
|
|
|
include(CheckFunctionExists)
|
|
|
|
check_function_exists(sem_timedwait SEM_TIMEDWAIT)
|
|
|
|
if(SEM_TIMEDWAIT)
|
|
|
|
add_definitions(-DHAVE_SEM_TIMEDWAIT)
|
|
|
|
endif()
|
|
|
|
else()
|
|
|
|
add_definitions(-DNO_LINK)
|
|
|
|
endif()
|
2011-02-20 12:22:58 +00:00
|
|
|
|
2008-06-16 20:18:49 +00:00
|
|
|
# The debugger is enabled by default
|
2018-02-24 19:39:29 +00:00
|
|
|
if(NOT ENABLE_DEBUGGER)
|
|
|
|
add_definitions(-DNO_DEBUGGER)
|
|
|
|
else()
|
|
|
|
add_definitions(-DBKPT_SUPPORT)
|
|
|
|
endif()
|
2008-06-16 20:18:49 +00:00
|
|
|
|
2008-06-06 10:17:20 +00:00
|
|
|
# The ASM core is disabled by default because we don't know on which platform we are
|
2018-02-24 19:39:29 +00:00
|
|
|
if(NOT ENABLE_ASM_CORE)
|
|
|
|
add_definitions(-DC_CORE)
|
|
|
|
endif()
|
2008-06-06 10:17:20 +00:00
|
|
|
|
2019-08-19 20:15:01 +00:00
|
|
|
set(NLS_DEFAULT OFF)
|
|
|
|
|
|
|
|
if(NOT CMAKE_TOOLCHAIN_FILE MATCHES vcpkg)
|
|
|
|
set(NLS_DEFAULT ON)
|
|
|
|
endif()
|
|
|
|
|
auto deps for visual studio, take 1
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>
2019-03-21 23:01:46 +00:00
|
|
|
option(ENABLE_NLS "Enable translations" ${NLS_DEFAULT})
|
|
|
|
|
2011-02-24 13:06:17 +00:00
|
|
|
# Enable internationalization
|
2018-02-24 19:39:29 +00:00
|
|
|
if(ENABLE_NLS)
|
|
|
|
set(LOCALEDIR ${CMAKE_INSTALL_PREFIX}/share/locale)
|
|
|
|
add_definitions(-DENABLE_NLS)
|
|
|
|
add_definitions(-DLOCALEDIR="${LOCALEDIR}")
|
2011-05-25 11:55:46 +00:00
|
|
|
# for now, only GBALink.cpp uses gettext() directly
|
2018-02-24 19:39:29 +00:00
|
|
|
if(APPLE)
|
more minor improvements for OS X build
Add Homebrew and MacPorts paths for findings headers and libraries.
Add -x objective-c++ to the C++ compile command so that conditionally
compiled ObjectiveC code for OS X can be supported.
Throw a fatal error if the user tries to enable ENABLE_ASM_CORE,
ENABLE_ASM_SCALERS or ENABLE_MMX on AMD64, as this is not supported yet.
If ENABLE_ASM_SCALERS is enabled, try to find a Homebrew or MacPorts
nasm before using the outdated XCode nasm.
For the future, if the user has only the old XCode nasm which does not
support 64 bit objects and the build is 64 bit, throw a fatal error.
For 32 bit builds with the old XCode nasm, use -f macho instead of -f
macho32, which is used if the version of nasm is > 2.0 .
Pass -DMACHO instead of -DELF and, on AMD64 (for the future) -D__AMD64__
for nasm on OS X.
Pass -D__AMD64__ to C++ compilation as well on AMD64, this will help
when we support AMD64 inline assembly.
Add support for automatically linking Homebrew keg-only gettext from
/usr/local/opt/gettext for ENABLE_NLS.
Fix copying Info.plist and vbam.icns to the .app bundle.
Add a key to the Info.plist to support sharp text on retina displays, as
per:
https://wiki.wxwidgets.org/WxMac-specific_topics#Retina_display_support
Set wxWidgets_USE_DEBUG to ON if CMAKE_BUILD_TYPE is "Debug". I'm not
sure this does anything or if I'm doing this correctly though.
Also set wxWidgets_USE_UNICODE to ON. Again, I'm not sure this does
anything or is in the right place.
Fix a bug in the config dir finding code in
wxvbamApp::GetConfigurationPath() updated in 8b8f2f7 to only use the
more top level dirs if there is a vbam.ini in them, not if they are
writable as well, and use the reverse order (starting with user local
dirs) to check for writable dirs and their writable parents. This fixes
a problem with the vbam.ini being written to the Plugins directory of
the .app bundle if it's writable instead of ~/Library/Application
Support/vbam as was intended.
2015-11-17 02:56:23 +00:00
|
|
|
# use Homebrew gettext if available
|
2018-02-24 19:39:29 +00:00
|
|
|
if(EXISTS "/usr/local/opt/gettext")
|
|
|
|
set(CMAKE_INCLUDE_PATH "${CMAKE_INCLUDE_PATH};/usr/local/opt/gettext/include")
|
|
|
|
set(CMAKE_LIBRARY_PATH "${CMAKE_LIBRARY_PATH};/usr/local/opt/gettext/lib")
|
|
|
|
set(CMAKE_PROGRAM_PATH "${CMAKE_PROGRAM_PATH};/usr/local/opt/gettext/bin")
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
if(ENABLE_LINK)
|
|
|
|
find_path(LIBINTL_INC libintl.h)
|
|
|
|
find_library(LIBINTL_LIB intl)
|
|
|
|
find_library(LIBICONV_LIB iconv)
|
|
|
|
if(LIBINTL_LIB)
|
|
|
|
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${LIBINTL_LIB})
|
|
|
|
set(VBAMCORE_LIBS ${VBAMCORE_LIBS} ${LIBINTL_LIB})
|
|
|
|
endif()
|
|
|
|
if(LIBICONV_LIB)
|
|
|
|
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${LIBICONV_LIB})
|
|
|
|
set(VBAMCORE_LIBS ${VBAMCORE_LIBS} ${LIBICONV_LIB})
|
|
|
|
endif()
|
|
|
|
include(CheckFunctionExists)
|
|
|
|
check_function_exists(gettext GETTEXT_FN)
|
|
|
|
if(NOT (LIBINTL_INC OR GETTEXT_FN))
|
|
|
|
message(FATAL_ERROR "NLS requires libintl/gettext")
|
|
|
|
endif()
|
|
|
|
include_directories(${LIBINTL_INC})
|
|
|
|
endif()
|
|
|
|
endif()
|
2011-02-24 13:06:17 +00:00
|
|
|
|
2017-09-19 13:58:48 +00:00
|
|
|
include(ProcessorCount)
|
|
|
|
ProcessorCount(num_cpus)
|
|
|
|
|
2019-03-20 01:41:25 +00:00
|
|
|
# Compiler stuff
|
|
|
|
|
|
|
|
if(CMAKE_C_COMPILER_ID STREQUAL Clang AND CMAKE_CXX_COMPILER_ID STREQUAL Clang)
|
|
|
|
include(LLVMToolchain)
|
|
|
|
endif()
|
2016-11-20 19:11:52 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL Clang)
|
2019-03-26 14:49:48 +00:00
|
|
|
unset(LTO_FLAGS)
|
2018-02-24 19:39:29 +00:00
|
|
|
if(ENABLE_LTO)
|
|
|
|
if(CMAKE_COMPILER_IS_GNUCXX)
|
2017-09-19 13:58:48 +00:00
|
|
|
if(num_cpus GREATER 1)
|
2018-02-24 19:39:29 +00:00
|
|
|
set(LTO_FLAGS -flto=${num_cpus} -ffat-lto-objects)
|
2017-09-19 13:58:48 +00:00
|
|
|
else()
|
2018-02-24 19:39:29 +00:00
|
|
|
set(LTO_FLAGS -flto -ffat-lto-objects)
|
2017-09-19 13:58:48 +00:00
|
|
|
endif()
|
2018-02-24 19:39:29 +00:00
|
|
|
else()
|
|
|
|
set(LTO_FLAGS -flto)
|
|
|
|
endif()
|
2019-03-26 14:49:48 +00:00
|
|
|
|
|
|
|
# check that LTO is not broken before enabling it
|
|
|
|
set(ORIG_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
|
|
|
|
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${LTO_FLAGS}")
|
|
|
|
|
|
|
|
include(CheckCXXSourceCompiles)
|
|
|
|
check_cxx_source_compiles("int main(int argc, char** argv) { return 0; }" LTO_WORKS)
|
|
|
|
|
|
|
|
set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS})
|
|
|
|
|
|
|
|
if(NOT LTO_WORKS)
|
|
|
|
message(WARNING "LTO does not seem to be working on your system, if using clang make sure LLVMGold is installed")
|
|
|
|
unset(LTO_FLAGS)
|
|
|
|
set(ENABLE_LTO OFF)
|
|
|
|
endif()
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
2016-11-23 11:13:33 +00:00
|
|
|
|
2017-10-17 17:26:37 +00:00
|
|
|
unset(MY_C_OPT_FLAGS)
|
|
|
|
|
|
|
|
if(X86_32 OR AMD64)
|
|
|
|
set(MY_C_OPT_FLAGS -mfpmath=sse -msse2)
|
|
|
|
endif()
|
|
|
|
|
2016-11-21 20:37:21 +00:00
|
|
|
# common optimization flags
|
2018-02-24 19:39:29 +00:00
|
|
|
if(NOT (APPLE AND CMAKE_CXX_COMPILER_ID STREQUAL Clang AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.3))
|
|
|
|
set(MY_C_OPT_FLAGS ${MY_C_OPT_FLAGS} -O2 -fomit-frame-pointer ${LTO_FLAGS})
|
|
|
|
else()
|
2017-02-03 20:39:10 +00:00
|
|
|
# LTO and -fomit-frame-pointer generate broken binaries on Lion with XCode 4.2 tools
|
2018-02-24 19:39:29 +00:00
|
|
|
set(MY_C_OPT_FLAGS ${MY_C_OPT_FLAGS} -O2)
|
|
|
|
endif()
|
2017-08-30 21:42:08 +00:00
|
|
|
|
|
|
|
# only use -mtune=generic on PC architectures
|
2018-02-24 19:39:29 +00:00
|
|
|
if(X86_32 OR AMD64)
|
|
|
|
set(MY_C_OPT_FLAGS ${MY_C_OPT_FLAGS} -mtune=generic)
|
|
|
|
endif()
|
2019-07-10 23:47:16 +00:00
|
|
|
|
2016-11-21 20:37:21 +00:00
|
|
|
# common debug flags
|
2018-02-24 19:39:29 +00:00
|
|
|
if(CMAKE_COMPILER_IS_GNUCXX)
|
2019-01-02 16:23:26 +00:00
|
|
|
set(MY_C_DBG_FLAGS -ggdb3 -Og -fno-omit-frame-pointer)
|
2018-02-24 19:39:29 +00:00
|
|
|
else()
|
2019-01-02 16:23:26 +00:00
|
|
|
set(MY_C_DBG_FLAGS -g -fno-omit-frame-pointer)
|
|
|
|
endif()
|
|
|
|
|
2019-09-02 20:17:52 +00:00
|
|
|
include(CheckCXXCompilerFlag)
|
|
|
|
|
2019-01-02 16:23:26 +00:00
|
|
|
if(ENABLE_ASAN)
|
|
|
|
string(TOLOWER ${CMAKE_BUILD_TYPE} build)
|
|
|
|
if(NOT build STREQUAL "debug")
|
|
|
|
message(FATAL_ERROR "asan requires debug build, set -DCMAKE_BUILD_TYPE=Debug")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
string(TOLOWER ${ENABLE_ASAN} SANITIZER)
|
|
|
|
if(SANITIZER STREQUAL "on" OR SANITIZER STREQUAL "true")
|
|
|
|
set(SANITIZER address)
|
|
|
|
endif()
|
2019-10-10 00:52:50 +00:00
|
|
|
list(PREPEND CMAKE_REQUIRED_LIBRARIES -fsanitize=${SANITIZER})
|
|
|
|
check_cxx_compiler_flag("-fsanitize=${SANITIZER}" ASAN_SUPPORT_FLAG)
|
2019-09-02 20:17:52 +00:00
|
|
|
if(${ASAN_SUPPORT_FLAG})
|
2019-10-10 00:52:50 +00:00
|
|
|
list(PREPEND MY_C_DBG_FLAGS -fsanitize=${SANITIZER})
|
2019-09-02 20:17:52 +00:00
|
|
|
else()
|
|
|
|
message(FATAL_ERROR "asan not available to compiler.")
|
|
|
|
endif()
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
2016-11-21 20:37:21 +00:00
|
|
|
|
2016-11-20 19:11:52 +00:00
|
|
|
# common flags
|
2019-10-08 22:52:06 +00:00
|
|
|
set(MY_C_FLAGS -pipe -Wformat -Wformat-security -feliminate-unused-debug-types)
|
|
|
|
|
|
|
|
if(NOT CMAKE_BUILD_TYPE MATCHES Debug)
|
|
|
|
list(APPEND MY_C_FLAGS -D_FORTIFY_SOURCE=2)
|
|
|
|
endif()
|
2017-03-08 00:15:02 +00:00
|
|
|
|
2019-02-22 14:53:51 +00:00
|
|
|
if(NOT (WIN32 OR X86_32)) # inline asm is not allowed with -fPIC
|
2018-02-24 19:39:29 +00:00
|
|
|
set(MY_C_FLAGS ${MY_C_FLAGS} -fPIC)
|
|
|
|
endif()
|
2016-11-20 19:11:52 +00:00
|
|
|
|
2017-03-12 03:19:47 +00:00
|
|
|
# check if ssp flags are supported for this version of gcc
|
2018-02-24 19:39:29 +00:00
|
|
|
if(CMAKE_COMPILER_IS_GNUCXX)
|
2018-08-10 23:35:49 +00:00
|
|
|
if(ENABLE_SSP)
|
|
|
|
check_cxx_compiler_flag(-fstack-protector-strong F_STACK_PROTECTOR_STRONG_FLAG)
|
2017-03-12 03:19:47 +00:00
|
|
|
|
2018-08-10 23:35:49 +00:00
|
|
|
if(F_STACK_PROTECTOR_STRONG_FLAG)
|
|
|
|
set(MY_C_FLAGS ${MY_C_FLAGS} -fstack-protector-strong)
|
2017-01-29 18:14:34 +00:00
|
|
|
|
2018-08-10 23:35:49 +00:00
|
|
|
check_cxx_compiler_flag("--param ssp-buffer-size=4" SSP_BUFFER_SIZE_FLAG)
|
2017-01-29 18:14:34 +00:00
|
|
|
|
2018-08-10 23:35:49 +00:00
|
|
|
if(SSP_BUFFER_SIZE_FLAG)
|
|
|
|
# we do not add it to MY_C_FLAGS because this breaks things like CMAKE_REQUIRED_LIBRARIES
|
|
|
|
# which misinterpret compiler flags without leading dashes
|
|
|
|
add_compile_options(--param ssp-buffer-size=4)
|
|
|
|
endif()
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
|
|
|
endif()
|
2017-01-29 18:14:34 +00:00
|
|
|
|
2019-01-30 22:29:06 +00:00
|
|
|
set(MY_C_FLAGS ${MY_C_FLAGS} -fopenmp)
|
|
|
|
endif()
|
|
|
|
|
2019-03-26 00:35:23 +00:00
|
|
|
if(CMAKE_CXX_COMPILER_ID STREQUAL GNU)
|
|
|
|
unset(COMPILER_COLOR_DIAGNOSTICS)
|
|
|
|
check_cxx_compiler_flag(-fdiagnostics-color=always COMPILER_COLOR_DIAGNOSTICS)
|
|
|
|
if(COMPILER_COLOR_DIAGNOSTICS)
|
|
|
|
add_compile_options(-fdiagnostics-color=always)
|
|
|
|
else()
|
|
|
|
unset(COMPILER_COLOR_DIAGNOSTICS)
|
|
|
|
check_cxx_compiler_flag(-fdiagnostics-color COMPILER_COLOR_DIAGNOSTICS)
|
|
|
|
if(COMPILER_COLOR_DIAGNOSTICS)
|
|
|
|
add_compile_options(-fdiagnostics-color)
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
elseif(CMAKE_CXX_COMPILER_ID STREQUAL Clang)
|
|
|
|
unset(COMPILER_COLOR_DIAGNOSTICS)
|
|
|
|
check_cxx_compiler_flag(-fcolor-diagnostics COMPILER_COLOR_DIAGNOSTICS)
|
|
|
|
if(COMPILER_COLOR_DIAGNOSTICS)
|
|
|
|
add_compile_options(-fcolor-diagnostics)
|
|
|
|
endif()
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
2016-11-20 19:11:52 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
if(MINGW)
|
|
|
|
set(MY_C_FLAGS ${MY_C_FLAGS} -static-libgcc -static-libstdc++)
|
|
|
|
endif()
|
|
|
|
|
2019-03-28 21:45:06 +00:00
|
|
|
if(CMAKE_BUILD_TYPE MATCHES Debug)
|
2018-02-24 19:39:29 +00:00
|
|
|
set(MY_C_FLAGS ${MY_C_FLAGS} ${MY_C_DBG_FLAGS} -Wall -Wextra)
|
|
|
|
else()
|
|
|
|
set(MY_C_FLAGS ${MY_C_FLAGS} ${MY_C_OPT_FLAGS} -Wno-error)
|
|
|
|
endif()
|
2016-11-20 19:11:52 +00:00
|
|
|
|
2019-04-25 16:22:07 +00:00
|
|
|
# for some reason this is necessary
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL FreeBSD)
|
|
|
|
set(MY_C_FLAGS -I/usr/local/include ${MY_C_FLAGS})
|
|
|
|
endif()
|
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
foreach(C_COMPILE_FLAG ${MY_C_FLAGS})
|
|
|
|
add_compile_options(${C_COMPILE_FLAG})
|
|
|
|
endforeach()
|
2016-11-20 19:11:52 +00:00
|
|
|
|
2019-08-31 22:58:59 +00:00
|
|
|
include(CheckCXXCompilerFlag)
|
|
|
|
|
2018-08-10 13:46:51 +00:00
|
|
|
set(MY_CXX_FLAGS -std=gnu++11 -fexceptions)
|
2017-03-08 00:15:02 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
foreach(ARG ${MY_CXX_FLAGS})
|
|
|
|
set(MY_CXX_FLAGS_STR "${MY_CXX_FLAGS_STR} ${ARG}")
|
|
|
|
endforeach()
|
2017-03-08 00:15:02 +00:00
|
|
|
|
2017-02-12 12:41:57 +00:00
|
|
|
# These must be set for C++ only, and we can't use generator expressions in
|
|
|
|
# ADD_COMPILE_OPTIONS because that's a cmake 3.3 feature and we need 2.8.12
|
|
|
|
# compat for Ubuntu 14.
|
2018-02-24 19:39:29 +00:00
|
|
|
string(REGEX REPLACE "<FLAGS>" "<FLAGS> ${MY_CXX_FLAGS_STR} " CMAKE_CXX_COMPILE_OBJECT ${CMAKE_CXX_COMPILE_OBJECT})
|
2016-11-21 21:53:16 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
foreach(ARG ${MY_C_FLAGS})
|
|
|
|
set(MY_C_FLAGS_STR "${MY_C_FLAGS_STR} ${ARG}")
|
|
|
|
endforeach()
|
2016-11-21 21:53:16 +00:00
|
|
|
|
|
|
|
# need all flags for linking, because of -flto etc.
|
2018-02-24 19:39:29 +00:00
|
|
|
set(CMAKE_C_LINK_EXECUTABLE "${CMAKE_C_LINK_EXECUTABLE} ${MY_C_FLAGS_STR}")
|
|
|
|
set(CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} ${MY_C_FLAGS_STR}")
|
2016-11-21 20:37:21 +00:00
|
|
|
|
2016-11-20 19:11:52 +00:00
|
|
|
# for the gcc -fstack-protector* flags we need libssp
|
2016-11-21 20:37:21 +00:00
|
|
|
# we also have to use the gcc- binutils for LTO to work
|
2018-02-24 19:39:29 +00:00
|
|
|
if(CMAKE_COMPILER_IS_GNUCXX)
|
|
|
|
if(ENABLE_LTO)
|
|
|
|
include(UseGCCBinUtilsWrappers)
|
|
|
|
endif()
|
2016-11-21 20:37:21 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
if(WIN32)
|
|
|
|
set(SSP_STATIC ON)
|
|
|
|
endif()
|
2016-11-21 20:37:21 +00:00
|
|
|
|
2018-08-10 23:35:49 +00:00
|
|
|
if(ENABLE_SSP)
|
|
|
|
find_package(SSP)
|
2016-11-21 20:37:21 +00:00
|
|
|
|
2018-08-10 23:35:49 +00:00
|
|
|
if(SSP_LIBRARY)
|
|
|
|
set(MY_C_LINKER_FLAGS ${MY_C_LINKER_FLAGS} ${SSP_LIBRARY})
|
|
|
|
endif()
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
2016-11-21 20:37:21 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
set(MY_C_LINKER_FLAGS ${MY_C_LINKER_FLAGS} -Wl,-allow-multiple-definition)
|
|
|
|
|
|
|
|
if(CMAKE_PREFIX_PATH)
|
|
|
|
list(GET CMAKE_PREFIX_PATH 0 prefix_path_first)
|
|
|
|
set(MY_C_LINKER_FLAGS ${MY_C_LINKER_FLAGS} "-Wl,-rpath-link=${prefix_path_first}/lib")
|
|
|
|
endif()
|
|
|
|
endif()
|
2017-03-08 00:15:02 +00:00
|
|
|
|
|
|
|
# set linker flags
|
2018-02-24 19:39:29 +00:00
|
|
|
foreach(ARG ${MY_C_LINKER_FLAGS})
|
|
|
|
set(MY_C_LINKER_FLAGS_STR "${MY_C_LINKER_FLAGS_STR} ${ARG}")
|
|
|
|
endforeach()
|
2017-03-08 00:15:02 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
set(CMAKE_C_LINK_EXECUTABLE "${CMAKE_C_LINK_EXECUTABLE} ${MY_C_LINKER_FLAGS_STR}")
|
|
|
|
set(CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} ${MY_C_LINKER_FLAGS_STR}")
|
2019-08-30 01:57:01 +00:00
|
|
|
elseif(MSVC)
|
|
|
|
if(CMAKE_BUILD_TYPE STREQUAL Debug)
|
|
|
|
add_compile_options(/W4)
|
|
|
|
else()
|
|
|
|
add_compile_options(/W0)
|
|
|
|
endif()
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
2011-02-26 12:11:06 +00:00
|
|
|
|
2016-11-20 19:11:52 +00:00
|
|
|
# Assembler flags
|
2008-06-06 10:17:20 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
if(ASM_ENABLED)
|
|
|
|
string(REGEX REPLACE "<FLAGS>" "-I${CMAKE_SOURCE_DIR}/src/filters/hq/asm/ -O1 -w-orphan-labels" CMAKE_ASM_NASM_COMPILE_OBJECT ${CMAKE_ASM_NASM_COMPILE_OBJECT})
|
|
|
|
endif()
|
2016-11-20 19:11:52 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
if(APPLE)
|
|
|
|
add_definitions(-DMACHO)
|
|
|
|
elseif("${CMAKE_SYSTEM}" MATCHES "Linux")
|
|
|
|
add_definitions(-DELF)
|
|
|
|
endif()
|
2015-05-18 03:04:34 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
if(AMD64)
|
|
|
|
add_definitions(-D__AMD64__)
|
|
|
|
endif()
|
2015-05-18 03:04:34 +00:00
|
|
|
|
2015-03-27 17:48:42 +00:00
|
|
|
add_subdirectory (fex)
|
2010-03-15 03:36:45 +00:00
|
|
|
|
2019-03-27 03:25:43 +00:00
|
|
|
set(
|
|
|
|
SRC_MAIN
|
2008-06-06 10:17:20 +00:00
|
|
|
src/Util.cpp
|
2015-04-18 06:53:55 +00:00
|
|
|
src/common/ConfigManager.cpp
|
|
|
|
src/common/dictionary.c
|
|
|
|
src/common/iniparser.c
|
2009-01-01 14:21:18 +00:00
|
|
|
src/common/Patch.cpp
|
|
|
|
src/common/memgzio.c
|
2011-05-24 07:49:00 +00:00
|
|
|
src/common/SoundSDL.cpp
|
2008-06-06 10:17:20 +00:00
|
|
|
)
|
|
|
|
|
2017-02-11 02:57:35 +00:00
|
|
|
if(MSVC)
|
2019-07-22 18:10:53 +00:00
|
|
|
set(SRC_MAIN ${SRC_MAIN} "dependencies/msvc/getopt.c")
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
2017-02-11 02:57:35 +00:00
|
|
|
|
2019-03-27 03:25:43 +00:00
|
|
|
set(
|
|
|
|
HDR_MAIN
|
2016-06-07 20:26:53 +00:00
|
|
|
src/System.h
|
|
|
|
src/Util.h
|
|
|
|
src/common/array.h
|
|
|
|
src/common/ConfigManager.h
|
|
|
|
src/common/dictionary.h
|
|
|
|
src/common/iniparser.h
|
|
|
|
src/common/memgzio.h
|
|
|
|
src/common/Port.h
|
|
|
|
src/common/SoundDriver.h
|
|
|
|
src/common/SoundSDL.h
|
|
|
|
)
|
|
|
|
|
2017-02-11 02:57:35 +00:00
|
|
|
if(MSVC)
|
2019-07-22 18:10:53 +00:00
|
|
|
set(HDR_MAIN ${HDR_MAIN} "dependencies/msvc/getopt.h")
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
2017-02-11 02:57:35 +00:00
|
|
|
|
2011-05-24 07:39:29 +00:00
|
|
|
if(ENABLE_FFMPEG)
|
2018-02-24 19:39:29 +00:00
|
|
|
set(SRC_MAIN ${SRC_MAIN} src/common/ffmpeg.cpp)
|
|
|
|
set(HDR_MAIN ${HDR_MAIN} src/common/ffmpeg.h)
|
|
|
|
endif()
|
2011-05-24 07:39:29 +00:00
|
|
|
|
2016-06-07 20:26:53 +00:00
|
|
|
if(ENABLE_NLS)
|
2018-02-24 19:39:29 +00:00
|
|
|
set(HDR_MAIN ${HDR_MAIN} src/NLS.h)
|
|
|
|
endif()
|
2016-06-07 20:26:53 +00:00
|
|
|
|
2019-03-27 03:25:43 +00:00
|
|
|
set(
|
|
|
|
SRC_GBA
|
2009-01-01 15:20:03 +00:00
|
|
|
src/gba/agbprint.cpp
|
2009-01-01 16:11:02 +00:00
|
|
|
src/gba/bios.cpp
|
|
|
|
src/gba/Cheats.cpp
|
2011-05-24 07:49:00 +00:00
|
|
|
src/gba/CheatSearch.cpp
|
2015-04-02 05:53:57 +00:00
|
|
|
src/gba/debugger-expr-lex.cpp
|
|
|
|
src/gba/debugger-expr-yacc.cpp
|
2009-01-01 16:11:02 +00:00
|
|
|
src/gba/EEprom.cpp
|
2015-03-27 22:50:11 +00:00
|
|
|
src/gba/ereader.cpp
|
2009-01-01 16:11:02 +00:00
|
|
|
src/gba/Flash.cpp
|
2009-01-01 15:20:03 +00:00
|
|
|
src/gba/GBA.cpp
|
|
|
|
src/gba/GBAGfx.cpp
|
2010-03-15 03:36:45 +00:00
|
|
|
src/gba/GBALink.cpp
|
|
|
|
src/gba/GBASockClient.cpp
|
2009-01-01 15:20:03 +00:00
|
|
|
src/gba/GBA-thumb.cpp
|
|
|
|
src/gba/GBA-arm.cpp
|
2009-10-09 14:47:41 +00:00
|
|
|
src/gba/gbafilter.cpp
|
2009-01-01 16:11:02 +00:00
|
|
|
src/gba/Globals.cpp
|
|
|
|
src/gba/Mode0.cpp
|
|
|
|
src/gba/Mode1.cpp
|
|
|
|
src/gba/Mode2.cpp
|
|
|
|
src/gba/Mode3.cpp
|
|
|
|
src/gba/Mode4.cpp
|
|
|
|
src/gba/Mode5.cpp
|
|
|
|
src/gba/RTC.cpp
|
|
|
|
src/gba/Sound.cpp
|
|
|
|
src/gba/Sram.cpp
|
2008-06-06 10:17:20 +00:00
|
|
|
)
|
|
|
|
|
2019-05-30 11:50:45 +00:00
|
|
|
if(ENABLE_DEBUGGER)
|
|
|
|
list(APPEND SRC_GBA
|
|
|
|
src/gba/BreakpointStructures.cpp
|
|
|
|
)
|
|
|
|
endif()
|
|
|
|
|
2019-03-27 03:25:43 +00:00
|
|
|
set(
|
|
|
|
HDR_GBA
|
2016-06-07 20:26:53 +00:00
|
|
|
src/gba/agbprint.h
|
|
|
|
src/gba/bios.h
|
|
|
|
src/gba/BreakpointStructures.h
|
|
|
|
src/gba/Cheats.h
|
|
|
|
src/gba/CheatSearch.h
|
|
|
|
src/gba/debugger-expr-yacc.hpp
|
|
|
|
src/gba/EEprom.h
|
|
|
|
src/gba/ereader.h
|
|
|
|
src/gba/Flash.h
|
|
|
|
src/gba/GBA.h
|
|
|
|
src/gba/GBAcpu.h
|
|
|
|
src/gba/gbafilter.h
|
|
|
|
src/gba/GBAGfx.h
|
|
|
|
src/gba/GBAinline.h
|
|
|
|
src/gba/GBALink.h
|
|
|
|
src/gba/GBASockClient.h
|
|
|
|
src/gba/Globals.h
|
|
|
|
src/gba/RTC.h
|
|
|
|
src/gba/Sound.h
|
|
|
|
src/gba/Sram.h
|
|
|
|
)
|
|
|
|
|
2019-03-27 03:25:43 +00:00
|
|
|
set(
|
|
|
|
SRC_GB
|
2009-01-01 14:52:03 +00:00
|
|
|
src/gb/GB.cpp
|
|
|
|
src/gb/gbCheats.cpp
|
|
|
|
src/gb/gbDis.cpp
|
|
|
|
src/gb/gbGfx.cpp
|
|
|
|
src/gb/gbGlobals.cpp
|
|
|
|
src/gb/gbMemory.cpp
|
|
|
|
src/gb/gbPrinter.cpp
|
|
|
|
src/gb/gbSGB.cpp
|
|
|
|
src/gb/gbSound.cpp
|
2009-01-01 14:43:18 +00:00
|
|
|
)
|
|
|
|
|
2019-03-27 03:25:43 +00:00
|
|
|
set(
|
|
|
|
HDR_GB
|
2016-06-07 20:26:53 +00:00
|
|
|
src/gb/gb.h
|
|
|
|
src/gb/gbCheats.h
|
|
|
|
src/gb/gbCodes.h
|
|
|
|
src/gb/gbCodesCB.h
|
|
|
|
src/gb/gbGlobals.h
|
|
|
|
src/gb/gbMemory.h
|
|
|
|
src/gb/gbPrinter.h
|
|
|
|
src/gb/gbSGB.h
|
|
|
|
src/gb/gbSound.h
|
|
|
|
)
|
|
|
|
|
2019-03-27 03:25:43 +00:00
|
|
|
set(
|
|
|
|
SRC_APU
|
2009-01-01 14:43:18 +00:00
|
|
|
src/apu/Blip_Buffer.cpp
|
|
|
|
src/apu/Effects_Buffer.cpp
|
|
|
|
src/apu/Gb_Apu.cpp
|
|
|
|
src/apu/Gb_Apu_State.cpp
|
|
|
|
src/apu/Gb_Oscs.cpp
|
|
|
|
src/apu/Multi_Buffer.cpp
|
2008-06-06 10:17:20 +00:00
|
|
|
)
|
|
|
|
|
2019-03-27 03:25:43 +00:00
|
|
|
set(
|
|
|
|
HDR_APU
|
2016-06-07 20:26:53 +00:00
|
|
|
src/apu/blargg_common.h #Unused(?) but in the VS projects
|
|
|
|
src/apu/blargg_config.h #Unused(?) but in the VS projects
|
|
|
|
src/apu/blargg_source.h
|
|
|
|
src/apu/Blip_Buffer.h
|
|
|
|
src/apu/Effects_Buffer.h
|
|
|
|
src/apu/Gb_Apu.h
|
|
|
|
src/apu/Gb_Oscs.h
|
|
|
|
src/apu/Multi_Buffer.h
|
|
|
|
)
|
|
|
|
|
2019-03-27 03:25:43 +00:00
|
|
|
set(
|
|
|
|
SRC_SDL
|
2008-06-06 10:17:20 +00:00
|
|
|
src/sdl/SDL.cpp
|
|
|
|
src/sdl/filters.cpp
|
|
|
|
src/sdl/text.cpp
|
2008-08-30 17:50:51 +00:00
|
|
|
src/sdl/inputSDL.cpp
|
2008-08-29 10:23:51 +00:00
|
|
|
src/sdl/expr.cpp
|
|
|
|
src/sdl/exprNode.cpp
|
|
|
|
src/sdl/expr-lex.cpp
|
2019-10-04 13:20:10 +00:00
|
|
|
src/common/version.cpp
|
2008-06-06 10:17:20 +00:00
|
|
|
)
|
|
|
|
|
2019-03-27 03:25:43 +00:00
|
|
|
set(
|
|
|
|
HDR_SDL
|
2016-06-07 20:26:53 +00:00
|
|
|
src/sdl/filters.h
|
|
|
|
src/sdl/text.h
|
|
|
|
src/sdl/inputSDL.h
|
|
|
|
src/sdl/expr.cpp.h
|
|
|
|
src/sdl/exprNode.h
|
2019-10-04 13:20:10 +00:00
|
|
|
src/common/version_cpp.h
|
2016-06-07 20:26:53 +00:00
|
|
|
)
|
|
|
|
|
2019-03-27 03:25:43 +00:00
|
|
|
set(
|
|
|
|
SRC_FILTERS
|
2009-01-01 13:02:35 +00:00
|
|
|
src/filters/2xSaI.cpp
|
|
|
|
src/filters/admame.cpp
|
|
|
|
src/filters/bilinear.cpp
|
|
|
|
src/filters/hq2x.cpp
|
|
|
|
src/filters/interframe.cpp
|
|
|
|
src/filters/pixel.cpp
|
|
|
|
src/filters/scanline.cpp
|
2011-05-25 11:55:46 +00:00
|
|
|
src/filters/simpleFilter.cpp
|
2015-03-19 01:44:47 +00:00
|
|
|
src/filters/xbrzfilter.cpp
|
|
|
|
src/filters/xBRZ/xbrz.cpp
|
2009-01-01 13:02:35 +00:00
|
|
|
)
|
|
|
|
|
2019-03-27 03:25:43 +00:00
|
|
|
set(
|
|
|
|
HDR_FILTERS
|
2016-06-07 20:26:53 +00:00
|
|
|
src/filters/hq2x.h
|
|
|
|
src/filters/interp.h
|
|
|
|
src/filters/lq2x.h
|
2019-08-22 16:55:06 +00:00
|
|
|
src/filters/xBRZ/xbrz_config.h
|
2016-06-07 20:26:53 +00:00
|
|
|
src/filters/xBRZ/xbrz.h
|
2019-08-22 16:55:06 +00:00
|
|
|
src/filters/xBRZ/xbrz_tools.h
|
2016-06-07 20:26:53 +00:00
|
|
|
)
|
|
|
|
|
2019-03-27 03:25:43 +00:00
|
|
|
set(
|
|
|
|
SRC_HQ_C
|
2009-01-01 13:02:35 +00:00
|
|
|
src/filters/hq/c/hq_implementation.cpp
|
2008-06-06 10:17:20 +00:00
|
|
|
)
|
|
|
|
|
2019-03-27 03:25:43 +00:00
|
|
|
set(
|
|
|
|
HDR_HQ_C
|
2016-06-07 20:26:53 +00:00
|
|
|
src/filters/hq/c/hq3x_pattern.h
|
|
|
|
src/filters/hq/c/hq4x_pattern.h
|
|
|
|
src/filters/hq/c/hq_base.h
|
|
|
|
src/filters/hq/c/hq_shared.h
|
|
|
|
)
|
|
|
|
|
2019-03-27 03:25:43 +00:00
|
|
|
set(
|
|
|
|
SRC_HQ_ASM
|
2009-01-01 13:02:35 +00:00
|
|
|
src/filters/hq/asm/hq3x_16.asm
|
|
|
|
src/filters/hq/asm/hq3x_32.asm
|
|
|
|
src/filters/hq/asm/hq4x_16.asm
|
|
|
|
src/filters/hq/asm/hq4x_32.asm
|
|
|
|
src/filters/hq/asm/hq3x32.cpp
|
2008-06-06 10:17:20 +00:00
|
|
|
)
|
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
if(ENABLE_ASM_SCALERS)
|
|
|
|
set(SRC_FILTERS ${SRC_FILTERS} ${SRC_HQ_ASM})
|
|
|
|
if(ENABLE_MMX)
|
|
|
|
set(SRC_FILTERS ${SRC_FILTERS} src/filters/2xSaImmx.asm)
|
|
|
|
endif()
|
|
|
|
else()
|
|
|
|
set(SRC_FILTERS ${SRC_FILTERS} ${SRC_HQ_C})
|
|
|
|
set(HDR_FILTERS ${HDR_FILTERS} ${HDR_HQ_C})
|
|
|
|
add_definitions(-DNO_ASM)
|
|
|
|
endif()
|
|
|
|
|
2019-05-30 11:50:45 +00:00
|
|
|
|
|
|
|
set(
|
|
|
|
SRC_DEBUGGER
|
|
|
|
src/gba/armdis.cpp
|
|
|
|
src/gba/elf.cpp
|
|
|
|
)
|
|
|
|
|
|
|
|
set(
|
|
|
|
HDR_DEBUGGER
|
|
|
|
src/gba/armdis.h
|
|
|
|
src/gba/elf.h
|
|
|
|
)
|
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
if(ENABLE_DEBUGGER)
|
2019-03-27 03:25:43 +00:00
|
|
|
set(
|
|
|
|
SRC_DEBUGGER
|
2019-05-30 11:50:45 +00:00
|
|
|
${SRC_DEBUGGER}
|
2009-01-01 16:11:02 +00:00
|
|
|
src/gba/remote.cpp
|
2008-06-16 20:18:49 +00:00
|
|
|
)
|
2019-03-27 03:25:43 +00:00
|
|
|
set(
|
|
|
|
HDR_DEBUGGER
|
2019-05-30 11:50:45 +00:00
|
|
|
${HDR_DEBUGGER}
|
2016-06-07 20:26:53 +00:00
|
|
|
src/gba/remote.h
|
|
|
|
)
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
2008-06-16 20:18:49 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
include_directories(
|
2008-06-06 16:42:31 +00:00
|
|
|
${ZLIB_INCLUDE_DIR}
|
2010-03-15 03:36:45 +00:00
|
|
|
fex
|
2008-10-20 16:30:07 +00:00
|
|
|
${PNG_INCLUDE_DIR}
|
2015-11-19 02:34:38 +00:00
|
|
|
${SDL2_INCLUDE_DIR}
|
2008-06-06 10:17:20 +00:00
|
|
|
)
|
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
if(ENABLE_FFMPEG)
|
|
|
|
include_directories(
|
2012-05-23 06:19:44 +00:00
|
|
|
${FFMPEG_INCLUDE_DIRS}
|
|
|
|
)
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
2012-05-23 06:19:44 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
add_library(
|
2008-06-06 10:17:20 +00:00
|
|
|
vbamcore
|
2015-05-10 22:54:19 +00:00
|
|
|
STATIC
|
2008-06-06 10:17:20 +00:00
|
|
|
${PROJECT_SRCS}
|
|
|
|
${SRC_MAIN}
|
2016-06-07 20:26:53 +00:00
|
|
|
${HDR_MAIN}
|
2009-01-01 15:20:03 +00:00
|
|
|
${SRC_GBA}
|
2016-06-07 20:26:53 +00:00
|
|
|
${HDR_GBA}
|
2009-01-01 14:52:03 +00:00
|
|
|
${SRC_GB}
|
2016-06-07 20:26:53 +00:00
|
|
|
${HDR_GB}
|
2009-01-01 14:43:18 +00:00
|
|
|
${SRC_APU}
|
2016-06-07 20:26:53 +00:00
|
|
|
${HDR_APU}
|
2009-01-01 13:02:35 +00:00
|
|
|
${SRC_FILTERS}
|
2016-06-07 20:26:53 +00:00
|
|
|
${HDR_FILTERS}
|
2008-06-16 20:18:49 +00:00
|
|
|
${SRC_DEBUGGER}
|
2016-06-07 20:26:53 +00:00
|
|
|
${HDR_DEBUGGER}
|
2008-06-06 10:17:20 +00:00
|
|
|
)
|
2019-10-11 13:56:34 +00:00
|
|
|
add_dependencies(vbamcore generate)
|
2016-07-30 23:00:38 +00:00
|
|
|
set_property(TARGET vbamcore PROPERTY CXX_STANDARD 11)
|
|
|
|
set_property(TARGET vbamcore PROPERTY CXX_STANDARD_REQUIRED ON)
|
2008-06-06 10:17:20 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
if(ENABLE_SDL)
|
|
|
|
add_executable(
|
2008-06-06 10:17:20 +00:00
|
|
|
vbam
|
|
|
|
WIN32
|
|
|
|
${SRC_SDL}
|
2016-06-07 20:26:53 +00:00
|
|
|
${HDR_SDL}
|
2008-06-06 10:17:20 +00:00
|
|
|
)
|
2016-07-30 23:00:38 +00:00
|
|
|
set_property(TARGET vbam PROPERTY CXX_STANDARD 11)
|
|
|
|
set_property(TARGET vbam PROPERTY CXX_STANDARD_REQUIRED ON)
|
2008-06-06 10:17:20 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
if(WIN32)
|
|
|
|
set(WIN32_LIBRARIES wsock32 ws2_32)
|
|
|
|
endif()
|
2008-06-06 16:42:31 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
if(ENABLE_LIRC)
|
|
|
|
set(LIRC_CLIENT_LIBRARY lirc_client)
|
|
|
|
endif()
|
2008-08-03 21:02:37 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
target_link_libraries(
|
2008-06-06 10:17:20 +00:00
|
|
|
vbam
|
2011-05-25 11:55:46 +00:00
|
|
|
${VBAMCORE_LIBS}
|
2008-06-06 16:42:31 +00:00
|
|
|
${WIN32_LIBRARIES}
|
2008-08-03 21:02:37 +00:00
|
|
|
${LIRC_CLIENT_LIBRARY}
|
2008-06-06 10:17:20 +00:00
|
|
|
)
|
2018-02-24 19:39:29 +00:00
|
|
|
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/vbam${CMAKE_EXECUTABLE_SUFFIX} DESTINATION ${CMAKE_INSTALL_FULL_BINDIR})
|
2016-12-10 23:27:18 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
if(WIN32)
|
2019-03-27 03:25:43 +00:00
|
|
|
install(
|
|
|
|
FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/sdl/vbam.cfg-example
|
|
|
|
DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}
|
|
|
|
RENAME vbam.cfg
|
|
|
|
)
|
2018-02-24 19:39:29 +00:00
|
|
|
else()
|
2019-03-27 03:25:43 +00:00
|
|
|
install(
|
|
|
|
FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/sdl/vbam.cfg-example
|
|
|
|
DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}
|
|
|
|
RENAME vbam.cfg
|
|
|
|
)
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
|
|
|
endif()
|
2008-06-06 10:17:20 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
if(ENABLE_WX)
|
2011-05-25 11:55:46 +00:00
|
|
|
add_subdirectory(src/wx)
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
2011-05-25 11:55:46 +00:00
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
if(ENABLE_WX)
|
2011-02-24 17:46:59 +00:00
|
|
|
# Native Language Support
|
2018-02-24 19:39:29 +00:00
|
|
|
if(ENABLE_NLS)
|
2011-02-24 17:46:59 +00:00
|
|
|
add_subdirectory(po)
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/vba-over.ini DESTINATION ${CMAKE_INSTALL_FULL_DATADIR}/vbam)
|
2015-05-18 00:28:34 +00:00
|
|
|
|
|
|
|
# manual pages
|
2018-02-24 19:39:29 +00:00
|
|
|
if(UNIX)
|
|
|
|
if(ENABLE_SDL)
|
|
|
|
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/debian/vbam.6 DESTINATION ${CMAKE_INSTALL_FULL_MANDIR}/man6)
|
|
|
|
endif()
|
|
|
|
if(ENABLE_WX)
|
|
|
|
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/debian/visualboyadvance-m.6 DESTINATION ${CMAKE_INSTALL_FULL_MANDIR}/man6)
|
|
|
|
endif()
|
|
|
|
endif()
|
2015-05-18 00:28:34 +00:00
|
|
|
|
2017-02-12 03:55:01 +00:00
|
|
|
# linux data and icon files
|
2018-02-24 19:39:29 +00:00
|
|
|
if(NOT WIN32 AND NOT APPLE)
|
|
|
|
if(ENABLE_WX)
|
|
|
|
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/wx/wxvbam.desktop DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications)
|
|
|
|
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/wx/wxvbam.appdata.xml DESTINATION ${CMAKE_INSTALL_PREFIX}/share/appdata)
|
|
|
|
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src/wx/icons/sizes/ DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor)
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
|
|
|
set(CPACK_GENERATOR "ZIP")
|
2015-06-15 13:00:47 +00:00
|
|
|
set(CPACK_SOURCE_GENERATOR "TGZ")
|
2018-02-24 19:39:29 +00:00
|
|
|
set(CPACK_PACKAGE_VERSION_MAJOR "2")
|
|
|
|
set(CPACK_PACKAGE_VERSION_MINOR "0")
|
|
|
|
set(CPACK_PACKAGE_VERSION_PATCH "0-Git-" ${COMMITHASH})
|
2015-06-15 13:20:20 +00:00
|
|
|
list(APPEND CPACK_SOURCE_IGNORE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/dependencies")
|
2018-02-24 19:39:29 +00:00
|
|
|
include(CPack)
|