]> git.lizzy.rs Git - minetest.git/blobdiff - src/CMakeLists.txt
Fix RUN_IN_PLACE broken due to invalid usage of assert
[minetest.git] / src / CMakeLists.txt
index 562306e101c83f0d6f61575b54f8615daafec7fe..d56ec18c0539ac43ef135d5673b6104e0598fb6c 100644 (file)
@@ -2,11 +2,28 @@ project(minetest)
 cmake_minimum_required( VERSION 2.6 )
 
 INCLUDE(CheckCSourceRuns)
+INCLUDE(CheckIncludeFiles)
+
+# Add custom SemiDebug build mode
+set(CMAKE_CXX_FLAGS_SEMIDEBUG "-O1 -g -Wall -Wabi" CACHE STRING
+       "Flags used by the C++ compiler during semidebug builds."
+       FORCE
+)
+set(CMAKE_C_FLAGS_SEMIDEBUG "-O1 -g -Wall -pedantic" CACHE STRING
+       "Flags used by the C compiler during semidebug builds."
+       FORCE
+)
+mark_as_advanced(
+       CMAKE_CXX_FLAGS_SEMIDEBUG
+       CMAKE_C_FLAGS_SEMIDEBUG
+)
+set(CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING
+       "Choose the type of build. Options are: None Debug SemiDebug RelWithDebInfo MinSizeRel."
+       FORCE
+)
 
 # Set some random things default to not being visible in the GUI
 mark_as_advanced(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH)
-mark_as_advanced(SQLITE3_INCLUDE_DIR SQLITE3_LIBRARY)
-mark_as_advanced(JSON_INCLUDE_DIR JSON_LIBRARY)
 
 option(ENABLE_CURL "Enable cURL support for fetching media" 1)
 
@@ -111,6 +128,7 @@ add_definitions ( -DUSE_CMAKE_CONFIG_H )
 if(WIN32)
        # Windows
        if(MSVC) # MSVC Specifics
+               set(PLATFORM_LIBS dbghelp.lib ${PLATFORM_LIBS})
                # Surpress some useless warnings
                add_definitions ( /D "_CRT_SECURE_NO_DEPRECATE" /W1 )
        else() # Probably MinGW = GCC
@@ -133,8 +151,6 @@ if(WIN32)
                set(FREETYPE_LIBRARY "${PROJECT_SOURCE_DIR}/../../freetype2/objs/win32/vc2005/freetype247.lib"
                                CACHE FILEPATH "Path to freetype247.lib")
        endif(USE_FREETYPE)
-       set(MINGWM10_DLL ""
-                       CACHE FILEPATH "Path to mingwm10.dll (for installation)")
        if(ENABLE_SOUND)
                set(OPENAL_DLL "" CACHE FILEPATH "Path to OpenAL32.dll for installation (optional)")
                set(OGG_DLL "" CACHE FILEPATH "Path to libogg.dll for installation (optional)")
@@ -162,7 +178,12 @@ else()
                endif(APPLE)
        endif(BUILD_CLIENT)
        find_package(ZLIB REQUIRED)
-       set(PLATFORM_LIBS -lpthread -lrt ${CMAKE_DL_LIBS})
+       set(PLATFORM_LIBS -lpthread ${CMAKE_DL_LIBS})
+       if(APPLE)
+               set(PLATFORM_LIBS "-framework CoreFoundation" ${PLATFORM_LIBS})
+       else()
+               set(PLATFORM_LIBS -lrt ${PLATFORM_LIBS})
+       endif(APPLE)
        #set(CLIENT_PLATFORM_LIBS -lXxf86vm)
        # This way Xxf86vm is found on OpenBSD too
        find_library(XXF86VM_LIBRARY Xxf86vm)
@@ -170,7 +191,7 @@ else()
        set(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${XXF86VM_LIBRARY})
 endif()
 
-find_package(Sqlite3 REQUIRED)
+find_package(SQLite3 REQUIRED)
 find_package(Json REQUIRED)
 
 option(ENABLE_GLES "Enable OpenGL ES support" 0)
@@ -291,6 +312,30 @@ if(ENABLE_LEVELDB)
        endif(LEVELDB_LIBRARY AND LEVELDB_INCLUDE_DIR)
 endif(ENABLE_LEVELDB)
 
+set(USE_REDIS 0)
+
+OPTION(ENABLE_REDIS "Enable redis backend" 0)
+
+if(ENABLE_REDIS)
+       find_library(REDIS_LIBRARY hiredis)
+       find_path(REDIS_INCLUDE_DIR hiredis.h PATH_SUFFIXES hiredis)
+       message(STATUS "redis library: ${REDIS_LIBRARY}")
+       message(STATUS "redis headers: ${REDIS_INCLUDE_DIR}")
+       if(REDIS_LIBRARY AND REDIS_INCLUDE_DIR)
+               set(USE_REDIS 1)
+               message(STATUS "redis backend enabled")
+               include_directories(${REDIS_INCLUDE_DIR})
+       else(REDIS_LIBRARY AND REDIS_INCLUDE_DIR)
+               set(USE_REDIS 0)
+               message(STATUS "redis not found!")
+       endif(REDIS_LIBRARY AND REDIS_INCLUDE_DIR)
+endif(ENABLE_REDIS)
+
+CHECK_INCLUDE_FILES(endian.h HAVE_ENDIAN_H)
+if(NOT HAVE_ENDIAN_H)
+  set(HAVE_ENDIAN_H 0)
+endif(NOT HAVE_ENDIAN_H)
+
 configure_file(
        "${PROJECT_SOURCE_DIR}/cmake_config.h.in"
        "${PROJECT_BINARY_DIR}/cmake_config.h"
@@ -307,82 +352,89 @@ add_custom_target(GenerateVersion
        WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
 
 add_subdirectory(jthread)
+add_subdirectory(network)
 add_subdirectory(script)
 add_subdirectory(util)
 
+set (unittests_SRCS
+       test.cpp
+)
+
 set(common_SRCS
-       version.cpp
-       rollback_interface.cpp
-       rollback.cpp
-       genericobject.cpp
-       voxelalgorithms.cpp
-       sound.cpp
-       quicktune.cpp
-       subgame.cpp
-       inventorymanager.cpp
-       mods.cpp
+       ban.cpp
+       cavegen.cpp
+       clientiface.cpp
+       collision.cpp
        content_abm.cpp
+       content_mapnode.cpp
+       content_nodemeta.cpp
+       content_sao.cpp
+       convert_json.cpp
        craftdef.cpp
-       nameidmapping.cpp
+       database-dummy.cpp
+       database-leveldb.cpp
+       database-redis.cpp
+       database-sqlite3.cpp
+       database.cpp
+       debug.cpp
+       defaultsettings.cpp
+       dungeongen.cpp
+       emerge.cpp
+       environment.cpp
+       filesys.cpp
+       genericobject.cpp
+       gettext.cpp
+       httpfetch.cpp
+       inventory.cpp
+       inventorymanager.cpp
        itemdef.cpp
-       nodedef.cpp
-       object_properties.cpp
+       light.cpp
        log.cpp
-       content_sao.cpp
-       emerge.cpp
+       map.cpp
+       mapblock.cpp
        mapgen.cpp
+       mapgen_singlenode.cpp
+       mapgen_v5.cpp
        mapgen_v6.cpp
        mapgen_v7.cpp
-       mapgen_indev.cpp
-       mapgen_singlenode.cpp
-       mapgen_math.cpp
-       treegen.cpp
-       dungeongen.cpp
-       cavegen.cpp
-       content_nodemeta.cpp
-       content_mapnode.cpp
-       collision.cpp
+       mapnode.cpp
+       mapsector.cpp
+       mg_biome.cpp
+       mg_decoration.cpp
+       mg_ore.cpp
+       mg_schematic.cpp
+       mods.cpp
+       nameidmapping.cpp
+       nodedef.cpp
        nodemetadata.cpp
        nodetimer.cpp
-       serverobject.cpp
        noise.cpp
+       object_properties.cpp
+       pathfinder.cpp
+       player.cpp
        porting.cpp
-       tool.cpp
-       defaultsettings.cpp
-       mapnode.cpp
-       voxel.cpp
-       inventory.cpp
-       debug.cpp
+       quicktune.cpp
+       rollback.cpp
+       rollback_interface.cpp
        serialization.cpp
-       light.cpp
-       filesys.cpp
-       connection.cpp
-       environment.cpp
        server.cpp
-       clientiface.cpp
+       serverlist.cpp
+       serverobject.cpp
+       settings.cpp
        socket.cpp
-       mapblock.cpp
-       mapsector.cpp
-       map.cpp
-       database.cpp
-       database-dummy.cpp
-       database-leveldb.cpp
-       database-sqlite3.cpp
-       player.cpp
-       test.cpp
-       sha1.cpp
-       base64.cpp
-       ban.cpp
-       biome.cpp
+       sound.cpp
        staticobject.cpp
-       serverlist.cpp
-       pathfinder.cpp
-       convert_json.cpp
-       gettext.cpp
-       httpfetch.cpp
+       subgame.cpp
+       tool.cpp
+       treegen.cpp
+       version.cpp
+       voxel.cpp
+       voxelalgorithms.cpp
+       ${common_network_SRCS}
        ${JTHREAD_SRCS}
        ${common_SCRIPT_SRCS}
        ${UTIL_SRCS}
+       ${unittests_SRCS}
 )
 
 # This gives us the icon and file version information
@@ -393,7 +445,7 @@ if(WIN32)
                        set(CMAKE_RC_COMPILER "windres.exe")
                endif()
                ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o
-                       COMMAND ${CMAKE_RC_COMPILER} -I${CMAKE_CURRENT_SOURCE_DIR}
+                       COMMAND ${CMAKE_RC_COMPILER} -I${CMAKE_CURRENT_SOURCE_DIR} -I${CMAKE_CURRENT_BINARY_DIR}
                        -i${WINRESOURCE_FILE}
                        -o ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o
                        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
@@ -405,54 +457,51 @@ if(WIN32)
 endif()
 
 # Client sources
+
+if (BUILD_CLIENT)
+       add_subdirectory(client)
+endif(BUILD_CLIENT)
+
 set(minetest_SRCS
        ${common_SRCS}
        ${sound_SRCS}
-       localplayer.cpp
-       sky.cpp
-       clientmap.cpp
-       content_cso.cpp
-       content_mapblock.cpp
-       content_cao.cpp
-       mesh.cpp
-       mapblock_mesh.cpp
-       keycode.cpp
+       ${client_SRCS}
+       ${client_network_SRCS}
        camera.cpp
-       clouds.cpp
-       particles.cpp
-       clientobject.cpp
        chat.cpp
-       hud.cpp
-       guiKeyChangeMenu.cpp
-       guiMessageMenu.cpp
-       guiTextInputMenu.cpp
-       guiFormSpecMenu.cpp
-       guiTable.cpp
-       guiPauseMenu.cpp
-       guiPasswordChange.cpp
-       guiVolumeChange.cpp
-       guiDeathScreen.cpp
-       guiChatConsole.cpp
        client.cpp
+       clientmap.cpp
        clientmedia.cpp
+       clientobject.cpp
+       clouds.cpp
+       content_cao.cpp
+       content_cso.cpp
+       content_mapblock.cpp
+       convert_json.cpp
+       drawscene.cpp
        filecache.cpp
-       tile.cpp
-       shader.cpp
+       fontengine.cpp
        game.cpp
-       main.cpp
+       guiChatConsole.cpp
        guiEngine.cpp
        guiFileSelectMenu.cpp
-       convert_json.cpp
+       guiFormSpecMenu.cpp
+       guiKeyChangeMenu.cpp
+       guiPasswordChange.cpp
+       guiTable.cpp
+       guiVolumeChange.cpp
+       hud.cpp
+       keycode.cpp
+       localplayer.cpp
+       main.cpp
+       mapblock_mesh.cpp
+       mesh.cpp
+       particles.cpp
+       shader.cpp
+       sky.cpp
+       wieldmesh.cpp
        ${minetest_SCRIPT_SRCS}
 )
-
-if(USE_FREETYPE)
-       set(minetest_SRCS
-               ${minetest_SRCS}
-               intlGUIEditBox.cpp
-       )
-endif(USE_FREETYPE)
-
 list(SORT minetest_SRCS)
 
 # Server sources
@@ -495,7 +544,7 @@ set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin")
 if(BUILD_CLIENT)
        add_executable(${PROJECT_NAME} ${minetest_SRCS})
        add_dependencies(${PROJECT_NAME} GenerateVersion)
-       target_link_libraries(
+       set(minetest_LIBS
                ${PROJECT_NAME}
                ${ZLIB_LIBRARIES}
                ${IRRLICHT_LIBRARY}
@@ -513,6 +562,16 @@ if(BUILD_CLIENT)
                ${PLATFORM_LIBS}
                ${CLIENT_PLATFORM_LIBS}
        )
+       if(APPLE)
+               target_link_libraries(
+                       ${minetest_LIBS}
+                       ${ICONV_LIBRARY}
+               )
+       else()
+               target_link_libraries(
+                       ${minetest_LIBS}
+               )
+       endif()
        if(USE_CURL)
                target_link_libraries(
                        ${PROJECT_NAME}
@@ -535,6 +594,9 @@ if(BUILD_CLIENT)
        if (USE_LEVELDB)
                target_link_libraries(${PROJECT_NAME} ${LEVELDB_LIBRARY})
        endif(USE_LEVELDB)
+       if (USE_REDIS)
+               target_link_libraries(${PROJECT_NAME} ${REDIS_LIBRARY})
+       endif(USE_REDIS)
 endif(BUILD_CLIENT)
 
 if(BUILD_SERVER)
@@ -552,6 +614,9 @@ if(BUILD_SERVER)
        if (USE_LEVELDB)
                target_link_libraries(${PROJECT_NAME}server ${LEVELDB_LIBRARY})
        endif(USE_LEVELDB)
+       if (USE_REDIS)
+               target_link_libraries(${PROJECT_NAME}server ${REDIS_LIBRARY})
+       endif(USE_REDIS)
        if(USE_CURL)
                target_link_libraries(
                        ${PROJECT_NAME}server
@@ -571,10 +636,12 @@ if(MSVC)
        # Visual Studio
 
        # EHa enables SEH exceptions (used for catching segfaults)
-       set(CMAKE_CXX_FLAGS_RELEASE "/EHa /O2 /Ob2 /Oi /Ot /Oy /GL /FD /MT /GS- /arch:SSE /fp:fast /D NDEBUG /D _HAS_ITERATOR_DEBUGGING=0 /TP")
+       set(CMAKE_CXX_FLAGS_RELEASE "/EHa /Ox /Ob2 /Oi /Ot /Oy /GL /FD /MT /GS- /arch:SSE /fp:fast /D NDEBUG /D _HAS_ITERATOR_DEBUGGING=0 /TP")
        #set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /NODEFAULTLIB:\"libcmtd.lib\" /NODEFAULTLIB:\"libcmt.lib\"")
        set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG")
 
+       set(CMAKE_CXX_FLAGS_SEMIDEBUG "/MDd /Zi /Ob0 /O1 /RTC1")
+
        # Debug build doesn't catch exceptions by itself
        # Add some optimizations because otherwise it's VERY slow
        set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1")
@@ -590,31 +657,32 @@ if(MSVC)
 
 else()
        # Probably GCC
-
+       if(APPLE)
+               SET( CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} -pagezero_size 10000 -image_base 100000000" )
+       endif()
        if(WARN_ALL)
                set(RELEASE_WARNING_FLAGS "-Wall")
        else()
                set(RELEASE_WARNING_FLAGS "")
        endif()
 
-       if(NOT APPLE AND NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
-               CHECK_CXX_COMPILER_FLAG("-Wno-unused-but-set-variable" HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
-               if(HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
-                       set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-unused-but-set-variable")
-               endif(HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
+       if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+               # clang does not understand __extern_always_inline but libc headers use it
+               set(OTHER_FLAGS "${OTHER_FLAGS} \"-D__extern_always_inline=extern __always_inline\"")
        endif()
 
        if(MINGW)
                set(OTHER_FLAGS "-mthreads -fexceptions")
        endif()
 
+       set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${WARNING_FLAGS} ${OTHER_FLAGS} -ffast-math -Wall -pipe -funroll-loops")
        if(APPLE)
-               set(CMAKE_OSX_ARCHITECTURES i386 CACHE STRING "do not build for 64-bit" FORCE)
-               set(ARCH i386)
-       endif()
-
-       set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${WARNING_FLAGS} ${OTHER_FLAGS} -O3 -ffast-math -Wall -fomit-frame-pointer -pipe -funroll-loops")
-       set(CMAKE_CXX_FLAGS_DEBUG "-g -O1 -Wall ${WARNING_FLAGS} ${OTHER_FLAGS}")
+               set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Os")
+       else()
+               set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -fomit-frame-pointer")
+       endif(APPLE)
+       set(CMAKE_CXX_FLAGS_SEMIDEBUG "-g -O1 -Wall -Wabi ${WARNING_FLAGS} ${OTHER_FLAGS}")
+       set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -Wall -Wabi ${WARNING_FLAGS} ${OTHER_FLAGS}")
 
        if(USE_GPROF)
                set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg")
@@ -634,12 +702,6 @@ endif()
 # Installation
 #
 if(WIN32)
-       if(MINGWM10_DLL)
-               install(FILES ${MINGWM10_DLL} DESTINATION ${BINDIR})
-       endif()
-       if(DEFINED ZLIB_DLL)
-               install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
-       endif()
        if(USE_SOUND)
                if(OPENAL_DLL)
                        install(FILES ${OPENAL_DLL} DESTINATION ${BINDIR})
@@ -657,6 +719,21 @@ if(WIN32)
        if(CURL_DLL)
                install(FILES ${CURL_DLL} DESTINATION ${BINDIR})
        endif()
+       if(ZLIB_DLL)
+               install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
+       endif()
+       if(ZLIBWAPI_DLL)
+               install(FILES ${ZLIBWAPI_DLL} DESTINATION ${BINDIR})
+       endif()
+       if(FREETYPE_DLL)
+               install(FILES ${FREETYPE_DLL} DESTINATION ${BINDIR})
+       endif()
+       if(SQLITE3_DLL)
+               install(FILES ${SQLITE3_DLL} DESTINATION ${BINDIR})
+       endif()
+       if(LEVELDB_DLL)
+               install(FILES ${LEVELDB_DLL} DESTINATION ${BINDIR})
+       endif()
 endif()
 
 if(BUILD_CLIENT)
@@ -717,11 +794,6 @@ endif(USE_GETTEXT)
 
 # Subdirectories
 
-if (SQLITE3_FOUND)
-else (SQLITE3_FOUND)
-       add_subdirectory(sqlite)
-endif (SQLITE3_FOUND)
-
 if (BUILD_CLIENT AND USE_FREETYPE)
        add_subdirectory(cguittfont)
 endif (BUILD_CLIENT AND USE_FREETYPE)