visualboyadvance-m/CMakeLists.txt

591 lines
16 KiB
CMake
Raw Normal View History

# The project's name is VBA-M it uses C and C++ code
PROJECT(VBA-M C CXX)
cmake_minimum_required( VERSION 3.1.0 )
2008-06-06 18:56:41 +00:00
if( COMMAND cmake_policy )
cmake_policy( SET CMP0003 NEW )
2008-06-08 20:46:25 +00:00
cmake_policy( SET CMP0005 OLD )
2008-06-06 18:56:41 +00:00
endif( COMMAND cmake_policy )
SET( CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMakeScripts )
#Output all binaries at top level
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR})
2008-06-06 10:17:20 +00:00
2011-02-24 11:14:59 +00:00
option( ENABLE_SDL "Build the SDL port" ON )
option( ENABLE_GTK "Build the GTK+ GUI" OFF )
option( ENABLE_GTK3 "Build the GTK+ GUI" OFF )
option( ENABLE_WX "Build the wxWidgets port" ON )
2011-02-24 11:14:59 +00:00
option( ENABLE_DEBUGGER "Enable the debugger" ON )
2011-02-24 13:06:17 +00:00
option( ENABLE_NLS "Enable translations" ON )
2011-02-24 11:14:59 +00:00
option( ENABLE_ASM_CORE "Enable x86 ASM CPU cores" OFF )
option( ENABLE_ASM_SCALERS "Enable x86 ASM graphic filters" OFF )
option( ENABLE_LINK "Enable GBA linking functionality" ON )
2011-02-24 11:14:59 +00:00
option( ENABLE_LIRC "Enable LIRC support" OFF )
option( ENABLE_FFMPEG "Enable ffmpeg A/V recording" ON )
if(ENABLE_ASM_SCALERS)
option( ENABLE_MMX "Enable MMX" OFF )
endif(ENABLE_ASM_SCALERS)
option( ENABLE_GBA_LOGGING "Enable extended GBA logging" ON )
if( ENABLE_GBA_LOGGING )
ADD_DEFINITIONS (-DGBA_LOGGING )
endif( ENABLE_GBA_LOGGING )
if(ENABLE_MMX)
ADD_DEFINITIONS (-DMMX)
endif(ENABLE_MMX)
2011-02-24 11:14:59 +00:00
# The SDL port can't be built without debugging support
if( NOT ENABLE_DEBUGGER AND ENABLE_SDL )
message( SEND_ERROR "The SDL port can't be built without debugging support" )
endif( NOT ENABLE_DEBUGGER AND ENABLE_SDL )
2008-06-06 10:17:20 +00:00
2011-02-24 11:14:59 +00:00
# Set the version number with -DVERSION=X.X.X-uber
2008-06-06 10:17:20 +00:00
IF( NOT VERSION )
#Will need to change this over to git
2015-06-12 12:04:26 +00:00
SET( VERSION "https://github.com/visualboyadvance-m/visualboyadvance-m" )
2015-06-12 12:04:26 +00:00
#openmw does this
if(EXISTS ${PROJECT_SOURCE_DIR}/.git)
if(NOT EXISTS ${PROJECT_SOURCE_DIR}/.git/shallow)
find_package(Git)
if(GIT_FOUND)
include(GetGitRevisionDescription)
get_git_head_revision(REFSPEC COMMITHASH)
SET( VERSION "GIT Commit: " ${COMMITHASH} )
else(GIT_FOUND)
message(WARNING "Git executable not found")
endif(GIT_FOUND)
else(NOT EXISTS ${PROJECT_SOURCE_DIR}/.git/shallow)
message(STATUS "Shallow Git clone detected, not attempting to retrieve version info")
endif(NOT EXISTS ${PROJECT_SOURCE_DIR}/.git/shallow)
endif(EXISTS ${PROJECT_SOURCE_DIR}/.git)
2008-06-06 10:17:20 +00:00
ENDIF( NOT VERSION )
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
IF(CMAKE_BUILD_TYPE STREQUAL "Debug")
ADD_DEFINITIONS(-DDEBUG)
ELSE()
ADD_DEFINITIONS(-DNDEBUG)
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
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
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
# as well as for ObjectiveC code
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
IF(APPLE)
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
IF(EXISTS /usr/local/include)
SET(CMAKE_INCLUDE_PATH "${CMAKE_INCLUDE_PATH};/usr/local/include")
INCLUDE_DIRECTORIES("/usr/local/include")
ELSEIF(EXISTS /opt/local/include)
SET(CMAKE_INCLUDE_PATH "${CMAKE_INCLUDE_PATH};/opt/local/include")
INCLUDE_DIRECTORIES("/opt/local/include")
ELSEIF(EXISTS /sw/include)
SET(CMAKE_INCLUDE_PATH "${CMAKE_INCLUDE_PATH};/sw/include")
INCLUDE_DIRECTORIES("/sw/include")
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
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
IF(EXISTS /usr/local/lib)
SET(CMAKE_LIBRARY_PATH "${CMAKE_LIBRARY_PATH};/usr/local/lib")
LINK_DIRECTORIES("/usr/local/lib")
ELSEIF(EXISTS /opt/local/lib)
SET(CMAKE_LIBRARY_PATH "${CMAKE_LIBRARY_PATH};/opt/local/lib")
LINK_DIRECTORIES("/opt/local/lib")
ELSEIF(EXISTS /sw/lib)
SET(CMAKE_LIBRARY_PATH "${CMAKE_LIBRARY_PATH};/sw/lib")
LINK_DIRECTORIES("/sw/lib")
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
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
IF(EXISTS /usr/local/bin)
SET(CMAKE_PROGRAM_PATH "${CMAKE_PROGRAM_PATH};/usr/local/bin")
ELSEIF(EXISTS /opt/local/bin)
SET(CMAKE_PROGRAM_PATH "${CMAKE_PROGRAM_PATH};/opt/local/bin")
ELSEIF(EXISTS /sw/bin)
SET(CMAKE_PROGRAM_PATH "${CMAKE_PROGRAM_PATH};/sw/bin")
ENDIF()
ENDIF(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
# We do not support amd64 asm yet
IF((ENABLE_ASM_CORE OR ENABLE_ASM_SCALERS OR ENABLE_MMX)
AND CMAKE_SYSTEM_PROCESSOR MATCHES "[xX]86|[aA][mM][dD]64|[xX]64"
AND CMAKE_C_SIZEOF_DATA_PTR EQUAL 8)
MESSAGE(FATAL_ERROR "The options ASM_CORE, ASM_SCALERS and MMX are not supported on AMD64 yet.")
ENDIF()
2011-02-24 11:14:59 +00:00
# Check for nasm
if( ENABLE_ASM_SCALERS )
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
IF(EXISTS "/usr/local/bin/nasm")
SET(CMAKE_ASM_NASM_COMPILER "/usr/local/bin/nasm")
ELSEIF(EXISTS "/opt/local/bin/nasm")
SET(CMAKE_ASM_NASM_COMPILER "/opt/local/bin/nasm")
ELSE()
SET(CMAKE_ASM_NASM_COMPILER "/usr/bin/nasm")
ENDIF()
ENABLE_LANGUAGE(ASM_NASM)
2011-02-24 11:14:59 +00:00
endif( ENABLE_ASM_SCALERS )
# Look for some dependencies using CMake scripts
FIND_PACKAGE(ZLIB REQUIRED)
FIND_PACKAGE(OpenGL REQUIRED)
# TODO: make static on mac
FIND_PACKAGE(PNG REQUIRED)
IF(APPLE)
SET(SDL2_STATIC ON)
ENDIF(APPLE)
FIND_PACKAGE(SDL2 REQUIRED)
ADD_DEFINITIONS(${SDL2_DEFINITIONS})
2011-02-24 11:14:59 +00:00
if( ENABLE_LINK )
if(WIN32)
set(SFML_STATIC_LIBRARIES TRUE)
endif(WIN32)
2016-11-10 11:39:45 +00:00
FIND_PACKAGE ( SFML 2 COMPONENTS network system REQUIRED )
2011-02-24 11:14:59 +00:00
endif( ENABLE_LINK )
# set the standard libraries all ports use
SET(VBAMCORE_LIBS
vbamcore
fex
${SDL2_LIBRARY}
${SFML_LIBRARIES}
${OPENGL_LIBRARIES}
${ZLIB_LIBRARY}
${PNG_LIBRARY}
)
2011-02-24 11:14:59 +00:00
if(ENABLE_FFMPEG)
FIND_PACKAGE ( PkgConfig REQUIRED )
PKG_CHECK_MODULES(FFMPEG REQUIRED libavcodec libavformat libswscale libavutil)
endif(ENABLE_FFMPEG)
if(NOT ENABLE_FFMPEG)
ADD_DEFINITIONS(-DNO_FFMPEG)
endif(NOT ENABLE_FFMPEG)
2011-02-24 11:14:59 +00:00
IF( ENABLE_LIRC )
2008-07-10 23:41:29 +00:00
SET( WITHLIRC 1 )
2011-02-24 11:14:59 +00:00
ELSE( ENABLE_LIRC )
SET( WITHLIRC 0 )
2011-02-24 11:14:59 +00:00
ENDIF( ENABLE_LIRC )
2008-06-06 10:17:20 +00:00
# Set the default install dir
IF( NOT DATA_INSTALL_DIR )
SET( DATA_INSTALL_DIR "share/vbam" )
ENDIF( NOT DATA_INSTALL_DIR )
SET( PKGDATADIR ${CMAKE_INSTALL_PREFIX}/${DATA_INSTALL_DIR} )
# Set the configuration file location
IF( NOT SYSCONFDIR )
SET( SYSCONFDIR "/etc" )
ENDIF( NOT SYSCONFDIR )
# C defines
2008-07-10 23:41:29 +00:00
ADD_DEFINITIONS (-DHAVE_NETINET_IN_H -DHAVE_ARPA_INET_H -DHAVE_ZLIB_H -DFINAL_VERSION -DSDL -DUSE_OPENGL -DSYSCONFDIR='"${SYSCONFDIR}"' -DWITH_LIRC='${WITHLIRC}')
2008-06-06 10:17:20 +00:00
ADD_DEFINITIONS (-DVERSION='"${VERSION}"' -DPKGDATADIR='"${PKGDATADIR}"' -DPACKAGE='')
if( ENABLE_LINK )
# IPC linking code needs sem_timedwait which can be either in librt or pthreads
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(RT_LIB)
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(PTHREAD_LIB)
INCLUDE(CheckFunctionExists)
CHECK_FUNCTION_EXISTS(sem_timedwait SEM_TIMEDWAIT)
IF( SEM_TIMEDWAIT)
ADD_DEFINITIONS (-DHAVE_SEM_TIMEDWAIT)
ENDIF( SEM_TIMEDWAIT)
else( ENABLE_LINK )
ADD_DEFINITIONS (-DNO_LINK)
endif( ENABLE_LINK )
2011-02-20 12:22:58 +00:00
# The debugger is enabled by default
2011-02-24 11:14:59 +00:00
if( NOT ENABLE_DEBUGGER )
ADD_DEFINITIONS (-DNO_DEBUGGER)
2011-02-24 11:14:59 +00:00
else( NOT ENABLE_DEBUGGER )
ADD_DEFINITIONS (-DBKPT_SUPPORT)
2011-02-24 11:14:59 +00:00
endif( NOT ENABLE_DEBUGGER )
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
2011-02-24 11:14:59 +00:00
IF( NOT ENABLE_ASM_CORE )
2008-06-06 10:17:20 +00:00
ADD_DEFINITIONS (-DC_CORE)
2011-02-24 11:14:59 +00:00
ENDIF( NOT ENABLE_ASM_CORE )
2008-06-06 10:17:20 +00:00
2011-02-24 13:06:17 +00:00
# Enable internationalization
if( ENABLE_NLS )
2011-02-24 17:01:10 +00:00
SET( LOCALEDIR ${CMAKE_INSTALL_PREFIX}/share/locale )
ADD_DEFINITIONS ( -DENABLE_NLS )
ADD_DEFINITIONS ( -DLOCALEDIR=\\\"${LOCALEDIR}\\\" )
# for now, only GBALink.cpp uses gettext() directly
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
IF(APPLE)
# use Homebrew gettext if available
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 )
IF(LIBINTL_LIB)
SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${LIBINTL_LIB})
SET(VBAMCORE_LIBS ${VBAMCORE_LIBS} ${LIBINTL_LIB})
ENDIF(LIBINTL_LIB)
INCLUDE(CheckFunctionExists)
CHECK_FUNCTION_EXISTS(gettext GETTEXT_FN)
IF(NOT LIBINTL_INC OR NOT GETTEXT_FN)
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
MESSAGE(FATAL_ERROR "NLS requires libintl/gettext")
ENDIF(NOT LIBINTL_INC OR NOT GETTEXT_FN)
INCLUDE_DIRECTORIES(${LIBINTL_INC})
ENDIF(ENABLE_LINK)
2011-02-24 13:06:17 +00:00
endif( ENABLE_NLS )
2008-06-06 10:17:20 +00:00
# Compiler flags
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
IF(WIN32)
SET( CMAKE_ASM_NASM_FLAGS "${CMAKE_ASM_NASM_FLAGS} -I$(CMAKE_SOURCE_DIR)/src/filters/hq/asm/ -O1 -w-orphan-labels")
ELSEIF(APPLE)
SET( CMAKE_ASM_NASM_FLAGS "${CMAKE_ASM_NASM_FLAGS} -I$(CMAKE_SOURCE_DIR)/src/filters/hq/asm/ -O1 -DMACHO -w-orphan-labels")
ELSEIF("${CMAKE_SYSTEM}" MATCHES "Linux")
SET( CMAKE_ASM_NASM_FLAGS "${CMAKE_ASM_NASM_FLAGS} -I$(CMAKE_SOURCE_DIR)/src/filters/hq/asm/ -O1 -DELF -w-orphan-labels")
ENDIF()
IF(CMAKE_SYSTEM_PROCESSOR MATCHES "[xX]86|[aA][mM][dD]64|[xX]64" AND CMAKE_C_SIZEOF_DATA_PTR EQUAL 8)
ADD_DEFINITIONS( -D__AMD64__ )
SET(CMAKE_ASM_NASM_FLAGS "${CMAKE_ASM_NASM_FLAGS} -D__AMD64__")
ENDIF()
SET( CMAKE_C_FLAGS_RELEASE "-O3")
SET( CMAKE_CXX_FLAGS_RELEASE "-O3")
SET( CMAKE_C_FLAGS_DEBUG "-g -Wall")
SET( CMAKE_CXX_FLAGS_DEBUG "-g -Wall")
2008-06-06 10:17:20 +00:00
if (WIN32)
2015-06-12 02:14:33 +00:00
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static-libgcc -static -I./dependencies/include")
2015-06-15 12:21:44 +00:00
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc -static-libstdc++ -static -I./dependencies/include")
endif (WIN32)
add_subdirectory (fex)
2008-06-06 10:17:20 +00:00
SET(SRC_MAIN
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
)
SET(HDR_MAIN
src/AutoBuild.h
src/System.h
src/Util.h
src/version.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
)
if(ENABLE_FFMPEG)
SET(SRC_MAIN ${SRC_MAIN} src/common/ffmpeg.cpp)
SET(HDR_MAIN ${HDR_MAIN} src/common/ffmpeg.h)
endif(ENABLE_FFMPEG)
if(ENABLE_NLS)
SET(HDR_MAIN ${HDR_MAIN} src/NLS.h)
endif(ENABLE_NLS)
2009-01-01 15:20:03 +00:00
SET(SRC_GBA
src/gba/agbprint.cpp
src/gba/bios.cpp
src/gba/BreakpointStructures.cpp
src/gba/Cheats.cpp
2011-05-24 07:49:00 +00:00
src/gba/CheatSearch.cpp
src/gba/debugger-expr-lex.cpp
src/gba/debugger-expr-yacc.cpp
src/gba/EEprom.cpp
src/gba/ereader.cpp
src/gba/Flash.cpp
2009-01-01 15:20:03 +00:00
src/gba/GBA.cpp
src/gba/GBAGfx.cpp
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
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
)
SET(HDR_GBA
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
)
2009-01-01 14:52:03 +00:00
SET(SRC_GB
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
)
SET(HDR_GB
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
)
SET(SRC_APU
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
)
SET(HDR_APU
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
)
2008-06-06 10:17:20 +00:00
SET(SRC_SDL
src/sdl/SDL.cpp
src/sdl/filters.cpp
src/sdl/text.cpp
src/sdl/inputSDL.cpp
src/sdl/expr.cpp
src/sdl/exprNode.cpp
src/sdl/expr-lex.cpp
2008-06-06 10:17:20 +00:00
)
SET(HDR_SDL
src/sdl/filters.h
src/sdl/text.h
src/sdl/inputSDL.h
src/sdl/expr.cpp.h
src/sdl/exprNode.h
)
SET(SRC_FILTERS
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
src/filters/simpleFilter.cpp
2015-03-19 01:44:47 +00:00
src/filters/xbrzfilter.cpp
src/filters/xBRZ/xbrz.cpp
)
SET(HDR_FILTERS
src/filters/hq2x.h
src/filters/interp.h
src/filters/lq2x.h
src/filters/xBRZ/config.h
src/filters/xBRZ/xbrz.h
)
2008-06-06 10:17:20 +00:00
SET(SRC_HQ_C
src/filters/hq/c/hq_implementation.cpp
2008-06-06 10:17:20 +00:00
)
SET(HDR_HQ_C
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
)
2008-06-06 10:17:20 +00:00
SET(SRC_HQ_ASM
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
)
if( ENABLE_ASM_SCALERS )
SET(SRC_FILTERS ${SRC_FILTERS} ${SRC_HQ_ASM})
else( ENABLE_ASM_SCALERS )
SET(SRC_FILTERS ${SRC_FILTERS} ${SRC_HQ_C})
SET(HDR_FILTERS ${HDR_FILTERS} ${HDR_HQ_C})
ADD_DEFINITIONS ( -DNO_ASM )
endif( ENABLE_ASM_SCALERS )
2011-02-24 11:14:59 +00:00
if( ENABLE_DEBUGGER )
SET(SRC_DEBUGGER
src/gba/armdis.cpp
src/gba/elf.cpp
src/gba/remote.cpp
)
SET(HDR_DEBUGGER
src/gba/armdis.h
src/gba/elf.h
src/gba/remote.h
)
2011-02-24 11:14:59 +00:00
endif( ENABLE_DEBUGGER )
INCLUDE_DIRECTORIES(
2008-06-06 16:42:31 +00:00
${ZLIB_INCLUDE_DIR}
fex
2008-10-20 16:30:07 +00:00
${PNG_INCLUDE_DIR}
${SDL2_INCLUDE_DIR}
2008-06-06 10:17:20 +00:00
)
IF( ENABLE_FFMPEG )
INCLUDE_DIRECTORIES(
${FFMPEG_INCLUDE_DIRS}
)
ENDIF( ENABLE_FFMPEG )
2008-06-06 10:17:20 +00:00
ADD_LIBRARY (
vbamcore
STATIC
2008-06-06 10:17:20 +00:00
${PROJECT_SRCS}
${SRC_MAIN}
${HDR_MAIN}
2009-01-01 15:20:03 +00:00
${SRC_GBA}
${HDR_GBA}
2009-01-01 14:52:03 +00:00
${SRC_GB}
${HDR_GB}
${SRC_APU}
${HDR_APU}
${SRC_FILTERS}
${HDR_FILTERS}
${SRC_DEBUGGER}
${HDR_DEBUGGER}
2008-06-06 10:17:20 +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
2011-02-24 11:14:59 +00:00
IF( ENABLE_SDL )
2008-06-06 10:17:20 +00:00
ADD_EXECUTABLE (
vbam
WIN32
${SRC_SDL}
${HDR_SDL}
2008-06-06 10:17:20 +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
2008-06-06 16:42:31 +00:00
IF( WIN32 )
SET( WIN32_LIBRARIES wsock32 )
ENDIF( WIN32 )
2011-02-24 11:14:59 +00:00
IF( ENABLE_LIRC )
SET( LIRC_CLIENT_LIBRARY lirc_client )
2011-02-24 11:14:59 +00:00
ENDIF( ENABLE_LIRC )
2008-06-06 10:17:20 +00:00
TARGET_LINK_LIBRARIES (
vbam
${VBAMCORE_LIBS}
2008-06-06 16:42:31 +00:00
${WIN32_LIBRARIES}
${LIRC_CLIENT_LIBRARY}
2008-06-06 10:17:20 +00:00
)
IF( WIN32 )
INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/visualboyadvance-m${CMAKE_EXECUTABLE_SUFFIX} DESTINATION bin)
ELSE( WIN32 )
INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/vbam DESTINATION bin)
ENDIF( WIN32 )
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/sdl/vbam.cfg-example
DESTINATION ${CMAKE_INSTALL_PREFIX}/${SYSCONFDIR}
RENAME vbam.cfg)
2011-02-24 11:14:59 +00:00
ENDIF( ENABLE_SDL )
2008-06-06 10:17:20 +00:00
IF( ENABLE_GTK OR ENABLE_GTK3 )
add_subdirectory (src/gtk)
ENDIF( ENABLE_GTK OR ENABLE_GTK3 )
IF( ENABLE_WX )
add_subdirectory(src/wx)
ENDIF( ENABLE_WX )
if( ENABLE_GTK OR ENABLE_GTK3 OR ENABLE_WX )
2011-02-24 17:46:59 +00:00
# Native Language Support
if( ENABLE_NLS )
add_subdirectory(po)
endif( ENABLE_NLS )
endif( ENABLE_GTK OR ENABLE_GTK3 OR ENABLE_WX )
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/vba-over.ini DESTINATION ${DATA_INSTALL_DIR})
IF(NOT APPLE)
INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src/gtk/icons/ DESTINATION share/icons/hicolor PATTERN ".svn" EXCLUDE)
ENDIF(NOT APPLE)
# manual pages
IF( UNIX )
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/debian/vbam.1 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man1)
IF( ENABLE_GTK )
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/debian/gvbam.1 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man1)
ENDIF( ENABLE_GTK )
IF( ENABLE_WX )
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/debian/wxvbam.1 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man1)
ENDIF( ENABLE_WX )
ENDIF( UNIX )
SET(CPACK_GENERATOR "ZIP")
2015-06-15 13:00:47 +00:00
set(CPACK_SOURCE_GENERATOR "TGZ")
SET(CPACK_PACKAGE_VERSION_MAJOR "2")
SET(CPACK_PACKAGE_VERSION_MINOR "0")
2015-06-15 13:00:47 +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")
INCLUDE(CPack)