]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/CMakeLists.txt
fix in readme
[dragonfireclient.git] / src / CMakeLists.txt
index 72a159f161eb01956b19e051356eed328c5fc905..58596a10164f46e9237f3c1b06488e47c2371119 100644 (file)
@@ -1,31 +1,64 @@
 project(minetest)
 cmake_minimum_required( VERSION 2.6 )
-set ( CMAKE_BUILD_TYPE Debug )
-add_definitions ( -Wall -DRUN_IN_PLACE -O2)
-find_package(ZLIB REQUIRED)
-find_package(X11 REQUIRED)
-find_package(OpenGL REQUIRED)
-find_package(JPEG REQUIRED)
-find_package(BZip2 REQUIRED)
-
-if( UNIX )
-  #set( platform_SRCS some_necessary_linux_file.cpp )
-else( UNIX )
-  #windows
-  #set( platform_SRCS dllmain.cpp stdafx.cpp )
-endif( UNIX )
 
-set(minetest_SRCS
+if(RUN_IN_PLACE)
+       add_definitions ( -DRUN_IN_PLACE )
+endif(RUN_IN_PLACE)
+
+if(NOT MSVC)
+       set(USE_GPROF 0 CACHE BOOL "Use -pg flag for g++")
+endif()
+
+# Use cmake_config.h
+add_definitions ( -DUSE_CMAKE_CONFIG_H )
+
+if(WIN32)
+       # Windows
+       if(MSVC) # MSVC Specifics
+               # Surpress some useless warnings
+               add_definitions ( /D "_CRT_SECURE_NO_DEPRECATE" /W1 )
+       else() # Probably MinGW = GCC
+               set(PLATFORM_LIBS ws2_32.lib)
+       endif()
+       # Zlib stuff
+       set(ZLIB_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/../../zlib/zlib-1.2.5"
+                       CACHE PATH "Zlib include directory")
+       set(ZLIB_LIBRARIES "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.lib"
+                       CACHE FILEPATH "Path to zlibwapi.lib")
+       set(ZLIB_DLL "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.dll"
+                       CACHE FILEPATH "Path to zlibwapi.dll (for installation)")
+else()
+       # Unix probably
+       if(BUILD_CLIENT)
+               find_package(X11 REQUIRED)
+               find_package(OpenGL REQUIRED)
+               find_package(JPEG REQUIRED)
+               find_package(BZip2 REQUIRED)
+               find_package(PNG REQUIRED)
+       endif(BUILD_CLIENT)
+       find_package(ZLIB REQUIRED)
+       set(PLATFORM_LIBS -lpthread)
+       #set(CLIENT_PLATFORM_LIBS -lXxf86vm)
+       # This way Xxf86vm is found on OpenBSD too
+       find_library(XXF86VM_LIBRARY Xxf86vm)
+       set(CLIENT_PLATFORM_LIBS ${XXF86VM_LIBRARY})
+endif()
+
+configure_file(
+       "${PROJECT_SOURCE_DIR}/cmake_config.h.in"
+       "${PROJECT_BINARY_DIR}/cmake_config.h"
+)
+
+set(common_SRCS
+       collision.cpp
+       nodemetadata.cpp
+       serverobject.cpp
+       noise.cpp
+       mineral.cpp
        porting.cpp
-       guiMessageMenu.cpp
        materials.cpp
-       guiTextInputMenu.cpp
-       guiInventoryMenu.cpp
-       irrlichtwrapper.cpp
-       guiPauseMenu.cpp
        defaultsettings.cpp
        mapnode.cpp
-       tile.cpp
        voxel.cpp
        mapblockobject.cpp
        inventory.cpp
@@ -35,39 +68,160 @@ set(minetest_SRCS
        filesys.cpp
        connection.cpp
        environment.cpp
-       client.cpp
        server.cpp
+       servercommand.cpp
        socket.cpp
        mapblock.cpp
        mapsector.cpp
-       heightmap.cpp
        map.cpp
        player.cpp
        utility.cpp
-       main.cpp
        test.cpp
 )
 
+# Client sources
+set(minetest_SRCS
+       ${common_SRCS}
+       keycode.cpp
+       clouds.cpp
+       clientobject.cpp
+       guiFurnaceMenu.cpp
+       guiMainMenu.cpp
+       guiMessageMenu.cpp
+       guiTextInputMenu.cpp
+       guiInventoryMenu.cpp
+       guiPauseMenu.cpp
+       client.cpp
+       tile.cpp
+       game.cpp
+       main.cpp
+       sha1.cpp
+       base64.cpp
+)
+
+# Server sources
+set(minetestserver_SRCS
+       ${common_SRCS}
+       servermain.cpp
+)
+
 include_directories(
-       ${ZLIB_INCLUDE_DIR}
+       ${PROJECT_BINARY_DIR}
        ${IRRLICHT_INCLUDE_DIR}
+       ${ZLIB_INCLUDE_DIR}
+       ${CMAKE_BUILD_TYPE}
+       ${PNG_INCLUDE_DIR}
        "${PROJECT_SOURCE_DIR}/jthread"
 )
 
 set(EXECUTABLE_OUTPUT_PATH ../bin)
 
-add_executable(minetest ${minetest_SRCS})
+if(BUILD_CLIENT)
+       add_executable(minetest ${minetest_SRCS})
+       target_link_libraries(
+               minetest
+               ${ZLIB_LIBRARIES}
+               ${IRRLICHT_LIBRARY}
+               ${OPENGL_LIBRARIES}
+               ${JPEG_LIBRARIES}
+               ${BZIP2_LIBRARIES}
+               ${PNG_LIBRARIES}
+               ${X11_LIBRARIES}
+               ${PLATFORM_LIBS}
+               ${CLIENT_PLATFORM_LIBS}
+               jthread
+       )
+endif(BUILD_CLIENT)
 
-target_link_libraries(
-       minetest
-       ${ZLIB_LIBRARIES}
-       ${IRRLICHT_LIBRARY}
-       ${OPENGL_LIBRARIES}
-       ${JPEG_LIBRARIES}
-       ${BZIP2_LIBRARIES}
-       jthread
-)
+if(BUILD_SERVER)
+       add_executable(minetestserver ${minetestserver_SRCS})
+       target_link_libraries(
+               minetestserver
+               ${ZLIB_LIBRARIES}
+               ${PLATFORM_LIBS}
+               jthread
+       )
+endif(BUILD_SERVER)
+
+#
+# Set some optimizations and tweaks
+#
+
+if(MSVC)
+       # Visual Studio
+
+       # EHa enables SEH exceptions (used for catching segfaults)
+       set(CMAKE_CXX_FLAGS_RELEASE "/EHa /MD /O2 /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")
+
+       # 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")
+       
+       if(BUILD_SERVER)
+               set_target_properties(minetestserver PROPERTIES
+                               COMPILE_DEFINITIONS "SERVER")
+       endif(BUILD_SERVER)
+
+else()
+       # Probably GCC
+       
+       if(WARN_ALL)
+               set(WARNING_FLAGS "-Wall")
+       else()
+               set(WARNING_FLAGS "")
+       endif()
+
+       set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-unused-but-set-variable")
+
+       set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${WARNING_FLAGS} -O3 -ffast-math -Wall -fomit-frame-pointer -pipe -funroll-loops")
+       set(CMAKE_CXX_FLAGS_DEBUG "-g -O1 -Wall")
+
+       if(USE_GPROF)
+               set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg")
+       endif()
+       
+       if(BUILD_SERVER)
+               set_target_properties(minetestserver PROPERTIES
+                               COMPILE_DEFINITIONS "SERVER")
+       endif(BUILD_SERVER)
+
+endif()
+
+#MESSAGE(STATUS "CMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}")
+#MESSAGE(STATUS "CMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}")
+
+#
+# Installation
+#
+
+# Example configuration file
+install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../minetest.conf.example" DESTINATION ${EXAMPLE_CONF_DIR})
+
+if(BUILD_CLIENT)
+       install(TARGETS minetest DESTINATION ${BINDIR})
+
+       file(GLOB images "${CMAKE_CURRENT_SOURCE_DIR}/../data/*.png")
+
+       install(FILES ${images} DESTINATION ${DATADIR})
+
+       if(WIN32)
+               if(DEFINED IRRLICHT_DLL)
+                       install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
+               endif()
+               if(DEFINED ZLIB_DLL)
+                       install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
+               endif()
+       endif()
+endif(BUILD_CLIENT)
+
+if(BUILD_SERVER)
+       install(TARGETS minetestserver DESTINATION ${BINDIR})
+endif(BUILD_SERVER)
+
+# Subdirectories
 
 add_subdirectory(jthread)
 
-#END
+#end