- added support to cross compile win32 binary on Linux using cmake (just run build-mg-win32.sh)

This commit is contained in:
Mark Vejvoda 2010-12-11 12:53:38 +00:00
parent 8f579e735f
commit f27cb6c8a3
5 changed files with 90 additions and 32 deletions

View File

@ -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)

13
build-mg-win32.sh Executable file
View File

@ -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/'

View File

@ -2,6 +2,7 @@
mkdir build
cd build
cmake ..
make

View File

@ -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})

View File

@ -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})