diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000..c1e12ed81 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,195 @@ +# CMake file for development of OLX +# this file is not intendent (yet) as a system for building final releases +# use compile.sh instead + +cmake_minimum_required(VERSION 2.4) +IF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.4) + cmake_policy(SET CMP0005 OLD) + cmake_policy(SET CMP0003 OLD) + #include(PCHSupport_26.cmake) +ENDIF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.4) + + + +OPTION(DEBUG "enable debug build" Yes) +OPTION(STLPORT "STLport support" No) +OPTION(GCOREDUMPER "Google Coredumper support" No) +#OPTION(PCH "Precompiled header (CMake 2.6 only)" No) +OPTION(ADVASSERT "Advanced assert" No) + +OPTION(SDL "SDL support (probably will not work without)" Yes) +OPTION(OPENGL "OpenGL support" Yes) +OPTION(OGG "Ogg/Vorbis support" Yes) + +IF (DEBUG) + SET(CMAKE_BUILD_TYPE Debug) +ELSE (DEBUG) + SET(CMAKE_BUILD_TYPE Release) +ENDIF (DEBUG) + + +# Platform specific things can be put here +# Compilers and other specific variables can be found here: +# http://www.cmake.org/Wiki/CMake_Useful_Variables +IF(UNIX) + IF(APPLE) + ELSE(APPLE) + ENDIF(APPLE) + + IF (CYGWIN) + ELSE (CYGWIN) + ENDIF (CYGWIN) +ELSE(UNIX) + IF(WIN32) + ELSE(WIN32) + ENDIF(WIN32) +ENDIF(UNIX) + + +MESSAGE( "DEBUG = ${DEBUG}" ) +MESSAGE( "STLPORT = ${STLPORT}" ) +MESSAGE( "GCOREDUMPER = ${GCOREDUMPER}" ) +MESSAGE( "CMAKE_C_COMPILER = ${CMAKE_C_COMPILER}" ) +MESSAGE( "CMAKE_C_FLAGS = ${CMAKE_C_FLAGS}" ) +MESSAGE( "CMAKE_CXX_COMPILER = ${CMAKE_CXX_COMPILER}" ) +MESSAGE( "CMAKE_CXX_FLAGS = ${CMAKE_CXX_FLAGS}" ) +# commented out because only devs need these options anyway +#MESSAGE( "PCH = ${PCH} (Precompiled header, CMake 2.6 only)" ) +#MESSAGE( "ADVASSERT = ${ADVASSERT}" ) + +MESSAGE( "OPENGL = ${OPENGL}" ) +MESSAGE( "OGG = ${OGG}" ) + +EXEC_PROGRAM(mkdir ARGS -p ${CMAKE_CURRENT_SOURCE_DIR}/bin OUTPUT_VARIABLE NULL) + +PROJECT(commandergenius) + +# main includes +INCLUDE_DIRECTORIES(optional-includes/generated) +INCLUDE_DIRECTORIES(src) + +IF(ADVASSERT) + INCLUDE_DIRECTORIES(optional-includes/advanced-assert) +ENDIF(ADVASSERT) + +AUX_SOURCE_DIRECTORY(src ROOT_S) +AUX_SOURCE_DIRECTORY(src/ai AI_S) +AUX_SOURCE_DIRECTORY(src/hqp HQP_S) +AUX_SOURCE_DIRECTORY(src/scale2x SCALE2X_S) +AUX_SOURCE_DIRECTORY(src/sdl SDL_S) +AUX_SOURCE_DIRECTORY(src/vorbis VORBIS_S) +AUX_SOURCE_DIRECTORY(src/vorticon VORTICON_S) + +SET(ALL_SRCS ${ROOT_S} ${AI_S} ${HQP_S} ${SCALE2X_S} ${SDL_S} ${VORTICON_S}) + +IF (OGG) + ADD_DEFINITIONS(-DBUILD_WITH_OGG) + SET(ALL_SRCS ${ALL_SRCS} ${VORBIS_S}) +ENDIF (OGG) + +IF (SDL) + ADD_DEFINITIONS(-DBUILD_SDL) +ENDIF (SDL) + +IF (OPENGL) + ADD_DEFINITIONS(-DUSE_OPENGL) +ENDIF (OPENGL) + +IF (GCOREDUMPER) + INCLUDE_DIRECTORIES(libs/coredumper/src) + ADD_DEFINITIONS(-DGCOREDUMPER) + AUX_SOURCE_DIRECTORY(libs/coredumper/src COREDUMPER_SRCS) + SET(ALL_SRCS ${ALL_SRCS} ${COREDUMPER_SRCS}) +ENDIF (GCOREDUMPER) + +IF (STLPORT) + INCLUDE_DIRECTORIES(/usr/include/stlport) + ADD_DEFINITIONS(-D_FILE_OFFSET_BITS=64) # hm, don't know, at least it works for me (ppc32/amd32) +# debugging stuff for STLport + ADD_DEFINITIONS(-D_STLP_DEBUG=1) + ADD_DEFINITIONS(-D_STLP_DEBUG_LEVEL=_STLP_STANDARD_DBG_LEVEL) + ADD_DEFINITIONS(-D_STLP_SHRED_BYTE=0xA3) + ADD_DEFINITIONS(-D_STLP_DEBUG_UNINITIALIZED=1) + ADD_DEFINITIONS(-D_STLP_DEBUG_ALLOC=1) +ENDIF (STLPORT) + + +IF(DEBUG) + ADD_DEFINITIONS(-DDEBUG=1) +ENDIF(DEBUG) + + + +IF(WIN32) +# EXEC_PROGRAM("${CMAKE_BINARY_DIR}/svn_revision.exe" ARGS "${CMAKE_SOURCE_DIR}/optional-includes/generated/Version_generated.h" "${CMAKE_SOURCE_DIR}") +# ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE -DHAVE_BOOST -DZLIB_WIN32_NODLL) + SET(OPTIMIZE_COMPILER_FLAG /Ox /Ob2 /Oi /Ot /GL) + IF(DEBUG) + ADD_DEFINITIONS(-DUSE_DEFAULT_MSC_DELEAKER) + ELSE(DEBUG) + ADD_DEFINITIONS(${OPTIMIZE_COMPILER_FLAG}) + ENDIF(DEBUG) +ELSE(WIN32) + ADD_DEFINITIONS(-Wall) + +# EXEC_PROGRAM(sh ARGS ${CMAKE_CURRENT_SOURCE_DIR}/get_version.sh OUTPUT_VARIABLE OLXVER) +# string(REGEX REPLACE "[\r\n]" " " OLXVER "${OLXVER}") +# MESSAGE( "OLX_VERSION = ${OLXVER}" ) + # Escaping backslashes overkill, yay. +# EXEC_PROGRAM(sh ARGS -c echo\\ \\\\\#define\\ LX_VERSION\\ \\\\\\"${OLXVER}\\\\\\" > optional-includes/generated/Version_generated.h OUTPUT_VARIABLE DUMMY) + + IF(SDL) + EXEC_PROGRAM(sdl-config ARGS --cflags OUTPUT_VARIABLE SDLCFLAGS) + string(REGEX REPLACE "[\r\n]" " " SDLCFLAGS "${SDLCFLAGS}") + ADD_DEFINITIONS(${SDLCFLAGS}) + ENDIF(SDL) + + ADD_DEFINITIONS("-pthread") + SET(OPTIMIZE_COMPILER_FLAG -O3) +ENDIF(WIN32) + +ADD_EXECUTABLE(commandergenius ${ALL_SRCS}) + +#IF(PCH) +# EXEC_PROGRAM(./update_precompiled_header.sh OUTPUT_VARIABLE NULL) +# ADD_PRECOMPILED_HEADER(openlierox include/PrecompiledHeader.hpp 1) +#ENDIF(PCH) + +IF(SDL) + TARGET_LINK_LIBRARIES(commandergenius SDL) +ENDIF(SDL) + +IF(WIN32) + TARGET_LINK_LIBRARIES(commandergenius wsock32 wininet dbghelp + "${CMAKE_SOURCE_DIR}/build/msvc/libs/SDLmain.lib" + "${CMAKE_SOURCE_DIR}/build/msvc/libs/bgd.lib") + + SET_TARGET_PROPERTIES(commandergenius PROPERTIES OUTPUT_NAME "../../../bin/Commander Genius") + + # Add debug info to release build in linker flags + SET_TARGET_PROPERTIES(openlierox PROPERTIES LINK_FLAGS "${LINK_FLAGS} + /LTCG + /DEBUG + /MAP:\"${CMAKE_SOURCE_DIR}/bin/CommanderGenius.map\" + /MAPINFO:EXPORTS + /NODEFAULTLIB:\"LIBC\" + /INCREMENTAL:NO") +ELSE(WIN32) + IF(SDL) + EXEC_PROGRAM(sdl-config ARGS --libs OUTPUT_VARIABLE SDLLIBS) + STRING(REGEX REPLACE "[\r\n]" " " SDLLIBS "${SDLLIBS}") + + TARGET_LINK_LIBRARIES(commandergenius ${SDLLIBS}) + ENDIF(SDL) + + IF(OGG) + TARGET_LINK_LIBRARIES(commandergenius ogg vorbis) + ENDIF(OGG) + + IF (STLPORT) + TARGET_LINK_LIBRARIES(commandergenius stlportstlg) + ENDIF (STLPORT) + + SET_TARGET_PROPERTIES(commandergenius PROPERTIES OUTPUT_NAME bin/commandergenius) + +ENDIF(WIN32) diff --git a/start.sh b/start.sh new file mode 100644 index 000000000..4d45e11c7 --- /dev/null +++ b/start.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +get_backtrace() { + local exe=$1 + local core=$2 + + echo "ERROR detected, printing core-info ..." + + gdb ${exe} \ + --core ${core} \ + --batch \ + --quiet \ + -ex "set width 0" \ + -ex "set height 0" \ + -ex "thread apply all bt full" \ + -ex "quit" + + echo "HINT: Please send the above output to openlierox@az2000.de." +} + +cd share/gamedir +ulimit -c unlimited # activate core-files +rm core* 2>/dev/null # remove old core-files + +bin="/dev/null" +[ -x ../../$bin ] || bin="build/Xcode/build/Debug/Commander Genius.app/Contents/MacOS/Commander Genius" +[ -x ../../$bin ] || bin=build/Xcode/build/Release/Commander Genius.app/Contents/MacOS/Commander Genius +[ -x ../../$bin ] || bin=bin/commandergenius +../../$bin "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" + +# game was exited, check for core-files (if crashed) +[ -e core* ] && get_backtrace ../../bin/commandergenius core* +mv core* ../.. 2>/dev/null + +if [ -e /proc/sys/kernel/core_pattern ] && [ "$(cat /proc/sys/kernel/core_pattern)" != "" ]; then + corefile="$(sh -c "echo $(cat /proc/sys/kernel/core_pattern | sed -e "s/%e/commandergenius/g" -e "s/%p/*/g" -e "s/%u/$(id -u)/g" -e "s/%t/*/g")")" + if [ -e "$corefile" ]; then + echo "found corefile $corefile" + get_backtrace ../../bin/commandergenius "$corefile" + mv "$corefile" ../.. + fi +fi