From f1ddc12b68b4e4c8087962de25260470e6df2bea Mon Sep 17 00:00:00 2001 From: Connor Thomson Date: Tue, 8 Sep 2026 18:27:39 -0700 Subject: Add tuxanci2 files --- CMakeLists.txt | 391 +++++++++++++++++++++++---------------------------------- 1 file changed, 154 insertions(+), 237 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index b825a06..f952426 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,241 +1,158 @@ -# Created by Tomas Chvatal (Scarabeus IV) -############################################################################### -# tuxanci/CMakeLists.txt -############################################################################### -# ALL CONDITIONAL OPTIONS -############################################################################### -# -DCMAKE_C_FLAGS=-Wall # modification for CFLAGS -# -DCMAKE_INSTALL_PREFIX=/bla/ # install prefix -# -DCMAKE_DATA_PATH=/other/bla/ # install path for data -# -DCMAKE_CONF_PATH=/etc # install path for conf -# -DLIB_INSTALL_DIR=/other/bla # install path for lib -# -DCMAKE_DOC_PATH=/other/bla/doc/tuxanci-version/ # install path for doc -# -DCMAKE_LOCALE_PATH=/other/bla # install path for locale -############################################################################### -# DEFAULT OPTIONS -############################################################################### -OPTION (BUILD_SERVER "Build the server instead of client" OFF) -OPTION (ENABLE_IPV6 "Build with the ipv6 support" ON) -OPTION (WITH_AUDIO "Build with audio enabled" ON) -OPTION (ENABLE_DEBUG "Build debug features" ON) -OPTION (DEVELOPER "Modify stuff to please tuxanci devs" OFF) -MARK_AS_ADVANCED ( DEVELOPER ) -OPTION (WITH_NLS "Build the translations" ON) -OPTION (WITH_PHYSFS "Use physfs engine for unpacking (instead of libzip)" OFF) -OPTION (Apple "Build some apple quirks. USE ONLY ON MAC!" OFF) -MARK_AS_ADVANCED ( Apple ) -OPTION (WITH_OPENGL "Use opengl as renderer instead of SW" ON) -OPTION (CROSSCOMPILE "Crosscompile tuxanci defined by ENV{TARGET}" OFF) -MARK_AS_ADVANCED ( CROSSCOMPILE ) -############################################################################### -# IMPORTANT DEFINITIONS [PREFIX,...] -############################################################################### -SET ( WORKDIR ${CMAKE_SOURCE_DIR}/src ) -# data because some distributions want different data placement -SET ( CMAKE_CONF_PATH "/etc" CACHE PATH "Config path prefix" ) -IF ( WIN32 ) - SET ( CMAKE_INSTALL_PREFIX "/" CACHE PATH "Install path prefix" ) - SET ( CMAKE_LOCALE_PATH "locale" CACHE PATH "Locale path prefix" ) -ELSE ( WIN32 ) - SET ( CMAKE_INSTALL_PREFIX "/usr/local/" CACHE PATH "Install path prefix" ) - SET ( CMAKE_LOCALE_PATH "${CMAKE_INSTALL_PREFIX}/share/locale" CACHE PATH "Locale path prefix" ) -ENDIF ( WIN32 ) -SET ( CMAKE_DATA_PATH "${CMAKE_INSTALL_PREFIX}/share/" CACHE PATH "Data path prefix" ) -############################################################################### -# BASIC PROJECT VALUES -############################################################################### -PROJECT ( tuxanci C ) -IF ( BUILD_SERVER ) - SET ( APPNAME "tuxanci-server") -ELSE ( BUILD_SERVER ) - SET ( APPNAME "tuxanci" ) -ENDIF ( BUILD_SERVER ) -CMAKE_MINIMUM_REQUIRED ( VERSION 2.6.0 ) -CMAKE_MINIMUM_REQUIRED ( VERSION 2.6.0 FATAL_ERROR ) -INCLUDE (cmake/MacroAddSources.cmake) -IF ( COMMAND cmake_policy ) - cmake_policy( SET CMP0003 NEW ) -ENDIF ( COMMAND cmake_policy ) -SET ( CMAKE_COLOR_MAKEFILE ON ) -SET ( CMAKE_BUILD_TYPE_SHARED_LIBS ON ) -SET ( CMAKE_C_FLAGS $ENV{CFLAGS} ) -SET ( CMAKE_CXX_FLAGS $ENV{CXXFLAGS} ) -SET ( CMAKE_LINK_FLAGS $ENV{LDFLAGS} ) -IF ( CROSSCOMPILE ) - SET ( CMAKE_C_COMPILER "$ENV{TARGET}-gcc" ) - SET ( CMAKE_CXX_COMPILER "$ENV{TARGET}-g++" ) - MESSAGE ( "CROSSCOMPILE with gcc to target: $ENV{TARGET}" ) -ENDIF ( CROSSCOMPILE ) -# this specify location of additional cmake sources -SET ( CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" ) -#various variables -SET ( CMAKE_INSTALL_ETCDIR ${CMAKE_CONF_PATH} ) -IF ( WIN32 ) - SET ( CMAKE_DOC_PATH "doc/" CACHE PATH "Doc path prefix" ) - SET ( CMAKE_INSTALL_LOCALEDIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_LOCALE_PATH} ) - SET ( CMAKE_INSTALL_DOCDIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_DOC_PATH} ) -ELSE ( WIN32 ) - SET ( CMAKE_DOC_PATH "${CMAKE_INSTALL_PREFIX}/share/doc/${APPNAME}" CACHE PATH "Doc path prefix" ) - SET ( CMAKE_INSTALL_LOCALEDIR ${CMAKE_LOCALE_PATH} ) - SET ( CMAKE_INSTALL_DOCDIR ${CMAKE_DOC_PATH} ) -ENDIF ( WIN32 ) -SET ( CMAKE_INSTALL_BINDIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Binary path prefix" ) -SET ( CMAKE_INSTALL_ICONDIR "${CMAKE_INSTALL_PREFIX}/share/pixmaps" CACHE PATH "Icon path prefix" ) -SET ( CMAKE_INSTALL_DESKTOPDIR "share/applications" CACHE PATH "Desktop file path prefix") -SET ( CMAKE_INSTALL_DATADIR ${CMAKE_DATA_PATH} ) -# defines to determine if we build package or not -IF ( PACKAGE ) - ADD_DEFINITIONS ( -DBUILD_PACKAGE ) -ENDIF ( PACKAGE ) -# uninstall -CONFIGURE_FILE ( - "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in" - "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" - IMMEDIATE @ONLY ) -ADD_CUSTOM_TARGET ( uninstall "${CMAKE_COMMAND}" - -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" ) -############################################################################### -# CPACK -############################################################################### -INCLUDE ( InstallRequiredSystemLibraries ) -SET ( CPACK_PACKAGE_DESCRIPTION_SUMMARY "Tuxanci is first tux shooter inspired by game Bulanci." ) -SET ( CPACK_PACKAGE_VENDOR "Tuxanci team " ) -SET ( CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENCE" ) -SET ( CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README" ) -SET ( CPACK_GENERATOR "TGZ" ) -SET ( CPACK_SOURCE_GENERATOR "TGZ" ) -SET ( CPACK_PACKAGE_VERSION_MAJOR "0" ) -SET ( CPACK_PACKAGE_VERSION_MINOR "2" ) -SET ( CPACK_PACKAGE_VERSION_PATCH "99" ) -SET ( TUXANCI_VERSION - "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}" +# Tuxanci 2 - A first person shooter +# Copyright (C) 2007-2011 Tuxánci Development Team +# Copyright (C) 2025-2026 Connor Thomson +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +cmake_minimum_required(VERSION 3.12) + +project(tuxanci2 VERSION 0.29.0 LANGUAGES C) + +option(UNIX_LIKE "Enable features exclusive to UNIX-like systems" ${CMAKE_HOST_UNIX}) +option(ENABLE_AUDIO "Enable audio" ON) + +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") + +set(CMAKE_C_STANDARD 11) +set(CMAKE_C_STANDARD_REQUIRED ON) +set(CMAKE_C_EXTENSIONS OFF) + +include(CompileShaders) + +configure_file(${CMAKE_SOURCE_DIR}/include/version.h.in + ${CMAKE_BINARY_DIR}/include/version.h + @ONLY) + +file(GLOB_RECURSE C_SRC_FILES CONFIGURE_DEPENDS "src/*.c") +file(GLOB_RECURSE SLANG_SRC_FILES CONFIGURE_DEPENDS "shaders/*.slang") + +set(DATA_FILES + "${CMAKE_SOURCE_DIR}/data/images/background.png" + "${CMAKE_SOURCE_DIR}/data/fonts/DejaVuSans.ttf" + "${CMAKE_SOURCE_DIR}/data/music/theme.it" + "${CMAKE_SOURCE_DIR}/data/models/teapot.obj" + "${CMAKE_SOURCE_DIR}/data/models/dounut.obj" ) -MARK_AS_ADVANCED ( TUXANCI_VERSION ) -SET ( CPACK_STRIP_FILES "src/tuxanci" ) -SET ( CPACK_SET_DESTDIR "ON" ) -SET ( CPACK_SOURCE_PACKAGE_FILE_NAME "tuxanci-${TUXANCI_VERSION}" ) -SET ( CPACK_SOURCE_IGNORE_FILES - "~$" - ".git" - "build/" - "packaging/" - "scripts/" - "tuxanci.1" +foreach(DATA_FILE ${DATA_FILES}) + if(NOT EXISTS "${DATA_FILE}") + message(FATAL_ERROR "Required data file not found: ${DATA_FILE}") + endif() +endforeach() + +add_executable(${PROJECT_NAME} ${C_SRC_FILES}) + +target_include_directories(${PROJECT_NAME} PRIVATE + include + ${CMAKE_BINARY_DIR}/include ) -SET ( CPACK_SOURCE_STRIP_FILES "" ) -INCLUDE ( CPack ) -############################################################################### -# DEBUG/DEVELOPER STUFF -############################################################################### -IF ( ENABLE_DEBUG ) - SET ( CMAKE_C_FLAGS "-g -O0 -Wall -pipe -ggdb") - ADD_DEFINITIONS ( -DDEBUG ) - # SET ( CMAKE_VERBOSE_MAKEFILE on ) -ENDIF ( ENABLE_DEBUG ) -IF ( DEVELOPER ) - ADD_DEFINITIONS ( -DDEBUG ) - # if somebody asks yes i am insane - SET ( CMAKE_C_FLAGS "-g -ggdb -O0 -pipe -Wall -Wshadow -Wall -Wextra -Wno-missing-field-initializers -Wno-unused-parameter -Wold-style-definition -Wdeclaration-after-statement -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wmissing-noreturn -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Winline -Wformat-nonliteral -Wformat-security -Wswitch-enum -Wswitch-default -Winit-self -Wmissing-include-dirs -Wundef -Waggregate-return -Wmissing-format-attribute -Wnested-externs -Wunsafe-loop-optimizations" ) -ENDIF ( DEVELOPER ) -############################################################################### -# BASIC DIRECTORIES FOR INCLUSION -############################################################################### -INCLUDE_DIRECTORIES ( ${WORKDIR}/base ) -INCLUDE_DIRECTORIES ( ${WORKDIR}/net ) -############################################################################### -# CLIENT STUFF -############################################################################### -IF ( NOT BUILD_SERVER ) - INCLUDE_DIRECTORIES ( ${WORKDIR}/client ) - INCLUDE_DIRECTORIES ( ${WORKDIR}/screen ) - INCLUDE_DIRECTORIES ( ${WORKDIR}/widget ) -ENDIF ( NOT BUILD_SERVER ) -############################################################################### -# SERVER STUFF (Basicly overriding default client values) -############################################################################### -IF ( BUILD_SERVER ) - ADD_DEFINITIONS ( -DPUBLIC_SERVER ) - ADD_DEFINITIONS ( -DNO_SOUND ) - INCLUDE_DIRECTORIES ( ${WORKDIR}/server ) -ENDIF ( BUILD_SERVER ) -############################################################################### -# APPLE QUIRKS -############################################################################### -IF ( Apple ) - SET ( CMAKE_OSX_ARCHITECTURES "ppc;i386" ) - SET ( CACHE_INTERNAL "OSX Architectures" FORCE ) - ADD_DEFINITIONS ( -DAPPLE ) -ENDIF ( Apple ) -############################################################################### -# LIBS SEARCH -############################################################################### -MESSAGE ( STATUS "" ) -FIND_PACKAGE ( PkgConfig REQUIRED ) -IF ( WITH_PHYSFS ) - FIND_PACKAGE ( PhysFS REQUIRED ) - INCLUDE_DIRECTORIES( ${PHYSFS_INCLUDE_DIR} ) -ELSE ( WITH_PHYSFS ) - pkg_check_modules(ZIP REQUIRED libzip) - INCLUDE_DIRECTORIES( ${ZIP_INCLUDE_DIRS} ) -ENDIF ( WITH_PHYSFS ) - -IF ( NOT BUILD_SERVER ) - # cairo not needed until we start actually using the svg files - #pkg_check_modules(CAIRO REQUIRED cairo>=1.8.8) - #pkg_check_modules(CAIRO_SVG REQUIRED cairo-svg>=1.8.8) - INCLUDE_DIRECTORIES( ${CAIRO_INCLUDE_DIRS} ) - pkg_check_modules(FONTCONFIG REQUIRED fontconfig) - INCLUDE_DIRECTORIES ( ${FONTCONFIG_INCLUDE_DIRS} ) - IF ( WITH_OPENGL ) - pkg_check_modules(OPENGL REQUIRED gl>=7.5) - INCLUDE_DIRECTORIES ( ${OPENGL_INCLUDE_DIRS} ) - ENDIF ( WITH_OPENGL ) - pkg_check_modules(SDL REQUIRED sdl) - INCLUDE_DIRECTORIES ( ${SDL_INCLUDE_DIRS} ) - pkg_check_modules(SDLIMAGE REQUIRED SDL_image) - INCLUDE_DIRECTORIES ( ${SDLIMAGE_INCLUDE_DIRS} ) - #pkg_check_modules(SDLTTF REQUIRED SDL_ttf) # WTF NO PkgConfig module?! - FIND_PACKAGE ( SDL_ttf REQUIRED ) - INCLUDE_DIRECTORIES ( ${SDLTTF_INCLUDE_DIR} ) - IF ( WITH_AUDIO ) - pkg_check_modules(SDLMIXER REQUIRED SDL_mixer) - INCLUDE_DIRECTORIES ( ${SDLMIXER_INCLUDE_DIRS} ) - ENDIF ( WITH_AUDIO ) -ENDIF ( NOT BUILD_SERVER ) -############################################################################### -# GETTEXT SUPPORT -############################################################################### -IF ( WITH_NLS ) - MESSAGE ( STATUS "" ) - ADD_DEFINITIONS ( -DNLS ) - ADD_SUBDIRECTORY ( po ) -ENDIF ( WITH_NLS ) -############################################################################### -# COMPILATION ITSELF -############################################################################### -CONFIGURE_FILE ( ${WORKDIR}/base/path.h.in ${CMAKE_BINARY_DIR}/src/base/path.h ) -ADD_SUBDIRECTORY ( src ) -############################################################################### -# DATA INSTALLATION -############################################################################### -ADD_SUBDIRECTORY ( data ) -SET ( tuxanci_docs - ${CMAKE_CURRENT_SOURCE_DIR}/LICENCE - ${CMAKE_CURRENT_SOURCE_DIR}/AUTHORS - ${CMAKE_CURRENT_SOURCE_DIR}/README + +target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Wextra -pedantic) + +target_compile_options(${PROJECT_NAME} PRIVATE + -g + $<$:-fdebug-prefix-map=${CMAKE_SOURCE_DIR}/src=> ) -INSTALL ( FILES ${tuxanci_docs} DESTINATION ${CMAKE_INSTALL_DOCDIR}/ ) -############################################################################### -# GOODBYE INFORMATIONS (VARIABLES SETTINGS) -############################################################################### -MESSAGE ( STATUS "" ) -MESSAGE ( STATUS "<******************************>" ) -MESSAGE ( STATUS "CFlags: ${CMAKE_C_FLAGS}" ) -MESSAGE ( STATUS "LDFLAGS: ${CMAKE_LINK_FLAGS}" ) -MESSAGE ( STATUS "PREFIX: ${CMAKE_INSTALL_PREFIX}" ) -MESSAGE ( STATUS "ETC directory: ${CMAKE_CONF_PATH}" ) -MESSAGE ( STATUS "DOC directory: ${CMAKE_DOC_PATH}" ) -MESSAGE ( STATUS "LOCALE directory: ${CMAKE_INSTALL_LOCALEDIR}" ) -MESSAGE ( STATUS "DATA directory: ${CMAKE_INSTALL_DATADIR}" ) -############################################################################### +if(EMSCRIPTEN) + set(UNIX_LIKE OFF) + set(ENABLE_AUDIO OFF) + set_target_properties(${PROJECT_NAME} PROPERTIES SUFFIX ".html") + target_compile_options(${PROJECT_NAME} PRIVATE -sUSE_SDL=3 -sUSE_SDL_TTF=3) + target_link_options(${PROJECT_NAME} PRIVATE + -sUSE_SDL=3 + -sUSE_SDL_TTF=3 + -sENVIRONMENT=web + -sWASM=1 + ) + set_target_properties(${PROJECT_NAME} PROPERTIES + LINK_FLAGS "--shell-file ${CMAKE_SOURCE_DIR}/em/${PROJECT_NAME}.html" + ) + + add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_SOURCE_DIR}/em/${PROJECT_NAME}.css + ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.css + ) +else() + if(UNIX_LIKE) + message(STATUS "UNIX_LIKE: ON") + target_compile_definitions(${PROJECT_NAME} PRIVATE UNIX_LIKE) + + find_package(Threads REQUIRED) + find_package(PkgConfig REQUIRED) + + pkg_check_modules(UNWIND REQUIRED libunwind) + target_link_libraries(${PROJECT_NAME} PRIVATE Threads::Threads ${UNWIND_LIBRARIES}) + target_include_directories(${PROJECT_NAME} PRIVATE ${UNWIND_INCLUDE_DIRS}) + target_compile_options(${PROJECT_NAME} PRIVATE ${UNWIND_CFLAGS_OTHER}) + + pkg_check_modules(DW REQUIRED libdw) + target_link_libraries(${PROJECT_NAME} PRIVATE ${DW_LIBRARIES}) + target_include_directories(${PROJECT_NAME} PRIVATE ${DW_INCLUDE_DIRS}) + target_compile_options(${PROJECT_NAME} PRIVATE ${DW_CFLAGS_OTHER}) + else() + message(STATUS "UNIX_LIKE: OFF") + endif() + + if(WIN32) + set(ENABLE_AUDIO OFF) + + find_package(SDL3 CONFIG REQUIRED) + find_package(SDL3_ttf CONFIG REQUIRED) + + target_link_libraries(${PROJECT_NAME} PRIVATE + SDL3::SDL3 + SDL3_ttf::SDL3_ttf + ) + + add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "$" + "$" + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "$" + "$" + ) + else() + pkg_check_modules(SDL REQUIRED sdl3) + target_link_libraries(${PROJECT_NAME} PRIVATE ${SDL_LIBRARIES} m) + target_include_directories(${PROJECT_NAME} PRIVATE ${SDL_INCLUDE_DIRS}) + target_compile_options(${PROJECT_NAME} PRIVATE ${SDL_CFLAGS_OTHER}) + + pkg_check_modules(SDL_TTF REQUIRED sdl3-ttf) + target_link_libraries(${PROJECT_NAME} PRIVATE ${SDL_TTF_LIBRARIES}) + target_include_directories(${PROJECT_NAME} PRIVATE ${SDL_TTF_INCLUDE_DIRS}) + target_compile_options(${PROJECT_NAME} PRIVATE ${SDL_TTF_CFLAGS_OTHER}) + endif() + + if(ENABLE_AUDIO) + message(STATUS "ENABLE_AUDIO: ON") + target_compile_definitions(${PROJECT_NAME} PRIVATE ENABLE_AUDIO) + + pkg_check_modules(OPENAL REQUIRED openal) + target_link_libraries(${PROJECT_NAME} PRIVATE ${OPENAL_LIBRARIES}) + target_include_directories(${PROJECT_NAME} PRIVATE ${OPENAL_INCLUDE_DIRS}) + target_compile_options(${PROJECT_NAME} PRIVATE ${OPENAL_CFLAGS_OTHER}) + + pkg_check_modules(OPENMPT REQUIRED libopenmpt) + target_link_libraries(${PROJECT_NAME} PRIVATE ${OPENMPT_LIBRARIES}) + target_include_directories(${PROJECT_NAME} PRIVATE ${OPENMPT_INCLUDE_DIRS}) + target_compile_options(${PROJECT_NAME} PRIVATE ${OPENMPT_CFLAGS_OTHER}) + else() + message(STATUS "ENABLE_AUDIO: OFF") + endif() +endif() + +target_compile_shaders(${PROJECT_NAME} SHADERS ${SLANG_SRC_FILES}) +target_embed_files(${PROJECT_NAME} FILES ${DATA_FILES}) \ No newline at end of file -- cgit v1.2.3