summaryrefslogtreecommitdiff
path: root/src/hud.cpp
Commit message (Collapse)AuthorAge
* Add bold, italic and monospace font styling for HUD text elements (#11478)sfan52021-07-27
| | | Co-authored-by: Elias Fleckenstein <eliasfleckenstein@web.de>
* Minimap as HUD element with API controlPierre-Yves Rollo2020-10-04
| | | | | | | Features: * Define Minimap available modes (surface/radar, scale) from Lua, using player:set_minimap_modes() * New HUD elements for displaying minimap with custom size and placing * New minimap mode for displaying a texture instead of the map
* Add compass HUD element (#9312)EvidenceB2020-08-29
| | | | | | Co-authored-by: Jean-Patrick Guerrero <jeanpatrick.guerrero@gmail.com> Co-authored-by: Pierre-Yves Rollo <dev@pyrollo.com> Co-authored-by: SmallJoker <SmallJoker@users.noreply.github.com>
* Fix precision not working in hud_change (#10186)Lars Müller2020-08-12
|
* Add support for statbar “off state” icons (#9462)Wuzzy2020-05-11
| | | | | | | This adds support for optional “off state” icons for statbars. “off state icons” can be used to denote the lack of something, like missing hearts or bubbles. Add "off state" textures to the builtin statbars. Co-authored-by: SmallJoker <mk939@ymail.com>
* Improve waypoints and add image variant (#9480)Lars Müller2020-04-11
|
* Add z-index management to HUDPierre-Yves Rollo2019-12-06
|
* Minimap: Fix radar restriction broken by 9649e47SmallJoker2019-02-23
| | | | | Server-side radar restriction is now possible again Thanks to @pgimeno for this nice catch.
* Fix last clang-tidy reported problems for performance-type-promotion-in-math-fnLoic Blot2018-04-03
| | | | | | Based on https://travis-ci.org/minetest/minetest/jobs/361810382 output Also fix 2 missing copyright notices
* [CSM] Add basic HUD manipulation. (#6067)red-0012018-01-20
| | | | | | * [CSM] Add basic HUD manipulation. Workaround for on_connect not working right now.
* Move files to subdirectories (#6599)Vitaliy2017-11-08
| | | | * Move files around
* Statbars: fix incorrect half-images in non-standard orientations (fixes #6198)Nathanaël Courant2017-08-27
|
* Add clientside translations.Ekdohibs2017-08-24
|
* Optimize headers (part 2) (#6272)Loïc Blot2017-08-18
| | | | | | | | | | | | | | * Optimize headers (part 2) * less debug.h in headers * less remoteplayer.h for everybody * Cleanup (part 2) * camera.h: mesh.h * mapgen.h: mapnode.h * serverenvironment.h: mapblock.h * nodedef.h: shader.h
* Modernize various files (part 2)Loic Blot2017-08-18
| | | | | | | | | * range-based for loops * emplace_back instead of push_back * code style * C++ headers instead of C headers * Default operators * empty stl function
* Irrlicht cleanup: cleanup various object to use RenderingEngine (#6088)Loïc Blot2017-07-02
| | | | | | | | | | | * Irrlicht cleanup: cleanup various object to use RenderingEngine * CAO doesn't need scenemanager in addToScene * Camera doesn't need VideoDriver pointer or SceneManager in constructor * Hud doesn't need driver & scene manager in constructor * Hud doesn't need scenemanager pointer * Tile.h doesn't need IrrlichtDevice header (just SMaterial) * WieldMeshSceneNode: only take scene, we always use scene root node as parent
* Isolate irrlicht references and use a singleton (#6041)Loïc Blot2017-06-26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Add Device3D class which will contain IrrlichtDevice interface move getSupportedVideoDrivers to Device3D Add Device3D singleton & use it in various places Rename Device3D to Rendering engine & add helper functions to various device pointers More singleton work RenderingEngine owns draw_load_screen move draw functions to RenderingEngine Reduce IrrlichtDevice exposure and guienvironment RenderingEngine: Expose get_timer_time() to remove device from guiEngine Make irrlichtdevice & scene manager less exposed * Code style fixes * Move porting::getVideoDriverName, getVideoDriverFriendlyName, getDisplayDensity, getDisplaySize to RenderingEngine Fix XORG_USED macro -> RenderingEngine + create_engine_device from RenderingEngine constructor directly * enum paralax => enum parallax
* hud.cpp: fix wrong indent in drawItemLoïc Blot2017-06-19
|
* Cpp11 initializers 2 (#5999)Loïc Blot2017-06-17
| | | | | | | | | | * C++11 patchset 10: continue cleanup on constructors * Drop obsolete bool MainMenuData::enable_public (setting is called with cURL in server loop) * More classes cleanup * More classes cleanup + change NULL tests to boolean tests
* Use thread_local instead from some static settings (#5955)Loïc Blot2017-06-11
| | | | | thread_local permits to limit variable lifetime to thread duration. Use it on each setting place which uses static to cache variable result only for thread lifetime. This permits to keep the same performance level & reconfigure server from MT gui in those various variables places. Add thread_local to undersampling calculation too.
* Do not shade inventory items with textures (#5869)Dániel Juhász2017-06-01
| | | | This commit restores the old behavior: if an inventory item has an own inventory texture, it will not be shaded.
* Time: Change old `u32` timestamps to 64-bit (#5818)SmallJoker2017-05-26
| | | | MacOSX build fix + cleanups
* Add option to use neither node highlighting nor outliningezhh2017-05-15
|
* Clean up getTime helpersShadowNinja2017-04-28
| | | | | | This increases size of the getTime return values to 64 bits. It also removes the TimeGetter classes since the getTime functions are now very precise.
* Soft node overlay (#5186)Dániel Juhász2017-04-21
| | | | This commit adds node overlays, which are tiles that are drawn on top of other tiles.
* Hardware coloring for itemstacksDániel Juhász2017-04-08
| | | | | | | | | | Adds the possibility to colorize item stacks based on their metadata. In the item/node definition you can specify palette (an image file) and color (fallback color if the item has no palette or metadata). Then you can add palette_index to the metadata. Dropped itemstacks with different colors do not merge.
* Environment & IGameDef code refactoring (#4985)Ner'zhul2017-01-09
| | | | | | | | | | | | | | | | | | | | | * Environment code refactoring * Cleanup includes & class declarations in client & server environment to improve build speed * ServerEnvironment::m_gamedef is now a pointer to Server instead of IGameDef, permitting to cleanup many casts. * Cleanup IGameDef * Move ITextureSource* IGameDef::getTextureSource() to Client only. * Also move ITextureSource *IGameDef::tsrc() helper * drop getShaderSource, getSceneManager, getSoundManager & getCamera abstract call * drop unused emerge() call * cleanup server unused functions (mentionned before) * Drop one unused parameter from ContentFeatures::updateTextures * move checkLocalPrivilege to Client * Remove some unnecessary casts * create_formspec_menu: remove IWritableTextureSource pointer, as client already knows it * Fix some comments * Change required IGameDef to Server/Client pointers * Previous change that game.cpp sometimes calls functions with Client + InventoryManager + IGameDef in same functions but it's the same objects * Remove duplicate Client pointer in GUIFormSpecMenu::GUIFormSpecMenu * drop ClientMap::sectorWasDrawn which is unused
* Halo: Highlight selected faceRealBadAngel2016-11-12
| | | | | This is a slightly modified and cleaned up version of #3774 by RealBadAngel. By sofar: Remove color change (just make it lighter) and some minor cleanups.
* Escape more strings: formspecs, item descriptions, infotexts...Ekdohibs2016-04-24
| | | | | | Also, change the escape character to the more standard \x1b Thus, it can be used in the future for translation or colored text, for example.
* Fix inventory hud scalingrubenwardy2016-04-12
|
* Fix hotbar placement on displays with low screen densityPilzAdam2016-04-11
|
* Hud: Cache hud_scaling, fix minor style issueskwolekr2016-04-10
|
* Hud: Fix offset being ignored by inventory barrubenwardy2016-04-10
|
* Use single box for halo meshRealBadAngel2016-02-11
|
* Cleanup selection mesh code, add shaders for halo and selection boxesRealBadAngel2016-02-08
|
* small drawItemStack cleanupest312016-02-08
| | | | | | -> Replace the three bool params with an enum -> Add struct for the static content, leads to less repetition -> cache enable_animations setting
* Use meshes to display inventory itemsRealBadAngel2016-02-07
|
* Change i++ to ++iDavid Jones2015-08-25
|
* Use UTF-8 instead of narrowest312015-07-08
| | | | | Use wide_to_utf8 and utf8_to_wide instead of wide_to_narrow and narrow_to_wide at almost all places. Only exceptions: test functions for narrow conversion, and chat, which is done in a separate commit.
* Move globals from main.cpp to more sane locationsCraig Robbins2015-04-01
| | | | | | | | | | | | Move debug streams to log.cpp|h Move GUI-related globals to clientlauncher Move g_settings and g_settings_path to settings.cpp|h Move g_menuclouds to clouds.cpp|h Move g_profiler to profiler.cpp|h
* Clean scaling pre-filter for formspec/HUD.Aaron Suen2015-04-01
|
* Replace std::list to std::vector into tile.cpp (m_texture_trash) and move ↵Loic Blot2015-03-05
| | | | tile.hpp to src/client/
* Hud: Modify Y-positioning of health/breath starbars to prevent overlapping ↵kwolekr2015-02-08
| | | | with Hotbar
* Split gui_scaling to gui_scaling + hud_scaling as those elements need ↵sapier2015-01-09
| | | | different handling on some devices
* Fix MSVC buildSmallJoker2014-12-05
| | | | Note: The unit test was technically incorrect for all platforms but passes due to implicit casting
* Make hud use fontengine toosapier2014-11-30
| | | | | Fix non coding style conforming glb_fontengine to g_fontengine Fix fonts never been deleted due to grabbed to often
* Add support for Android 2.3+sapier2014-06-29
| | | | | | | | | | | | | There have been plenty of ppl involved in creating this version. I don't wanna mention names as I'm sure I'd forget someone so I just tell where help has been done: - The partial android versions done by various ppl - Testing on different android devices - reviewing code (especially the in core changes) - testing controls - reviewing texts A big thank you to everyone helping this to be completed!
* Support for scalable font and gui elementssapier2014-06-22
| | | | | Fix positioning of tabheader in order to be usable for scaling GUIs WARNING: this changes position of current tabheaders, mods have to adjust!
* Small cleanup of hud add/remove codesapier2014-05-31
|
* Add support for interlaced polarized 3d screenssapier2014-05-18
| | | | Add (experimental) support for topbottom as well as sidebyside 3d mode
theus client disabled.") endif(USE_PROMETHEUS) OPTION(ENABLE_SPATIAL "Enable SpatialIndex AreaStore backend" TRUE) set(USE_SPATIAL FALSE) if(ENABLE_SPATIAL) find_library(SPATIAL_LIBRARY spatialindex) find_path(SPATIAL_INCLUDE_DIR spatialindex/SpatialIndex.h) if(SPATIAL_LIBRARY AND SPATIAL_INCLUDE_DIR) set(USE_SPATIAL TRUE) message(STATUS "SpatialIndex AreaStore backend enabled.") include_directories(${SPATIAL_INCLUDE_DIR}) else(SPATIAL_LIBRARY AND SPATIAL_INCLUDE_DIR) message(STATUS "SpatialIndex not found!") endif(SPATIAL_LIBRARY AND SPATIAL_INCLUDE_DIR) endif(ENABLE_SPATIAL) find_package(ZLIB REQUIRED) find_package(Zstd REQUIRED) if(NOT MSVC) set(USE_GPROF FALSE CACHE BOOL "Use -pg flag for g++") endif() # Haiku endian support if(HAIKU) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_BSD_SOURCE") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_BSD_SOURCE") endif() # Use cmake_config.h 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 ) # Get M_PI to work add_definitions(/D "_USE_MATH_DEFINES") # Dont define min/max macros in minwindef.h add_definitions(/D "NOMINMAX") else() # Probably MinGW = GCC set(PLATFORM_LIBS "") endif() set(PLATFORM_LIBS ws2_32.lib version.lib shlwapi.lib winmm.lib ${PLATFORM_LIBS}) set(EXTRA_DLL "" CACHE FILEPATH "Optional paths to additional DLLs that should be packaged") # DLLs are automatically copied to the output directory by vcpkg when VCPKG_APPLOCAL_DEPS=ON if(NOT VCPKG_APPLOCAL_DEPS) set(ZLIB_DLL "" CACHE FILEPATH "Path to Zlib DLL for installation (optional)") set(ZSTD_DLL "" CACHE FILEPATH "Path to Zstd DLL for installation (optional)") 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)") set(VORBIS_DLL "" CACHE FILEPATH "Path to Vorbis DLLs for installation (optional)") endif() if(USE_GETTEXT) set(GETTEXT_DLL "" CACHE FILEPATH "Path to Intl/Iconv DLLs for installation (optional)") endif() if(USE_LUAJIT) set(LUA_DLL "" CACHE FILEPATH "Path to luajit-5.1.dll for installation (optional)") endif() endif() else() # Unix probably if(BUILD_CLIENT) if(NOT HAIKU AND NOT APPLE) find_package(X11 REQUIRED) endif(NOT HAIKU AND NOT APPLE) endif() set(PLATFORM_LIBS -lpthread ${CMAKE_DL_LIBS}) if(APPLE) set(PLATFORM_LIBS "-framework CoreFoundation" ${PLATFORM_LIBS}) else() check_library_exists(rt clock_gettime "" HAVE_LIBRT) if (HAVE_LIBRT) set(PLATFORM_LIBS -lrt ${PLATFORM_LIBS}) endif(HAVE_LIBRT) endif(APPLE) # Prefer local iconv if installed find_library(ICONV_LIBRARY iconv) mark_as_advanced(ICONV_LIBRARY) if (ICONV_LIBRARY) set(PLATFORM_LIBS ${PLATFORM_LIBS} ${ICONV_LIBRARY}) endif() if (HAIKU) set(PLATFORM_LIBS ${PLATFORM_LIBS} intl network) endif() endif() check_include_files(endian.h HAVE_ENDIAN_H) configure_file( "${PROJECT_SOURCE_DIR}/cmake_config.h.in" "${PROJECT_BINARY_DIR}/cmake_config.h" ) # Add a target that always rebuilds cmake_config_githash.h add_custom_target(GenerateVersion COMMAND ${CMAKE_COMMAND} -D "GENERATE_VERSION_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}" -D "GENERATE_VERSION_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}" -D "VERSION_STRING=${VERSION_STRING}" -D "DEVELOPMENT_BUILD=${DEVELOPMENT_BUILD}" -P "${CMAKE_SOURCE_DIR}/cmake/Modules/GenerateVersion.cmake" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") add_subdirectory(threading) add_subdirectory(content) add_subdirectory(database) add_subdirectory(gui) add_subdirectory(mapgen) add_subdirectory(network) add_subdirectory(script) add_subdirectory(unittest) add_subdirectory(benchmark) add_subdirectory(util) add_subdirectory(irrlicht_changes) add_subdirectory(server) set(common_SRCS ${database_SRCS} ${mapgen_SRCS} ${server_SRCS} ${content_SRCS} ban.cpp chat.cpp clientiface.cpp collision.cpp content_mapnode.cpp content_nodemeta.cpp convert_json.cpp craftdef.cpp debug.cpp defaultsettings.cpp emerge.cpp environment.cpp face_position_cache.cpp filesys.cpp gettext.cpp httpfetch.cpp hud.cpp inventory.cpp inventorymanager.cpp itemdef.cpp itemstackmetadata.cpp light.cpp log.cpp main.cpp map.cpp map_settings_manager.cpp mapblock.cpp mapnode.cpp mapsector.cpp metadata.cpp modchannels.cpp nameidmapping.cpp nodedef.cpp nodemetadata.cpp nodetimer.cpp noise.cpp objdef.cpp object_properties.cpp particles.cpp pathfinder.cpp player.cpp porting.cpp profiler.cpp raycast.cpp reflowscan.cpp remoteplayer.cpp rollback.cpp rollback_interface.cpp serialization.cpp server.cpp serverenvironment.cpp serverlist.cpp settings.cpp staticobject.cpp terminal_chat_console.cpp texture_override.cpp tileanimation.cpp tool.cpp translation.cpp version.cpp voxel.cpp voxelalgorithms.cpp hud.cpp ${common_network_SRCS} ${JTHREAD_SRCS} ${common_SCRIPT_SRCS} ${UTIL_SRCS} ) if(BUILD_UNITTESTS) set(common_SRCS ${common_SRCS} ${UNITTEST_SRCS}) endif() if(BUILD_BENCHMARKS) set(common_SRCS ${common_SRCS} ${BENCHMARK_SRCS}) endif() # This gives us the icon and file version information if(WIN32) set(WINRESOURCE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/../misc/winresource.rc") set(MINETEST_EXE_MANIFEST_FILE "${CMAKE_CURRENT_SOURCE_DIR}/../misc/minetest.exe.manifest") if(MINGW) if(NOT CMAKE_RC_COMPILER) 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} -I${CMAKE_CURRENT_BINARY_DIR} -i${WINRESOURCE_FILE} -o ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} DEPENDS ${WINRESOURCE_FILE} ${MINETEST_EXE_MANIFEST_FILE}) SET(extra_windows_SRCS ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o) else(MINGW) # Probably MSVC set(extra_windows_SRCS ${WINRESOURCE_FILE} ${MINETEST_EXE_MANIFEST_FILE}) endif(MINGW) endif() # Client sources if (BUILD_CLIENT) add_subdirectory(client) endif(BUILD_CLIENT) set(client_SRCS ${client_SRCS} ${common_SRCS} ${gui_SRCS} ${client_network_SRCS} ${client_irrlicht_changes_SRCS} ${client_SCRIPT_SRCS} ) if(BUILD_UNITTESTS) set(client_SRCS ${client_SRCS} ${UNITTEST_CLIENT_SRCS}) endif() if(BUILD_BENCHMARKS) set(client_SRCS ${client_SRCS} ${BENCHMARK_CLIENT_SRCS}) endif() list(SORT client_SRCS) # Server sources set(server_SRCS ${common_SRCS} ) list(SORT server_SRCS) # Avoid source_group on broken CMake version. # see issue #7074 #7075 if (CMAKE_VERSION VERSION_GREATER 3.8.1) source_group(TREE ${PROJECT_SOURCE_DIR} PREFIX "Source Files" FILES ${client_SRCS}) source_group(TREE ${PROJECT_SOURCE_DIR} PREFIX "Source Files" FILES ${server_SRCS}) endif() include_directories( ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/script ) include_directories(SYSTEM ${ZLIB_INCLUDE_DIR} ${ZSTD_INCLUDE_DIR} ${SQLITE3_INCLUDE_DIR} ${LUA_INCLUDE_DIR} ${GMP_INCLUDE_DIR} ${JSON_INCLUDE_DIR} ${LUA_BIT_INCLUDE_DIR} ) if(USE_GETTEXT) include_directories(${GETTEXT_INCLUDE_DIR}) endif() if(BUILD_CLIENT) include_directories(SYSTEM ${FREETYPE_INCLUDE_DIRS} ${SOUND_INCLUDE_DIRS} ${X11_INCLUDE_DIR} ) endif() if(USE_CURL) include_directories(${CURL_INCLUDE_DIR}) endif() # When cross-compiling assume the user doesn't want to run the executable anyway, # otherwise place it in <source dir>/bin/ since Minetest can only run from there. if(NOT CMAKE_CROSSCOMPILING) set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin") endif() if(BUILD_CLIENT) add_executable(${PROJECT_NAME} ${client_SRCS} ${extra_windows_SRCS}) add_dependencies(${PROJECT_NAME} GenerateVersion) target_link_libraries( ${PROJECT_NAME} ${ZLIB_LIBRARIES} IrrlichtMt::IrrlichtMt ${ZSTD_LIBRARY} ${X11_LIBRARIES} ${SOUND_LIBRARIES} ${SQLITE3_LIBRARY} ${LUA_LIBRARY} ${GMP_LIBRARY} ${JSON_LIBRARY} ${LUA_BIT_LIBRARY} ${FREETYPE_LIBRARY} ${PLATFORM_LIBS} ) if(NOT USE_LUAJIT) set_target_properties(${PROJECT_NAME} PROPERTIES # This is necessary for dynamic Lua modules # to work when Lua is statically linked (issue #10806) ENABLE_EXPORTS 1 ) endif() if(USE_GETTEXT) target_link_libraries( ${PROJECT_NAME} ${GETTEXT_LIBRARY} ) endif() if(USE_CURL) target_link_libraries( ${PROJECT_NAME} ${CURL_LIBRARY} ) endif() if(FREETYPE_PKGCONFIG_FOUND) set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "${FREETYPE_CFLAGS_STR}" ) endif() if (USE_CURSES) target_link_libraries(${PROJECT_NAME} ${CURSES_LIBRARIES}) endif() if (USE_POSTGRESQL) target_link_libraries(${PROJECT_NAME} ${PostgreSQL_LIBRARIES}) endif() if (USE_LEVELDB) target_link_libraries(${PROJECT_NAME} ${LEVELDB_LIBRARY}) endif() if (USE_REDIS) target_link_libraries(${PROJECT_NAME} ${REDIS_LIBRARY}) endif() if (USE_PROMETHEUS) target_link_libraries(${PROJECT_NAME} ${PROMETHEUS_LIBRARIES}) endif() if (USE_SPATIAL) target_link_libraries(${PROJECT_NAME} ${SPATIAL_LIBRARY}) endif() if(BUILD_BENCHMARKS) target_link_libraries(${PROJECT_NAME} catch2) endif() endif(BUILD_CLIENT) if(BUILD_SERVER) add_executable(${PROJECT_NAME}server ${server_SRCS} ${extra_windows_SRCS}) add_dependencies(${PROJECT_NAME}server GenerateVersion) get_target_property( IRRLICHT_INCLUDES IrrlichtMt::IrrlichtMt INTERFACE_INCLUDE_DIRECTORIES) # Doesn't work without PRIVATE/PUBLIC/INTERFACE mode specified. target_include_directories(${PROJECT_NAME}server PRIVATE ${IRRLICHT_INCLUDES}) target_link_libraries( ${PROJECT_NAME}server ${ZLIB_LIBRARIES} ${ZSTD_LIBRARY} ${SQLITE3_LIBRARY} ${JSON_LIBRARY} ${LUA_LIBRARY} ${LUA_BIT_LIBRARY} ${GMP_LIBRARY} ${PLATFORM_LIBS} ) set_target_properties(${PROJECT_NAME}server PROPERTIES COMPILE_DEFINITIONS "SERVER") if(NOT USE_LUAJIT) set_target_properties(${PROJECT_NAME}server PROPERTIES # This is necessary for dynamic Lua modules # to work when Lua is statically linked (issue #10806) ENABLE_EXPORTS 1 ) endif() if (USE_GETTEXT) target_link_libraries(${PROJECT_NAME}server ${GETTEXT_LIBRARY}) endif() if (USE_CURSES) target_link_libraries(${PROJECT_NAME}server ${CURSES_LIBRARIES}) endif() if (USE_POSTGRESQL) target_link_libraries(${PROJECT_NAME}server ${PostgreSQL_LIBRARIES}) endif() if (USE_LEVELDB) target_link_libraries(${PROJECT_NAME}server ${LEVELDB_LIBRARY}) endif() if (USE_REDIS) target_link_libraries(${PROJECT_NAME}server ${REDIS_LIBRARY}) endif() if (USE_PROMETHEUS) target_link_libraries(${PROJECT_NAME}server ${PROMETHEUS_LIBRARIES}) endif() if (USE_SPATIAL) target_link_libraries(${PROJECT_NAME}server ${SPATIAL_LIBRARY}) endif() if(USE_CURL) target_link_libraries( ${PROJECT_NAME}server ${CURL_LIBRARY} ) endif() if(BUILD_BENCHMARKS) target_link_libraries(${PROJECT_NAME}server catch2) endif() endif(BUILD_SERVER) # Blacklisted locales that don't work. # see issue #4638 set(GETTEXT_BLACKLISTED_LOCALES ar dv he hi kn ms_Arab th ) option(APPLY_LOCALE_BLACKLIST "Use a blacklist to avoid known broken locales" TRUE) if (GETTEXTLIB_FOUND AND APPLY_LOCALE_BLACKLIST) set(GETTEXT_USED_LOCALES "") foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES}) if (NOT "${LOCALE}" IN_LIST GETTEXT_BLACKLISTED_LOCALES) list(APPEND GETTEXT_USED_LOCALES ${LOCALE}) endif() endforeach() message(STATUS "Locale blacklist applied; Locales used: ${GETTEXT_USED_LOCALES}") elseif (GETTEXTLIB_FOUND) set(GETTEXT_USED_LOCALES ${GETTEXT_AVAILABLE_LOCALES}) endif() # Set some optimizations and tweaks include(CheckCSourceCompiles) if(MSVC) # Visual Studio set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D WIN32_LEAN_AND_MEAN") # EHa enables SEH exceptions (used for catching segfaults) set(CMAKE_CXX_FLAGS_RELEASE "/EHa /Ox /MD /GS- /Zi /fp:fast /D NDEBUG /D _HAS_ITERATOR_DEBUGGING=0") if(CMAKE_SIZEOF_VOID_P EQUAL 4) set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /arch:SSE") endif() set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/INCREMENTAL:NO /DEBUG /OPT:REF /OPT:ICF /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup") 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") # Flags for C files (sqlite) # /MD = dynamically link to MSVCRxxx.dll set(CMAKE_C_FLAGS_RELEASE "/O2 /Ob2 /MD") # Flags that cannot be shared between cl and clang-cl # https://clang.llvm.org/docs/UsersManual.html#clang-cl if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=lld") # Disable pragma-pack warning set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wno-pragma-pack") else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /TP /FD /GL") set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG") endif() else() # GCC or compatible compilers such as Clang set(WARNING_FLAGS "-Wall -Wextra") set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-unused-parameter -Wno-implicit-fallthrough") if(WARN_ALL) set(RELEASE_WARNING_FLAGS "${WARNING_FLAGS}") else() set(RELEASE_WARNING_FLAGS "") endif() if(APPLE AND USE_LUAJIT) # required per http://luajit.org/install.html SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pagezero_size 10000 -image_base 100000000") elseif(UNIX AND USE_LUAJIT) check_c_source_compiles("#ifndef __aarch64__\n#error\n#endif\nint main(){}" IS_AARCH64) if(IS_AARCH64) # Move text segment below LuaJIT's 47-bit limit (see issue #9367) if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") # FreeBSD uses lld, and lld does not support -Ttext-segment, suggesting # --image-base instead. Not sure if it's equivalent change for the purpose # but at least if fixes build on FreeBSD/aarch64 # XXX: the condition should also be changed to check for lld regardless of # os, bit CMake doesn't have anything like CMAKE_LINKER_IS_LLD yet SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--image-base=0x200000000") else() SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Ttext-segment=0x200000000") endif() endif() endif() if(MINGW) set(OTHER_FLAGS "${OTHER_FLAGS} -mthreads -fexceptions") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWIN32_LEAN_AND_MEAN") endif() # Use a safe subset of flags to speed up math calculations: # - we don't need errno or math exceptions # - we don't deal with Inf/NaN or signed zero set(MATH_FLAGS "-fno-math-errno -fno-trapping-math -ffinite-math-only -fno-signed-zeros") # Enable SSE for floating point math on 32-bit x86 by default # reasoning see minetest issue #11810 and https://gcc.gnu.org/wiki/FloatingPointMath if(CMAKE_SIZEOF_VOID_P EQUAL 4) check_c_source_compiles("#ifndef __i686__\n#error\n#endif\nint main(){}" IS_I686) if(IS_I686) message(STATUS "Detected Intel x86: using SSE instead of x87 FPU") set(OTHER_FLAGS "${OTHER_FLAGS} -mfpmath=sse -msse") endif() endif() set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${OTHER_FLAGS} -pipe -funroll-loops") if(CMAKE_SYSTEM_NAME MATCHES "(Darwin|BSD|DragonFly)") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Os") else() set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -fomit-frame-pointer") if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION MATCHES "^9\\.") # Clang 9 has broken -ffast-math on glibc else() set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${MATH_FLAGS}") endif() endif() set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELEASE} -g") set(CMAKE_CXX_FLAGS_SEMIDEBUG "-g -O1 ${WARNING_FLAGS} ${OTHER_FLAGS}") set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 ${WARNING_FLAGS} ${OTHER_FLAGS}") if(USE_GPROF) set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg") endif() if(MINGW) set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -mwindows") endif() endif() # Installation if(WIN32) if(EXTRA_DLL) install(FILES ${EXTRA_DLL} DESTINATION ${BINDIR}) endif() if(VCPKG_APPLOCAL_DEPS) # Collect the dll's from the output path install(DIRECTORY ${EXECUTABLE_OUTPUT_PATH}/Release/ DESTINATION ${BINDIR} CONFIGURATIONS Release FILES_MATCHING PATTERN "*.dll") install(DIRECTORY ${EXECUTABLE_OUTPUT_PATH}/Debug/ DESTINATION ${BINDIR} CONFIGURATIONS Debug FILES_MATCHING PATTERN "*.dll") install(DIRECTORY ${EXECUTABLE_OUTPUT_PATH}/RelWithDebInfo/ DESTINATION ${BINDIR} CONFIGURATIONS RelWithDebInfo FILES_MATCHING PATTERN "*.dll") install(DIRECTORY ${EXECUTABLE_OUTPUT_PATH}/MinSizeRel/ DESTINATION ${BINDIR} CONFIGURATIONS MinSizeRel FILES_MATCHING PATTERN "*.dll") else() # Use the old-style way to install dll's if(BUILD_CLIENT AND USE_SOUND) if(OPENAL_DLL) install(FILES ${OPENAL_DLL} DESTINATION ${BINDIR}) endif() if(OGG_DLL) install(FILES ${OGG_DLL} DESTINATION ${BINDIR}) endif() if(VORBIS_DLL) install(FILES ${VORBIS_DLL} DESTINATION ${BINDIR}) endif() endif() if(CURL_DLL) install(FILES ${CURL_DLL} DESTINATION ${BINDIR}) endif() if(ZLIB_DLL) install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR}) endif() if(ZSTD_DLL) install(FILES ${ZSTD_DLL} DESTINATION ${BINDIR}) endif() if(BUILD_CLIENT AND 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() if(LUA_DLL) install(FILES ${LUA_DLL} DESTINATION ${BINDIR}) endif() if(BUILD_CLIENT AND USE_GETTEXT AND GETTEXT_DLL) install(FILES ${GETTEXT_DLL} DESTINATION ${BINDIR}) endif() endif() if(BUILD_CLIENT AND IRRLICHT_DLL) install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR}) endif() endif() if(BUILD_CLIENT) install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${BINDIR} LIBRARY DESTINATION ${BINDIR} ARCHIVE DESTINATION ${BINDIR} BUNDLE DESTINATION . ) if(APPLE) install(CODE " set(BU_CHMOD_BUNDLE_ITEMS ON) include(BundleUtilities) fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/${BUNDLE_PATH}\" \"\" \"\${CMAKE_INSTALL_PREFIX}/${BINDIR}\") " COMPONENT Runtime) endif() if(USE_GETTEXT) foreach(LOCALE ${GETTEXT_USED_LOCALES}) set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE}) set(MO_BUILD_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo") install(FILES ${MO_BUILD_PATH} DESTINATION ${MO_DEST_PATH}) endforeach() endif() install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../fonts" DESTINATION "${SHAREDIR}" FILES_MATCHING PATTERN "*.ttf" PATTERN "*.txt") endif(BUILD_CLIENT) if(BUILD_SERVER) install(TARGETS ${PROJECT_NAME}server DESTINATION ${BINDIR}) endif() if (USE_GETTEXT) set(MO_FILES) foreach(LOCALE ${GETTEXT_USED_LOCALES}) set(PO_FILE_PATH "${GETTEXT_PO_PATH}/${LOCALE}/${PROJECT_NAME}.po") set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE}) set(MO_FILE_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo") add_custom_command(OUTPUT ${MO_BUILD_PATH} COMMAND ${CMAKE_COMMAND} -E make_directory ${MO_BUILD_PATH} COMMENT "mo-update [${LOCALE}]: Creating locale directory.") add_custom_command( OUTPUT ${MO_FILE_PATH} COMMAND ${GETTEXT_MSGFMT} -o ${MO_FILE_PATH} ${PO_FILE_PATH} DEPENDS ${MO_BUILD_PATH} ${PO_FILE_PATH} WORKING_DIRECTORY "${GETTEXT_PO_PATH}/${LOCALE}" COMMENT "mo-update [${LOCALE}]: Creating mo file." ) set(MO_FILES ${MO_FILES} ${MO_FILE_PATH}) endforeach() add_custom_target(translations ALL COMMENT "mo update" DEPENDS ${MO_FILES}) endif()