breakhack/CMakeLists.txt

424 lines
11 KiB
CMake
Raw Normal View History

2017-11-30 21:00:47 +01:00
cmake_minimum_required (VERSION 3.2.0)
SET(CMAKE_COLOR_MAKEFILE ON)
project(breakhack C)
set(breakhack_GAME_TITLE "BreakHack")
2020-03-04 12:50:20 +01:00
set(breakhack_MAJOR_VERSION 4)
set(breakhack_MINOR_VERSION 0)
2020-03-04 21:51:31 +01:00
set(breakhack_PATCH_VERSION 3)
2018-10-27 13:56:17 +02:00
set(breakhack_RELEASE_TYPE "")
# Checksums
set(breakhack_STEAMAPI_DLL_CHECKSUM 0x18dba28)
set(breakhack_STEAMAPI_SO_CHECKSUM 0x1f5786b)
2018-09-08 23:47:24 +02:00
include(FindLua)
include(FindPhysFS)
2018-05-13 16:46:14 +02:00
include(build/cmake/FindSDL2.cmake)
include(build/cmake/FindSDL2_image.cmake)
include(build/cmake/FindSDL2_ttf.cmake)
include(build/cmake/FindSDL2_mixer.cmake)
include(build/cmake/FindCCache.cmake)
include(build/cmake/FindCMocka.cmake)
include(build/cmake/Findcppcheck.cmake)
2017-12-19 19:42:05 +01:00
2017-12-21 11:57:12 +01:00
configure_file(
"${PROJECT_SOURCE_DIR}/src/config.h.in"
"${PROJECT_BINARY_DIR}/config.h"
)
macro(set_option option value)
set(${option} ${value} CACHE INTERNAL "" FORCE)
endmacro()
if (EXISTS "${PROJECT_SOURCE_DIR}/steamworks_c_wrapper/sdk")
MESSAGE ( STATUS "Steam SDK located, Steam build enabled")
set(STEAM 1)
else ()
MESSAGE ( STATUS "Steam SDK not found, Steam build disabled")
endif()
if (STEAM)
add_subdirectory(steamworks_c_wrapper)
endif()
add_subdirectory(bh_random)
add_subdirectory(checksum)
if ("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
set(CLANG 1)
elseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
set(GCC 1)
endif()
2019-04-06 12:27:42 +02:00
if ("${CMAKE_GENERATOR}" STREQUAL "Ninja")
set(NINJA 1)
endif()
2018-05-18 23:11:09 +02:00
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
set(OSX 1)
endif()
2018-05-12 10:36:04 +02:00
set (default_build_type "Release")
if (NOT CMAKE_BUILD_TYPE AND default_build_type)
message( STATUS "Setting default buildtype to '${default_build_type}' as none was specified")
set(CMAKE_BUILD_TYPE "${default_build_type}")
endif ()
2018-04-23 09:24:09 +02:00
# Deal with travis compile issue
if (CCACHE_FOUND AND CLANG)
add_definitions(-Qunused-arguments -fcolor-diagnostics)
endif()
2018-05-12 10:36:04 +02:00
if (CMAKE_BUILD_TYPE MATCHES "Debug")
set(DEBUG_BUILD TRUE)
endif()
IF ( MSVC )
2018-02-28 07:10:35 +01:00
MESSAGE ( STATUS "Setting MSVC MT switches")
string (REPLACE
"/MDd"
"/MTd"
CMAKE_C_FLAGS_DEBUG
${CMAKE_C_FLAGS_DEBUG}
2018-02-28 07:10:35 +01:00
)
string (REPLACE
"/MDd"
"/MTd"
CMAKE_C_FLAGS_RELEASE
${CMAKE_C_FLAGS_RELEASE}
2018-02-28 07:10:35 +01:00
)
2018-05-12 10:36:04 +02:00
ELSEIF ( WIN32 )
SET (
CMAKE_C_FLAGS_DEBUG
"${CMAKE_C_FLAGS_DEBUG} -mconsole"
2018-05-12 10:36:04 +02:00
)
SET (
CMAKE_C_FLAGS_RELEASE
"${CMAKE_C_FLAGS_RELEASE} -mwindows"
2018-05-12 10:36:04 +02:00
)
ENDIF ()
IF ( GCC OR CLANG )
SET (
CMAKE_C_FLAGS_DEBUG
"${CMAKE_C_FLAGS_DEBUG} -fsanitize=address -fno-omit-frame-pointer"
)
ENDIF ( GCC OR CLANG )
2018-02-28 07:10:35 +01:00
if (STEAM)
include_directories(
${STEAMWORKS_INCLUDE_DIR}
steamworks_c_wrapper/src
)
endif ()
2018-09-08 23:54:22 +02:00
if (NOT LUA_FOUND OR STEAM)
2018-09-08 23:47:24 +02:00
add_subdirectory(lua-5.3.5)
include_directories(lua-5.3.5/src)
2018-09-08 23:54:22 +02:00
set(LUA_LIBRARIES lua)
set(LUA_INCLUDE_DIR lua-5.3.5/src)
2018-09-08 23:47:24 +02:00
endif ()
2018-09-08 23:54:22 +02:00
if (NOT PHYSFS_FOUND OR STEAM)
set_option(PHYSFS_BUILD_SHARED off)
set_option(PHYSFS_BUILD_TEST off)
2018-12-04 13:59:34 +01:00
add_subdirectory(physfs-3.0)
include_directories(physfs-3.0/src)
2018-09-08 23:47:24 +02:00
set(PHYSFS_LIBRARY physfs-static)
2018-12-04 13:59:34 +01:00
set(PHYSFS_INCLUDE_DIR physfs-3.0/src)
2018-09-08 23:47:24 +02:00
endif ()
2017-12-13 12:09:04 +01:00
include_directories(
${PROJECT_BINARY_DIR}
2017-12-13 12:09:04 +01:00
${SDL2_INCLUDE_DIR}
${SDL2_IMAGE_INCLUDE_DIR}
${SDL2_TTF_INCLUDE_DIR}
${SDL2_MIXER_INCLUDE_DIR}
2018-09-08 23:54:22 +02:00
${PHYSFS_INCLUDE_DIR}
${LUA_INCLUDE_DIR}
sqlite3
bh_random/src
checksum/src
2017-12-05 12:40:37 +01:00
)
if (CMOCKA_FOUND)
2018-04-20 14:46:00 +02:00
include_directories(
${CMOCKA_INCLUDE_DIR}
2018-04-20 14:46:00 +02:00
)
endif(CMOCKA_FOUND)
if (NOT MSVC)
add_definitions(-std=gnu11
-pedantic -Wall -Wextra -Wshadow
-Wpointer-arith -Wcast-qual
-Wstrict-prototypes
-Wmissing-prototypes
2018-02-22 09:44:27 +01:00
-Wconversion -Wno-sign-conversion
)
2018-05-13 23:46:27 +02:00
if (NOT APPLE)
2018-05-13 16:46:14 +02:00
add_definitions(-static -static-libgcc -static-libstdc++)
endif ()
endif (NOT MSVC)
2017-11-30 21:00:47 +01:00
2018-02-03 23:39:49 +01:00
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DDEBUG")
if (STEAM)
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSTEAM_BUILD")
2018-08-29 22:13:22 +02:00
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DSTEAM_BUILD")
2019-04-06 12:27:42 +02:00
set(STEAM_SOURCES
src/steam/steamworks_api_wrapper
)
else ()
set(STEAM_SOURCES "")
endif ()
2019-04-06 12:27:42 +02:00
if (MINGW)
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DMINGW")
endif (MINGW)
2018-02-03 13:02:39 +01:00
if (NOT MSVC)
2019-04-06 12:27:42 +02:00
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D__FNAME__='\"$(subst ${CMAKE_SOURCE_DIR}/,,$(abspath $<))\"'")
else ()
2019-04-06 12:27:42 +02:00
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D__FNAME__=__FILE__")
endif ()
2017-11-30 21:00:47 +01:00
# PROGRAMS:
2017-12-01 16:03:19 +01:00
add_executable(breakhack
src/main.c
src/texture.c
src/screenresolution.c
src/sprite.c
src/sprite_util.c
src/util.c
src/event.c
src/player.c
src/save.c
src/map.c
src/map_lua.c
src/camera.c
src/timer.c
src/roommatrix.c
src/position.c
src/monster.c
src/stats.c
src/actiontext.c
src/random.c
src/time.c
src/linkedlist.c
src/hashtable.c
src/gui.c
src/item.c
src/item_builder.c
src/pointer.c
src/gui_button.c
src/particle_engine.c
src/particle_emitter.c
src/menu.c
src/collisions.c
src/keyboard.c
src/input.c
src/mixer.c
src/io_util.c
src/physfsrwops.c
src/skillbar.c
src/texturecache.c
src/skill.c
src/projectile.c
src/vector2d.c
src/map_room_modifiers.c
sqlite3/sqlite3.c
src/db.c
src/settings.c
src/actiontextbuilder.c
src/animation.c
src/trap.c
src/artifact.c
src/screen.c
src/hiscore.c
src/object.c
src/gui_util.c
src/tooltip.c
src/gamecontroller.c
src/effect_util.c
${STEAM_SOURCES}
2017-11-30 21:00:47 +01:00
)
if (MSVC)
source_group("Header files" REGULAR_EXPRESSION ".*\\.h")
source_group("Source files" REGULAR_EXPRESSION ".*\\.c")
endif ()
2018-03-16 19:46:28 +01:00
# Sqlite has some warnings that I we don't need to see
set_source_files_properties(sqlite3/sqlite3.c COMPILE_FLAGS -w)
2018-03-16 19:46:28 +01:00
2017-12-01 16:03:19 +01:00
target_link_libraries(breakhack
2018-03-16 19:46:28 +01:00
${CMAKE_DL_LIBS} # Sqlite needs DL libs
2017-12-13 12:09:04 +01:00
${SDL2_LIBRARY}
${SDL2MAIN_LIBRARY}
2017-12-13 12:09:04 +01:00
${SDL2_IMAGE_LIBRARY}
${SDL2_TTF_LIBRARY}
${SDL2_MIXER_LIBRARY}
2018-09-08 23:54:22 +02:00
${LUA_LIBRARIES}
2018-09-08 23:47:24 +02:00
${PHYSFS_LIBRARY}
bh_random
checksum
2017-11-30 21:00:47 +01:00
)
if (STEAM)
target_link_libraries(breakhack
steamworks_c_wrapper
)
endif ()
if (MSVC)
2019-04-21 08:24:47 +02:00
set_target_properties(breakhack PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:CONSOLE /NODEFAULTLIB:MSVCRTD")
set_target_properties(breakhack PROPERTIES COMPILE_DEFINITIONS_DEBUG "_CONSOLE")
set_target_properties(breakhack PROPERTIES LINK_FLAGS_RELWITHDEBINFO "/SUBSYSTEM:CONSOLE")
set_target_properties(breakhack PROPERTIES COMPILE_DEFINITIONS_RELWITHDEBINFO "_CONSOLE")
2019-04-21 08:24:47 +02:00
set_target_properties(breakhack PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS /NODEFAULTLIB:MSVCRTD")
set_target_properties(breakhack PROPERTIES LINK_FLAGS_MINSIZEREL "/SUBSYSTEM:WINDOWS")
endif (MSVC)
2017-11-30 21:00:47 +01:00
# TESTS:
2018-05-18 23:11:09 +02:00
IF (CMOCKA_FOUND AND NOT OSX AND NOT CLANG)
2017-12-13 12:18:20 +01:00
find_package(Threads REQUIRED)
2017-12-13 12:09:04 +01:00
enable_testing()
add_executable(test_util test/test_util.c src/util.c)
2018-05-18 23:20:28 +02:00
target_link_libraries(test_util ${CMOCKA_LIBRARY})
2017-12-13 12:09:04 +01:00
add_test(test_util test_util)
add_executable(test_linkedlist test/test_linkedlist.c src/linkedlist.c src/util.c)
2018-05-18 23:20:28 +02:00
target_link_libraries(test_linkedlist ${CMOCKA_LIBRARY})
add_test(test_linkedlist test_linkedlist)
add_executable(test_hashtable test/test_hashtable.c src/hashtable.c src/util.c)
2018-05-18 23:20:28 +02:00
target_link_libraries(test_hashtable ${CMOCKA_LIBRARY})
add_test(test_hashtable test_hashtable)
add_executable(test_input test/test_input.c src/input.c src/keyboard.c)
target_link_libraries(test_input
2018-05-18 23:20:28 +02:00
${CMOCKA_LIBRARY}
${SDL2_LIBRARY}
${SDL2MAIN_LIBRARY}
)
#set_target_properties(test_input PROPERTIES
#LINK_FLAGS "-Wl,--wrap,keyboard_direction_press -Wl,--wrap,keyboard_press")
add_test(test_input test_input)
2018-05-18 23:13:56 +02:00
ENDIF ()
2018-02-22 19:17:57 +01:00
2018-03-13 09:35:44 +01:00
# LINT:
if (CPPCHECK_FOUND)
add_custom_target(lint
2020-07-11 10:16:57 +02:00
COMMAND ${CPPCHECK_EXECUTABLE} --force --language=c --template=gcc --error-exitcode=1 --quiet --suppress=missingInclude --enable=warning,style,performance,portability,information,missingInclude src/
2018-03-13 09:35:44 +01:00
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
COMMENT "Run cppcheck"
)
endif (CPPCHECK_FOUND)
2018-05-12 10:36:04 +02:00
if (NOT DEBUG_BUILD)
2018-02-22 19:17:57 +01:00
add_custom_target(assets_pack ALL
COMMAND ${CMAKE_COMMAND} -E tar "-cf" "../assets.pack" "--format=zip" --
"${CMAKE_CURRENT_SOURCE_DIR}/assets/Characters"
"${CMAKE_CURRENT_SOURCE_DIR}/assets/Commissions"
"${CMAKE_CURRENT_SOURCE_DIR}/assets/GUI"
"${CMAKE_CURRENT_SOURCE_DIR}/assets/Items"
"${CMAKE_CURRENT_SOURCE_DIR}/assets/Objects"
"${CMAKE_CURRENT_SOURCE_DIR}/assets/Sounds"
2018-04-28 19:10:49 +02:00
"${CMAKE_CURRENT_SOURCE_DIR}/assets/Extras"
2018-02-22 19:17:57 +01:00
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/assets
)
2018-02-22 23:19:33 +01:00
add_custom_target(data_pack ALL
COMMAND ${CMAKE_COMMAND} -E tar "-cf" "../data.pack" "--format=zip" --
"mapgen.lua"
"maproombuilder.lua"
"menumapgen.lua"
"monstergen.lua"
"trapgen.lua"
2018-08-10 20:09:56 +02:00
"chestgen.lua"
"layoutparser.lua"
2018-05-15 11:16:56 +02:00
"pitlayouts.dat"
"walllayouts.dat"
"shoplayouts.dat"
2019-03-16 10:32:58 +01:00
"lockedroomlayouts.dat"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data
)
2018-05-12 10:36:04 +02:00
endif ()
2018-02-28 07:10:35 +01:00
SET(CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT "Release")
SET(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION ".")
if (WIN32)
SET(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS
${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}
2018-02-22 23:19:33 +01:00
${CMAKE_SOURCE_DIR}/bin/libFLAC-8.dll
${CMAKE_SOURCE_DIR}/bin/libfreetype-6.dll
${CMAKE_SOURCE_DIR}/bin/libmodplug-1.dll
${CMAKE_SOURCE_DIR}/bin/libmpg123-0.dll
${CMAKE_SOURCE_DIR}/bin/libogg-0.dll
${CMAKE_SOURCE_DIR}/bin/libpng16-16.dll
${CMAKE_SOURCE_DIR}/bin/libvorbis-0.dll
${CMAKE_SOURCE_DIR}/bin/libvorbisfile-3.dll
${CMAKE_SOURCE_DIR}/bin/SDL2.dll
${CMAKE_SOURCE_DIR}/bin/SDL2_image.dll
${CMAKE_SOURCE_DIR}/bin/SDL2_mixer.dll
${CMAKE_SOURCE_DIR}/bin/SDL2_ttf.dll
${CMAKE_SOURCE_DIR}/bin/zlib1.dll
2018-02-28 06:32:16 +01:00
)
if (STEAM)
SET(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS
${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}
steamworks_c_wrapper/sdk/redistributable_bin/steam_api.dll
)
endif ()
else (WIN32)
if (STEAM)
SET(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS
${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}
steamworks_c_wrapper/sdk/redistributable_bin/linux64/libsteam_api.so
2018-09-08 23:47:24 +02:00
build/linux/breakhack.run
)
endif ()
endif (WIN32)
2018-02-23 07:17:55 +01:00
include(InstallRequiredSystemLibraries)
2018-02-28 06:32:16 +01:00
INSTALL(TARGETS breakhack
COMPONENT Release
RUNTIME DESTINATION .
)
INSTALL(FILES assets.pack data.pack
COMPONENT Release
DESTINATION .
)
set(CPACK_INSTALL_CMAKE_PROJECTS "${PROJECT_BINARY_DIR};breakhack;Release;.")
2018-02-23 07:17:55 +01:00
set(CPACK_PACKAGE_NAME "BreakHack")
set(CPACK_PACKAGE_VENDOR "OliveShark")
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt")
set(CPACK_PACKAGE_DIRECTORY ${PROJECT_BINARY_DIR}/package)
2018-05-17 09:49:03 +02:00
set(CPACK_PACKAGE_VERSION_MAJOR ${breakhack_MAJOR_VERSION})
set(CPACK_PACKAGE_VERSION_MINOR ${breakhack_MINOR_VERSION})
set(CPACK_PACKAGE_VERSION_PATCH ${breakhack_PATCH_VERSION})
2018-02-23 07:17:55 +01:00
set(CPACK_PACKAGE_INSTALL_DIRECTORY "BreakHack")
set(CPACK_PACKAGE_CHECKSUM "MD5")
if (WIN32)
set(CPACK_PACKAGE_FILE_NAME "breakhack-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}-win32")
else ()
set(CPACK_PACKAGE_FILE_NAME "breakhack-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
endif ()
if (STEAM)
set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY OFF)
2018-09-05 11:22:33 +02:00
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}-steambuild")
endif ()
2018-02-23 07:17:55 +01:00
if(UNIX)
set(CPACK_GENERATOR TGZ ZIP)
2018-02-23 07:17:55 +01:00
set(CPACK_STRIP_FILES breakhack)
set(CPACK_SOURCE_STRIP_FILES "")
2018-05-09 22:30:22 +02:00
elseif(WIN32)
2018-05-15 23:34:38 +02:00
set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON)
2018-05-09 22:30:22 +02:00
set(CPACK_GENERATOR NSIS ZIP)
endif()
2018-02-23 07:17:55 +01:00
include(CPack)