project(FallingTime) cmake_minimum_required(VERSION 2.8.10) if("${CMAKE_VERSION}" VERSION_GREATER 3.1) cmake_policy(SET CMP0054 NEW) endif() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/") if(CMAKE_CROSSCOMPILING) # check for gcw0 if(CMAKE_C_COMPILER MATCHES ".*gcw0-linux.*") add_definitions(-D__GCW0__) set(GCW0 1) endif() endif() if("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") set(CLANG 1) endif() # Chipmunk 2D set(BUILD_STATIC ON FORCE) set(chipmunk_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/chipmunk) add_subdirectory(chipmunk/src) # Default definitions if(MSVC) add_definitions(-Wall -W4 -wd"4996" -wd"4204") else() add_definitions(-Wall -Wextra -Wunused -Wshadow -Wunreachable-code -std=c99) add_definitions(-fno-math-errno -fno-exceptions) if(CLANG) else() # Probably GCC... add_definitions(-freg-struct-return -std=gnu99) if(NOT APPLE AND NOT BEOS AND NOT HAIKU) add_definitions(-Wshadow) endif() endif() if(NOT BEOS AND NOT HAIKU) add_definitions(-Winline) set(EXTRA_LIBRARIES "m") endif() endif() if(CMAKE_BUILD_TYPE STREQUAL "Release") set(CMAKE_C_FLAGS_RELEASE "-O2 -g0") elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g") elseif(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel") set(CMAKE_C_FLAGS_MINSIZEREL "-Os -g0") elseif(CMAKE_BUILD_TYPE STREQUAL "Debug") set(CMAKE_C_FLAGS_DEBUG "-O0 -g3 -pg") set(CMAKE_EXE_LINKER_FLAGS_DEBUG "-pg") set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "-pg") set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "-pg") endif() # Check for SDL find_package(SDL2 REQUIRED) if(NOT SDL2_FOUND) message(FATAL_ERROR "Couldn't find SDL2 development files. On Debian-based systems (such as Ubuntu) you should install the 'libsdl2-dev' package.") else() include_directories(${SDL2_INCLUDE_DIR}) endif() find_package(SDL2_image REQUIRED) if(NOT SDL2IMAGE_FOUND) message(FATAL_ERROR "Couldn't find SDL2-image development files. On Debian-based systems (such as Ubuntu) you should install the 'libsdl2-image-dev' package.") else() include_directories(${SDL2IMAGE_INCLUDE_DIR}) endif() find_package(SDL2_mixer REQUIRED) if(NOT SDL2MIXER_FOUND) message(FATAL_ERROR "Couldn't find SDL2-mixer development files. On Debian-based systems (such as Ubuntu) you should install the 'libsdl2-mixer-dev' package.") else() include_directories(${SDL2MIXER_INCLUDE_DIR}) endif() find_package(SDL2_ttf REQUIRED) if(NOT SDL2TTF_FOUND) message(FATAL_ERROR "Couldn't find SDL2-ttf development files. On Debian-based systems (such as Ubuntu) you should install the 'libsdl2-ttf-dev' package.") ELSE() include_directories(${SDL2TTF_INCLUDE_DIR}) ENDIF() set(DATA_DIR "./data/" CACHE STRING "Data directory") message("Data dir is ${DATA_DIR}") CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/sys_config.h.cmake ${CMAKE_SOURCE_DIR}/sys_config.h) SET_SOURCE_FILES_PROPERTIES(${CMAKE_SOURCE_DIR}/sys_config.h PROPERTIES GENERATED TRUE) include_directories(.) include_directories(chipmunk/include) file(GLOB SOURCES *.c) if(GCW0) add_definitions(-D__GCW0__) set(SOURCES ${SOURCES} platform/opendingux.c) else() set(SOURCES ${SOURCES} platform/general.c) endif() file(GLOB HEADERS *.h) if(APPLE) set(EXTRA_FILES pkg/macosx/icon.icns) set_source_files_properties(pkg/macosx/icon.icns PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") set(MACOSX_BUNDLE_ICON_FILE icon.icns) set(EXTRA_LIBRARIES "${EXTRA_LIBRARIES} -framework Carbon -framework IOKit") endif() add_executable(falling_time MACOSX_BUNDLE ${SOURCES} ${HEADERS} ${EXTRA_FILES}) if(APPLE) set_target_properties(falling_time PROPERTIES MACOSX_RPATH 1 BUILD_WITH_INSTALL_RPATH 1 INSTALL_RPATH "@loader_path/Frameworks") endif() # libSDLMain comes with libSDL if needed on certain platforms if(NOT SDLMAIN_LIBRARY) set(SDLMAIN_LIBRARY "") endif() target_link_libraries(falling_time ${CMAKE_LD_FLAGS} chipmunk_static ${SDL2_LIBRARY} ${SDL2IMAGE_LIBRARY} ${SDL2MIXER_LIBRARY} ${SDL2TTF_LIBRARY} ${SDLMAIN_LIBRARY} ${EXTRA_LIBRARIES}) set_target_properties(falling_time PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR} RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR} ) ################ # Installation # ################ # Executables set(INSTALL_PREFIX ".") if(WIN32) set(EXE_EXTENSION ".exe") set(LIB_EXTENSION ".dll") elseif(APPLE) set(LIB_EXTENSION ".dylib") set(INSTALL_PREFIX "falling_time") else() set(EXE_EXTENSION "") set(LIB_EXTENSION ".so") endif() if(APPLE) install( DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/falling_time.app DESTINATION ${INSTALL_PREFIX} USE_SOURCE_PERMISSIONS) else() install( PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/falling_time${EXE_EXTENSION} DESTINATION ${INSTALL_PREFIX}) endif() SET(SOURCE_DIRECTORY ".") INSTALL(DIRECTORY ${SOURCE_DIRECTORY}/data DESTINATION ${INSTALL_PREFIX}) INSTALL(FILES ${SOURCE_DIRECTORY}/COPYRIGHT ${SOURCE_DIRECTORY}/README.md DESTINATION ${INSTALL_PREFIX}) IF(UNIX AND NOT APPLE AND NOT BEOS AND NOT HAIKU) # TODO: .desktop file and png icon elseif(WIN32) # Package for Windows FILE(GLOB DLLS "${SOURCE_DIRECTORY}/*.dll") FOREACH(DLL ${DLLS}) INSTALL(FILES "${DLL}" DESTINATION ${INSTALL_PREFIX}) ENDFOREACH() elseif(APPLE) set(CMAKE_INSTALL_PREFIX "/Applications/Falling Time") endif() # Packaging SET(CPACK_PACKAGE_NAME "Falling Time") SET(CPACK_PACKAGE_VENDOR "Falling Time Team") SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Falling Time: 2D Physical Arcade Game") SET(CPACK_PACKAGE_VERSION 1.0.0) SET(CPACK_PACKAGE_VERSION_MAJOR 1) SET(CPACK_PACKAGE_VERSION_MINOR 0) SET(CPACK_PACKAGE_VERSION_PATCH 0) SET(CPACK_PACKAGE_EXECUTABLES "falling_time;Falling Time") if(WIN32) SET(CPACK_GENERATOR ZIP) elseif(APPLE) set(CPACK_GENERATOR "DragNDrop") set(CPACK_DMG_FORMAT "UDBZ") set(CPACK_DMG_VOLUME_NAME "Falling Time") set(CPACK_SYSTEM_NAME "OSX") set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_BINARY_DIR}/pkg/macosx/icon.icns") # copy SDL frameworks into app bundle for Mac OS X set(APPS falling_time) set(LIBS SDL2 SDL2_image SDL2_mixer SDL2_ttf) foreach(APP ${APPS}) foreach(LIB ${LIBS}) install(DIRECTORY /Library/Frameworks/${LIB}.framework DESTINATION ${INSTALL_PREFIX}/${APP}.app/Contents/Frameworks) endforeach() endforeach() endif() include(CPack)