diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index d616f2d5..423a07ae 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -107,7 +107,6 @@ jobs: vcpkg install sdl2:x64-windows-static vcpkg install sqlite3:x64-windows-static vcpkg install tiff:x64-windows-static - vcpkg install tool-meson:x64-windows-static vcpkg install wxwidgets:x64-windows-static vcpkg install xerces-c:x64-windows-static vcpkg install zlib:x64-windows-static diff --git a/CMakeLists.txt b/CMakeLists.txt index 57045047..0d301921 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,11 +1,21 @@ -CMAKE_MINIMUM_REQUIRED( VERSION 2.8.2 ) +IF(WIN32) + # Windows cmake version needs to be higher - for CMAKE_MSVC_RUNTIME_LIBRARY. + CMAKE_MINIMUM_REQUIRED( VERSION 3.15 ) + + # This must be Set before "PROJECT()" is called. + SET(VCPKG_TARGET_TRIPLET "x64-windows-static") +ELSE() + CMAKE_MINIMUM_REQUIRED( VERSION 3.5 ) +ENDIF() + PROJECT( MegaGlest ) #SET(CMAKE_VERBOSE_MAKEFILE ON) # -# *NOTE: For now we assume some variation of GCC Compiler (or MingW for Windows binaries) -# VC++ users should not use CMake yet but rather the build-mg.bat file in mk/windoze +# *NOTE: This script has been tested and works with with GCC, Clang and MSbuild (VS). +# MSBuild requires using vcpkg and installing required libs. +# Script works with Windows, Linux and Mac. # # build type @@ -18,13 +28,38 @@ IF(NOT CMAKE_VERSION VERSION_LESS "3.1") cmake_policy(SET CMP0054 NEW) ENDIF() +IF(MSVC) + # Sets the flags MT/ MTd correctly. + SET(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") + + INCLUDE(ProcessorCount) + ProcessorCount(N) + IF(N GREATER 0) + MESSAGE(STATUS "Will build on ${N} cores.") + ELSE() + SET(N 1) + MESSAGE(STATUS "Could not find number of cores. Will attempt to build on ${N} cores.") + ENDIF() + + # "MP" is build with all cores. + SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MP${N}") + SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MP${N}") + SET(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_$} /MP${N}" ) + SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_$} /MP${N}" ) + + SET(MEGAGLEST_DATA_INSTALL_PATH "${CMAKE_INSTALL_PREFIX}/" CACHE STRING "The installation path for data files ${COMMON_INFO_ABOUT_PATH}") + SET(MEGAGLEST_INI_INSTALL_PATH "${MEGAGLEST_DATA_INSTALL_PATH}" CACHE STRING "Install path for ini files") + + INCLUDE(FindPkgConfig) +ENDIF() + # add additional CMake modules MESSAGE(STATUS "CMAKE_SOURCE_DIR = ${CMAKE_SOURCE_DIR}") list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/mk/cmake/Modules) IF(CMAKE_BUILD_TYPE) MESSAGE(STATUS "Build type for this compile will be: ${CMAKE_BUILD_TYPE}") ENDIF() -IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") +IF ("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?Clang") SET(CMAKE_COMPILER_IS_GNUCXX "YES") # ADD_DEFINITIONS("-Qunused-arguments -Wno-switch") ADD_DEFINITIONS("-Wno-switch") @@ -90,10 +125,12 @@ FOREACH(ver_var VER_MAJOR;VER_MINOR;VER_PATCH;MEGAGLEST_VERSION) ENDFOREACH() MESSAGE(STATUS "Detected MegaGlest Version is [v${MEGAGLEST_VERSION}] ") -SET(PIC_FLAG "${PIC_FLAG} -fPIC") -IF(WANT_STATIC_LIBS AND "${CMAKE_SIZEOF_VOID_P}" EQUAL "8") - # CMAKE_SIZEOF_VOID_P=8 => 64bit - ADD_DEFINITIONS("${PIC_FLAG}") +IF(NOT MSVC) + SET(PIC_FLAG "${PIC_FLAG} -fPIC") + IF(WANT_STATIC_LIBS AND "${CMAKE_SIZEOF_VOID_P}" EQUAL "8") + # CMAKE_SIZEOF_VOID_P=8 => 64bit + ADD_DEFINITIONS("${PIC_FLAG}") + ENDIF() ENDIF() ## Compiler flags, CPACK configuration and other Apple specific code. @@ -101,20 +138,24 @@ IF(APPLE) include(${PROJECT_SOURCE_DIR}/mk/macos/CMakeLists.txt) ENDIF(APPLE) -IF(CMAKE_COMPILER_IS_GNUCXX OR MINGW) - IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") +IF(CMAKE_COMPILER_IS_GNUCXX OR MINGW OR MSVC) + IF ("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?Clang") MESSAGE(STATUS "Detected CLANG Compiler...") ELSEIF(CMAKE_COMPILER_IS_GNUCXX) MESSAGE(STATUS "Detected GNUC Compiler...") ELSEIF(MINGW) MESSAGE(STATUS "Detected MINGW Compiler...") + ELSEIF(MSVC) + MESSAGE(STATUS "Detected VS target for building with msbuild...") ENDIF() # Common generic GNU type compiler options that work with all generic GCC compatible compilers - ADD_DEFINITIONS("-Wuninitialized -Wsign-compare -Wunused-function -Wunused-variable -Wreturn-type -fno-strict-aliasing") + IF(NOT MSVC) + ADD_DEFINITIONS("-Wuninitialized -Wsign-compare -Wunused-function -Wunused-variable -Wreturn-type -fno-strict-aliasing") + ENDIF() # For gcc warning options see: http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html - IF(NOT MINGW) + IF(NOT WIN32) # For tons of verbose warnings add: -Wall # ADD_DEFINITIONS("-Wreturn-type -fno-strict-aliasing -frounding-math -fsignaling-nans -mfpmath=sse -msse -rdynamic") # ADD_DEFINITIONS("-Wuninitialized -Wsign-compare -Wunused-function -Wunused-variable -Wreturn-type -fno-strict-aliasing -frounding-math -fsignaling-nans -rdynamic") @@ -125,7 +166,9 @@ IF(CMAKE_COMPILER_IS_GNUCXX OR MINGW) ENDIF() # CLang specific Compiler Options - IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + IF ("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?Clang") + + ELSEIF(MSVC) # GCC specific Compiler Options ELSE() @@ -173,41 +216,43 @@ IF(CMAKE_COMPILER_IS_GNUCXX OR MINGW) MESSAGE(STATUS "*WARNING: Disabled use of STREFLOP! Out of synchs may occur") ENDIF() - include(CheckCXXSourceRuns) + include(CheckCXXSourceRuns) - check_cxx_source_runs(" - #include - #include - int main() - { - const size_t max_depth = 6; - void *stack_addrs[max_depth]; - size_t stack_depth = backtrace(stack_addrs, max_depth); - }" - HAS_GCC_BACKTRACE) + check_cxx_source_runs(" + #include + #include + int main() + { +const size_t max_depth = 6; +void *stack_addrs[max_depth]; +size_t stack_depth = backtrace(stack_addrs, max_depth); + }" + HAS_GCC_BACKTRACE) - IF(HAS_GCC_BACKTRACE) - message(STATUS "Found GCC backtrace lib, will support backtraces") - ADD_DEFINITIONS(-DHAS_GCC_BACKTRACE) - ELSE() - message(STATUS "**WARNING DID NOT Find GCC backtrace lib") - ENDIF() - - # Debug compiler flags - SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g3") - - # Release compiler flags - SET(CMAKE_CXX_FLAGS_RELEASE "-O3 ${CMAKE_CXX_FLAGS_RELEASE} -O3 ") - IF(NOT CMAKE_GENERATOR STREQUAL Xcode) - SET(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -s") ## Strip binary + IF(HAS_GCC_BACKTRACE) + message(STATUS "Found GCC backtrace lib, will support backtraces") + ADD_DEFINITIONS(-DHAS_GCC_BACKTRACE) + ELSE() + message(STATUS "**WARNING DID NOT Find GCC backtrace lib") ENDIF() + + IF(NOT MSVC) + # Debug compiler flags + SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g3") - # Release with debug info compiler flags - SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 ${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -g -O3 ") + # Release compiler flags + SET(CMAKE_CXX_FLAGS_RELEASE "-O3 ${CMAKE_CXX_FLAGS_RELEASE} -O3 ") + IF(NOT CMAKE_GENERATOR STREQUAL Xcode) + SET(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -s") ## Strip binary + ENDIF() - # Release minimum size compiler flags - IF(NOT CMAKE_GENERATOR STREQUAL Xcode) - SET(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} -s") ## Strip binary + # Release with debug info compiler flags + SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 ${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -g -O3 ") + + # Release minimum size compiler flags + IF(NOT CMAKE_GENERATOR STREQUAL Xcode) + SET(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} -s") ## Strip binary + ENDIF() ENDIF() # see if this fixes compile issue for tomreyn: libpthread.so.0: error adding symbols: DSO missing from command line @@ -327,7 +372,7 @@ IF(CMAKE_COMPILER_IS_GNUCXX OR MINGW) message(STATUS "CMAKE_CXX_FLAGS_${MG_BUILD_TYPE}: ${CMAKE_CXX_FLAGS_${MG_BUILD_TYPE}}") # Win32 specific Compiler Flags - IF(WIN32) + IF(WIN32 AND NOT MSVC) ADD_DEFINITIONS("-D_WINDOWS -D_WIN32 -D_STDCALL_SUPPORTED -D_M_IX86 -DXML_LIBRARY -D_LIB -DCURL_STATICLIB") ENDIF() ENDIF() @@ -364,35 +409,18 @@ ELSEIF(UNIX AND APPLE) SET(MEGAGLEST_FRIENDLY_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/mk/macos/") ELSEIF(UNIX AND NOT APPLE) SET(MEGAGLEST_FRIENDLY_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/mk/other_unix/") +ELSEIF(WIN32) + SET(MEGAGLEST_FRIENDLY_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/mk/windoze/") ELSE() SET(MEGAGLEST_FRIENDLY_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/data/glest_game/") ENDIF() -IF(WIN32) - SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} - ${PROJECT_SOURCE_DIR}/source/win32_deps/lib - ${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/lib - ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib) - - SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} - ${PROJECT_SOURCE_DIR}/source/win32_deps/include - ${PROJECT_SOURCE_DIR}/source/win32_deps/openal-soft-1.12.854/include - ${PROJECT_SOURCE_DIR}/source/win32_deps/openal-soft-1.12.854 - ${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/include - ${PROJECT_SOURCE_DIR}/source/win32_deps/libogg-1.2.1/include - ${PROJECT_SOURCE_DIR}/source/win32_deps/lua-5.1/src - ${PROJECT_SOURCE_DIR}/source/win32_deps/jpeg-8b - ${PROJECT_SOURCE_DIR}/source/win32_deps/lpng141 - ${PROJECT_SOURCE_DIR}/source/win32_deps/zlib-1.2.5 - ${PROJECT_SOURCE_DIR}/source/win32_deps/curl-7.21.3/include - ${PROJECT_SOURCE_DIR}/source/win32_deps/${SDL_WINDOWS_DIR_DINC}/include - ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/include) - - link_directories(${PROJECT_SOURCE_DIR}/source/win32_deps/lib) - link_directories(${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/lib) - link_directories(${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib) - include_directories("${PROJECT_SOURCE_DIR}/source/win32_deps/Microsoft\ DirectX\ SDK \(November 2007\)/Include") - include_directories(${PROJECT_SOURCE_DIR}/source/win32_deps/openal-soft-1.12.854/include) +# Set VS project exe outputs. +IF(MSVC) + SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${MEGAGLEST_FRIENDLY_OUTPUT_PATH}) + SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${MEGAGLEST_FRIENDLY_OUTPUT_PATH}) + SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${MEGAGLEST_FRIENDLY_OUTPUT_PATH}) + SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${MEGAGLEST_FRIENDLY_OUTPUT_PATH}) ENDIF() # Check if sources exist @@ -422,7 +450,7 @@ ENDIF() #get_directory_property( DirDefs COMPILE_DEFINITIONS ) #MESSAGE(STATUS ">>>> NOTICE Compiler definitions used: ${DirDefs}") #MESSAGE(STATUS "END of compile defs...") -IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") +IF ("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?Clang") MESSAGE(WARNING ">> CLANG is NOT currently compatible as it does not support the following essential GCC compiler settings: -frounding-math -fsignaling-nans") ENDIF() diff --git a/mk/cmake/Modules/FindMiniupnpc.cmake b/mk/cmake/Modules/FindMiniupnpc.cmake index 5fedfbf0..b504be34 100644 --- a/mk/cmake/Modules/FindMiniupnpc.cmake +++ b/mk/cmake/Modules/FindMiniupnpc.cmake @@ -72,6 +72,8 @@ if (MINIUPNP_FOUND) set(CMAKE_REQUIRED_INCLUDES ${MINIUPNP_INCLUDE_DIR}) set(CMAKE_REQUIRED_LIBRARIES ${MINIUPNP_LIBRARY}) + + INCLUDE(CheckCXXSourceRuns) check_cxx_source_runs(" #include #include @@ -201,4 +203,3 @@ else () endif () MARK_AS_ADVANCED(MINIUPNP_INCLUDE_DIR MINIUPNP_LIBRARY) - diff --git a/mk/cmake/Modules/SpecialMacros.cmake b/mk/cmake/Modules/SpecialMacros.cmake index 61b3eacb..77d2e0c7 100644 --- a/mk/cmake/Modules/SpecialMacros.cmake +++ b/mk/cmake/Modules/SpecialMacros.cmake @@ -20,89 +20,27 @@ macro(special_check_for_sse _max_sse_level_desired) include(CheckCXXSourceRuns) include(CheckCSourceRuns) + # Add MSVC to stop flags being added to msbuild. IF(NOT MINGW) - if( CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX ) - set(SSE_FLAGS) - - set(CMAKE_REQUIRED_FLAGS "-msse3") - check_cxx_source_runs(" - #include - - int main() - { - __m128d a, b; - double vals[2] = {0}; - a = _mm_loadu_pd(vals); - b = _mm_hadd_pd(a,a); - _mm_storeu_pd(vals, b); - return 0; - }" - HAS_SSE3_EXTENSIONS) - - set(CMAKE_REQUIRED_FLAGS "-msse2") - check_cxx_source_runs(" - #include - - int main() - { - __m128d a, b; - double vals[2] = {0}; - a = _mm_loadu_pd(vals); - b = _mm_add_pd(a,a); - _mm_storeu_pd(vals,b); - return 0; - }" - HAS_SSE2_EXTENSIONS) - - set(CMAKE_REQUIRED_FLAGS "-msse") - check_cxx_source_runs(" - #include - int main() - { - __m128 a, b; - float vals[4] = {0}; - a = _mm_loadu_ps(vals); - b = a; - b = _mm_add_ps(a,b); - _mm_storeu_ps(vals,b); - return 0; - }" - HAS_SSE_EXTENSIONS) - ELSE() - set(HAS_SSE_EXTENSIONS ON) - ENDIF() + set(SSE_FLAGS) - set(CMAKE_REQUIRED_FLAGS) + set(CMAKE_REQUIRED_FLAGS "-msse3") + check_cxx_source_runs(" + #include - if(HAS_SSE3_EXTENSIONS AND (${_max_sse_level_desired} MATCHES "3")) - set(SSE_FLAGS "-msse3") - IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - ELSE() - set(SSE_FLAGS "${SSE_FLAGS} -mfpmath=sse") - ENDIF() - message(STATUS "Found SSE3 extensions, using flags: ${SSE_FLAGS}") - elseif(HAS_SSE2_EXTENSIONS AND (${_max_sse_level_desired} MATCHES "2" OR ${_max_sse_level_desired} MATCHES "3")) - set(SSE_FLAGS "-msse2") - IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - ELSE() - set(SSE_FLAGS "${SSE_FLAGS} -mfpmath=sse") - ENDIF() - - message(STATUS "Found SSE2 extensions, using flags: ${SSE_FLAGS}") - elseif(HAS_SSE_EXTENSIONS AND (${_max_sse_level_desired} MATCHES "1" OR ${_max_sse_level_desired} MATCHES "2" OR ${_max_sse_level_desired} MATCHES "3")) - set(SSE_FLAGS "-msse") - IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - ELSE() - set(SSE_FLAGS "${SSE_FLAGS} -mfpmath=sse") - ENDIF() - - message(STATUS "Found SSE extensions, using flags: ${SSE_FLAGS}") - endif() - - add_definitions(${SSE_FLAGS}) - - elseif(MSVC) - check_cxx_source_runs(" + int main() + { + __m128d a, b; + double vals[2] = {0}; + a = _mm_loadu_pd(vals); + b = _mm_hadd_pd(a,a); + _mm_storeu_pd(vals, b); + return 0; + }" + HAS_SSE3_EXTENSIONS) + + set(CMAKE_REQUIRED_FLAGS "-msse2") + check_cxx_source_runs(" #include int main() @@ -113,14 +51,86 @@ macro(special_check_for_sse _max_sse_level_desired) b = _mm_add_pd(a,a); _mm_storeu_pd(vals,b); return 0; - }" - HAS_SSE2_EXTENSIONS) - if( HAS_SSE2_EXTENSIONS AND (NOT ${_max_sse_level_desired} OR ${_max_sse_level_desired} MATCHES "2")) - message(STATUS "Found SSE2 extensions") - set(SSE_FLAGS "/arch:SSE2 /fp:fast -D__SSE__ -D__SSE2__" ) - endif() - - add_definitions(${SSE_FLAGS}) + }" + HAS_SSE2_EXTENSIONS) + + set(CMAKE_REQUIRED_FLAGS "-msse") + check_cxx_source_runs(" + #include + int main() + { + __m128 a, b; + float vals[4] = {0}; + a = _mm_loadu_ps(vals); + b = a; + b = _mm_add_ps(a,b); + _mm_storeu_ps(vals,b); + return 0; + }" + HAS_SSE_EXTENSIONS) + + set(CMAKE_REQUIRED_FLAGS) + + if(HAS_SSE3_EXTENSIONS AND (${_max_sse_level_desired} MATCHES "3")) + set(SSE_FLAGS "-msse3") + IF ("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?Clang") + ELSE() + set(SSE_FLAGS "${SSE_FLAGS} -mfpmath=sse") + ENDIF() + IF(NOT MSVC) + message(STATUS "Found SSE3 extensions, using flags: ${SSE_FLAGS}") + ELSE() + message(STATUS "Found SSE3 extensions.") + ENDIF() + elseif(HAS_SSE2_EXTENSIONS AND (${_max_sse_level_desired} MATCHES "2" OR ${_max_sse_level_desired} MATCHES "3")) + set(SSE_FLAGS "-msse2") + IF ("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?Clang") + ELSE() + set(SSE_FLAGS "${SSE_FLAGS} -mfpmath=sse") + ENDIF() + + IF(NOT MSVC) + message(STATUS "Found SSE2 extensions, using flags: ${SSE_FLAGS}") + ELSE() + message(STATUS "Found SSE2 extensions.") + ENDIF() + elseif(HAS_SSE_EXTENSIONS AND (${_max_sse_level_desired} MATCHES "1" OR ${_max_sse_level_desired} MATCHES "2" OR ${_max_sse_level_desired} MATCHES "3")) + set(SSE_FLAGS "-msse") + IF ("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?Clang") + ELSE() + set(SSE_FLAGS "${SSE_FLAGS} -mfpmath=sse") + ENDIF() + IF(NOT MSVC) + message(STATUS "Found SSE extensions, using flags: ${SSE_FLAGS}") + ELSE() + message(STATUS "Found SSE extensions.") + ENDIF() + endif() + + IF(NOT MSVC) + add_definitions(${SSE_FLAGS}) + ENDIF() + + elseif(MSVC) #todo: remove this unused check for SSE. + check_cxx_source_runs(" + #include + + int main() + { + __m128d a, b; + double vals[2] = {0}; + a = _mm_loadu_pd(vals); + b = _mm_add_pd(a,a); + _mm_storeu_pd(vals,b); + return 0; + }" + HAS_SSE2_EXTENSIONS) + if( HAS_SSE2_EXTENSIONS AND (NOT ${_max_sse_level_desired} OR ${_max_sse_level_desired} MATCHES "2")) + message(STATUS "Found SSE2 extensions") + set(SSE_FLAGS "/arch:SSE2 /fp:fast -D__SSE__ -D__SSE2__" ) + endif() + + add_definitions(${SSE_FLAGS}) endif() endmacro(special_check_for_sse) @@ -201,4 +211,3 @@ macro(_special_list_to_string _string _list) endif(${_len} GREATER 0) endforeach(_item) endmacro(_special_list_to_string) - diff --git a/mk/macos/CMakeLists.txt b/mk/macos/CMakeLists.txt index a587c35c..747f0c2b 100644 --- a/mk/macos/CMakeLists.txt +++ b/mk/macos/CMakeLists.txt @@ -8,7 +8,7 @@ # Seems like a good place to add version specific compiler flags too. IF(NOT CONFIG_HAS_BEEN_RUN_BEFORE) - IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + IF ("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?Clang") SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++") #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility-inlines-hidden") ENDIF() diff --git a/mk/windoze/.gitignore b/mk/windoze/.gitignore index 53bf9b3c..59f846ba 100644 --- a/mk/windoze/.gitignore +++ b/mk/windoze/.gitignore @@ -2,6 +2,8 @@ /*/Release/ /x64/ /*/x64/ +/vcpkg/ +/build/ # Windows_build *.dll diff --git a/mk/windoze/build-mg-vs-cmake.ps1 b/mk/windoze/build-mg-vs-cmake.ps1 new file mode 100644 index 00000000..7db27105 --- /dev/null +++ b/mk/windoze/build-mg-vs-cmake.ps1 @@ -0,0 +1,132 @@ +# Build MegaGlest on Windows. +# Author: James Sherratt. +param(${vcpkg-location}) + +$sword = [char]::ConvertFromUtf32(0x2694) +Write-Output "=====$sword MegaGlest $sword=====" +"" +<# +.SYNOPSIS +# + +.DESCRIPTION +Test if a command exists. + +.PARAMETER cmdName +Comamnd to test + +.PARAMETER errorAdvice +Error advice to give user if command fails + +.PARAMETER errorAction +(optional) Etion after error + +.EXAMPLE +Test-Command "7z" "7z not found. Please install from 7zip.org" 'Write-Warning "7zip will not be used."' + +.NOTES +General notes +#> +function Test-Command { + param( + $cmdName, + $errorAdvice, + $errorAction + ) + + if (Get-Command $cmdName -errorAction SilentlyContinue) { + "Found $cmdName." + "" + } + else { + "The command '$cmdName' does not exist." + "$errorAdvice" + "" + + if ( !$errorAction ) { + Exit + } + else { + Invoke-Expression $errorAction + } + } +} + +function Write-Title { + param ( + $titleText + ) + $titleText + "-" * $titleText.Length +} + +Write-Title "Updating git source" + +Test-Command "git" "Please download and install git-scm https://git-scm.com/" +git pull +"" + +Write-Title "Setup vcpkg" +Test-Command "cmake" "Please download and install CMake: https://cmake.org/download/. (For 64 bit windows, select 'cmake-x.y.z-windows-x86_64.msi'.)" + +if ( !${vcpkg-location} ) { + ${vcpkg-location} = Join-Path $PSScriptRoot \vcpkg + "Vcpkg location not set. Setting it to ${vcpkg-location}." +} +else { + ${vcpkg-location} = $(Resolve-Path ${vcpkg-location}).ToString() +} + +if ( Test-Path ${vcpkg-location} ) { + "Found vcpkg." +} +else { + "Vcpkg not found. Cloning. https://github.com/microsoft/vcpkg.git." + git clone "https://github.com/microsoft/vcpkg.git" ${vcpkg-location} + "Installing vcpkg." + & "$(Join-Path ${vcpkg-location} bootstrap-vcpkg.bat)" +} + +"Installing vcpkg and MegaGlest dependencies." +Set-Location ${vcpkg-location} +& "$(Join-Path $PSScriptRoot install-deps-vcpkg.ps1)" +if (!$?) { + "Installing deps with vcpkg failed. Please check your vcpkg git repo is configured correctly." + Set-Location $PSScriptRoot + Exit +} +Set-Location $PSScriptRoot +"" + +Write-Title "Build MegaGlest" + +$toolchainPath = $(Join-Path ${vcpkg-location} \scripts\buildsystems\vcpkg.cmake) +$buildFolder = $(Join-Path $PSScriptRoot build) +$topLevelTargetDir = $(Resolve-Path $(Join-Path $PSScriptRoot ../../)).ToString() + +$vsVersion=(msbuild --version | select -Last 1).Split(".")[0] -as [int] + +if ($vsVersion -eq 17) { + $vsProjType = "Visual Studio 17 2022" +} +elseif ($vsVersion -eq 16) { + $vsProjType = "Visual Studio 16 2019" +} +else { + $vsProjType = "Visual Studio 17 2022" +} + +cmake --no-warn-unused-cli -DCMAKE_TOOLCHAIN_FILE:STRING=$toolchainPath -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE "-H$topLevelTargetDir" "-B$buildFolder" -G $vsProjType -T host=x64 -A x64 +cmake --build $buildFolder --config Release --target ALL_BUILD + + +if ($?) { + "Build succeeded. megaglest.exe, megaglest_editor.exe and megaglest_g3dviewer.exe can be found in mk/windoze/." +} +else { + "Build failed. Please make sure you have installed VS C++ tools (2019 or 2022): https://visualstudio.microsoft.com/downloads ." + "If you have installed all the relevant tools and you still can't build MegaGlest, try running '.\clean-build.ps1'. Then run this script again." + "Make sure this script is running in developer powershell: https://docs.microsoft.com/en-us/visualstudio/ide/reference/command-prompt-powershell ." + "If the language of your version of windows is not english, you may need to install the english language pack in the visual studio installer (because microsoft is racist): https://docs.microsoft.com/en-us/visualstudio/install/modify-visual-studio?view=vs-2022#modify-language-packs ." + "If MegaGlest still fails to build, please help us by submitting a bug report at https://github.com/MegaGlest/megaglest-source/issues." +} diff --git a/mk/windoze/clean-all.ps1 b/mk/windoze/clean-all.ps1 new file mode 100644 index 00000000..597ed15a --- /dev/null +++ b/mk/windoze/clean-all.ps1 @@ -0,0 +1,4 @@ +"Cleaning build files." +Remove-Item $(Join-Path $PSScriptRoot *.exe) +Remove-Item -Recurse $(Join-Path $PSScriptRoot build\) +"Cleaning build files completed." diff --git a/mk/windoze/install-deps-vcpkg.ps1 b/mk/windoze/install-deps-vcpkg.ps1 new file mode 100644 index 00000000..bfdec521 --- /dev/null +++ b/mk/windoze/install-deps-vcpkg.ps1 @@ -0,0 +1,2 @@ +"Installing MegaGlest deps." +.\vcpkg.exe install --disable-metrics brotli:x64-windows-static bzip2:x64-windows-static curl:x64-windows-static expat:x64-windows-static freetype:x64-windows-static fribidi:x64-windows-static ftgl:x64-windows-static glew:x64-windows-static libiconv:x64-windows-static libjpeg-turbo:x64-windows-static liblzma:x64-windows-static libogg:x64-windows-static libpng:x64-windows-static libvorbis:x64-windows-static libxml2:x64-windows-static lua:x64-windows-static openal-soft:x64-windows-static opengl:x64-windows-static miniupnpc:x64-windows-static sdl2:x64-windows-static sqlite3:x64-windows-static tiff:x64-windows-static wxwidgets:x64-windows-static xerces-c:x64-windows-static zlib:x64-windows-static diff --git a/source/g3d_viewer/CMakeLists.txt b/source/g3d_viewer/CMakeLists.txt index cfed04c8..660e82bb 100644 --- a/source/g3d_viewer/CMakeLists.txt +++ b/source/g3d_viewer/CMakeLists.txt @@ -46,7 +46,7 @@ IF(BUILD_MEGAGLEST_MODEL_VIEWER) # It was noticed that when using MinGW gcc it is essential that 'core' is mentioned before 'base'. # Optimal order most likely is gl > core > base, in some cases it may do difference. FIND_PACKAGE(wxWidgets REQUIRED COMPONENTS gl core base) - IF(UNIX) + IF(UNIX OR WIN32) # wxWidgets include (this will do all the magic to configure everything) INCLUDE( ${wxWidgets_USE_FILE} ) @@ -62,7 +62,9 @@ IF(BUILD_MEGAGLEST_MODEL_VIEWER) MESSAGE(STATUS " wxWidgets: ${wxWidgets_INCLUDE_DIRS} ;/; ${wxWidgets_LIBRARIES}") ENDIF() - find_package(PkgConfig REQUIRED) + IF(NOT MSVC) + find_package(PkgConfig REQUIRED) + ENDIF() IF(FORCE_STREFLOP_SOFTWRAPPER) pkg_search_module(STREFLOP streflop-soft) ELSE() @@ -96,34 +98,36 @@ IF(BUILD_MEGAGLEST_MODEL_VIEWER) ENDIF() IF(WIN32) - SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/libwx_mswu-2.8-i586-mingw32msvc.dll.a) - SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/libwx_mswu_gl-2.8-i586-mingw32msvc.dll.a) - SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/libwxpng-2.8-i586-mingw32msvc.a) - SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/libwxjpeg-2.8-i586-mingw32msvc.a) - SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/libwxtiff-2.8-i586-mingw32msvc.a) - SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/libwxzlib-2.8-i586-mingw32msvc.a) + IF(NOT MSVC) + SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/libwx_mswu-2.8-i586-mingw32msvc.dll.a) + SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/libwx_mswu_gl-2.8-i586-mingw32msvc.dll.a) + SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/libwxpng-2.8-i586-mingw32msvc.a) + SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/libwxjpeg-2.8-i586-mingw32msvc.a) + SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/libwxtiff-2.8-i586-mingw32msvc.a) + SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/libwxzlib-2.8-i586-mingw32msvc.a) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/include/) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/wx/include/i586-mingw32msvc-msw-unicode-release-static-2.8) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/include/) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/wx/include/i586-mingw32msvc-msw-unicode-release-static-2.8) - SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} - ${PROJECT_SOURCE_DIR}/source/win32_deps/lib - ${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/lib) + SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} + ${PROJECT_SOURCE_DIR}/source/win32_deps/lib + ${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/lib) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/include) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/openal-soft-1.12.854/include) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/openal-soft-1.12.854) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/include) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/libogg-1.2.1/include) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/lua-5.1/src) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/jpeg-8b) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/lpng141) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/zlib-1.2.5) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/curl-7.21.3/include) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/${SDL_WINDOWS_DIR_DINC}/include) - - link_directories(${PROJECT_SOURCE_DIR}/source/win32_deps/lib) - link_directories(${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/lib) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/include) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/openal-soft-1.12.854/include) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/openal-soft-1.12.854) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/include) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/libogg-1.2.1/include) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/lua-5.1/src) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/jpeg-8b) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/lpng141) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/zlib-1.2.5) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/curl-7.21.3/include) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/${SDL_WINDOWS_DIR_DINC}/include) + + link_directories(${PROJECT_SOURCE_DIR}/source/win32_deps/lib) + link_directories(${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/lib) + ENDIF() ENDIF() ######################################################################################### @@ -203,6 +207,11 @@ IF(BUILD_MEGAGLEST_MODEL_VIEWER) ADD_EXECUTABLE(${TARGET_NAME} ${MG_SOURCE_FILES} ${MG_INCLUDE_FILES}) + IF(WIN32) + # Must come after ADD_EXECUTABLE. + TARGET_SOURCES(${TARGET_NAME} PRIVATE ${PROJECT_SOURCE_DIR}/mk/windoze/g3d_viewer.rc) + ENDIF() + IF(WANT_USE_STREFLOP AND NOT STREFLOP_FOUND) TARGET_LINK_LIBRARIES(${TARGET_NAME} streflop) ENDIF() diff --git a/source/g3d_viewer/main.cpp b/source/g3d_viewer/main.cpp index 2a9ec0c2..92ebe314 100644 --- a/source/g3d_viewer/main.cpp +++ b/source/g3d_viewer/main.cpp @@ -867,15 +867,7 @@ void MainWindow::onMenuFileLoad(wxCommandEvent &event){ if(fileDialog->ShowModal()==wxID_OK){ modelPathList.clear(); string file; -#ifdef WIN32 - const wxWX2MBbuf tmp_buf = wxConvCurrent->cWX2MB(fileDialog->GetPath()); - file = tmp_buf; - - auto_ptr wstr(Ansi2WideString(file.c_str())); - file = utf8_encode(wstr.get()); -#else file = (const char*)wxFNCONV(fileDialog->GetPath().c_str()); -#endif //loadModel((const char*)wxFNCONV(fileDialog->GetPath().c_str())); loadModel(file); @@ -903,14 +895,7 @@ void MainWindow::onMenuFileLoadParticleXML(wxCommandEvent &event){ if(fileDialog->ShowModal()==wxID_OK){ //string path = (const char*)wxFNCONV(fileDialog->GetPath().c_str()); string file; -#ifdef WIN32 - const wxWX2MBbuf tmp_buf = wxConvCurrent->cWX2MB(fileDialog->GetPath()); - file = tmp_buf; - auto_ptr wstr(Ansi2WideString(file.c_str())); - file = utf8_encode(wstr.get()); -#else file = (const char*)wxFNCONV(fileDialog->GetPath().c_str()); -#endif loadParticle(file); } @@ -937,14 +922,7 @@ void MainWindow::onMenuFileLoadProjectileParticleXML(wxCommandEvent &event){ if(fileDialog->ShowModal()==wxID_OK){ //string path = (const char*)wxFNCONV(fileDialog->GetPath().c_str()); string file; -#ifdef WIN32 - const wxWX2MBbuf tmp_buf = wxConvCurrent->cWX2MB(fileDialog->GetPath()); - file = tmp_buf; - auto_ptr wstr(Ansi2WideString(file.c_str())); - file = utf8_encode(wstr.get()); -#else file = (const char*)wxFNCONV(fileDialog->GetPath().c_str()); -#endif loadProjectileParticle(file); } @@ -971,15 +949,7 @@ void MainWindow::onMenuFileLoadSplashParticleXML(wxCommandEvent &event){ if(fileDialog->ShowModal()==wxID_OK){ //string path = (const char*)wxFNCONV(fileDialog->GetPath().c_str()); string file; -#ifdef WIN32 - const wxWX2MBbuf tmp_buf = wxConvCurrent->cWX2MB(fileDialog->GetPath()); - file = tmp_buf; - - auto_ptr wstr(Ansi2WideString(file.c_str())); - file = utf8_encode(wstr.get()); -#else file = (const char*)wxFNCONV(fileDialog->GetPath().c_str()); -#endif loadSplashParticle(file); } @@ -2523,21 +2493,7 @@ if( hasCommandArgument(knownArgCount, (wxChar**)&GAME_ARGS[0], (const char *)tmp } if(argc == 2 && argv[1][0] != '-') { - -//#if defined(__MINGW32__) -#ifdef WIN32 - const wxWX2MBbuf tmp_buf = wxConvCurrent->cWX2MB(wxFNCONV(argv[1])); - modelPath = tmp_buf; - auto_ptr wstr(Ansi2WideString(modelPath.c_str())); - modelPath = utf8_encode(wstr.get()); -#else modelPath = static_cast(WX2CHR(argv[1])); -#endif - -//#else -// modelPath = wxFNCONV(argv[1]); -//#endif - } //#if defined(__MINGW32__) @@ -2552,17 +2508,7 @@ if( hasCommandArgument(knownArgCount, (wxChar**)&GAME_ARGS[0], (const char *)tmp //wxString path_separator = wxFileName::GetPathSeparator(); //exe_path = exe_path.BeforeLast(path_separator[0]); //exe_path += path_separator; - -//#if defined(__MINGW32__) -#ifdef WIN32 - const wxWX2MBbuf tmp_buf = wxConvCurrent->cWX2MB(wxFNCONV(exe_path)); - string appPath = tmp_buf; - - auto_ptr wstr(Ansi2WideString(appPath.c_str())); - appPath = utf8_encode(wstr.get()); -#else string appPath(static_cast(WX2CHR(exe_path))); -#endif //#else // appPath = wxFNCONV(exe_path); diff --git a/source/glest_game/CMakeLists.txt b/source/glest_game/CMakeLists.txt index 76b5de40..6902e8ac 100644 --- a/source/glest_game/CMakeLists.txt +++ b/source/glest_game/CMakeLists.txt @@ -139,7 +139,10 @@ IF(BUILD_MEGAGLEST) ENDIF() ENDIF() - find_package(PkgConfig REQUIRED) + + IF(NOT MSVC) + find_package(PkgConfig REQUIRED) + ENDIF() IF(FORCE_STREFLOP_SOFTWRAPPER) pkg_search_module(STREFLOP streflop-soft) ELSE() @@ -261,7 +264,7 @@ IF(BUILD_MEGAGLEST) add_custom_target(run ALL DEPENDS mg.tmp) ENDIF() - IF(WIN32) + IF(WIN32 AND NOT MSVC) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-subsystem,console -mconsole") ENDIF() @@ -294,7 +297,26 @@ IF(BUILD_MEGAGLEST) endif() IF(WIN32) - TARGET_LINK_LIBRARIES(${TARGET_NAME} stdc++ gcc odbc32 wsock32 winspool winmm shell32 comctl32 ctl3d32 advapi32 wsock32 opengl32 glu32 ole32 oleaut32 uuid mingw32 ddraw dsound dxguid ws2_32 iphlpapi wsock32 libogg libvorbis libvorbisfile zlib jpeg libpng xerces-c2_8_0 OpenAL32 libcurl winmm gdi32 opengl32 glu32 ${SDL_VERSION_NAME} ${SDL_VERSION_NAME}main lua5.1 ${MG_STREFLOP} libmegaglest stdc++ moldname mingwex msvcrt user32 kernel32) + TARGET_SOURCES(${TARGET_NAME} PRIVATE ${PROJECT_SOURCE_DIR}/mk/windoze/glest.rc) + IF(VCPKG_TARGET_TRIPLET) + TARGET_LINK_LIBRARIES(${TARGET_NAME} odbc32 wsock32 winspool winmm shell32 comctl32 advapi32 opengl32 glu32 ole32 oleaut32 uuid ddraw dsound dxguid ws2_32 iphlpapi gdi32 user32 kernel32 dbghelp shlwapi) + find_package(Ogg CONFIG REQUIRED) + find_package(Vorbis CONFIG REQUIRED) + # find_package(ZLIB REQUIRED) + # find_package(JPEG REQUIRED) + find_package(libpng CONFIG REQUIRED) + find_package(XercesC CONFIG REQUIRED) + find_package(OpenAL CONFIG REQUIRED) + # find_package(CURL CONFIG REQUIRED) + find_package(SDL2 CONFIG REQUIRED) + # include(FindLua) + # find_package(Lua REQUIRED) + # find_package(GLEW REQUIRED) + find_package(FTGL CONFIG REQUIRED) + TARGET_LINK_LIBRARIES(${TARGET_NAME} Ogg::ogg Vorbis::vorbis Vorbis::vorbisenc Vorbis::vorbisfile ZLIB::ZLIB ${JPEG_LIBRARIES} png_static xerces_xerces-c XercesC::XercesC OpenAL::OpenAL CURL::libcurl SDL2::SDL2main SDL2::SDL2-static ${LUA_LIBRARIES} ${MG_STREFLOP} libmegaglest GLEW::GLEW ftgl) + ELSE() + TARGET_LINK_LIBRARIES(${TARGET_NAME} stdc++ gcc odbc32 wsock32 winspool winmm shell32 comctl32 ctl3d32 advapi32 wsock32 opengl32 glu32 ole32 oleaut32 uuid mingw32 ddraw dsound dxguid ws2_32 iphlpapi wsock32 libogg libvorbis libvorbisfile zlib jpeg libpng xerces-c2_8_0 OpenAL32 libcurl winmm gdi32 opengl32 glu32 ${SDL_VERSION_NAME} ${SDL_VERSION_NAME}main lua5.1 ${MG_STREFLOP} libmegaglest stdc++ moldname mingwex msvcrt user32 kernel32) + ENDIF() ENDIF() IF(NOT WIN32) diff --git a/source/glest_game/main/main.cpp b/source/glest_game/main/main.cpp index 2b2cf46b..fdadcb40 100644 --- a/source/glest_game/main/main.cpp +++ b/source/glest_game/main/main.cpp @@ -290,7 +290,7 @@ static void cleanupProcessObjects() { CacheManager::cleanupMutexes(); } -#if defined(WIN32) && !defined(_DEBUG) && !defined(__GNUC__) +#if defined(WIN32) && !defined(__GNUC__) void fatal(const char *s, ...) // failure exit { static int errors = 0; diff --git a/source/glest_map_editor/CMakeLists.txt b/source/glest_map_editor/CMakeLists.txt index 2e73c0d1..3cf0ce2b 100644 --- a/source/glest_map_editor/CMakeLists.txt +++ b/source/glest_map_editor/CMakeLists.txt @@ -32,7 +32,7 @@ IF(BUILD_MEGAGLEST_MAP_EDITOR) # It was noticed that when using MinGW gcc it is essential that 'core' is mentioned before 'base'. # Optimal order most likely is gl > core > base, in some cases it may do difference. FIND_PACKAGE(wxWidgets REQUIRED COMPONENTS gl core base) - IF(UNIX) + IF(UNIX OR WIN32) # wxWidgets include (this will do all the magic to configure everything) INCLUDE( ${wxWidgets_USE_FILE} ) @@ -49,37 +49,42 @@ IF(BUILD_MEGAGLEST_MAP_EDITOR) ENDIF() IF(WIN32) - SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/libwx_mswu-2.8-i586-mingw32msvc.dll.a) - SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/libwx_mswu_gl-2.8-i586-mingw32msvc.dll.a) - SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/libwxpng-2.8-i586-mingw32msvc.a) - SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/libwxjpeg-2.8-i586-mingw32msvc.a) - SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/libwxtiff-2.8-i586-mingw32msvc.a) - SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/libwxzlib-2.8-i586-mingw32msvc.a) + IF(NOT MSVC) + SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/libwx_mswu-2.8-i586-mingw32msvc.dll.a) + SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/libwx_mswu_gl-2.8-i586-mingw32msvc.dll.a) + SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/libwxpng-2.8-i586-mingw32msvc.a) + SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/libwxjpeg-2.8-i586-mingw32msvc.a) + SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/libwxtiff-2.8-i586-mingw32msvc.a) + SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/libwxzlib-2.8-i586-mingw32msvc.a) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/include/) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/wx/include/i586-mingw32msvc-msw-unicode-release-static-2.8) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/include/) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib/wx/include/i586-mingw32msvc-msw-unicode-release-static-2.8) - SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} - ${PROJECT_SOURCE_DIR}/source/win32_deps/lib - ${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/lib) + SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} + ${PROJECT_SOURCE_DIR}/source/win32_deps/lib + ${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/lib) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/include) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/openal-soft-1.12.854/include) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/openal-soft-1.12.854) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/include) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/libogg-1.2.1/include) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/lua-5.1/src) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/jpeg-8b) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/lpng141) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/zlib-1.2.5) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/curl-7.21.3/include) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/${SDL_WINDOWS_DIR_DINC}/include) - - link_directories(${PROJECT_SOURCE_DIR}/source/win32_deps/lib) - link_directories(${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/lib) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/include) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/openal-soft-1.12.854/include) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/openal-soft-1.12.854) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/include) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/libogg-1.2.1/include) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/lua-5.1/src) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/jpeg-8b) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/lpng141) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/zlib-1.2.5) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/curl-7.21.3/include) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/${SDL_WINDOWS_DIR_DINC}/include) + + link_directories(${PROJECT_SOURCE_DIR}/source/win32_deps/lib) + link_directories(${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/lib) + link_directories(${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/lib) + ENDIF() ENDIF() - find_package(PkgConfig REQUIRED) + IF(NOT MSVC) + find_package(PkgConfig REQUIRED) + ENDIF() IF(FORCE_STREFLOP_SOFTWRAPPER) pkg_search_module(STREFLOP streflop-soft) ELSE() @@ -182,15 +187,25 @@ IF(BUILD_MEGAGLEST_MAP_EDITOR) SET_SOURCE_FILES_PROPERTIES(${MG_INCLUDE_FILES} PROPERTIES HEADER_FILE_ONLY 1) - ADD_EXECUTABLE(${TARGET_NAME} ${MG_SOURCE_FILES} ${MG_INCLUDE_FILES}) + IF(MSVC) + # Needed to build a window app and not just a upnp console app. Not really sure why. + ADD_EXECUTABLE(${TARGET_NAME} WIN32 ${MG_SOURCE_FILES} ${MG_INCLUDE_FILES}) + ELSE() + ADD_EXECUTABLE(${TARGET_NAME} ${MG_SOURCE_FILES} ${MG_INCLUDE_FILES}) + ENDIF() + IF(WIN32) + # Must come after ADD_EXECUTABLE. + TARGET_SOURCES(${TARGET_NAME} PRIVATE ${PROJECT_SOURCE_DIR}/mk/windoze/glest_editor.rc) + ENDIF() + SET(MG_STREFLOP "") IF(WANT_USE_STREFLOP) SET(MG_STREFLOP "streflop") ENDIF() IF(WIN32) - TARGET_LINK_LIBRARIES(${TARGET_NAME} stdc++ gcc odbc32 wsock32 winspool winmm shell32 comctl32 ctl3d32 advapi32 wsock32 opengl32 glu32 ole32 oleaut32 uuid mingw32 ddraw dsound dxguid ws2_32 iphlpapi wsock32 libogg libvorbis libvorbisfile zlib jpeg libpng xerces-c2_8_0 OpenAL32 libcurl winmm gdi32 opengl32 glu32 ${SDL_VERSION_NAME} ${SDL_VERSION_NAME}main lua5.1 ${MG_STREFLOP} libmegaglest stdc++ moldname mingwex msvcrt user32 kernel32) + # TARGET_LINK_LIBRARIES(${TARGET_NAME} stdc++ gcc odbc32 wsock32 winspool winmm shell32 comctl32 ctl3d32 advapi32 wsock32 opengl32 glu32 ole32 oleaut32 uuid mingw32 ddraw dsound dxguid ws2_32 iphlpapi wsock32 libogg libvorbis libvorbisfile zlib jpeg libpng xerces-c2_8_0 OpenAL32 libcurl winmm gdi32 opengl32 glu32 ${SDL_VERSION_NAME} ${SDL_VERSION_NAME}main lua5.1 ${MG_STREFLOP} libmegaglest stdc++ moldname mingwex msvcrt user32 kernel32) ENDIF() IF(WANT_USE_STREFLOP AND NOT STREFLOP_FOUND) diff --git a/source/glest_map_editor/main.cpp b/source/glest_map_editor/main.cpp index d1606df2..50676528 100644 --- a/source/glest_map_editor/main.cpp +++ b/source/glest_map_editor/main.cpp @@ -706,13 +706,7 @@ void MainWindow::onMenuFileLoad(wxCommandEvent &event) { fileDialog->SetMessage(wxT("Select Glestmap to load")); fileDialog->SetWildcard(wxT("Glest&Mega Map (*.gbm *.mgm)|*.gbm;*.mgm|Glest Map (*.gbm)|*.gbm|Mega Map (*.mgm)|*.mgm")); if (fileDialog->ShowModal() == wxID_OK) { -#ifdef WIN32 - const wxWX2MBbuf tmp_buf = wxConvCurrent->cWX2MB(wxFNCONV(fileDialog->GetPath())); - currentFile = tmp_buf; - - auto_ptr wstr(Ansi2WideString(currentFile.c_str())); - currentFile = utf8_encode(wstr.get()); -#elif wxCHECK_VERSION(2, 9, 1) +#ifdef wxCHECK_VERSION(2, 9, 1) currentFile = fileDialog->GetPath().ToStdString(); #else const wxWX2MBbuf tmp_buf = wxConvCurrent->cWX2MB(fileDialog->GetPath()); @@ -782,13 +776,8 @@ void MainWindow::onMenuFileSaveAs(wxCommandEvent &event) { fd.SetWildcard(wxT("MegaGlest Map (*.mgm)|*.mgm|Glest Map (*.gbm)|*.gbm")); if (fd.ShowModal() == wxID_OK) { -#ifdef WIN32 - const wxWX2MBbuf tmp_buf = wxConvCurrent->cWX2MB(wxFNCONV(fd.GetPath())); - currentFile = tmp_buf; - auto_ptr wstr(Ansi2WideString(currentFile.c_str())); - currentFile = utf8_encode(wstr.get()); -#elif wxCHECK_VERSION(2, 9, 1) +#ifdef wxCHECK_VERSION(2, 9, 1) currentFile = fd.GetPath().ToStdString(); #else const wxWX2MBbuf tmp_buf = wxConvCurrent->cWX2MB(fd.GetPath()); @@ -1062,13 +1051,7 @@ void MainWindow::onMenuEditImportHeights(wxCommandEvent &event) { wxString savedDir=fileDialog->GetDirectory(); fileDialog->SetDirectory(heightMapDirectory); if (fileDialog->ShowModal() == wxID_OK) { -#ifdef WIN32 - const wxWX2MBbuf tmp_buf = wxConvCurrent->cWX2MB(wxFNCONV(fileDialog->GetPath())); - currentFile = tmp_buf; - - auto_ptr wstr(Ansi2WideString(currentFile.c_str())); - currentFile = utf8_encode(wstr.get()); -#elif wxCHECK_VERSION(2, 9, 1) +#ifdef wxCHECK_VERSION(2, 9, 1) currentFile = fileDialog->GetPath().ToStdString(); #else const wxWX2MBbuf tmp_buf = wxConvCurrent->cWX2MB(fileDialog->GetPath()); @@ -1114,13 +1097,7 @@ void MainWindow::onMenuEditExportHeights(wxCommandEvent &event) { #endif fd.SetDirectory(heightMapDirectory); if (fd.ShowModal() == wxID_OK) { -#ifdef WIN32 - const wxWX2MBbuf tmp_buf = wxConvCurrent->cWX2MB(wxFNCONV(fd.GetPath())); - currentFile = tmp_buf; - - auto_ptr wstr(Ansi2WideString(currentFile.c_str())); - currentFile = utf8_encode(wstr.get()); -#elif wxCHECK_VERSION(2, 9, 1) +#if wxCHECK_VERSION(2, 9, 1) currentFile = fd.GetPath().ToStdString(); #else const wxWX2MBbuf tmp_buf = wxConvCurrent->cWX2MB(fd.GetPath()); @@ -1721,12 +1698,7 @@ bool SimpleDialog::show(const string &title, bool wide) { if(m_returnCode==wxID_CANCEL) return false; // don't change values if canceled for (unsigned int i = 0; i < texts.size(); ++i) { -#ifdef WIN32 - const wxWX2MBbuf tmp_buf = wxConvCurrent->cWX2MB(wxFNCONV(texts[i]->GetValue())); - values[i].second = tmp_buf; -#else values[i].second = texts[i]->GetValue().ToAscii(); -#endif } return true; } @@ -1782,15 +1754,7 @@ bool App::OnInit() { //exe_path += path_separator; string appPath; -//#if defined(__MINGW32__) - -#ifdef WIN32 - const wxWX2MBbuf tmp_buf = wxConvCurrent->cWX2MB(wxFNCONV(exe_path)); - appPath = tmp_buf; - - auto_ptr wstr(Ansi2WideString(appPath.c_str())); - appPath = utf8_encode(wstr.get()); -#elif wxCHECK_VERSION(2, 9, 1) +#ifdef wxCHECK_VERSION(2, 9, 1) appPath = exe_path.ToStdString(); #else appPath = wxFNCONV(exe_path); diff --git a/source/shared_lib/CMakeLists.txt b/source/shared_lib/CMakeLists.txt index 493cf95e..fedac7e4 100644 --- a/source/shared_lib/CMakeLists.txt +++ b/source/shared_lib/CMakeLists.txt @@ -4,7 +4,10 @@ OPTION(FORCE_EMBEDDED_LIBS "Force use of embedded libraries' code." OFF) # IMPORTANT: should come BEFORE finding packages -find_package(PkgConfig REQUIRED) +IF(NOT MSVC) + find_package(PkgConfig REQUIRED) +ENDIF() + IF(FORCE_STREFLOP_SOFTWRAPPER) pkg_search_module(STREFLOP streflop-soft) ELSE() @@ -51,29 +54,31 @@ IF(BUILD_MEGAGLEST_MODEL_VIEWER OR BUILD_MEGAGLEST_MAP_EDITOR OR BUILD_MEGAGLEST INCLUDE (CheckIncludeFiles) IF(WIN32) - SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} - ${PROJECT_SOURCE_DIR}/source/win32_deps/lib - ${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/lib - ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib) + IF(NOT VCPKG_TARGET_TRIPLET) + SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} + ${PROJECT_SOURCE_DIR}/source/win32_deps/lib + ${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/lib + ${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/include) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/openal-soft-1.12.854/include) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/openal-soft-1.12.854) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/include) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/libogg-1.2.1/include) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/lua-5.1/src) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/jpeg-8b) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/lpng141) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/zlib-1.2.5) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/curl-7.21.3/include) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/${SDL_WINDOWS_DIR_DINC}/include) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/include) - - link_directories(${PROJECT_SOURCE_DIR}/source/win32_deps/lib) - link_directories(${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/lib) - link_directories(${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/include) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/openal-soft-1.12.854/include) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/openal-soft-1.12.854) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/include) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/libogg-1.2.1/include) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/lua-5.1/src) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/jpeg-8b) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/lpng141) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/zlib-1.2.5) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/curl-7.21.3/include) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/${SDL_WINDOWS_DIR_DINC}/include) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/include) + + link_directories(${PROJECT_SOURCE_DIR}/source/win32_deps/lib) + link_directories(${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/lib) + link_directories(${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib) - INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/include) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/include) + ENDIF() INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/shared_lib/include/platform/posix) INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/shared_lib/include/platform/win32) ENDIF() @@ -118,13 +123,13 @@ IF(BUILD_MEGAGLEST_MODEL_VIEWER OR BUILD_MEGAGLEST_MAP_EDITOR OR BUILD_MEGAGLEST SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${X11_LIBRARIES}) ENDIF() - IF(WANT_USE_XercesC) - FIND_PACKAGE(XercesC REQUIRED) - INCLUDE_DIRECTORIES(${XERCESC_INCLUDE_DIR}) - IF(UNIX) - SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${XERCESC_LIBRARY}) - ENDIF() - ENDIF() + IF(WANT_USE_XercesC) + FIND_PACKAGE(XercesC REQUIRED) + INCLUDE_DIRECTORIES(${XERCESC_INCLUDE_DIR}) + IF(UNIX) + SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${XERCESC_LIBRARY}) + ENDIF() + ENDIF() FIND_PACKAGE(OpenAL REQUIRED) INCLUDE_DIRECTORIES(${OPENAL_INCLUDE_DIR}) @@ -132,11 +137,11 @@ IF(BUILD_MEGAGLEST_MODEL_VIEWER OR BUILD_MEGAGLEST_MAP_EDITOR OR BUILD_MEGAGLEST SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${OPENAL_LIBRARY}) ENDIF() - FIND_PACKAGE(LUA REQUIRED) - INCLUDE_DIRECTORIES(${LUA_INCLUDE_DIR}) - IF(UNIX) - SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${LUA_LIBRARIES} ${CMAKE_DL_LIBS}) - ENDIF() + FIND_PACKAGE(LUA REQUIRED) + INCLUDE_DIRECTORIES(${LUA_INCLUDE_DIR}) + IF(UNIX) + SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${LUA_LIBRARIES} ${CMAKE_DL_LIBS}) + ENDIF() FIND_PACKAGE(JPEG REQUIRED) INCLUDE_DIRECTORIES(${JPEG_INCLUDE_DIR}) @@ -150,7 +155,7 @@ IF(BUILD_MEGAGLEST_MODEL_VIEWER OR BUILD_MEGAGLEST_MAP_EDITOR OR BUILD_MEGAGLEST SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PNG_LIBRARY}) ENDIF() - OPTION(WANT_USE_FontConfig "use the library fontconfig" ON) + OPTION(WANT_USE_FontConfig "use the library fontconfig" ON) IF(WANT_USE_FontConfig) FIND_PACKAGE(FontConfig) IF(FONTCONFIG_FOUND) @@ -291,23 +296,25 @@ IF(BUILD_MEGAGLEST_MODEL_VIEWER OR BUILD_MEGAGLEST_MAP_EDITOR OR BUILD_MEGAGLEST FIND_PACKAGE(Miniupnpc) ENDIF() - if(NOT MINIUPNP_FOUND) + if(NOT MINIUPNP_FOUND OR MSVC) if(NOT FORCE_USE_EMBEDDED_Miniupnpc) MESSAGE(STATUS "*** Using EMBEDDED miniupnpc since dev system does not have it... MINIUPNP_FOUND [${MINIUPNP_FOUND}]") else() MESSAGE(STATUS "*** Using EMBEDDED miniupnpc because it was forced by option") endif() - if (NOT WIN32) - add_definitions (-DMINIUPNPC_SET_SOCKET_TIMEOUT) - add_definitions (-D_BSD_SOURCE) + if (NOT WIN32) + add_definitions (-DMINIUPNPC_SET_SOCKET_TIMEOUT) + add_definitions (-D_BSD_SOURCE) - if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") - add_definitions (-DMACOSX -D_DARWIN_C_SOURCE) - else() - add_definitions (-D_POSIX_C_SOURCE=200809L) - endif () - endif() + if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") + add_definitions (-DMACOSX -D_DARWIN_C_SOURCE) + else() + add_definitions (-D_POSIX_C_SOURCE=200809L) + endif () + ELSEIF(MSVC) + ADD_COMPILE_DEFINITIONS(MINIUPNP_STATICLIB) + endif() SET(DIRS_WITH_SRC ${DIRS_WITH_SRC} platform/miniupnpc) else() @@ -425,7 +432,6 @@ IF(BUILD_MEGAGLEST_MODEL_VIEWER OR BUILD_MEGAGLEST_MAP_EDITOR OR BUILD_MEGAGLEST SET(MG_SOURCE_FILES ${MG_SOURCE_FILES} ${PROJECT_SOURCE_DIR}/source/shared_lib/sources/platform/${SDL_VERSION_SNAME}/thread.cpp) SET(MG_SOURCE_FILES ${MG_SOURCE_FILES} ${PROJECT_SOURCE_DIR}/source/shared_lib/sources/platform/${SDL_VERSION_SNAME}/window.cpp) SET(MG_SOURCE_FILES ${MG_SOURCE_FILES} ${PROJECT_SOURCE_DIR}/source/shared_lib/sources/platform/${SDL_VERSION_SNAME}/window_gl.cpp) - SET(MG_SOURCE_FILES ${MG_SOURCE_FILES} ${PROJECT_SOURCE_DIR}/source/win32_deps/src/glprocs.c) ENDIF() FOREACH(DIR IN LISTS DIRS_WITH_SRC) @@ -496,7 +502,25 @@ IF(BUILD_MEGAGLEST_MODEL_VIEWER OR BUILD_MEGAGLEST_MAP_EDITOR OR BUILD_MEGAGLEST ENDIF() IF(WIN32) - TARGET_LINK_LIBRARIES(${TARGET_NAME} stdc++ gcc odbc32 wsock32 winspool winmm shell32 comctl32 ctl3d32 advapi32 wsock32 opengl32 glu32 ole32 oleaut32 uuid mingw32 ddraw dsound dxguid ws2_32 iphlpapi wsock32 libogg libvorbis libvorbisfile zlib jpeg libpng xerces-c2_8_0 OpenAL32 libcurl winmm gdi32 opengl32 glu32 ${SDL_VERSION_NAME} ${SDL_VERSION_NAME}main lua5.1 stdc++ moldname mingwex msvcrt user32 kernel32) + IF(VCPKG_TARGET_TRIPLET) + TARGET_LINK_LIBRARIES(${TARGET_NAME} odbc32 wsock32 winspool winmm shell32 comctl32 advapi32 opengl32 glu32 ole32 oleaut32 uuid ddraw dsound dxguid ws2_32 iphlpapi user32 kernel32 dbghelp shlwapi) + find_package(Ogg CONFIG REQUIRED) + find_package(Vorbis CONFIG REQUIRED) + # find_package(ZLIB REQUIRED) + # find_package(JPEG REQUIRED) + find_package(libpng CONFIG REQUIRED) + find_package(XercesC CONFIG REQUIRED) + find_package(OpenAL CONFIG REQUIRED) + # find_package(CURL CONFIG REQUIRED) + find_package(SDL2 CONFIG REQUIRED) + # include(FindLua) + # find_package(Lua REQUIRED) + # find_package(GLEW REQUIRED) + find_package(FTGL CONFIG REQUIRED) + TARGET_LINK_LIBRARIES(${TARGET_NAME} Ogg::ogg Vorbis::vorbis Vorbis::vorbisenc Vorbis::vorbisfile ZLIB::ZLIB ${JPEG_LIBRARIES} png_static xerces_xerces-c XercesC::XercesC OpenAL::OpenAL CURL::libcurl gdi32 SDL2::SDL2main SDL2::SDL2-static ${LUA_LIBRARIES} ${MG_STREFLOP} GLEW::GLEW ftgl) + ELSE() + TARGET_LINK_LIBRARIES(${TARGET_NAME} stdc++ gcc odbc32 wsock32 winspool winmm shell32 comctl32 ctl3d32 advapi32 wsock32 opengl32 glu32 ole32 oleaut32 uuid mingw32 ddraw dsound dxguid ws2_32 iphlpapi wsock32 libogg libvorbis libvorbisfile zlib jpeg libpng xerces-c2_8_0 OpenAL32 libcurl winmm gdi32 opengl32 glu32 ${SDL_VERSION_NAME} ${SDL_VERSION_NAME}main lua5.1 stdc++ moldname mingwex msvcrt user32 kernel32) + ENDIF() ENDIF() IF(WANT_USE_STREFLOP AND NOT STREFLOP_FOUND) diff --git a/source/shared_lib/include/platform/sdl/platform_util.h b/source/shared_lib/include/platform/sdl/platform_util.h index 653e3e52..559e88ad 100644 --- a/source/shared_lib/include/platform/sdl/platform_util.h +++ b/source/shared_lib/include/platform/sdl/platform_util.h @@ -112,7 +112,7 @@ void ontop_win32(int width, int height); void CheckPacketThrottling(); // The following is used for stacking tracing for windows based exceptions -#if !defined(_DEBUG) && !defined(__GNUC__) +#if !defined(__GNUC__) // easy safe strings #define MAXSTRLEN 260 diff --git a/source/shared_lib/sources/graphics/gl/texture_gl.cpp b/source/shared_lib/sources/graphics/gl/texture_gl.cpp index dac42ec7..a255b725 100644 --- a/source/shared_lib/sources/graphics/gl/texture_gl.cpp +++ b/source/shared_lib/sources/graphics/gl/texture_gl.cpp @@ -16,9 +16,6 @@ #include "conversion.h" #include #include "util.h" -#ifdef WIN32 -#include "glext.h" -#endif #include "leak_dumper.h" diff --git a/source/shared_lib/sources/streflop/CMakeLists.txt b/source/shared_lib/sources/streflop/CMakeLists.txt index 6a5a30c8..d3e8d9a4 100644 --- a/source/shared_lib/sources/streflop/CMakeLists.txt +++ b/source/shared_lib/sources/streflop/CMakeLists.txt @@ -13,7 +13,15 @@ INCLUDE_DIRECTORIES( SET(STREFLOP_SRC ${STREFLOP_GLOBBED_CPP}) +IF(MSVC) + ENABLE_LANGUAGE(ASM_MASM) + SET(STREFLOP_SRC ${STREFLOP_SRC} FPUSettings.asm) +ENDIF() + ADD_LIBRARY(streflop STATIC EXCLUDE_FROM_ALL ${STREFLOP_SRC} ) -set_target_properties(streflop PROPERTIES COMPILE_FLAGS "${PIC_FLAG}") + +IF(NOT MSVC) + set_target_properties(streflop PROPERTIES COMPILE_FLAGS "${PIC_FLAG}") +ENDIF() diff --git a/source/tools/glexemel/CMakeLists.txt b/source/tools/glexemel/CMakeLists.txt index 9caa9408..a40af6ff 100644 --- a/source/tools/glexemel/CMakeLists.txt +++ b/source/tools/glexemel/CMakeLists.txt @@ -15,6 +15,13 @@ IF(BUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS) ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") find_package(LibXml2) + + IF(WIN32) + # Need to explicitly find iconv with vcpkg. + find_package(Iconv) + SET(LIBXML2_LIBRARIES ${LIBXML2_LIBRARIES} Iconv::Iconv) + ENDIF() + IF(LIBXML2_FOUND) include_directories(${CMAKE_INCLUDE_PATH} ${LIBXML2_INCLUDE_DIR}) add_executable(xml2g xml2g.c g3dv4.h)