diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000..46ae9a0c3 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,7 @@ +CMAKE_MINIMUM_REQUIRED( VERSION 2.6 ) +PROJECT( MegaGlest ) + +SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/mk/cmake/Modules) + +ADD_SUBDIRECTORY( source/shared_lib ) +ADD_SUBDIRECTORY( source/glest_game ) diff --git a/mk/cmake/Modules/FindCURL.cmake b/mk/cmake/Modules/FindCURL.cmake new file mode 100644 index 000000000..18e58484b --- /dev/null +++ b/mk/cmake/Modules/FindCURL.cmake @@ -0,0 +1,27 @@ +# - Find curl +# Find the native CURL headers and libraries. +# +# CURL_INCLUDE_DIRS - where to find curl/curl.h, etc. +# CURL_LIBRARIES - List of libraries when using curl. +# CURL_FOUND - True if curl found. + +# Look for the header file. +FIND_PATH(CURL_INCLUDE_DIR NAMES curl/curl.h) +MARK_AS_ADVANCED(CURL_INCLUDE_DIR) + +# Look for the library. +FIND_LIBRARY(CURL_LIBRARY NAMES curl curl-gnutls) +MARK_AS_ADVANCED(CURL_LIBRARY) + +# handle the QUIETLY and REQUIRED arguments and set CURL_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(CURL DEFAULT_MSG CURL_LIBRARY CURL_INCLUDE_DIR) + +IF(CURL_FOUND) + SET(CURL_LIBRARIES ${CURL_LIBRARY}) + SET(CURL_INCLUDE_DIRS ${CURL_INCLUDE_DIR}) +ELSE(CURL_FOUND) + SET(CURL_LIBRARIES) + SET(CURL_INCLUDE_DIRS) +ENDIF(CURL_FOUND) diff --git a/mk/cmake/Modules/FindLUA.cmake b/mk/cmake/Modules/FindLUA.cmake new file mode 100644 index 000000000..36dd18bb3 --- /dev/null +++ b/mk/cmake/Modules/FindLUA.cmake @@ -0,0 +1,45 @@ +# Find the Lua 5.1 includes and library +# +# LUA_INCLUDE_DIR - where to find lua.h +# LUA_LIBRARIES - List of fully qualified libraries to link against +# LUA_FOUND - Set to TRUE if found + +# Copyright (c) 2007, Pau Garcia i Quiles, +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +# [RCL] FIXME: is it future proof with names like lua5.1? Kubuntu does not provide +# a generic (version-independent) include directory for LUA... + +IF(LUA_INCLUDE_DIR AND LUA_LIBRARIES) + SET(LUA_FIND_QUIETLY TRUE) +ENDIF(LUA_INCLUDE_DIR AND LUA_LIBRARIES) + +FIND_PATH(LUA_INCLUDE_DIR NAMES lua.hpp + PATHS /usr/include/lua + /usr/include/lua5.1 + ) + +FIND_LIBRARY(LUA_LIBRARIES NAMES lua5.1 ) + +IF(LUA_INCLUDE_DIR AND LUA_LIBRARIES) + SET(LUA_FOUND TRUE) + INCLUDE(CheckLibraryExists) + CHECK_LIBRARY_EXISTS(${LUA_LIBRARIES} lua_close "" LUA_NEED_PREFIX) +ELSE(LUA_INCLUDE_DIR AND LUA_LIBRARIES) + SET(LUA_FOUND FALSE) +ENDIF (LUA_INCLUDE_DIR AND LUA_LIBRARIES) + +IF(LUA_FOUND) + IF (NOT LUA_FIND_QUIETLY) + MESSAGE(STATUS "Found Lua library: ${LUA_LIBRARIES}") + MESSAGE(STATUS "Found Lua headers: ${LUA_INCLUDE_DIR}") + ENDIF (NOT LUA_FIND_QUIETLY) +ELSE(LUA_FOUND) + IF(LUA_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "Could NOT find Lua") + ENDIF(LUA_FIND_REQUIRED) +ENDIF(LUA_FOUND) + +MARK_AS_ADVANCED(LUA_INCLUDE_DIR LUA_LIBRARIES) diff --git a/mk/cmake/Modules/FindOGG.cmake b/mk/cmake/Modules/FindOGG.cmake new file mode 100644 index 000000000..837aff18c --- /dev/null +++ b/mk/cmake/Modules/FindOGG.cmake @@ -0,0 +1,38 @@ +# Defines +# OGG_FOUND +# OGG_INCLUDE_DIR +# OGG_LIBRARY +# VORBIS_LIBRARY +# VORBIS_FILE_LIBRARY +# + +# check for cache to avoid littering log +IF(OGG_INCLUDE_DIR AND OGG_LIBRARY AND VORBIS_LIBRARY) + SET(OGG_BE_QUIET TRUE) +ENDIF(OGG_INCLUDE_DIR AND OGG_LIBRARY AND VORBIS_LIBRARY) + + +FIND_PATH(OGG_INCLUDE_DIR ogg/ogg.h) +FIND_LIBRARY(OGG_LIBRARY NAMES ogg) +FIND_LIBRARY(VORBIS_LIBRARY NAMES vorbis) +FIND_LIBRARY(VORBIS_FILE_LIBRARY NAMES vorbisfile) + +IF(OGG_INCLUDE_DIR AND OGG_LIBRARY AND VORBIS_LIBRARY AND VORBIS_FILE_LIBRARY) + SET(OGG_FOUND TRUE) + IF(NOT OGG_BE_QUIET) + MESSAGE(STATUS "OGG/Vorbis includes: ${OGG_INCLUDE_DIR}") + MESSAGE(STATUS "OGG library : ${OGG_LIBRARY}") + MESSAGE(STATUS "Vorbis library : ${VORBIS_LIBRARY}") + MESSAGE(STATUS "Vorbis file library: ${VORBIS_FILE_LIBRARY}") + ENDIF(NOT OGG_BE_QUIET) +ELSE(OGG_INCLUDE_DIR AND OGG_LIBRARY AND VORBIS_LIBRARY AND VORBIS_FILE_LIBRARY) + SET(OGG_FOUND FALSE) + MESSAGE("OGG/Vorbis was not found on this system!") +ENDIF(OGG_INCLUDE_DIR AND OGG_LIBRARY AND VORBIS_LIBRARY AND VORBIS_FILE_LIBRARY) + +MARK_AS_ADVANCED( + OGG_INCLUDE_DIR + OGG_LIBRARY + VORBIS_LIBRARY + VORBIS_FILE_LIBRARY +) diff --git a/mk/cmake/Modules/FindXercesC.cmake b/mk/cmake/Modules/FindXercesC.cmake new file mode 100644 index 000000000..631c5863c --- /dev/null +++ b/mk/cmake/Modules/FindXercesC.cmake @@ -0,0 +1,30 @@ +# - Find Xerces-C +# Find the Xerces-C includes and library +# +# XERCESC_INCLUDE_DIR - Where to find xercesc include sub-directory. +# XERCESC_LIBRARIES - List of libraries when using Xerces-C. +# XERCESC_FOUND - True if Xerces-C found. + + +IF (XERCESC_INCLUDE_DIR) +# Already in cache, be silent. +SET(XERCESC_FIND_QUIETLY TRUE) +ENDIF (XERCESC_INCLUDE_DIR) + +FIND_PATH(XERCESC_INCLUDE_DIR xercesc/dom/DOM.hpp) + +SET(XERCESC_NAMES xerces-c xerces-c_3 xerces-c_2) +FIND_LIBRARY(XERCESC_LIBRARY NAMES ${XERCESC_NAMES} ) + +# Handle the QUIETLY and REQUIRED arguments and set XERCESC_FOUND to +# TRUE if all listed variables are TRUE. +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(XercesC DEFAULT_MSG XERCESC_LIBRARY XERCESC_INCLUDE_DIR) + +IF(XERCESC_FOUND) + SET( XERCESC_LIBRARIES ${XERCESC_LIBRARY} ) +ELSE(XERCESC_FOUND) + SET( XERCESC_LIBRARIES ) +ENDIF(XERCESC_FOUND) + +MARK_AS_ADVANCED( XERCESC_LIBRARY XERCESC_INCLUDE_DIR ) diff --git a/source/glest_game/CMakeLists.txt b/source/glest_game/CMakeLists.txt new file mode 100644 index 000000000..6f4eacb62 --- /dev/null +++ b/source/glest_game/CMakeLists.txt @@ -0,0 +1,95 @@ +######################################################################################### +# common libraries + +SET(EXTERNAL_LIBS "") + +FIND_PACKAGE(SDL REQUIRED) +INCLUDE_DIRECTORIES(${SDL_INCLUDE_DIR}) +SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${SDL_LIBRARY}) + +FIND_PACKAGE(OpenGL REQUIRED) +INCLUDE_DIRECTORIES(${OPENGL_INCLUDE_DIR}) +SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${OPENGL_LIBRARY}) + +FIND_PACKAGE(XercesC REQUIRED) +INCLUDE_DIRECTORIES(${XERCESC_INCLUDE_DIR}) +SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${XERCESC_LIBRARY}) + +FIND_PACKAGE(OpenAL REQUIRED) +INCLUDE_DIRECTORIES(${OPENAL_INCLUDE_DIR}) +SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${OPENAL_LIBRARY}) + +FIND_PACKAGE(OGG REQUIRED) +INCLUDE_DIRECTORIES(${OGG_INCLUDE_DIR}) +SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${OGG_LIBRARY}) +SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${VORBIS_LIBRARY}) +SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${VORBIS_FILE_LIBRARY}) + +FIND_PACKAGE(LUA REQUIRED) +INCLUDE_DIRECTORIES(${LUA_INCLUDE_DIR}) +SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${LUA_LIBRARIES}) + +FIND_PACKAGE(JPEG REQUIRED) +INCLUDE_DIRECTORIES(${JPEG_INCLUDE_DIR}) +SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${JPEG_LIBRARY}) + +FIND_PACKAGE(PNG REQUIRED) +INCLUDE_DIRECTORIES(${PNG_INCLUDE_DIR}) +SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PNG_LIBRARY}) + +######################################################################################### +# glest game + +SET(DIRS_WITH_SRC + ai + facilities + game + global + graphics + gui + main + menu + network + sound + type_instances + types + world) + +SET(GLEST_LIB_INCLUDE_ROOT "../shared_lib/include/") +SET(GLEST_LIB_INCLUDE_DIRS + ${GLEST_LIB_INCLUDE_ROOT}platform/common + ${GLEST_LIB_INCLUDE_ROOT}platform/sdl + ${GLEST_LIB_INCLUDE_ROOT}platform/posix + ${GLEST_LIB_INCLUDE_ROOT}util + ${GLEST_LIB_INCLUDE_ROOT}graphics + ${GLEST_LIB_INCLUDE_ROOT}graphics/gl + ${GLEST_LIB_INCLUDE_ROOT}sound + ${GLEST_LIB_INCLUDE_ROOT}sound/openal + ${GLEST_LIB_INCLUDE_ROOT}xml + ${GLEST_LIB_INCLUDE_ROOT}glew + ${GLEST_LIB_INCLUDE_ROOT}lua + ${GLEST_LIB_INCLUDE_ROOT}streflop + ${GLEST_LIB_INCLUDE_ROOT}streflop/libm_flt32_source) +INCLUDE_DIRECTORIES( ${GLEST_LIB_INCLUDE_DIRS} ) + +SET(MG_SOURCE_FILES "") + +FOREACH(DIR IN LISTS DIRS_WITH_SRC) + INCLUDE_DIRECTORIES( ${DIR} ) + + 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}) +ENDFOREACH(DIR) + +# [RCL] FIXME: make it compiler-agnostic +SET(CMAKE_CXX_FLAGS "-O3 -msse -msse2 -mfpmath=sse -DSTREFLOP_SSE") + +SET(TARGET_NAME "glest.bin") + +SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/data/glest_game) + +ADD_EXECUTABLE(${TARGET_NAME} ${MG_SOURCE_FILES}) +TARGET_LINK_LIBRARIES(${TARGET_NAME} streflop) +TARGET_LINK_LIBRARIES(${TARGET_NAME} glest_lib) +TARGET_LINK_LIBRARIES(${TARGET_NAME} ${EXTERNAL_LIBS}) diff --git a/source/shared_lib/CMakeLists.txt b/source/shared_lib/CMakeLists.txt new file mode 100644 index 000000000..f1d9dca5a --- /dev/null +++ b/source/shared_lib/CMakeLists.txt @@ -0,0 +1,107 @@ +######################################################################################### +# streflop + +# IMPORTANT: should come BEFORE finding packages +ADD_SUBDIRECTORY(sources/streflop) + +######################################################################################### +# common libraries + +SET(EXTERNAL_LIBS "") + +FIND_PACKAGE(SDL REQUIRED) +INCLUDE_DIRECTORIES(${SDL_INCLUDE_DIR}) +SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${SDL_LIBRARY}) + +FIND_PACKAGE(OpenGL REQUIRED) +INCLUDE_DIRECTORIES(${OPENGL_INCLUDE_DIR}) +SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${OPENGL_LIBRARY}) + +FIND_PACKAGE(XercesC REQUIRED) +INCLUDE_DIRECTORIES(${XERCESC_INCLUDE_DIR}) +SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${XERCESC_LIBRARY}) + +FIND_PACKAGE(OpenAL REQUIRED) +INCLUDE_DIRECTORIES(${OPENAL_INCLUDE_DIR}) +SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${OPENAL_LIBRARY}) + +FIND_PACKAGE(OGG REQUIRED) +INCLUDE_DIRECTORIES(${OGG_INCLUDE_DIR}) +SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${OGG_LIBRARY}) +SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${VORBIS_LIBRARY}) +SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${VORBIS_FILE_LIBRARY}) + +FIND_PACKAGE(LUA REQUIRED) +INCLUDE_DIRECTORIES(${LUA_INCLUDE_DIR}) +SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${LUA_LIBRARIES}) + +FIND_PACKAGE(JPEG REQUIRED) +INCLUDE_DIRECTORIES(${JPEG_INCLUDE_DIR}) +SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${JPEG_LIBRARY}) + +FIND_PACKAGE(PNG REQUIRED) +INCLUDE_DIRECTORIES(${PNG_INCLUDE_DIR}) +SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${PNG_LIBRARY}) + +FIND_PACKAGE(CURL REQUIRED) +INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIRS}) +SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${CURL_LIBRARIES}) + +######################################################################################### +# glest lib + +SET(DIRS_WITH_SRC + platform/common + platform/sdl + platform/posix + util + graphics + graphics/gl + sound + sound/openal + xml + glew + lua + streflop + streflop/libm_flt32_source) + +SET(MG_INCLUDES_ROOT "include/") +SET(MG_SOURCES_ROOT "sources/") +SET(MG_INCLUDE_FILES "") +SET(MG_SOURCE_FILES "") + +FOREACH(DIR IN LISTS DIRS_WITH_SRC) + set(INCLUDE_DIR_TO_GLOB ${MG_INCLUDES_ROOT}${DIR}) + INCLUDE_DIRECTORIES( ${INCLUDE_DIR_TO_GLOB} ) + #MESSAGE(STATUS "INCLUDE_DIR_TO_GLOB: ${INCLUDE_DIR_TO_GLOB}") + #FILE(GLOB INC_FILES_FROM_THIS_DIR ${INCLUDE_DIR_TO_GLOB}/*.h) + #MESSAGE(STATUS "INCLUDE FILES GLOBBED: ${INC_FILES_FROM_THIS_DIR}") + #SET(MG_INCLUDE_FILES ${MG_INCLUDE_FILES} ${INC_FILES_FROM_THIS_DIR}) + + set(SRC_DIR_TO_GLOB ${MG_SOURCES_ROOT}${DIR}) + #MESSAGE(STATUS "SRC_DIR_TO_GLOB: ${SRC_DIR_TO_GLOB}") + FILE(GLOB SRC_FILES_FROM_THIS_DIR ${SRC_DIR_TO_GLOB}/*.cpp) + #MESSAGE(STATUS "SRC_FILES_FROM_THIS_DIR: ${SRC_FILES_FROM_THIS_DIR}") + SET(MG_SOURCE_FILES ${MG_SOURCE_FILES} ${SRC_FILES_FROM_THIS_DIR}) +ENDFOREACH(DIR) + +#MESSAGE(STATUS "Source files: ${MG_INCLUDE_FILES}") +#MESSAGE(STATUS "Source files: ${MG_SOURCE_FILES}") +#MESSAGE(STATUS "Include dirs: ${INCLUDE_DIRECTORIES}") + +# FIXME: hackish, should be tested for +SET(UNIX_SPECIFIC_DEFINES "-DX11_AVAILABLE -DHAVE_SYS_IOCTL_H") + +# FIXME: hackish... +SET(STREFLOP_PROPERTIES "-DSTREFLOP_SSE -DLIBM_COMPILING_FLT32") + +# FIXME: should choose between platforms +SET_SOURCE_FILES_PROPERTIES(${MG_SOURCE_FILES} PROPERTIES COMPILE_FLAGS + "${UNIX_SPECIFIC_DEFINES} ${STREFLOP_PROPERTIES} ${CXXFLAGS}") + +# [RCL] FIXME: make it compiler-agnostic +SET(CMAKE_CXX_FLAGS "-O3 -msse -msse2 -mfpmath=sse") + +ADD_LIBRARY(glest_lib ${MG_SOURCE_FILES}) +TARGET_LINK_LIBRARIES(glest_lib streflop) +TARGET_LINK_LIBRARIES(glest_lib ${EXTERNAL_LIBS}) diff --git a/source/shared_lib/sources/streflop/CMakeLists.txt b/source/shared_lib/sources/streflop/CMakeLists.txt index 54e969f35..3a7717e10 100644 --- a/source/shared_lib/sources/streflop/CMakeLists.txt +++ b/source/shared_lib/sources/streflop/CMakeLists.txt @@ -1,16 +1,21 @@ -AUX_SOURCE_DIRECTORY(libm/flt-32 libm_flt32_source) +######################################################################################### +# streflop +#if (NOT $ENV{CXX} MATCHES "icpc") +# SET(cxxflags "${cxxflags} -mfpmath=sse -msse") +#endif (NOT $ENV{CXX} MATCHES "icpc") -SET(cxxflags "-w -O3 -I${CMAKE_CURRENT_SOURCE_DIR}/libm/headers") -if (NOT $ENV{CXX} MATCHES "icpc") - SET(cxxflags "${cxxflags} -mfpmath=sse -msse") -endif (NOT $ENV{CXX} MATCHES "icpc") -SET_SOURCE_FILES_PROPERTIES(${libm_flt32_source} PROPERTIES COMPILE_FLAGS "-DLIBM_COMPILING_FLT32 ${cxxflags}") +FILE(GLOB_RECURSE STREFLOP_GLOBBED_CPP libm/flt-32/*.cpp) + +INCLUDE_DIRECTORIES( + ../../include/streflop/libm/flt-32 + ../../include/streflop/libm/headers + ) + +SET(STREFLOP_SRC ${STREFLOP_GLOBBED_CPP}) +# use SSE unconditionally (FIXME?) +SET_SOURCE_FILES_PROPERTIES(${STREFLOP_SRC} PROPERTIES COMPILE_FLAGS "-DSTREFLOP_SSE -DLIBM_COMPILING_FLT32 -O3 ${CXXFLAGS}") ADD_LIBRARY(streflop STATIC EXCLUDE_FROM_ALL - SMath.cpp - Random.cpp - streflopC.cpp - ${libm_flt32_source} + ${STREFLOP_SRC} ) set_target_properties(streflop PROPERTIES COMPILE_FLAGS "${PIC_FLAG}") -#TODO do not use -fPIC for streflop (decreases performance)