diff --git a/CMakeLists.txt b/CMakeLists.txt index 2a8e7253..c335f8a9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,7 +20,15 @@ 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 ) option( ENABLE_LIRC "Enable LIRC support" OFF ) -option( ENABLE_FFMPEG "Enable ffmpeg A/V recording" ON ) + +SET(FFMPEG_DEFAULT ON) + +IF((WIN32 AND NOT (MINGW AND MSYS)) OR APPLE) + SET(FFMPEG_DEFAULT OFF) +ENDIF() + +option(ENABLE_FFMPEG "Enable ffmpeg A/V recording" ${FFMPEG_DEFAULT}) + if(ENABLE_ASM_SCALERS) option( ENABLE_MMX "Enable MMX" OFF ) endif(ENABLE_ASM_SCALERS) @@ -133,9 +141,10 @@ FIND_PACKAGE(SDL2 REQUIRED) ADD_DEFINITIONS(${SDL2_DEFINITIONS}) if( ENABLE_LINK ) - if(WIN32) + # msys2 does not have static sfml libs atm + if(WIN32 AND NOT (MINGW AND MSYS)) set(SFML_STATIC_LIBRARIES TRUE) - endif(WIN32) + endif() FIND_PACKAGE ( SFML 2 COMPONENTS network system REQUIRED ) endif( ENABLE_LINK ) @@ -221,7 +230,7 @@ ENDIF( NOT ENABLE_ASM_CORE ) if( ENABLE_NLS ) SET( LOCALEDIR ${CMAKE_INSTALL_PREFIX}/share/locale ) ADD_DEFINITIONS ( -DENABLE_NLS ) - ADD_DEFINITIONS ( -DLOCALEDIR=\\\"${LOCALEDIR}\\\" ) + ADD_DEFINITIONS ( -DLOCALEDIR='"${LOCALEDIR}"' ) # for now, only GBALink.cpp uses gettext() directly IF(APPLE) # use Homebrew gettext if available diff --git a/CMakeScripts/FindSFML.cmake b/CMakeScripts/FindSFML.cmake index 93e94e5b..fe84c961 100644 --- a/CMakeScripts/FindSFML.cmake +++ b/CMakeScripts/FindSFML.cmake @@ -7,14 +7,14 @@ # When you try to locate the SFML libraries, you must specify which modules you want to use (system, window, graphics, network, audio, main). # If none is given, the SFML_LIBRARIES variable will be empty and you'll end up linking to nothing. # example: -# find_package(SFML COMPONENTS graphics window system) // find the graphics, window and system modules +# find_package(SFML COMPONENTS graphics window system) # find the graphics, window and system modules # # You can enforce a specific version, either MAJOR.MINOR or only MAJOR. # If nothing is specified, the version won't be checked (i.e. any version will be accepted). # example: -# find_package(SFML COMPONENTS ...) // no specific version required -# find_package(SFML 2 COMPONENTS ...) // any 2.x version -# find_package(SFML 2.4 COMPONENTS ...) // version 2.4 or greater +# find_package(SFML COMPONENTS ...) # no specific version required +# find_package(SFML 2 COMPONENTS ...) # any 2.x version +# find_package(SFML 2.4 COMPONENTS ...) # version 2.4 or greater # # By default, the dynamic libraries of SFML will be found. To find the static ones instead, # you must set the SFML_STATIC_LIBRARIES variable to TRUE before calling find_package(SFML ...). @@ -89,10 +89,12 @@ if(SFML_FIND_VERSION AND SFML_INCLUDE_DIR) set(SFML_CONFIG_HPP_INPUT "${SFML_INCLUDE_DIR}/SFML/Config.hpp") endif() FILE(READ "${SFML_CONFIG_HPP_INPUT}" SFML_CONFIG_HPP_CONTENTS) - STRING(REGEX MATCH ".*#define SFML_VERSION_MAJOR ([0-9]+).*#define SFML_VERSION_MINOR ([0-9]+).*#define SFML_VERSION_PATCH ([0-9]+).*" SFML_CONFIG_HPP_CONTENTS "${SFML_CONFIG_HPP_CONTENTS}") STRING(REGEX REPLACE ".*#define SFML_VERSION_MAJOR ([0-9]+).*" "\\1" SFML_VERSION_MAJOR "${SFML_CONFIG_HPP_CONTENTS}") STRING(REGEX REPLACE ".*#define SFML_VERSION_MINOR ([0-9]+).*" "\\1" SFML_VERSION_MINOR "${SFML_CONFIG_HPP_CONTENTS}") STRING(REGEX REPLACE ".*#define SFML_VERSION_PATCH ([0-9]+).*" "\\1" SFML_VERSION_PATCH "${SFML_CONFIG_HPP_CONTENTS}") + if (NOT "${SFML_VERSION_PATCH}" MATCHES "^[0-9]+$") + set(SFML_VERSION_PATCH 0) + endif() math(EXPR SFML_REQUESTED_VERSION "${SFML_FIND_VERSION_MAJOR} * 10000 + ${SFML_FIND_VERSION_MINOR} * 100 + ${SFML_FIND_VERSION_PATCH}") # if we could extract them, compare with the requested version number @@ -181,7 +183,7 @@ foreach(FIND_SFML_COMPONENT ${SFML_FIND_COMPONENTS}) if (SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG OR SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE) # library found set(SFML_${FIND_SFML_COMPONENT_UPPER}_FOUND TRUE) - + # if both are found, set SFML_XXX_LIBRARY to contain both if (SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG AND SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE) set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY debug ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG} @@ -240,7 +242,8 @@ if(SFML_STATIC_LIBRARIES) # macro that searches for a 3rd-party library macro(find_sfml_dependency output friendlyname) - find_library(${output} NAMES ${ARGN} PATHS ${FIND_SFML_PATHS} PATH_SUFFIXES lib) + # No lookup in environment variables (PATH on Windows), as they may contain wrong library versions + find_library(${output} NAMES ${ARGN} PATHS ${FIND_SFML_PATHS} PATH_SUFFIXES lib NO_SYSTEM_ENVIRONMENT_PATH) if(${${output}} STREQUAL "${output}-NOTFOUND") unset(output) set(FIND_SFML_DEPENDENCIES_NOTFOUND "${FIND_SFML_DEPENDENCIES_NOTFOUND} ${friendlyname}") @@ -256,7 +259,7 @@ if(SFML_STATIC_LIBRARIES) set(SFML_SYSTEM_DEPENDENCIES "pthread") endif() if(FIND_SFML_OS_LINUX) - set(SFML_SYSTEM_DEPENDENCIES "rt") + set(SFML_SYSTEM_DEPENDENCIES ${SFML_SYSTEM_DEPENDENCIES} "rt") endif() if(FIND_SFML_OS_WINDOWS) set(SFML_SYSTEM_DEPENDENCIES "winmm") @@ -280,22 +283,22 @@ if(SFML_STATIC_LIBRARIES) if(NOT ${FIND_SFML_WINDOW_COMPONENT} EQUAL -1) # find libraries - if(FIND_SFML_OS_LINUX) + if(FIND_SFML_OS_LINUX OR FIND_SFML_OS_FREEBSD) find_sfml_dependency(X11_LIBRARY "X11" X11) find_sfml_dependency(XRANDR_LIBRARY "Xrandr" Xrandr) - find_sfml_dependency(UDEV_LIBRARIES "UDev" udev) + endif() + + if(FIND_SFML_OS_LINUX) + find_sfml_dependency(UDEV_LIBRARIES "UDev" udev libudev) endif() # update the list if(FIND_SFML_OS_WINDOWS) set(SFML_WINDOW_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} "opengl32" "winmm" "gdi32") - elseif(FIND_SFML_OS_LINUX OR FIND_SFML_OS_FREEBSD) - set(SFML_WINDOW_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} "GL" ${X11_LIBRARY} ${XRANDR_LIBRARY}) - if(FIND_SFML_OS_FREEBSD) - set(SFML_WINDOW_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} "usbhid") - else() - set(SFML_WINDOW_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} ${UDEV_LIBRARIES}) - endif() + elseif(FIND_SFML_OS_LINUX) + set(SFML_WINDOW_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} "GL" ${X11_LIBRARY} ${XRANDR_LIBRARY} ${UDEV_LIBRARIES}) + elseif(FIND_SFML_OS_FREEBSD) + set(SFML_WINDOW_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} "GL" ${X11_LIBRARY} ${XRANDR_LIBRARY} "usbhid") elseif(FIND_SFML_OS_MACOSX) set(SFML_WINDOW_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} "-framework OpenGL -framework Foundation -framework AppKit -framework IOKit -framework Carbon") endif() @@ -305,14 +308,13 @@ if(SFML_STATIC_LIBRARIES) # sfml-graphics list(FIND SFML_FIND_COMPONENTS "graphics" FIND_SFML_GRAPHICS_COMPONENT) if(NOT ${FIND_SFML_GRAPHICS_COMPONENT} EQUAL -1) - + # find libraries find_sfml_dependency(FREETYPE_LIBRARY "FreeType" freetype) - find_sfml_dependency(GLEW_LIBRARY "GLEW" glew GLEW glew32 glew32s glew64 glew64s) find_sfml_dependency(JPEG_LIBRARY "libjpeg" jpeg) # update the list - set(SFML_GRAPHICS_DEPENDENCIES ${FREETYPE_LIBRARY} ${GLEW_LIBRARY} ${JPEG_LIBRARY}) + set(SFML_GRAPHICS_DEPENDENCIES ${FREETYPE_LIBRARY} ${JPEG_LIBRARY}) set(SFML_DEPENDENCIES ${SFML_GRAPHICS_DEPENDENCIES} ${SFML_DEPENDENCIES}) endif() @@ -322,11 +324,15 @@ if(SFML_STATIC_LIBRARIES) # find libraries find_sfml_dependency(OPENAL_LIBRARY "OpenAL" openal openal32) - find_sfml_dependency(SNDFILE_LIBRARY "libsndfile" sndfile) + find_sfml_dependency(OGG_LIBRARY "Ogg" ogg) + find_sfml_dependency(VORBIS_LIBRARY "Vorbis" vorbis) + find_sfml_dependency(VORBISFILE_LIBRARY "VorbisFile" vorbisfile) + find_sfml_dependency(VORBISENC_LIBRARY "VorbisEnc" vorbisenc) + find_sfml_dependency(FLAC_LIBRARY "FLAC" FLAC) # update the list - set(SFML_AUDIO_DEPENDENCIES ${OPENAL_LIBRARY} ${SNDFILE_LIBRARY}) - set(SFML_DEPENDENCIES ${SFML_AUDIO_DEPENDENCIES} ${SFML_DEPENDENCIES}) + set(SFML_AUDIO_DEPENDENCIES ${OPENAL_LIBRARY} ${FLAC_LIBRARY} ${VORBISENC_LIBRARY} ${VORBISFILE_LIBRARY} ${VORBIS_LIBRARY} ${OGG_LIBRARY}) + set(SFML_DEPENDENCIES ${SFML_DEPENDENCIES} ${SFML_AUDIO_DEPENDENCIES}) endif() endif() @@ -354,6 +360,6 @@ if (NOT SFML_FOUND) endif() # handle success -if(SFML_FOUND) +if(SFML_FOUND AND NOT SFML_FIND_QUIETLY) message(STATUS "Found SFML ${SFML_VERSION_MAJOR}.${SFML_VERSION_MINOR}.${SFML_VERSION_PATCH} in ${SFML_INCLUDE_DIR}") endif() diff --git a/installdeps-msys2 b/installdeps-msys2 new file mode 100644 index 00000000..4e28a0a8 --- /dev/null +++ b/installdeps-msys2 @@ -0,0 +1,29 @@ +#!/bin/sh + +cd "$(dirname $0)" + +MINGW_DEPS='SDL2 cairo ffmpeg openal sfml wxWidgets zlib binutils cmake crt-git extra-cmake-modules gcc gcc-libs gdb headers-git make pkg-config tools-git windows-default-manifest libmangle-git' +MINGW64_DEPS= +MINGW32_DEPS= + +for dep in $MINGW_DEPS; do + MINGW64_DEPS="$MINGW64_DEPS mingw-w64-x86_64-$dep" + MINGW32_DEPS="$MINGW32_DEPS mingw-w64-i686-$dep" +done + +echo 'Installing deps....' +echo + +pacman --noconfirm --needed -Syuu git make zip $MINGW64_DEPS $MINGW32_DEPS + +git submodule update --init --recursive + +cat <<'EOF' + +Done! To build do: + +mkdir build +cd build +cmake .. -G 'MSYS Makefiles' +make -j10 +EOF diff --git a/src/wx/CMakeLists.txt b/src/wx/CMakeLists.txt index 571a1f2f..e36c2998 100644 --- a/src/wx/CMakeLists.txt +++ b/src/wx/CMakeLists.txt @@ -12,8 +12,17 @@ if( WIN32 ) option( ENABLE_DIRECT3D "Enable Direct3D rendering for the wxWidgets port" ON ) option( ENABLE_XAUDIO2 "Enable xaudio2 sound output for the wxWidgets port" ON ) endif( WIN32 ) + option( ENABLE_OPENAL "Enable OpenAL for the wxWidgets port" ON ) +IF(WIN32 AND MINGW) + IF(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../dependencies") + MESSAGE(FATAL_ERROR "Please run: git submodule update --init --recursive") + ENDIF() + + INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/../../dependencies/mingw-xaudio/include") +ENDIF() + IF(APPLE) ADD_DEFINITIONS(-DwxMAC_USE_CORE_GRAPHICS) ENDIF(APPLE) @@ -202,8 +211,6 @@ IF( WIN32 ) IF(ENABLE_DEBUGGER) SET(DIRECTX_LIBRARIES ${DIRECTX_LIBRARIES} -lwsock32) ENDIF(ENABLE_DEBUGGER) -ELSE( WIN32 ) - SET(DIRECTX_LIBRARIES ) ENDIF( WIN32 ) link_directories( ${CMAKE_BINARY_DIR} ) diff --git a/todo.md b/todo.md index a8ab1a7e..6a3d54b3 100644 --- a/todo.md +++ b/todo.md @@ -23,6 +23,11 @@ - [ ] see what code we can steal from other emu folks, e.g. filters etc. - [ ] update config handling, to switch to XDG on linux etc. - [ ] add simple 'mute audio' option for wx interface +- [ ] HiDPI support on Windows +- [ ] ./installdeps for more platforms +- [ ] console-mode Wx app on Windows in debug mode +- [ ] fix keyboard game input on msys2 builds +- [ ] fix the -D\*DIR defines to have the correct paths on various platforms # Coding Guidelines (for those that want to help out and send a pull request.)