From f27cb6c8a3711998313ec4698d44318bd933e933 Mon Sep 17 00:00:00 2001 From: Mark Vejvoda Date: Sat, 11 Dec 2010 12:53:38 +0000 Subject: [PATCH] - added support to cross compile win32 binary on Linux using cmake (just run build-mg-win32.sh) --- CMakeLists.txt | 2 +- build-mg-win32.sh | 13 +++++++ build-mg.sh | 1 + source/glest_game/CMakeLists.txt | 45 ++++++++++++----------- source/shared_lib/CMakeLists.txt | 61 ++++++++++++++++++++++++++------ 5 files changed, 90 insertions(+), 32 deletions(-) create mode 100755 build-mg-win32.sh diff --git a/CMakeLists.txt b/CMakeLists.txt index ebe83b35..77741585 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ CMAKE_MINIMUM_REQUIRED( VERSION 2.6.2 ) PROJECT( MegaGlest ) -#SET(CMAKE_VERBOSE_MAKEFILE ON) +SET(CMAKE_VERBOSE_MAKEFILE ON) SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/mk/cmake/Modules) IF(WIN32) diff --git a/build-mg-win32.sh b/build-mg-win32.sh new file mode 100755 index 00000000..0c51b677 --- /dev/null +++ b/build-mg-win32.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +mkdir build-win32 +cd build-win32 + +cmake -DCMAKE_TOOLCHAIN_FILE=../mk/cmake/Modules/Toolchain-mingw32.cmake -DXERCESC_INCLUDE_DIR=${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/include -DXERCESC_LIBRARY=${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/lib/libxerces-c2_8_0.dll -DOPENAL_INCLUDE_DIR=${PROJECT_SOURCE_DIR}/source/win32_deps/openal-soft-1.12.854 -DOPENAL_LIBRARY=${PROJECT_SOURCE_DIR}/source/win32_deps/libs/OpenAL32.dll -DOGG_INCLUDE_DIR=${PROJECT_SOURCE_DIR}/source/win32_deps/libogg-1.2.1/include -DOGG_LIBRARY=${PROJECT_SOURCE_DIR}/source/win32_deps/libs/libogg.dll -DVORBIS_LIBRARY=${PROJECT_SOURCE_DIR}/source/win32_deps/libs/libvorbis.dll -DVORBIS_FILE_LIBRARY=${PROJECT_SOURCE_DIR}/source/win32_deps/libs/libvorbisfile.dll -DLUA_INCLUDE_DIR=${PROJECT_SOURCE_DIR}/source/win32_deps/lua-5.1/src -DLUA_LIBRARIES=${PROJECT_SOURCE_DIR}/source/win32_deps/libs/lua5.1.dll -DJPEG_INCLUDE_DIR=${PROJECT_SOURCE_DIR}/source/win32_deps/jpeg-8b -DJPEG_LIBRARY=${PROJECT_SOURCE_DIR}/source/win32_deps/libs/libjpeg.dll -DZLIB_INCLUDE_DIR=${PROJECT_SOURCE_DIR}/source/win32_deps/zlib-1.2.5 -DZLIB_LIBRARY=${PROJECT_SOURCE_DIR}/source/win32_deps/libs/libz.a -DPNG_PNG_INCLUDE_DIR=${PROJECT_SOURCE_DIR}/source/win32_deps/lpng141 -DPNG_LIBRARY=${PROJECT_SOURCE_DIR}/source/win32_deps/libs/libpng.dll -DCURL_INCLUDE_DIR=${PROJECT_SOURCE_DIR}/source/win32_deps/curl-7.20.1/include -DCURL_LIBRARY=${PROJECT_SOURCE_DIR}/source/win32_deps/libs/libcurl.dll -DSDL_INCLUDE_DIR=${PROJECT_SOURCE_DIR}/source/win32_deps/SDL-1.2.x/include .. + +make + +#echo 'You may now launch mega-glest from this folder like this:' +#echo '../mk/linux/glest.bin --ini-path=../mk/linux/ --data-path=../mk/linux/' + + diff --git a/build-mg.sh b/build-mg.sh index 131363f3..6623ace7 100755 --- a/build-mg.sh +++ b/build-mg.sh @@ -2,6 +2,7 @@ mkdir build cd build + cmake .. make diff --git a/source/glest_game/CMakeLists.txt b/source/glest_game/CMakeLists.txt index 6864f8d9..974f452b 100644 --- a/source/glest_game/CMakeLists.txt +++ b/source/glest_game/CMakeLists.txt @@ -5,22 +5,21 @@ SET(EXTERNAL_LIBS "") 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/lib + ${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/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.20.1/include - ${PROJECT_SOURCE_DIR}/source/win32_deps/SDL-1.2.x/include - ) + 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.20.1/include) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/SDL-1.2.x/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() @@ -85,7 +84,7 @@ ENDIF() # glest game SET(DIRS_WITH_SRC - ai + ai facilities game global @@ -135,8 +134,11 @@ FOREACH(DIR IN LISTS DIRS_WITH_SRC) set(SRC_DIR_TO_GLOB ${DIR}) FILE(GLOB SRC_FILES_FROM_THIS_DIR ${SRC_DIR_TO_GLOB}/*.cpp) SET(MG_SOURCE_FILES ${MG_SOURCE_FILES} ${SRC_FILES_FROM_THIS_DIR}) + FILE(GLOB SRC_FILES_FROM_THIS_DIR ${SRC_DIR_TO_GLOB}/*.c) + SET(MG_SOURCE_FILES ${MG_SOURCE_FILES} ${SRC_FILES_FROM_THIS_DIR}) FILE(GLOB INCLUDE_FILES_FROM_THIS_DIR ${SRC_DIR_TO_GLOB}/*.h) SET(MG_INCLUDE_FILES ${MG_INCLUDE_FILES} ${INCLUDE_FILES_FROM_THIS_DIR}) + IF(APPLE) FILE(GLOB SRC_FILES_FROM_THIS_DIR ${SRC_DIR_TO_GLOB}/*.mm) #MESSAGE(STATUS "SRC_FILES_FROM_THIS_DIR: ${SRC_FILES_FROM_THIS_DIR}") @@ -144,7 +146,7 @@ FOREACH(DIR IN LISTS DIRS_WITH_SRC) FILE(GLOB SRC_FILES_FROM_THIS_DIR ${SRC_DIR_TO_GLOB}/*.m) #MESSAGE(STATUS "SRC_FILES_FROM_THIS_DIR: ${SRC_FILES_FROM_THIS_DIR}") SET(MG_SOURCE_FILES ${MG_SOURCE_FILES} ${SRC_FILES_FROM_THIS_DIR}) - ENDIF(APPLE) + ENDIF(APPLE) ENDFOREACH(DIR) # Force the version and date/time stamp file to be touched so the compile stamp is always right @@ -193,7 +195,7 @@ ENDIF() message("CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}") IF(WIN32) - SET(TARGET_NAME "glest.exe") + SET(TARGET_NAME "glest_game") ELSE() SET(TARGET_NAME "glest.bin") ENDIF() @@ -208,8 +210,11 @@ SET_SOURCE_FILES_PROPERTIES(${MG_INCLUDE_FILES} PROPERTIES HEADER_FILE_ONLY 1) ADD_EXECUTABLE(${TARGET_NAME} ${MG_SOURCE_FILES} ${MG_INCLUDE_FILES}) 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 SDLmain lua5.1 streflop glest 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 SDLmain lua5.1 streflop libglest stdc++ moldname mingwex msvcrt user32 kernel32) ENDIF() +IF(NOT WIN32) TARGET_LINK_LIBRARIES(${TARGET_NAME} streflop) -TARGET_LINK_LIBRARIES(${TARGET_NAME} glest_lib) +TARGET_LINK_LIBRARIES(${TARGET_NAME} libglest) +ENDIF() TARGET_LINK_LIBRARIES(${TARGET_NAME} ${EXTERNAL_LIBS}) + diff --git a/source/shared_lib/CMakeLists.txt b/source/shared_lib/CMakeLists.txt index a4b25a41..a831686e 100644 --- a/source/shared_lib/CMakeLists.txt +++ b/source/shared_lib/CMakeLists.txt @@ -9,6 +9,27 @@ ADD_SUBDIRECTORY(sources/streflop) SET(EXTERNAL_LIBS "") +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) + + 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.20.1/include) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/SDL-1.2.x/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() + IF(WIN32) INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/include) INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/shared_lib/include/platform/posix) @@ -76,7 +97,7 @@ ENDIF() # glest lib SET(DIRS_WITH_SRC - platform/common + platform/common util graphics graphics/gl @@ -90,7 +111,7 @@ SET(DIRS_WITH_SRC map) IF(APPLE) - SET(DIRS_WITH_SRC ${DIRS_WITH_SRC} platform/sdl) + SET(DIRS_WITH_SRC ${DIRS_WITH_SRC} platform/sdl) SET(DIRS_WITH_SRC ${DIRS_WITH_SRC} platform/posix) SET(DIRS_WITH_SRC ${DIRS_WITH_SRC} platform/macosx) ELSEIF(WIN32) @@ -98,8 +119,8 @@ ELSEIF(WIN32) SET(DIRS_WITH_SRC ${DIRS_WITH_SRC} sound/ds8) SET(DIRS_WITH_SRC ${DIRS_WITH_SRC} ${PROJECT_SOURCE_DIR}/source/win32_deps/src) ELSE() - SET(DIRS_WITH_SRC ${DIRS_WITH_SRC} platform/sdl) - SET(DIRS_WITH_SRC ${DIRS_WITH_SRC} platform/posix) + SET(DIRS_WITH_SRC ${DIRS_WITH_SRC} platform/sdl) + SET(DIRS_WITH_SRC ${DIRS_WITH_SRC} platform/posix) SET(DIRS_WITH_SRC ${DIRS_WITH_SRC} platform/unix) ENDIF() @@ -108,6 +129,15 @@ SET(MG_SOURCES_ROOT "sources/") SET(MG_INCLUDE_FILES "") SET(MG_SOURCE_FILES "") INCLUDE_DIRECTORIES( ${MG_INCLUDES_ROOT}platform/sdl ) + +IF(WIN32) + SET(MG_SOURCE_FILES ${MG_SOURCE_FILES} ${PROJECT_SOURCE_DIR}/source/shared_lib/sources/platform/posix/socket.cpp) + SET(MG_SOURCE_FILES ${MG_SOURCE_FILES} ${PROJECT_SOURCE_DIR}/source/shared_lib/sources/platform/sdl/gl_wrap.cpp) + SET(MG_SOURCE_FILES ${MG_SOURCE_FILES} ${PROJECT_SOURCE_DIR}/source/shared_lib/sources/platform/sdl/thread.cpp) + SET(MG_SOURCE_FILES ${MG_SOURCE_FILES} ${PROJECT_SOURCE_DIR}/source/shared_lib/sources/platform/sdl/window.cpp) + SET(MG_SOURCE_FILES ${MG_SOURCE_FILES} ${PROJECT_SOURCE_DIR}/source/shared_lib/sources/platform/sdl/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) set(INCLUDE_DIR_TO_GLOB ${MG_INCLUDES_ROOT}${DIR}) @@ -149,9 +179,11 @@ ENDFOREACH(DIR) # FIXME: hackish, should be tested for IF(APPLE) SET(PLATFORM_SPECIFIC_DEFINES "-DHAVE_SYS_IOCTL_H") -ELSE(APPLE) +ELSEIF(WIN32) + SET(PLATFORM_SPECIFIC_DEFINES "-DX11_AVAILABLE") +ELSE() SET(PLATFORM_SPECIFIC_DEFINES "-DX11_AVAILABLE -DHAVE_SYS_IOCTL_H") -ENDIF(APPLE) +ENDIF() # FIXME: hackish... SET(STREFLOP_PROPERTIES "-DSTREFLOP_SSE -DLIBM_COMPILING_FLT32") @@ -165,13 +197,20 @@ SET_SOURCE_FILES_PROPERTIES(${MG_INCLUDE_FILES} PROPERTIES HEADER_FILE_ONLY 1) # [RCL] FIXME: make it compiler-agnostic SET(CMAKE_CXX_FLAGS "-O3 -fno-strict-aliasing -frounding-math -fsignaling-nans -mfpmath=sse -msse") -# ADD_LIBRARY(glest_lib SHARED ${MG_SOURCE_FILES} ${MG_INCLUDE_FILES}) -ADD_LIBRARY(glest_lib STATIC ${MG_SOURCE_FILES} ${MG_INCLUDE_FILES}) IF(WIN32) - TARGET_LINK_LIBRARIES(glest_lib mingw32 ddraw dsound dxguid ws2_32 iphlpapi wsock32 winmm gdi32 opengl32 glu32) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_WINDOWS -D_WIN32 -D_STDCALL_SUPPORTED -D_M_IX86 -DXML_LIBRARY -D_LIB -DUSE_STREFLOP -DSTREFLOP_SSE -DSTREFLOP_RANDOM_GEN_SIZE=32 -DLIBM_COMPILING_FLT32 -DCURL_STATICLIB") ENDIF() -TARGET_LINK_LIBRARIES(glest_lib streflop) -TARGET_LINK_LIBRARIES(glest_lib ${EXTERNAL_LIBS}) + +#MESSAGE(STATUS "Source files: ${MG_SOURCE_FILES}") +#MESSAGE(STATUS "Include files: ${MG_INCLUDE_FILES}") + +#ADD_LIBRARY(libglest SHARED ${MG_SOURCE_FILES} ${MG_INCLUDE_FILES}) +ADD_LIBRARY(libglest STATIC ${MG_SOURCE_FILES} ${MG_INCLUDE_FILES}) +IF(WIN32) + TARGET_LINK_LIBRARIES(libglest 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 SDLmain lua5.1 streflop libglest stdc++ moldname mingwex msvcrt user32 kernel32) +ENDIF() +TARGET_LINK_LIBRARIES(libglest streflop) +TARGET_LINK_LIBRARIES(libglest ${EXTERNAL_LIBS})