2024-03-10 00:19:43 +00:00
|
|
|
cmake_minimum_required(VERSION 3.19)
|
2024-03-13 18:13:55 +00:00
|
|
|
cmake_policy(VERSION 3.19...3.28.3)
|
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
|
|
|
|
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
|
|
|
|
2022-11-28 18:27:06 +00:00
|
|
|
if(WIN32)
|
|
|
|
include(RemoveStrawberryPerlFromPATH)
|
|
|
|
endif()
|
|
|
|
|
2020-02-08 22:53:53 +00:00
|
|
|
if(UPDATE_APPCAST)
|
|
|
|
include(UpdateAppcast)
|
|
|
|
endif()
|
|
|
|
|
2020-02-08 23:22:31 +00:00
|
|
|
if(TAG_RELEASE)
|
|
|
|
include(MakeReleaseCommitAndTag)
|
|
|
|
endif()
|
|
|
|
|
2024-03-06 21:58:43 +00:00
|
|
|
set(VCPKG_DEPS pkgconf zlib pthreads "sdl2[samplerate]" gettext wxwidgets)
|
2020-08-26 10:07:04 +00:00
|
|
|
|
|
|
|
set(VCPKG_DEPS_OPTIONAL
|
2023-04-11 23:17:06 +00:00
|
|
|
sfml ENABLE_LINK
|
2020-08-26 10:07:04 +00:00
|
|
|
ffmpeg ENABLE_FFMPEG
|
|
|
|
)
|
cmake: Visual Studio support improvements.
Add support for vcpkg ffmpeg, this requires using someone's
FindFFmpeg.cmake instead of relying on pkg-config, since vcpkg does not
have pkg-config.
Do not use the ffmpeg from vcpkg on appveyor however, because that
pushes the build cache generation over the time limit for jobs.
Add secur32 and bcrypt to the list of ffmpeg libs on windows, these are
standard windows libraries.
Change some code in ffmpeg.cpp to remove C-style casts of struct
initializers, which are illegal in MSVC.
Add the INT64_C and UINT64_C macros missing in MSVC's stdint.h (if not
defined) to ffmpeg.h before the ffmpeg headers are included, because
they rely on them.
Rewrite the wxWidgets finding code for the vcpkg wxWidgets to be nicer
and work correctly for debug and static builds.
Remove all /W* and /w* warnings options from cmake compiler flags, and
replace them with /W4 for debug builds, and /w (no warnings) for release
modes.
When building a static binary, remove all /MD* flags from cmake compiler
flags, and use /MT for static release builds and /MTd for static debug
builds.
Improve the vcpkg toolchain wrapper to only rebuild the vcpkg binary if
there were git updates.
Redo the handling of SDL2 and SDL_main. Only link SDL2Main to the SDL
binary and don't use the definitions.
Update CMakeSettings.json to use Ninja and include static
configurations.
Use CMAKE_PROJECT_DIR instead of CMAKE_SOURCE_DIR to determine the vcpkg
root, as CMAKE_SOURCE_DIR is sometimes set incorrectly in the 2017 GUI.
Add /nodefaultlib:libcmt to the debug build link flags, as in debug
builds libcmtd is used and libcmt should not be.
Add /subsystem:console to debug build link flags to produce a windows
console app for debug builds, like we do for mingw builds. To do this,
define a WIN32_CONSOLE_APP macro and if set, define a main() that calls
WinMain().
Call wxMesdsageOutput::Set() in OnInit with an instance of
wxMessageOutputStderr for windows debug builds to make sure the --help
text etc. goes to the console instead of a popup box.
Update the Visual Studio related text in README.md.
Fix dynamic debug builds by linking to the debug version of SDL2 and
copying the debug version of the dll to the build dir.
Fix issue in MainFrame::BindAppIcon with the function we are using not
being found in a Windows DLL in debug builds by using
wxDynamicLibrary::GetSymboolAorW() instead of GetSymbol().
Enable LTO for MSVC in Release modes, if the option is set.
Change appveyor config to use an 8 item build matrix of
x64/x86 / Release/Debug / Static/Dynamic. And test the binary in debug
modes by running --help.
When copying the wxrc.exe out of the build tree, copy both the release
and debug versions, this is so that appveyor caching of vcpkg works,
since the build trees are not cached.
Add some necessary win32 libraries to the SDL binary. And enable
building it on appveyor.
Fix #465.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-12-10 11:13:58 +00:00
|
|
|
|
2024-03-10 22:58:25 +00:00
|
|
|
if(WIN32)
|
|
|
|
find_program(POWERSHELL
|
|
|
|
NAMES powershell.exe pwsh.exe
|
|
|
|
HINTS "/Windows/System32/WindowsPowerShell/v1.0"
|
|
|
|
REQUIRED)
|
|
|
|
else()
|
2024-03-15 18:32:24 +00:00
|
|
|
find_program(POWERSHELL pwsh)
|
2024-03-10 22:58:25 +00:00
|
|
|
endif()
|
|
|
|
|
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
|
|
|
|
Refactor cmake ccache support and support MSVC.
Don't disable ccache for msys+ninja anymore, since the mingw ccache
works now and there is no reason to use the msys ccache anymore.
Use RULE_LAUNCH_COMPILE only on cmake versions < 3.4.0, because this
currently breaks resource compilation with visual studio and the windows
native ccache from chocolatey, this needs to be fixed in ccache.
On cmake 3.4.0 and greater, set the variables
CMAKE_<LANG>_COMPILER_LAUNCHER instead. This has the effect of using
ccache for C, C++ and nasm, but not for the resource file, avoiding the
problem with visual studio, which has a more recent cmake. This must be
done before the project() call.
TODO: Currently the Visual Studio build with ccache from chocolatey
works correctly, ccache is being invoked from ninja, but no cache files
are being created. This is being followed up with the chocolatey package
maintainer and upstream if necessary. The resource compiler issue also
needs to be fixed upstream.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-07-30 22:27:21 +00:00
|
|
|
# Use ccache if available and not already enabled on the command line.
|
|
|
|
# This has to be done before the project() call.
|
2022-06-15 01:00:13 +00:00
|
|
|
if(NOT CMAKE_CXX_COMPILER_LAUNCHER)
|
Refactor cmake ccache support and support MSVC.
Don't disable ccache for msys+ninja anymore, since the mingw ccache
works now and there is no reason to use the msys ccache anymore.
Use RULE_LAUNCH_COMPILE only on cmake versions < 3.4.0, because this
currently breaks resource compilation with visual studio and the windows
native ccache from chocolatey, this needs to be fixed in ccache.
On cmake 3.4.0 and greater, set the variables
CMAKE_<LANG>_COMPILER_LAUNCHER instead. This has the effect of using
ccache for C, C++ and nasm, but not for the resource file, avoiding the
problem with visual studio, which has a more recent cmake. This must be
done before the project() call.
TODO: Currently the Visual Studio build with ccache from chocolatey
works correctly, ccache is being invoked from ninja, but no cache files
are being created. This is being followed up with the chocolatey package
maintainer and upstream if necessary. The resource compiler issue also
needs to be fixed upstream.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-07-30 22:27:21 +00:00
|
|
|
find_program(CCACHE_EXECUTABLE ccache)
|
|
|
|
if(CCACHE_EXECUTABLE)
|
|
|
|
message(STATUS "Enabling ccache")
|
|
|
|
|
2022-02-02 22:27:39 +00:00
|
|
|
set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_EXECUTABLE} CACHE STRING "C compiler launcher" FORCE)
|
|
|
|
set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_EXECUTABLE} CACHE STRING "C++ compiler launcher" FORCE)
|
|
|
|
set(CMAKE_ASM_NASM_COMPILER_LAUNCHER ${CCACHE_EXECUTABLE} CACHE STRING "nasm assembler launcher" FORCE)
|
Refactor cmake ccache support and support MSVC.
Don't disable ccache for msys+ninja anymore, since the mingw ccache
works now and there is no reason to use the msys ccache anymore.
Use RULE_LAUNCH_COMPILE only on cmake versions < 3.4.0, because this
currently breaks resource compilation with visual studio and the windows
native ccache from chocolatey, this needs to be fixed in ccache.
On cmake 3.4.0 and greater, set the variables
CMAKE_<LANG>_COMPILER_LAUNCHER instead. This has the effect of using
ccache for C, C++ and nasm, but not for the resource file, avoiding the
problem with visual studio, which has a more recent cmake. This must be
done before the project() call.
TODO: Currently the Visual Studio build with ccache from chocolatey
works correctly, ccache is being invoked from ninja, but no cache files
are being created. This is being followed up with the chocolatey package
maintainer and upstream if necessary. The resource compiler issue also
needs to be fixed upstream.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2020-07-30 22:27:21 +00:00
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
2024-03-15 16:19:01 +00:00
|
|
|
find_package(Git)
|
|
|
|
|
|
|
|
# Make sure we pull in the submodules on windows and mingw.
|
|
|
|
if(GIT_FOUND AND (WIN32 OR MINGW))
|
|
|
|
# Win32 deps submodule
|
|
|
|
set(SUBMODULE_MANUAL_UPDATE FALSE)
|
|
|
|
|
|
|
|
if(EXISTS "${CMAKE_SOURCE_DIR}/.git" AND NOT EXISTS "${CMAKE_SOURCE_DIR}/dependencies/mingw-xaudio/include")
|
|
|
|
set(SUBMODULE_MANUAL_UPDATE TRUE)
|
|
|
|
execute_process(
|
|
|
|
COMMAND "${GIT_EXECUTABLE}" submodule update --init --remote --recursive
|
|
|
|
RESULT_VARIABLE SUBMODULE_UPDATE_STATUS
|
|
|
|
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
|
|
|
)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(NOT EXISTS "${CMAKE_SOURCE_DIR}/dependencies/mingw-xaudio/include")
|
|
|
|
if(NOT (SUBMODULE_MANUAL_UPDATE AND SUBMODULE_UPDATE_STATUS EQUAL 0))
|
|
|
|
message(FATAL_ERROR "Please pull in git submodules, e.g.\nrun: git submodule update --init --remote --recursive")
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
2023-08-27 08:04:57 +00:00
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
2024-03-13 18:13:55 +00:00
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED True)
|
|
|
|
set(CMAKE_C_STANDARD 11)
|
|
|
|
set(CMAKE_C_STANDARD_REQUIRED True)
|
2010-03-15 03:36:45 +00:00
|
|
|
|
2023-08-26 02:31:31 +00:00
|
|
|
project(VBA-M C CXX)
|
2016-11-20 19:11:52 +00:00
|
|
|
|
2024-03-10 00:19:43 +00:00
|
|
|
find_package(PkgConfig)
|
|
|
|
|
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()
|
|
|
|
|
2023-02-21 20:53:20 +00:00
|
|
|
if(NOT CMAKE_BUILD_TYPE)
|
|
|
|
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Build Type" FORCE)
|
2022-02-02 22:27:39 +00:00
|
|
|
elseif(NOT CMAKE_BUILD_TYPE MATCHES "^(Release|Debug|RelWithDebInfo|MinSizeRel)$")
|
|
|
|
message(FATAL_ERROR "Invalid CMAKE_BUILD_TYPE: '${CMAKE_BUILD_TYPE}', must be one of: 'Release', 'Debug', 'RelWithDebInfo' or 'MinSizeRel'")
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
2016-11-20 19:11:52 +00:00
|
|
|
|
2023-04-12 02:43:13 +00:00
|
|
|
# Link debug libs for RelWithDebInfo
|
|
|
|
if(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
|
|
|
|
set(CMAKE_MAP_IMPORTED_CONFIG_RELWITHDEBINFO "Debug")
|
|
|
|
endif()
|
|
|
|
|
2020-07-10 13:40:05 +00:00
|
|
|
include(CTest)
|
|
|
|
if(BUILD_TESTING)
|
|
|
|
enable_testing()
|
|
|
|
endif()
|
|
|
|
|
2024-03-15 16:19:01 +00:00
|
|
|
include(GNUInstallDirs)
|
|
|
|
include(Options)
|
|
|
|
include(Architecture)
|
|
|
|
include(Toolchain)
|
2019-10-05 02:37:05 +00:00
|
|
|
|
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})
|
|
|
|
|
2020-05-08 02:06:00 +00:00
|
|
|
if(NOT HTTPS)
|
2024-03-15 16:19:01 +00:00
|
|
|
add_compile_definitions(NO_HTTPS)
|
2019-07-03 23:28:48 +00:00
|
|
|
endif()
|
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
if(ENABLE_GBA_LOGGING)
|
2024-03-15 16:19:01 +00:00
|
|
|
add_compile_definitions(GBA_LOGGING )
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
2024-03-15 16:19:01 +00:00
|
|
|
|
2011-05-24 07:39:29 +00:00
|
|
|
if(ENABLE_MMX)
|
2024-03-15 16:19:01 +00:00
|
|
|
add_compile_definitions(MMX)
|
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
|
|
|
|
2024-03-13 18:13:55 +00:00
|
|
|
if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
|
2017-10-07 21:00:47 +00:00
|
|
|
include(GitTagVersion)
|
2024-03-15 23:05:09 +00:00
|
|
|
git_version(VBAM_VERSION VBAM_REVISION VBAM_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)
|
2020-03-05 15:04:19 +00:00
|
|
|
|
|
|
|
# Make sure old tags are gone from all clones.
|
|
|
|
execute_process(
|
|
|
|
COMMAND ${GIT_EXECUTABLE} tag -l
|
|
|
|
OUTPUT_VARIABLE git_tags
|
|
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
|
|
)
|
|
|
|
|
|
|
|
string(REGEX REPLACE ";" "\\\\;" git_tags_lines "${git_tags}")
|
|
|
|
string(REGEX REPLACE "\r?\n" ";" git_tags_lines "${git_tags_lines}")
|
|
|
|
|
|
|
|
set(found_old_tags FALSE)
|
|
|
|
|
|
|
|
foreach(tag ${git_tags_lines})
|
|
|
|
if(NOT tag MATCHES "^v[0-9]")
|
|
|
|
set(found_old_tags TRUE)
|
|
|
|
break()
|
|
|
|
endif()
|
|
|
|
endforeach()
|
|
|
|
|
|
|
|
if(found_old_tags)
|
|
|
|
# Delete all tags and fetch them from the origin.
|
|
|
|
|
|
|
|
foreach(tag ${git_tags_lines})
|
|
|
|
execute_process(
|
|
|
|
COMMAND ${GIT_EXECUTABLE} tag -d ${tag}
|
|
|
|
OUTPUT_QUIET
|
|
|
|
ERROR_QUIET
|
|
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
|
|
)
|
|
|
|
endforeach()
|
|
|
|
|
|
|
|
execute_process(
|
2020-03-07 11:36:40 +00:00
|
|
|
COMMAND ${GIT_EXECUTABLE} fetch --tags origin
|
2020-03-05 15:04:19 +00:00
|
|
|
OUTPUT_QUIET
|
|
|
|
ERROR_QUIET
|
|
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
|
|
)
|
|
|
|
endif()
|
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
|
2024-03-15 23:05:09 +00:00
|
|
|
if(NOT VBAM_VERSION)
|
2017-10-12 02:17:25 +00:00
|
|
|
include(ChangeLogVersion)
|
2024-03-15 23:05:09 +00:00
|
|
|
changelog_version(VBAM_VERSION VBAM_REVISION VBAM_VERSION_RELEASE)
|
2017-08-27 20:15:29 +00:00
|
|
|
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
|
2021-11-01 01:23:34 +00:00
|
|
|
if(X86_64 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 X86_64 yet.")
|
2018-02-24 19:39:29 +00:00
|
|
|
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
|
|
|
|
2024-03-06 21:58:43 +00:00
|
|
|
if(NOT WIN32)
|
|
|
|
find_library(PTHREAD_LIB pthread)
|
|
|
|
if(PTHREAD_LIB)
|
|
|
|
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${PTHREAD_LIB})
|
2024-03-17 01:18:36 +00:00
|
|
|
set(VBAM_PTHREAD_LIB ${PTHREAD_LIB})
|
2024-03-06 21:58:43 +00:00
|
|
|
endif()
|
|
|
|
elseif(MINGW)
|
|
|
|
if(NOT VBAM_STATIC)
|
|
|
|
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} -lpthread)
|
2024-03-17 01:18:36 +00:00
|
|
|
set(VBAM_PTHREAD_LIB -lpthread)
|
2024-03-06 21:58:43 +00:00
|
|
|
else()
|
|
|
|
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} "-Wl,-Bstatic -lwinpthread -Wl,-Bdynamic")
|
2024-03-17 01:18:36 +00:00
|
|
|
set(VBAM_PTHREAD_LIB "-Wl,-Bstatic -lwinpthread -Wl,-Bdynamic")
|
2024-03-06 21:58:43 +00:00
|
|
|
endif()
|
|
|
|
else()
|
|
|
|
find_package(PThreads4W)
|
|
|
|
if(PThreads4W_FOUND)
|
|
|
|
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} PThreads4W::PThreads4W)
|
2024-03-17 01:18:36 +00:00
|
|
|
set(VBAM_PTHREAD_LIB PThreads4W::PThreads4W)
|
2024-03-06 21:58:43 +00:00
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
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)
|
cmake: Visual Studio support improvements.
Add support for vcpkg ffmpeg, this requires using someone's
FindFFmpeg.cmake instead of relying on pkg-config, since vcpkg does not
have pkg-config.
Do not use the ffmpeg from vcpkg on appveyor however, because that
pushes the build cache generation over the time limit for jobs.
Add secur32 and bcrypt to the list of ffmpeg libs on windows, these are
standard windows libraries.
Change some code in ffmpeg.cpp to remove C-style casts of struct
initializers, which are illegal in MSVC.
Add the INT64_C and UINT64_C macros missing in MSVC's stdint.h (if not
defined) to ffmpeg.h before the ffmpeg headers are included, because
they rely on them.
Rewrite the wxWidgets finding code for the vcpkg wxWidgets to be nicer
and work correctly for debug and static builds.
Remove all /W* and /w* warnings options from cmake compiler flags, and
replace them with /W4 for debug builds, and /w (no warnings) for release
modes.
When building a static binary, remove all /MD* flags from cmake compiler
flags, and use /MT for static release builds and /MTd for static debug
builds.
Improve the vcpkg toolchain wrapper to only rebuild the vcpkg binary if
there were git updates.
Redo the handling of SDL2 and SDL_main. Only link SDL2Main to the SDL
binary and don't use the definitions.
Update CMakeSettings.json to use Ninja and include static
configurations.
Use CMAKE_PROJECT_DIR instead of CMAKE_SOURCE_DIR to determine the vcpkg
root, as CMAKE_SOURCE_DIR is sometimes set incorrectly in the 2017 GUI.
Add /nodefaultlib:libcmt to the debug build link flags, as in debug
builds libcmtd is used and libcmt should not be.
Add /subsystem:console to debug build link flags to produce a windows
console app for debug builds, like we do for mingw builds. To do this,
define a WIN32_CONSOLE_APP macro and if set, define a main() that calls
WinMain().
Call wxMesdsageOutput::Set() in OnInit with an instance of
wxMessageOutputStderr for windows debug builds to make sure the --help
text etc. goes to the console instead of a popup box.
Update the Visual Studio related text in README.md.
Fix dynamic debug builds by linking to the debug version of SDL2 and
copying the debug version of the dll to the build dir.
Fix issue in MainFrame::BindAppIcon with the function we are using not
being found in a Windows DLL in debug builds by using
wxDynamicLibrary::GetSymboolAorW() instead of GetSymbol().
Enable LTO for MSVC in Release modes, if the option is set.
Change appveyor config to use an 8 item build matrix of
x64/x86 / Release/Debug / Static/Dynamic. And test the binary in debug
modes by running --help.
When copying the wxrc.exe out of the build tree, copy both the release
and debug versions, this is so that appveyor caching of vcpkg works,
since the build trees are not cached.
Add some necessary win32 libraries to the SDL binary. And enable
building it on appveyor.
Fix #465.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-12-10 11:13:58 +00:00
|
|
|
find_package(SDL2 REQUIRED)
|
2011-02-24 11:14:59 +00:00
|
|
|
|
2024-03-08 23:41:26 +00:00
|
|
|
# Add libsamplerate to SDL2 with vcpkg
|
|
|
|
unset(SDL2_LIBRARY_TEMP)
|
|
|
|
if(CMAKE_TOOLCHAIN_FILE MATCHES "vcpkg")
|
|
|
|
if(WIN32)
|
|
|
|
unset(arch_suffix)
|
|
|
|
unset(path_prefix)
|
|
|
|
if(VCPKG_TARGET_TRIPLET MATCHES -static)
|
|
|
|
set(arch_suffix -static)
|
|
|
|
endif()
|
|
|
|
if(CMAKE_BUILD_TYPE MATCHES "^(Debug|RelWithDebInfo)$")
|
|
|
|
set(path_prefix debug)
|
|
|
|
endif()
|
|
|
|
set(installed_prefix ${_VCPKG_INSTALLED_DIR}/${WINARCH}-windows${arch_suffix}/${path_prefix})
|
|
|
|
|
|
|
|
SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${installed_prefix}/lib/samplerate.lib)
|
|
|
|
else()
|
|
|
|
SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} -lsamplerate)
|
|
|
|
endif()
|
2019-04-15 03:28:18 +00:00
|
|
|
endif()
|
|
|
|
|
2024-03-16 23:45:13 +00:00
|
|
|
set(VBAM_SDL2_LIBS SDL2::SDL2 ${SDL2_LIBRARY_TEMP})
|
2024-03-08 23:41:26 +00:00
|
|
|
|
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
|
2024-03-16 23:45:13 +00:00
|
|
|
vbam-core
|
|
|
|
${VBAM_SDL2_LIBS}
|
2011-05-25 11:55:46 +00:00
|
|
|
${OPENGL_LIBRARIES}
|
2015-03-27 17:48:42 +00:00
|
|
|
)
|
2011-02-24 11:14:59 +00:00
|
|
|
|
2024-03-15 23:05:09 +00:00
|
|
|
set(VBAM_GENERATED_DIR ${CMAKE_BINARY_DIR}/generated)
|
|
|
|
|
2024-03-14 21:36:06 +00:00
|
|
|
# Set up "src" as a global include directory.
|
2024-03-15 23:05:09 +00:00
|
|
|
include_directories(
|
|
|
|
${CMAKE_SOURCE_DIR}/src
|
|
|
|
${VBAM_GENERATED_DIR}
|
|
|
|
)
|
2024-03-14 21:36:06 +00:00
|
|
|
|
2011-05-24 07:39:29 +00:00
|
|
|
if(ENABLE_FFMPEG)
|
cmake: Visual Studio support improvements.
Add support for vcpkg ffmpeg, this requires using someone's
FindFFmpeg.cmake instead of relying on pkg-config, since vcpkg does not
have pkg-config.
Do not use the ffmpeg from vcpkg on appveyor however, because that
pushes the build cache generation over the time limit for jobs.
Add secur32 and bcrypt to the list of ffmpeg libs on windows, these are
standard windows libraries.
Change some code in ffmpeg.cpp to remove C-style casts of struct
initializers, which are illegal in MSVC.
Add the INT64_C and UINT64_C macros missing in MSVC's stdint.h (if not
defined) to ffmpeg.h before the ffmpeg headers are included, because
they rely on them.
Rewrite the wxWidgets finding code for the vcpkg wxWidgets to be nicer
and work correctly for debug and static builds.
Remove all /W* and /w* warnings options from cmake compiler flags, and
replace them with /W4 for debug builds, and /w (no warnings) for release
modes.
When building a static binary, remove all /MD* flags from cmake compiler
flags, and use /MT for static release builds and /MTd for static debug
builds.
Improve the vcpkg toolchain wrapper to only rebuild the vcpkg binary if
there were git updates.
Redo the handling of SDL2 and SDL_main. Only link SDL2Main to the SDL
binary and don't use the definitions.
Update CMakeSettings.json to use Ninja and include static
configurations.
Use CMAKE_PROJECT_DIR instead of CMAKE_SOURCE_DIR to determine the vcpkg
root, as CMAKE_SOURCE_DIR is sometimes set incorrectly in the 2017 GUI.
Add /nodefaultlib:libcmt to the debug build link flags, as in debug
builds libcmtd is used and libcmt should not be.
Add /subsystem:console to debug build link flags to produce a windows
console app for debug builds, like we do for mingw builds. To do this,
define a WIN32_CONSOLE_APP macro and if set, define a main() that calls
WinMain().
Call wxMesdsageOutput::Set() in OnInit with an instance of
wxMessageOutputStderr for windows debug builds to make sure the --help
text etc. goes to the console instead of a popup box.
Update the Visual Studio related text in README.md.
Fix dynamic debug builds by linking to the debug version of SDL2 and
copying the debug version of the dll to the build dir.
Fix issue in MainFrame::BindAppIcon with the function we are using not
being found in a Windows DLL in debug builds by using
wxDynamicLibrary::GetSymboolAorW() instead of GetSymbol().
Enable LTO for MSVC in Release modes, if the option is set.
Change appveyor config to use an 8 item build matrix of
x64/x86 / Release/Debug / Static/Dynamic. And test the binary in debug
modes by running --help.
When copying the wxrc.exe out of the build tree, copy both the release
and debug versions, this is so that appveyor caching of vcpkg works,
since the build trees are not cached.
Add some necessary win32 libraries to the SDL binary. And enable
building it on appveyor.
Fix #465.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-12-10 11:13:58 +00:00
|
|
|
if(NOT FFMPEG_LIBRARIES)
|
|
|
|
message(FATAL_ERROR "ENABLE_FFMPEG was specified, but required versions of ffmpeg libraries cannot be found!")
|
|
|
|
endif()
|
2017-10-22 22:35:56 +00:00
|
|
|
|
cmake: Visual Studio support improvements.
Add support for vcpkg ffmpeg, this requires using someone's
FindFFmpeg.cmake instead of relying on pkg-config, since vcpkg does not
have pkg-config.
Do not use the ffmpeg from vcpkg on appveyor however, because that
pushes the build cache generation over the time limit for jobs.
Add secur32 and bcrypt to the list of ffmpeg libs on windows, these are
standard windows libraries.
Change some code in ffmpeg.cpp to remove C-style casts of struct
initializers, which are illegal in MSVC.
Add the INT64_C and UINT64_C macros missing in MSVC's stdint.h (if not
defined) to ffmpeg.h before the ffmpeg headers are included, because
they rely on them.
Rewrite the wxWidgets finding code for the vcpkg wxWidgets to be nicer
and work correctly for debug and static builds.
Remove all /W* and /w* warnings options from cmake compiler flags, and
replace them with /W4 for debug builds, and /w (no warnings) for release
modes.
When building a static binary, remove all /MD* flags from cmake compiler
flags, and use /MT for static release builds and /MTd for static debug
builds.
Improve the vcpkg toolchain wrapper to only rebuild the vcpkg binary if
there were git updates.
Redo the handling of SDL2 and SDL_main. Only link SDL2Main to the SDL
binary and don't use the definitions.
Update CMakeSettings.json to use Ninja and include static
configurations.
Use CMAKE_PROJECT_DIR instead of CMAKE_SOURCE_DIR to determine the vcpkg
root, as CMAKE_SOURCE_DIR is sometimes set incorrectly in the 2017 GUI.
Add /nodefaultlib:libcmt to the debug build link flags, as in debug
builds libcmtd is used and libcmt should not be.
Add /subsystem:console to debug build link flags to produce a windows
console app for debug builds, like we do for mingw builds. To do this,
define a WIN32_CONSOLE_APP macro and if set, define a main() that calls
WinMain().
Call wxMesdsageOutput::Set() in OnInit with an instance of
wxMessageOutputStderr for windows debug builds to make sure the --help
text etc. goes to the console instead of a popup box.
Update the Visual Studio related text in README.md.
Fix dynamic debug builds by linking to the debug version of SDL2 and
copying the debug version of the dll to the build dir.
Fix issue in MainFrame::BindAppIcon with the function we are using not
being found in a Windows DLL in debug builds by using
wxDynamicLibrary::GetSymboolAorW() instead of GetSymbol().
Enable LTO for MSVC in Release modes, if the option is set.
Change appveyor config to use an 8 item build matrix of
x64/x86 / Release/Debug / Static/Dynamic. And test the binary in debug
modes by running --help.
When copying the wxrc.exe out of the build tree, copy both the release
and debug versions, this is so that appveyor caching of vcpkg works,
since the build trees are not cached.
Add some necessary win32 libraries to the SDL binary. And enable
building it on appveyor.
Fix #465.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-12-10 11:13:58 +00:00
|
|
|
if(APPLE)
|
|
|
|
set(FFMPEG_LDFLAGS ${FFMPEG_LDFLAGS} -framework CoreText -framework ApplicationServices)
|
2023-05-31 13:36:12 +00:00
|
|
|
|
|
|
|
if(UPSTREAM_RELEASE)
|
2023-10-20 23:25:14 +00:00
|
|
|
set(FFMPEG_LDFLAGS ${FFMPEG_LDFLAGS} -lbz2 -ltiff -framework DiskArbitration -lfreetype -lfontconfig -llzma -lxml2 -lharfbuzz)
|
2023-05-31 13:36:12 +00:00
|
|
|
endif()
|
2022-01-31 03:26:52 +00:00
|
|
|
elseif(WIN32)
|
2022-02-02 00:44:41 +00:00
|
|
|
set(WIN32_MEDIA_FOUNDATION_LIBS dxva2 evr mf mfplat mfplay mfreadwrite mfuuid amstrmid)
|
2022-01-31 03:26:52 +00:00
|
|
|
list(APPEND FFMPEG_LIBRARIES secur32 bcrypt ${WIN32_MEDIA_FOUNDATION_LIBS})
|
|
|
|
|
|
|
|
if(MSYS AND VBAM_STATIC)
|
|
|
|
foreach(lib tiff jbig lzma)
|
|
|
|
cygpath(lib "$ENV{MSYSTEM_PREFIX}/lib/lib${lib}.a")
|
|
|
|
|
|
|
|
list(APPEND FFMPEG_LIBRARIES "${lib}")
|
|
|
|
endforeach()
|
|
|
|
endif()
|
2017-10-22 22:35:56 +00:00
|
|
|
endif()
|
cmake: Visual Studio support improvements.
Add support for vcpkg ffmpeg, this requires using someone's
FindFFmpeg.cmake instead of relying on pkg-config, since vcpkg does not
have pkg-config.
Do not use the ffmpeg from vcpkg on appveyor however, because that
pushes the build cache generation over the time limit for jobs.
Add secur32 and bcrypt to the list of ffmpeg libs on windows, these are
standard windows libraries.
Change some code in ffmpeg.cpp to remove C-style casts of struct
initializers, which are illegal in MSVC.
Add the INT64_C and UINT64_C macros missing in MSVC's stdint.h (if not
defined) to ffmpeg.h before the ffmpeg headers are included, because
they rely on them.
Rewrite the wxWidgets finding code for the vcpkg wxWidgets to be nicer
and work correctly for debug and static builds.
Remove all /W* and /w* warnings options from cmake compiler flags, and
replace them with /W4 for debug builds, and /w (no warnings) for release
modes.
When building a static binary, remove all /MD* flags from cmake compiler
flags, and use /MT for static release builds and /MTd for static debug
builds.
Improve the vcpkg toolchain wrapper to only rebuild the vcpkg binary if
there were git updates.
Redo the handling of SDL2 and SDL_main. Only link SDL2Main to the SDL
binary and don't use the definitions.
Update CMakeSettings.json to use Ninja and include static
configurations.
Use CMAKE_PROJECT_DIR instead of CMAKE_SOURCE_DIR to determine the vcpkg
root, as CMAKE_SOURCE_DIR is sometimes set incorrectly in the 2017 GUI.
Add /nodefaultlib:libcmt to the debug build link flags, as in debug
builds libcmtd is used and libcmt should not be.
Add /subsystem:console to debug build link flags to produce a windows
console app for debug builds, like we do for mingw builds. To do this,
define a WIN32_CONSOLE_APP macro and if set, define a main() that calls
WinMain().
Call wxMesdsageOutput::Set() in OnInit with an instance of
wxMessageOutputStderr for windows debug builds to make sure the --help
text etc. goes to the console instead of a popup box.
Update the Visual Studio related text in README.md.
Fix dynamic debug builds by linking to the debug version of SDL2 and
copying the debug version of the dll to the build dir.
Fix issue in MainFrame::BindAppIcon with the function we are using not
being found in a Windows DLL in debug builds by using
wxDynamicLibrary::GetSymboolAorW() instead of GetSymbol().
Enable LTO for MSVC in Release modes, if the option is set.
Change appveyor config to use an 8 item build matrix of
x64/x86 / Release/Debug / Static/Dynamic. And test the binary in debug
modes by running --help.
When copying the wxrc.exe out of the build tree, copy both the release
and debug versions, this is so that appveyor caching of vcpkg works,
since the build trees are not cached.
Add some necessary win32 libraries to the SDL binary. And enable
building it on appveyor.
Fix #465.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-12-10 11:13:58 +00:00
|
|
|
else()
|
2024-03-15 16:19:01 +00:00
|
|
|
add_compile_definitions(NO_FFMPEG)
|
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)
|
2024-03-15 16:19:01 +00:00
|
|
|
add_compile_definitions(NO_ONLINEUPDATES)
|
2019-07-10 23:47:16 +00:00
|
|
|
endif()
|
|
|
|
|
2008-06-06 10:17:20 +00:00
|
|
|
# C defines
|
2024-03-17 01:18:36 +00:00
|
|
|
add_compile_definitions(HAVE_NETINET_IN_H HAVE_ARPA_INET_H HAVE_ZLIB_H FINAL_VERSION SDL USE_OPENGL SYSCONF_INSTALL_DIR="${CMAKE_INSTALL_FULL_SYSCONFDIR}")
|
2024-03-15 16:19:01 +00:00
|
|
|
add_compile_definitions(PKGDATADIR="${CMAKE_INSTALL_FULL_DATADIR}/vbam")
|
|
|
|
add_compile_definitions(__STDC_FORMAT_MACROS)
|
2019-08-31 22:58:59 +00:00
|
|
|
|
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()
|
|
|
|
|
|
|
|
include(CheckFunctionExists)
|
|
|
|
check_function_exists(sem_timedwait SEM_TIMEDWAIT)
|
|
|
|
if(SEM_TIMEDWAIT)
|
2024-03-15 16:19:01 +00:00
|
|
|
add_compile_definitions(HAVE_SEM_TIMEDWAIT)
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
|
|
|
else()
|
2024-03-15 16:19:01 +00:00
|
|
|
add_compile_definitions(NO_LINK)
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
2011-02-20 12:22:58 +00:00
|
|
|
|
2008-06-16 20:18:49 +00:00
|
|
|
# The debugger is enabled by default
|
2024-03-16 20:19:05 +00:00
|
|
|
if(ENABLE_DEBUGGER)
|
|
|
|
add_compile_definitions(VBAM_ENABLE_DEBUGGER)
|
2018-02-24 19:39:29 +00:00
|
|
|
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)
|
2024-03-15 16:19:01 +00:00
|
|
|
add_compile_definitions(C_CORE)
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
2008-06-06 10:17:20 +00:00
|
|
|
|
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)
|
2024-03-15 16:19:01 +00:00
|
|
|
add_compile_definitions(ENABLE_NLS)
|
|
|
|
add_compile_definitions(LOCALEDIR="${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()
|
2019-12-12 19:01:58 +00:00
|
|
|
if(ENABLE_LINK OR ENABLE_WX)
|
2018-02-24 19:39:29 +00:00
|
|
|
find_path(LIBINTL_INC libintl.h)
|
2020-02-02 02:14:03 +00:00
|
|
|
find_library(LIBINTL_LIB NAMES libintl intl)
|
|
|
|
find_library(LIBICONV_LIB NAMES libiconv iconv)
|
|
|
|
find_library(LIBCHARSET_LIB NAMES libcharset charset)
|
2018-02-24 19:39:29 +00:00
|
|
|
if(LIBINTL_LIB)
|
2019-12-12 19:01:58 +00:00
|
|
|
list(APPEND CMAKE_REQUIRED_LIBRARIES ${LIBINTL_LIB})
|
2024-03-16 23:45:13 +00:00
|
|
|
list(APPEND NLS_LIBS ${LIBINTL_LIB})
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
|
|
|
if(LIBICONV_LIB)
|
2019-12-12 19:01:58 +00:00
|
|
|
list(APPEND CMAKE_REQUIRED_LIBRARIES ${LIBICONV_LIB})
|
2024-03-16 23:45:13 +00:00
|
|
|
list(APPEND NLS_LIBS ${LIBICONV_LIB})
|
2018-02-24 19:39:29 +00:00
|
|
|
endif()
|
2020-01-17 16:03:07 +00:00
|
|
|
if(LIBCHARSET_LIB)
|
|
|
|
list(APPEND CMAKE_REQUIRED_LIBRARIES ${LIBCHARSET_LIB})
|
2024-03-16 23:45:13 +00:00
|
|
|
list(APPEND NLS_LIBS ${LIBCHARSET_LIB})
|
2020-01-17 16:03:07 +00:00
|
|
|
endif()
|
2018-02-24 19:39:29 +00:00
|
|
|
include(CheckFunctionExists)
|
|
|
|
check_function_exists(gettext GETTEXT_FN)
|
|
|
|
if(NOT (LIBINTL_INC OR GETTEXT_FN))
|
|
|
|
message(FATAL_ERROR "NLS requires libintl/gettext")
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
endif()
|
2011-02-24 13:06:17 +00:00
|
|
|
|
2021-12-19 13:57:05 +00:00
|
|
|
if(NOT TRANSLATIONS_ONLY)
|
2024-03-16 23:45:13 +00:00
|
|
|
add_subdirectory(third_party/include/nonstd)
|
2024-03-16 01:25:04 +00:00
|
|
|
add_subdirectory(third_party/include/stb)
|
2024-03-16 20:19:05 +00:00
|
|
|
add_subdirectory(src/core)
|
2024-03-16 23:45:13 +00:00
|
|
|
add_subdirectory(src/components)
|
2024-03-17 01:18:36 +00:00
|
|
|
add_subdirectory(src/sdl)
|
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
|
|
|
if(ENABLE_WX)
|
2011-05-25 11:55:46 +00:00
|
|
|
add_subdirectory(src/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_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
|
|
|
|
2018-02-24 19:39:29 +00:00
|
|
|
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")
|
2020-12-11 14:09:03 +00:00
|
|
|
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)
|