2013-08-30 05:35:43 +00:00
|
|
|
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
|
|
|
option(SKIP_POSTPROCESS_BUNDLE "Skip postprocessing bundle for redistributability" OFF)
|
|
|
|
endif()
|
|
|
|
|
2010-11-01 15:47:02 +00:00
|
|
|
set(LIBS core
|
2011-12-05 04:33:35 +00:00
|
|
|
${LZO}
|
2010-11-01 15:47:02 +00:00
|
|
|
discio
|
|
|
|
bdisasm
|
|
|
|
inputcommon
|
|
|
|
common
|
2011-01-28 20:07:32 +00:00
|
|
|
audiocommon
|
2010-11-01 15:47:02 +00:00
|
|
|
z
|
2010-11-07 17:45:35 +00:00
|
|
|
sfml-network
|
2013-03-25 02:06:34 +00:00
|
|
|
${GTK2_LIBRARIES})
|
2013-08-29 10:40:16 +00:00
|
|
|
|
2013-12-10 21:35:44 +00:00
|
|
|
if((NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") AND (NOT ANDROID))
|
Fix an idiotic race condition when starting games in multiple Dolphin instances at the same time on Unix.
MemArena mmaps the emulated memory from a file in order to get the same
mapping at multiple addresses. A file which, formerly, was located at a
static filename: it was unlinked after creation, but the open did not
use O_EXCL, so if two instances started up on the same system at just
the right time, they would get the same memory. Naturally, this caused
extremely mysterious crashes, but only in Netplay, where the game is
automatically started when the client receives a broadcast from the
server, so races are actually quite likely.
And switch to shm_open, because it fits the bill better and avoids any
issues with using /tmp.
2013-12-10 05:27:20 +00:00
|
|
|
set(LIBS ${LIBS} rt)
|
|
|
|
endif()
|
|
|
|
|
2013-02-26 19:49:00 +00:00
|
|
|
if(NOT ANDROID)
|
2013-03-25 02:06:34 +00:00
|
|
|
if(USE_X11)
|
|
|
|
set(LIBS ${LIBS} ${X11_LIBRARIES}
|
2013-07-21 05:59:36 +00:00
|
|
|
${XINPUT2_LIBRARIES}
|
2013-03-25 02:06:34 +00:00
|
|
|
${XRANDR_LIBRARIES})
|
|
|
|
endif()
|
|
|
|
if(USE_WAYLAND)
|
|
|
|
set(LIBS ${LIBS} ${WAYLAND_LIBRARIES}
|
|
|
|
${XKBCOMMON_LIBRARIES})
|
|
|
|
endif()
|
|
|
|
|
|
|
|
link_directories(${CMAKE_PREFIX_PATH}/lib)
|
|
|
|
|
2013-02-26 19:49:00 +00:00
|
|
|
if(SDL2_FOUND)
|
|
|
|
# Using shared SDL2
|
|
|
|
set(LIBS ${LIBS} ${SDL2_LIBRARY})
|
|
|
|
else(SDL2_FOUND)
|
|
|
|
if(SDL_FOUND)
|
|
|
|
# Using shared SDL
|
|
|
|
set(LIBS ${LIBS} ${SDL_LIBRARY})
|
|
|
|
else(SDL_FOUND)
|
|
|
|
# Using static SDL from Externals
|
|
|
|
set(LIBS ${LIBS} SDL)
|
|
|
|
endif()
|
2012-09-02 22:53:15 +00:00
|
|
|
endif()
|
2013-04-15 01:39:56 +00:00
|
|
|
else()
|
2013-08-29 10:53:15 +00:00
|
|
|
set(LIBS ${LIBS} png iconv)
|
2012-07-12 22:38:29 +00:00
|
|
|
endif()
|
|
|
|
|
2011-09-12 16:01:45 +00:00
|
|
|
if(LIBAV_FOUND)
|
|
|
|
set(LIBS ${LIBS} ${LIBAV_LIBRARIES})
|
|
|
|
endif()
|
|
|
|
|
2010-11-01 15:47:02 +00:00
|
|
|
if(wxWidgets_FOUND)
|
2012-12-17 20:54:20 +00:00
|
|
|
set(SRCS
|
2013-12-07 20:14:29 +00:00
|
|
|
ARCodeAddEdit.cpp
|
|
|
|
AboutDolphin.cpp
|
|
|
|
CheatsWindow.cpp
|
|
|
|
ConfigMain.cpp
|
|
|
|
Debugger/BreakpointDlg.cpp
|
|
|
|
Debugger/BreakpointView.cpp
|
|
|
|
Debugger/BreakpointWindow.cpp
|
|
|
|
Debugger/CodeView.cpp
|
|
|
|
Debugger/CodeWindow.cpp
|
|
|
|
Debugger/CodeWindowFunctions.cpp
|
|
|
|
Debugger/DSPDebugWindow.cpp
|
|
|
|
Debugger/DSPRegisterView.cpp
|
|
|
|
Debugger/DebuggerPanel.cpp
|
|
|
|
Debugger/DebuggerUIUtil.cpp
|
|
|
|
Debugger/JitWindow.cpp
|
|
|
|
Debugger/MemoryCheckDlg.cpp
|
|
|
|
Debugger/MemoryView.cpp
|
|
|
|
Debugger/MemoryWindow.cpp
|
|
|
|
Debugger/RegisterView.cpp
|
|
|
|
Debugger/RegisterWindow.cpp
|
|
|
|
FifoPlayerDlg.cpp
|
|
|
|
Frame.cpp
|
|
|
|
FrameAui.cpp
|
|
|
|
FrameTools.cpp
|
|
|
|
GameListCtrl.cpp
|
|
|
|
GeckoCodeDiag.cpp
|
|
|
|
HotkeyDlg.cpp
|
|
|
|
ISOFile.cpp
|
|
|
|
ISOProperties.cpp
|
|
|
|
InputConfigDiag.cpp
|
|
|
|
InputConfigDiagBitmaps.cpp
|
|
|
|
LogConfigWindow.cpp
|
|
|
|
LogWindow.cpp
|
|
|
|
Main.cpp
|
|
|
|
MemcardManager.cpp
|
|
|
|
MemoryCards/WiiSaveCrypted.cpp
|
|
|
|
NetWindow.cpp
|
|
|
|
PHackSettings.cpp
|
|
|
|
PatchAddEdit.cpp
|
|
|
|
TASInputDlg.cpp
|
|
|
|
UDPConfigDiag.cpp
|
|
|
|
VideoConfigDiag.cpp
|
|
|
|
WXInputBase.cpp
|
|
|
|
WiimoteConfigDiag.cpp
|
|
|
|
WxUtils.cpp)
|
2010-11-01 15:47:02 +00:00
|
|
|
|
2013-12-11 22:06:19 +00:00
|
|
|
set(WXLIBS ${wxWidgets_LIBRARIES} dl)
|
2011-02-13 06:06:32 +00:00
|
|
|
else()
|
2013-02-26 19:49:00 +00:00
|
|
|
if(ANDROID)
|
2013-12-07 20:14:29 +00:00
|
|
|
set(SRCS Android/ButtonManager.cpp
|
|
|
|
MainAndroid.cpp)
|
2013-02-26 19:49:00 +00:00
|
|
|
else()
|
2013-12-07 20:14:29 +00:00
|
|
|
set(SRCS MainNoGUI.cpp)
|
2013-02-26 19:49:00 +00:00
|
|
|
endif()
|
2012-12-17 20:54:20 +00:00
|
|
|
endif()
|
|
|
|
|
|
|
|
if(USE_EGL)
|
2013-12-07 20:14:29 +00:00
|
|
|
set(SRCS ${SRCS} GLInterface/Platform.cpp
|
|
|
|
GLInterface/EGL.cpp)
|
2013-03-25 02:06:34 +00:00
|
|
|
if(USE_WAYLAND)
|
2013-12-07 20:14:29 +00:00
|
|
|
set(SRCS ${SRCS} GLInterface/Wayland_Util.cpp)
|
2013-03-25 02:06:34 +00:00
|
|
|
endif()
|
|
|
|
if(USE_X11)
|
2013-12-07 20:14:29 +00:00
|
|
|
set(SRCS ${SRCS} GLInterface/X11_Util.cpp)
|
2013-02-26 19:49:00 +00:00
|
|
|
endif()
|
2012-12-17 20:54:20 +00:00
|
|
|
else()
|
|
|
|
if(WIN32)
|
2013-12-07 20:14:29 +00:00
|
|
|
set(SRCS ${SRCS} GLInterface/WGL.cpp)
|
2012-12-17 20:54:20 +00:00
|
|
|
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
2013-12-07 20:14:29 +00:00
|
|
|
set(SRCS ${SRCS} GLInterface/AGL.cpp)
|
2012-12-17 20:54:20 +00:00
|
|
|
else()
|
2013-12-07 20:14:29 +00:00
|
|
|
set(SRCS ${SRCS} GLInterface/GLX.cpp
|
|
|
|
GLInterface/X11_Util.cpp)
|
2012-12-26 18:12:26 +00:00
|
|
|
|
2012-12-17 20:54:20 +00:00
|
|
|
endif()
|
2010-11-01 15:47:02 +00:00
|
|
|
endif()
|
|
|
|
|
|
|
|
if(WIN32)
|
2013-12-07 20:14:29 +00:00
|
|
|
set(SRCS ${SRCS} stdafx.cpp)
|
2011-12-07 07:26:44 +00:00
|
|
|
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
2011-12-11 15:07:59 +00:00
|
|
|
# Link against OS X system frameworks.
|
2011-12-07 07:26:44 +00:00
|
|
|
list(APPEND LIBS
|
|
|
|
${APPKIT_LIBRARY}
|
|
|
|
${AU_LIBRARY}
|
|
|
|
${COREAUDIO_LIBRARY}
|
|
|
|
${COREFUND_LIBRARY}
|
|
|
|
${CORESERV_LIBRARY}
|
|
|
|
${IOB_LIBRARY}
|
|
|
|
${IOK_LIBRARY}
|
2014-01-28 23:11:51 +00:00
|
|
|
${FORCEFEEDBACK}
|
2011-12-07 07:26:44 +00:00
|
|
|
)
|
|
|
|
if(wxWidgets_FOUND)
|
|
|
|
list(APPEND LIBS
|
|
|
|
${APPSERV_LIBRARY}
|
|
|
|
${COCOA_LIBRARY}
|
|
|
|
)
|
|
|
|
endif()
|
2011-12-11 15:07:59 +00:00
|
|
|
# Add resource files to application bundle.
|
|
|
|
set(RESOURCES resources/Dolphin.icns)
|
|
|
|
list(APPEND SRCS ${RESOURCES})
|
|
|
|
set_source_files_properties(${RESOURCES} PROPERTIES
|
|
|
|
MACOSX_PACKAGE_LOCATION Resources)
|
2013-03-25 02:06:34 +00:00
|
|
|
elseif(USE_X11)
|
2013-12-07 20:14:29 +00:00
|
|
|
set(SRCS ${SRCS} X11Utils.cpp)
|
2010-11-01 15:47:02 +00:00
|
|
|
endif()
|
|
|
|
|
2010-12-04 15:19:04 +00:00
|
|
|
if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD" OR
|
|
|
|
${CMAKE_SYSTEM_NAME} MATCHES "NetBSD")
|
|
|
|
set(LIBS ${LIBS} usbhid)
|
|
|
|
endif()
|
|
|
|
|
2011-12-11 15:07:59 +00:00
|
|
|
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
|
|
|
set(DOLPHIN_EXE_BASE Dolphin)
|
|
|
|
else()
|
|
|
|
set(DOLPHIN_EXE_BASE dolphin-emu)
|
|
|
|
endif()
|
2010-11-01 15:47:02 +00:00
|
|
|
if(wxWidgets_FOUND)
|
2011-12-11 15:07:59 +00:00
|
|
|
set(DOLPHIN_EXE ${DOLPHIN_EXE_BASE})
|
2010-11-01 15:47:02 +00:00
|
|
|
else()
|
2011-12-11 15:07:59 +00:00
|
|
|
set(DOLPHIN_EXE ${DOLPHIN_EXE_BASE}-nogui)
|
2010-11-01 15:47:02 +00:00
|
|
|
endif()
|
2011-02-13 06:06:32 +00:00
|
|
|
|
2013-07-09 00:13:02 +00:00
|
|
|
if(USE_UPNP)
|
|
|
|
set(LIBS ${LIBS} miniupnpc)
|
|
|
|
endif()
|
|
|
|
|
2013-08-30 05:35:43 +00:00
|
|
|
include(FindGettext)
|
2013-09-12 16:10:16 +00:00
|
|
|
if(GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE AND wxWidgets_FOUND)
|
2013-08-30 05:35:43 +00:00
|
|
|
file(GLOB LINGUAS ${CMAKE_SOURCE_DIR}/Languages/po/*.po)
|
|
|
|
add_custom_target(translations ALL)
|
|
|
|
GETTEXT_CREATE_TRANSLATIONS(${CMAKE_SOURCE_DIR}/Languages/po/dolphin-emu.pot ${LINGUAS})
|
|
|
|
endif()
|
|
|
|
|
2013-02-26 19:49:00 +00:00
|
|
|
if(ANDROID)
|
2013-07-27 20:09:18 +00:00
|
|
|
set(DOLPHIN_EXE main)
|
2013-02-26 19:49:00 +00:00
|
|
|
add_library(${DOLPHIN_EXE} SHARED ${SRCS})
|
|
|
|
target_link_libraries(${DOLPHIN_EXE}
|
|
|
|
log
|
|
|
|
android
|
2013-11-24 22:43:53 +00:00
|
|
|
"-Wl,--no-warn-mismatch"
|
2013-02-26 19:49:00 +00:00
|
|
|
"-Wl,--whole-archive"
|
|
|
|
${LIBS}
|
|
|
|
"-Wl,--no-whole-archive"
|
|
|
|
)
|
2013-05-18 08:56:45 +00:00
|
|
|
add_custom_command(TARGET ${DOLPHIN_EXE} POST_BUILD
|
2013-10-29 00:59:03 +00:00
|
|
|
COMMAND mkdir ARGS -p ${CMAKE_SOURCE_DIR}/Source/Android/libs/${ANDROID_NDK_ABI_NAME}
|
2013-06-22 12:45:05 +00:00
|
|
|
)
|
|
|
|
add_custom_command(TARGET ${DOLPHIN_EXE} POST_BUILD
|
2013-10-29 00:59:03 +00:00
|
|
|
COMMAND cp ARGS ${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ANDROID_NDK_ABI_NAME}/lib${DOLPHIN_EXE}.so ${CMAKE_SOURCE_DIR}/Source/Android/libs/${ANDROID_NDK_ABI_NAME}/
|
2013-05-18 08:56:45 +00:00
|
|
|
)
|
2013-07-06 00:18:33 +00:00
|
|
|
add_custom_command(TARGET ${DOLPHIN_EXE} POST_BUILD
|
|
|
|
COMMAND cp ARGS ${CMAKE_SOURCE_DIR}/Data/Sys/GC/* ${CMAKE_SOURCE_DIR}/Source/Android/assets/
|
|
|
|
)
|
2013-02-26 19:49:00 +00:00
|
|
|
else()
|
|
|
|
add_executable(${DOLPHIN_EXE} ${SRCS})
|
|
|
|
target_link_libraries(${DOLPHIN_EXE} ${LIBS} ${WXLIBS})
|
|
|
|
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
2011-12-11 15:07:59 +00:00
|
|
|
include(BundleUtilities)
|
2013-02-26 19:49:00 +00:00
|
|
|
set(BUNDLE_PATH ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${DOLPHIN_EXE}.app)
|
2011-12-12 00:30:42 +00:00
|
|
|
|
2013-02-26 19:49:00 +00:00
|
|
|
# Ask for an application bundle.
|
|
|
|
set_target_properties(${DOLPHIN_EXE} PROPERTIES
|
|
|
|
MACOSX_BUNDLE true
|
|
|
|
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in
|
2011-12-12 00:30:42 +00:00
|
|
|
)
|
2013-02-26 19:49:00 +00:00
|
|
|
|
2013-09-23 04:22:00 +00:00
|
|
|
# get rid of any old copies
|
|
|
|
file (REMOVE_RECURSE ${BUNDLE_PATH}/Contents/Resources/Sys)
|
2013-08-30 05:35:43 +00:00
|
|
|
if(NOT SKIP_POSTPROCESS_BUNDLE)
|
|
|
|
# Fix up the bundle after it is finished.
|
|
|
|
# There does not seem to be an easy way to run CMake commands post-build,
|
|
|
|
# so we invoke CMake again on a generated script.
|
|
|
|
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/postprocess_bundle.cmake "
|
|
|
|
include(BundleUtilities)
|
|
|
|
message(\"Fixing up application bundle: ${BUNDLE_PATH}\")
|
|
|
|
message(\"(Note: This is only necessary to produce a redistributable binary.\")
|
|
|
|
message(\"To skip, pass -DSKIP_POSTPROCESS_BUNDLE=1 to cmake.)\")
|
|
|
|
set(BU_CHMOD_BUNDLE_ITEMS ON)
|
|
|
|
fixup_bundle(\"${BUNDLE_PATH}\" \"\" \"\")
|
2013-09-23 04:22:00 +00:00
|
|
|
file(INSTALL ${CMAKE_SOURCE_DIR}/Data/Sys
|
|
|
|
DESTINATION ${BUNDLE_PATH}/Contents/Resources
|
|
|
|
)
|
2013-08-30 05:35:43 +00:00
|
|
|
")
|
|
|
|
add_custom_command(TARGET ${DOLPHIN_EXE} POST_BUILD
|
|
|
|
COMMAND ${CMAKE_COMMAND} -P postprocess_bundle.cmake
|
|
|
|
)
|
2013-09-23 04:22:00 +00:00
|
|
|
else()
|
|
|
|
add_custom_command(OUTPUT ${BUNDLE_PATH}/Contents/Resources/Sys
|
2013-10-17 03:14:48 +00:00
|
|
|
COMMAND ln -nfs ${CMAKE_SOURCE_DIR}/Data/Sys ${BUNDLE_PATH}/Contents/Resources/Sys
|
2013-09-23 04:22:00 +00:00
|
|
|
VERBATIM
|
2011-12-17 15:26:52 +00:00
|
|
|
)
|
2013-09-23 04:22:00 +00:00
|
|
|
add_custom_target(CopyDataIntoBundle ALL
|
|
|
|
DEPENDS ${BUNDLE_PATH}/Contents/Resources/Sys
|
|
|
|
)
|
|
|
|
endif()
|
2013-08-30 05:35:43 +00:00
|
|
|
|
2013-09-12 16:10:16 +00:00
|
|
|
if(GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE AND wxWidgets_FOUND)
|
2013-08-30 05:35:43 +00:00
|
|
|
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/copy_translations_into_bundle.cmake "
|
2013-08-31 05:54:57 +00:00
|
|
|
file(GLOB TRANSLATION_FILES RELATIVE ${CMAKE_CURRENT_BINARY_DIR}
|
|
|
|
${CMAKE_CURRENT_BINARY_DIR}/*.gmo
|
2013-08-30 05:35:43 +00:00
|
|
|
)
|
|
|
|
foreach(TRANSLATION_FILE \${TRANSLATION_FILES})
|
|
|
|
string(REPLACE \".gmo\" \".lproj\" TRANSLATION_DIR
|
|
|
|
\${TRANSLATION_FILE}
|
|
|
|
)
|
|
|
|
# It would be better to copy to the new name as a single action,
|
|
|
|
# but I can't figure out a way to let CMake do that.
|
2013-08-31 05:54:57 +00:00
|
|
|
file(COPY ${CMAKE_CURRENT_BINARY_DIR}/\${TRANSLATION_FILE}
|
2013-08-30 05:35:43 +00:00
|
|
|
DESTINATION ${BUNDLE_PATH}/Contents/Resources/\${TRANSLATION_DIR}
|
|
|
|
NO_SOURCE_PERMISSIONS
|
|
|
|
)
|
|
|
|
file(RENAME
|
|
|
|
${BUNDLE_PATH}/Contents/Resources/\${TRANSLATION_DIR}/\${TRANSLATION_FILE}
|
|
|
|
${BUNDLE_PATH}/Contents/Resources/\${TRANSLATION_DIR}/dolphin-emu.mo
|
|
|
|
)
|
|
|
|
endforeach(TRANSLATION_FILE)
|
|
|
|
")
|
|
|
|
|
|
|
|
file(GLOB PO_FILES RELATIVE ${CMAKE_SOURCE_DIR}/Languages/po
|
|
|
|
${CMAKE_SOURCE_DIR}/Languages/po/*.po
|
|
|
|
)
|
|
|
|
string(REPLACE .po .gmo GMO_FILES "${PO_FILES}")
|
|
|
|
|
|
|
|
add_custom_command(OUTPUT ${BUNDLE_PATH}/Contents/Resources/en.lproj
|
|
|
|
COMMAND ${CMAKE_COMMAND} -P copy_translations_into_bundle.cmake
|
|
|
|
DEPENDS ${GMO_FILES}
|
2013-09-12 15:26:04 +00:00
|
|
|
${CMAKE_SOURCE_DIR}/Data/Sys
|
2013-08-30 05:35:43 +00:00
|
|
|
VERBATIM
|
|
|
|
)
|
|
|
|
add_custom_target(CopyTranslationsIntoBundle ALL
|
|
|
|
DEPENDS ${BUNDLE_PATH}/Contents/Resources/en.lproj
|
|
|
|
)
|
|
|
|
endif()
|
2011-12-14 01:50:36 +00:00
|
|
|
|
2013-02-26 19:49:00 +00:00
|
|
|
# Install bundle into systemwide /Applications directory.
|
|
|
|
install(DIRECTORY ${BUNDLE_PATH} DESTINATION /Applications
|
|
|
|
USE_SOURCE_PERMISSIONS
|
|
|
|
)
|
|
|
|
else()
|
|
|
|
install(TARGETS ${DOLPHIN_EXE} RUNTIME DESTINATION ${bindir})
|
|
|
|
endif()
|
2011-12-11 15:07:59 +00:00
|
|
|
endif()
|
2012-12-22 11:51:01 +00:00
|
|
|
|
|
|
|
set(CPACK_PACKAGE_EXECUTABLES ${CPACK_PACKAGE_EXECUTABLES} ${DOLPHIN_EXE})
|