From fa79b3f4f47a53ed758cb781940bf2a6ba0f1111 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 25 Feb 2015 14:58:47 -0700 Subject: Small changes to the CMake file to make windows build easier --- CMakeLists.txt | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index 516aba55..ef7c4400 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,19 +18,25 @@ else() # changes intact, so we'll just clobber everything and say sorry. message(STATUS "Cache compiler flags ignored, please edit CMakeLists.txt to change the flags.") # /MP - Multi-threaded compilation - # /MD - Multi-threaded runtime # /Ox - Full optimization # /Oy- - Don't omit frame pointer # /GR- - Disable RTTI # /GS- - No stack buffer overflow checks # /EHsc - C++-only exception handling semantics - set(optimization_flags "/MP /MD /Ox /Oy- /GR- /GS- /EHsc") + set(optimization_flags "/MP /Ox /Oy- /GR- /GS- /EHsc") # /Zi - Output debugging information # /Zo - enahnced debug info for optimized builds - set(CMAKE_C_FLAGS_RELEASE "${optimization_flags} /Zi" CACHE STRING "" FORCE) - set(CMAKE_CXX_FLAGS_RELEASE "${optimization_flags} /Zi" CACHE STRING "" FORCE) - set(CMAKE_C_FLAGS_RELWITHDEBINFO "${optimization_flags} /Zi /Zo" CACHE STRING "" FORCE) - set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${optimization_flags} /Zi /Zo" CACHE STRING "" FORCE) + # /MDd - Multi-threaded Debug Runtime DLL + set(CMAKE_C_FLAGS_DEBUG "${optimization_flags} /MDd /Zi /Zo" CACHE STRING "" FORCE) + set(CMAKE_CXX_FLAGS_DEBUG "${optimization_flags} /MDd /Zi /Zo" CACHE STRING "" FORCE) + # /MD - Multi-threaded runtime DLL + set(CMAKE_C_FLAGS_RELEASE "${optimization_flags} /MD /Zi" CACHE STRING "" FORCE) + set(CMAKE_CXX_FLAGS_RELEASE "${optimization_flags} /MD /Zi" CACHE STRING "" FORCE) + set(CMAKE_C_FLAGS_RELWITHDEBINFO "${optimization_flags} /MD /Zi /Zo" CACHE STRING "" FORCE) + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${optimization_flags} /MD /Zi /Zo" CACHE STRING "" FORCE) + + set(CMAKE_EXE_LINKER_FLAGS_DEBUG "/DEBUG" CACHE STRING "" FORCE) + set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "/DEBUG" CACHE STRING "" FORCE) endif() add_definitions(-DSINGLETHREADED) @@ -100,7 +106,7 @@ if (ENABLE_GLFW) set(GLFW_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/externals/glfw-3.0.4.bin") set(GLFW_INCLUDE_DIRS "${GLFW_PREFIX}/include" CACHE PATH "Path to GLFW3 headers") set(GLFW_LIBRARY_DIRS "${GLFW_PREFIX}/lib-${TMP_TOOLSET}" CACHE PATH "Path to GLFW3 libraries") - + # Clean up after ourselves unset(TMP_TOOLSET) unset(TMP_ARCH) -- cgit v1.2.3 From 4a7e21eb58cadcb440aadb4abc57d4a974b46f9c Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 25 Feb 2015 21:36:02 -0700 Subject: More changes to the CMakeFiles for better MSVC compatibility. Added in the RelWithDebInfo target and setup copying the Qt 5 Dlls to the output directories. --- CMakeLists.txt | 4 ++-- src/citra_qt/CMakeLists.txt | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index ef7c4400..fbfef281 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,7 +12,7 @@ else() add_definitions(/D_CRT_SECURE_NO_WARNINGS) # set up output paths for executable binaries (.exe-files, and .dll-files on DLL-capable platforms) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) - + set(CMAKE_CONFIGURATION_TYPES Debug Release RelWithDebInfo CACHE TYPE INTERNAL FORCE) # Tweak optimization settings # As far as I can tell, there's no way to override the CMake defaults while leaving user # changes intact, so we'll just clobber everything and say sorry. @@ -106,7 +106,7 @@ if (ENABLE_GLFW) set(GLFW_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/externals/glfw-3.0.4.bin") set(GLFW_INCLUDE_DIRS "${GLFW_PREFIX}/include" CACHE PATH "Path to GLFW3 headers") set(GLFW_LIBRARY_DIRS "${GLFW_PREFIX}/lib-${TMP_TOOLSET}" CACHE PATH "Path to GLFW3 libraries") - + # Clean up after ourselves unset(TMP_TOOLSET) unset(TMP_ARCH) diff --git a/src/citra_qt/CMakeLists.txt b/src/citra_qt/CMakeLists.txt index ff780cad..be1de334 100644 --- a/src/citra_qt/CMakeLists.txt +++ b/src/citra_qt/CMakeLists.txt @@ -74,3 +74,47 @@ target_link_libraries(citra-qt ${OPENGL_gl_LIBRARY} ${CITRA_QT_LIBS}) target_link_libraries(citra-qt ${PLATFORM_LIBRARIES}) #install(TARGETS citra-qt RUNTIME DESTINATION ${bindir}) + +# setup a post build to copy the Qt Dlls to the right place on Windows MSVC +# I only have Qt 5 so if someone wants to add this for Qt 4 as well that would be great +if (Qt5_FOUND) + set(Qt5_DLL_DIR "${Qt5_DIR}/../../../bin") + file(GLOB Qt5_DEBUG_DLLS + "${Qt5_DLL_DIR}/icudt*.dll" + "${Qt5_DLL_DIR}/icuin*.dll" + "${Qt5_DLL_DIR}/icuuc*.dll" + "${Qt5_DLL_DIR}/Qt5Cored.*" + "${Qt5_DLL_DIR}/Qt5Guid.*" + "${Qt5_DLL_DIR}/Qt5OpenGLd.*" + "${Qt5_DLL_DIR}/Qt5Widgetsd.*" + ) + foreach(Dll ${Qt5_DEBUG_DLLS}) + # the if not exist skips this copy if the build directory doesn't exist so it doesn't error out + add_custom_command(TARGET citra-qt POST_BUILD + COMMAND if not exist "${CMAKE_BINARY_DIR}/bin/Debug/" goto :cmEnd + COMMAND ${CMAKE_COMMAND} -E + copy ${Dll} "${CMAKE_BINARY_DIR}/bin/Debug/") + endforeach() + # sooo here's a fun struggle. I can't set a custom command for a single build target, + # so instead I have to add all these to every configuration in VS anyway. + file(GLOB Qt5_RELEASE_DLLS + "${Qt5_DLL_DIR}/icudt*.dll" + "${Qt5_DLL_DIR}/icuin*.dll" + "${Qt5_DLL_DIR}/icuuc*.dll" + "${Qt5_DLL_DIR}/Qt5Core.*" + "${Qt5_DLL_DIR}/Qt5Gui.*" + "${Qt5_DLL_DIR}/Qt5OpenGL.*" + "${Qt5_DLL_DIR}/Qt5Widgets.*" + ) + foreach(Dll ${Qt5_RELEASE_DLLS}) + add_custom_command(TARGET citra-qt POST_BUILD + COMMAND if not exist "${CMAKE_BINARY_DIR}/bin/Release/" goto :cmEnd + COMMAND ${CMAKE_COMMAND} -E + copy ${Dll} "${CMAKE_BINARY_DIR}/bin/Release/") + add_custom_command(TARGET citra-qt POST_BUILD + COMMAND if not exist "${CMAKE_BINARY_DIR}/bin/RelWithDebInfo/" goto :cmEnd + COMMAND ${CMAKE_COMMAND} -E + copy ${Dll} "${CMAKE_BINARY_DIR}/bin/RelWithDebInfo/") + endforeach() + unset(Qt5_DLL_DIR) +endif() -- cgit v1.2.3 From 2d7008f03c15e983c76f91ef95b1361fa3313762 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Thu, 26 Feb 2015 20:24:22 -0700 Subject: Changes to bring the previous commits in line with the comments on thepull request. Made the debug build a true debug build with no optimizxations and the RelWithDebInfo is what it says it is too. Changed the copying of the dlls to the build directories to happen at configuration time instead of build time --- CMakeLists.txt | 11 ++++++----- src/citra_qt/CMakeLists.txt | 34 ++++++++++++---------------------- 2 files changed, 18 insertions(+), 27 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index fbfef281..64907a27 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,7 +12,8 @@ else() add_definitions(/D_CRT_SECURE_NO_WARNINGS) # set up output paths for executable binaries (.exe-files, and .dll-files on DLL-capable platforms) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) - set(CMAKE_CONFIGURATION_TYPES Debug Release RelWithDebInfo CACHE TYPE INTERNAL FORCE) + set(CMAKE_CONFIGURATION_TYPES Debug Release RelWithDebInfo CACHE TYPE INTERNAL) + # Tweak optimization settings # As far as I can tell, there's no way to override the CMake defaults while leaving user # changes intact, so we'll just clobber everything and say sorry. @@ -27,11 +28,11 @@ else() # /Zi - Output debugging information # /Zo - enahnced debug info for optimized builds # /MDd - Multi-threaded Debug Runtime DLL - set(CMAKE_C_FLAGS_DEBUG "${optimization_flags} /MDd /Zi /Zo" CACHE STRING "" FORCE) - set(CMAKE_CXX_FLAGS_DEBUG "${optimization_flags} /MDd /Zi /Zo" CACHE STRING "" FORCE) + set(CMAKE_C_FLAGS_DEBUG "/MP /MDd /Zi" CACHE STRING "" FORCE) + set(CMAKE_CXX_FLAGS_DEBUG "/MP /MDd /Zi" CACHE STRING "" FORCE) # /MD - Multi-threaded runtime DLL - set(CMAKE_C_FLAGS_RELEASE "${optimization_flags} /MD /Zi" CACHE STRING "" FORCE) - set(CMAKE_CXX_FLAGS_RELEASE "${optimization_flags} /MD /Zi" CACHE STRING "" FORCE) + set(CMAKE_C_FLAGS_RELEASE "${optimization_flags} /MD" CACHE STRING "" FORCE) + set(CMAKE_CXX_FLAGS_RELEASE "${optimization_flags} /MD" CACHE STRING "" FORCE) set(CMAKE_C_FLAGS_RELWITHDEBINFO "${optimization_flags} /MD /Zi /Zo" CACHE STRING "" FORCE) set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${optimization_flags} /MD /Zi /Zo" CACHE STRING "" FORCE) diff --git a/src/citra_qt/CMakeLists.txt b/src/citra_qt/CMakeLists.txt index be1de334..23513d7e 100644 --- a/src/citra_qt/CMakeLists.txt +++ b/src/citra_qt/CMakeLists.txt @@ -75,9 +75,7 @@ target_link_libraries(citra-qt ${PLATFORM_LIBRARIES}) #install(TARGETS citra-qt RUNTIME DESTINATION ${bindir}) -# setup a post build to copy the Qt Dlls to the right place on Windows MSVC -# I only have Qt 5 so if someone wants to add this for Qt 4 as well that would be great -if (Qt5_FOUND) +if (Qt5_FOUND AND MSVC) set(Qt5_DLL_DIR "${Qt5_DIR}/../../../bin") file(GLOB Qt5_DEBUG_DLLS "${Qt5_DLL_DIR}/icudt*.dll" @@ -88,15 +86,6 @@ if (Qt5_FOUND) "${Qt5_DLL_DIR}/Qt5OpenGLd.*" "${Qt5_DLL_DIR}/Qt5Widgetsd.*" ) - foreach(Dll ${Qt5_DEBUG_DLLS}) - # the if not exist skips this copy if the build directory doesn't exist so it doesn't error out - add_custom_command(TARGET citra-qt POST_BUILD - COMMAND if not exist "${CMAKE_BINARY_DIR}/bin/Debug/" goto :cmEnd - COMMAND ${CMAKE_COMMAND} -E - copy ${Dll} "${CMAKE_BINARY_DIR}/bin/Debug/") - endforeach() - # sooo here's a fun struggle. I can't set a custom command for a single build target, - # so instead I have to add all these to every configuration in VS anyway. file(GLOB Qt5_RELEASE_DLLS "${Qt5_DLL_DIR}/icudt*.dll" "${Qt5_DLL_DIR}/icuin*.dll" @@ -106,15 +95,16 @@ if (Qt5_FOUND) "${Qt5_DLL_DIR}/Qt5OpenGL.*" "${Qt5_DLL_DIR}/Qt5Widgets.*" ) - foreach(Dll ${Qt5_RELEASE_DLLS}) - add_custom_command(TARGET citra-qt POST_BUILD - COMMAND if not exist "${CMAKE_BINARY_DIR}/bin/Release/" goto :cmEnd - COMMAND ${CMAKE_COMMAND} -E - copy ${Dll} "${CMAKE_BINARY_DIR}/bin/Release/") - add_custom_command(TARGET citra-qt POST_BUILD - COMMAND if not exist "${CMAKE_BINARY_DIR}/bin/RelWithDebInfo/" goto :cmEnd - COMMAND ${CMAKE_COMMAND} -E - copy ${Dll} "${CMAKE_BINARY_DIR}/bin/RelWithDebInfo/") - endforeach() + # make the output directories ahead of the time and copy in the needed Dlls now + file(MAKE_DIRECTORY + ${CMAKE_BINARY_DIR}/bin/Debug/ + ${CMAKE_BINARY_DIR}/bin/Release/ + ${CMAKE_BINARY_DIR}/bin/RelWithDebInfo/ + ) + file(COPY ${Qt5_DEBUG_DLLS} DESTINATION ${CMAKE_BINARY_DIR}/bin/Debug/) + file(COPY ${Qt5_RELEASE_DLLS} DESTINATION ${CMAKE_BINARY_DIR}/bin/Release/) + file(COPY ${Qt5_RELEASE_DLLS} DESTINATION ${CMAKE_BINARY_DIR}/bin/RelWithDebInfo/) + unset(Qt5_RELEASE_DLLS) + unset(Qt5_DEBUG_DLLS) unset(Qt5_DLL_DIR) endif() -- cgit v1.2.3 From 5b9a5493c5151fe326b495c944687fc690598ef5 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Thu, 26 Mar 2015 04:00:49 -0600 Subject: Updated the copy commands to run on post_build and use generator expressions to simplify the code as well --- CMakeLists.txt | 16 +++++++------- src/citra_qt/CMakeLists.txt | 53 ++++++++++++++++++++++----------------------- 2 files changed, 34 insertions(+), 35 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index 64907a27..5cae66de 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,29 +12,29 @@ else() add_definitions(/D_CRT_SECURE_NO_WARNINGS) # set up output paths for executable binaries (.exe-files, and .dll-files on DLL-capable platforms) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) - set(CMAKE_CONFIGURATION_TYPES Debug Release RelWithDebInfo CACHE TYPE INTERNAL) + set(CMAKE_CONFIGURATION_TYPES Debug Release RelWithDebInfo CACHE STRING "" FORCE) # Tweak optimization settings # As far as I can tell, there's no way to override the CMake defaults while leaving user # changes intact, so we'll just clobber everything and say sorry. message(STATUS "Cache compiler flags ignored, please edit CMakeLists.txt to change the flags.") - # /MP - Multi-threaded compilation - # /Ox - Full optimization + # /O2 - Optimization level 2 # /Oy- - Don't omit frame pointer # /GR- - Disable RTTI # /GS- - No stack buffer overflow checks # /EHsc - C++-only exception handling semantics - set(optimization_flags "/MP /Ox /Oy- /GR- /GS- /EHsc") + set(optimization_flags "/O2 /Oy- /GR- /GS- /EHsc") + # /MP - Multi-threaded compilation # /Zi - Output debugging information # /Zo - enahnced debug info for optimized builds # /MDd - Multi-threaded Debug Runtime DLL set(CMAKE_C_FLAGS_DEBUG "/MP /MDd /Zi" CACHE STRING "" FORCE) set(CMAKE_CXX_FLAGS_DEBUG "/MP /MDd /Zi" CACHE STRING "" FORCE) # /MD - Multi-threaded runtime DLL - set(CMAKE_C_FLAGS_RELEASE "${optimization_flags} /MD" CACHE STRING "" FORCE) - set(CMAKE_CXX_FLAGS_RELEASE "${optimization_flags} /MD" CACHE STRING "" FORCE) - set(CMAKE_C_FLAGS_RELWITHDEBINFO "${optimization_flags} /MD /Zi /Zo" CACHE STRING "" FORCE) - set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${optimization_flags} /MD /Zi /Zo" CACHE STRING "" FORCE) + set(CMAKE_C_FLAGS_RELEASE "${optimization_flags} /MP /MD" CACHE STRING "" FORCE) + set(CMAKE_CXX_FLAGS_RELEASE "${optimization_flags} /MP /MD" CACHE STRING "" FORCE) + set(CMAKE_C_FLAGS_RELWITHDEBINFO "${optimization_flags} /MP /MD /Zi /Zo" CACHE STRING "" FORCE) + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${optimization_flags} /MP /MD /Zi /Zo" CACHE STRING "" FORCE) set(CMAKE_EXE_LINKER_FLAGS_DEBUG "/DEBUG" CACHE STRING "" FORCE) set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "/DEBUG" CACHE STRING "" FORCE) diff --git a/src/citra_qt/CMakeLists.txt b/src/citra_qt/CMakeLists.txt index 23513d7e..2545b5d6 100644 --- a/src/citra_qt/CMakeLists.txt +++ b/src/citra_qt/CMakeLists.txt @@ -77,34 +77,33 @@ target_link_libraries(citra-qt ${PLATFORM_LIBRARIES}) if (Qt5_FOUND AND MSVC) set(Qt5_DLL_DIR "${Qt5_DIR}/../../../bin") - file(GLOB Qt5_DEBUG_DLLS - "${Qt5_DLL_DIR}/icudt*.dll" - "${Qt5_DLL_DIR}/icuin*.dll" - "${Qt5_DLL_DIR}/icuuc*.dll" - "${Qt5_DLL_DIR}/Qt5Cored.*" - "${Qt5_DLL_DIR}/Qt5Guid.*" - "${Qt5_DLL_DIR}/Qt5OpenGLd.*" - "${Qt5_DLL_DIR}/Qt5Widgetsd.*" + set(Qt5_PLATFORMS_DIR "${Qt5_DIR}/../../../plugins/platforms/") + set(Qt5_DLLS + icudt*.dll + icuin*.dll + icuuc*.dll + Qt5Core$<$:d>.* + Qt5Gui$<$:d>.* + Qt5OpenGL$<$:d>.* + Qt5Widgets$<$:d>.* ) - file(GLOB Qt5_RELEASE_DLLS - "${Qt5_DLL_DIR}/icudt*.dll" - "${Qt5_DLL_DIR}/icuin*.dll" - "${Qt5_DLL_DIR}/icuuc*.dll" - "${Qt5_DLL_DIR}/Qt5Core.*" - "${Qt5_DLL_DIR}/Qt5Gui.*" - "${Qt5_DLL_DIR}/Qt5OpenGL.*" - "${Qt5_DLL_DIR}/Qt5Widgets.*" + set(DLL_DEST "${CMAKE_BINARY_DIR}/bin/$/") + set(PLATFORMS ${DLL_DEST}platforms/) + + # windows commandline expects the / to be \ so switch them + string(REPLACE "/" "\\" Qt5_DLL_DIR ${Qt5_DLL_DIR}) + string(REPLACE "/" "\\" Qt5_PLATFORMS_DIR ${Qt5_PLATFORMS_DIR}) + string(REPLACE "/" "\\" DLL_DEST ${DLL_DEST}) + string(REPLACE "/" "\\" PLATFORMS ${PLATFORMS}) + + # /NJH /NJS /NDL /NFL /NC /NS /NP - Silence any output + # cmake adds an extra check for command success which doesn't work too well with robocopy + # so trick it into thinking the command was successful with the || cmd /c "exit /b 0" + add_custom_command(TARGET citra-qt POST_BUILD + COMMAND robocopy ${Qt5_DLL_DIR} ${DLL_DEST} ${Qt5_DLLS} /NJH /NJS /NDL /NFL /NC /NS /NP || cmd /c "exit /b 0" + COMMAND if not exist ${PLATFORMS} mkdir ${PLATFORMS} 2> nul + COMMAND robocopy ${Qt5_PLATFORMS_DIR} ${PLATFORMS} qwindows$<$:d>.* /NJH /NJS /NDL /NFL /NC /NS /NP || cmd /c "exit /b 0" ) - # make the output directories ahead of the time and copy in the needed Dlls now - file(MAKE_DIRECTORY - ${CMAKE_BINARY_DIR}/bin/Debug/ - ${CMAKE_BINARY_DIR}/bin/Release/ - ${CMAKE_BINARY_DIR}/bin/RelWithDebInfo/ - ) - file(COPY ${Qt5_DEBUG_DLLS} DESTINATION ${CMAKE_BINARY_DIR}/bin/Debug/) - file(COPY ${Qt5_RELEASE_DLLS} DESTINATION ${CMAKE_BINARY_DIR}/bin/Release/) - file(COPY ${Qt5_RELEASE_DLLS} DESTINATION ${CMAKE_BINARY_DIR}/bin/RelWithDebInfo/) - unset(Qt5_RELEASE_DLLS) - unset(Qt5_DEBUG_DLLS) + unset(Qt5_DLLS) unset(Qt5_DLL_DIR) endif() -- cgit v1.2.3