diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000000..fb222578b0 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,269 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) +if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) + if(NOT ${CMAKE_VERSION} VERSION_LESS "3.13.0") + set(command_help "cmake [] -S -B \n") + else() + set(command_help "mkdir build; cd build; cmake ..\n") + endif() + message(FATAL_ERROR "Building in the source directory gets prevented!\n" + "Please create a build directory and run cmake there.\n" + ${command_help}) +endif() + +#set default build type for single configuration generators +get_property(gen_multi GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(NOT gen_multi AND NOT (CMAKE_BUILD_TYPE OR DEFINED ENV{CMAKE_BUILD_TYPE})) + set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE) + message("Setting CMAKE_BUILD_TYPE to: ${CMAKE_BUILD_TYPE}") + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Release" "Debug" "MinSizeRel" "RelWithDebInfo") +endif() + +project("ioquake3") + +set(SOURCE_DIR "${CMAKE_SOURCE_DIR}") +set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") + +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/git_rev.cmake") +include("${CMAKELIST_DIR}/include/platform.cmake") +include("${CMAKELIST_DIR}/include/vm_sources.cmake") + + +if(DEFINED BUILD_GAME_SO) + message(DEPRECATION "BUILD_GAME_SO is deprecated, please use BUILD_GAME_VM.") + set(BUILD_GAME_VM ${BUILD_GAME_SO}) + unset(BUILD_GAME_SO CACHE) +endif() +option(BUILD_AUTOUPDATER "Build Autoupdater" ${DEFAULT_BUILD_AUTOUPDATER}) +option(BUILD_BASEGAME "Build basegame (baseq3)" ${DEFAULT_BUILD_BASEGAME}) +option(BUILD_CLIENT "Build clientserver" ${DEFAULT_BUILD_CLIENT}) +option(BUILD_GAME_QVM "Build quake virtual machine (qvm)" ${DEFAULT_BUILD_GAME_QVM}) +option(BUILD_GAME_VM "Build native VM (so/dll)" ${DEFAULT_BUILD_GAME_VM}) +option(BUILD_MISSIONPACK "Build missionpack" ${DEFAULT_BUILD_MISSIONPACK}) +option(BUILD_RENDERER_OPENGL2 "Build renderer opengl2" ${DEFAULT_BUILD_RENDERER_OPENGL2}) +option(BUILD_SERVER "Build dedicated server" ${DEFAULT_BUILD_SERVER}) + +option(USE_INTERNAL_LIBS "Use internal libraries (Ogg,Vorbis,Opus,zlib,JPEG,...)" ${DEFAULT_USE_INTERNAL_LIBS}) +option(USE_INTERNAL_JPEG "Use internal JPEG library" ${USE_INTERNAL_LIBS}) +option(USE_INTERNAL_ZLIB "Use internal zlib" ${USE_INTERNAL_LIBS}) +if(MSVC) + option(BUILD_STATIC_CRT "Build (static) multi-threaded C runtime library" ${DEFAULT_BUILD_STATIC_CRT}) +endif() +set(PRODUCT_VERSION "${DEFAULT_VERSION}" CACHE STRING "Product version") + +set(BASEGAME "${DEFAULT_BASEGAME}" CACHE STRING "Directory for the base game") +set(MISSIONPACK "${DEFAULT_MISSIONPACK}" CACHE STRING "Directory for the missionpack") + +#relocate build files for easier access +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +#.lib .a files +#set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) + + +if(USE_INTERNAL_ZLIB AND (BUILD_CLIENT OR BUILD_SERVER)) + add_subdirectory("${CMAKELIST_DIR}/internal_zlib") +endif() + +if(BUILD_AUTOUPDATER) + add_subdirectory("${CMAKELIST_DIR}/autoupdater") +endif(BUILD_AUTOUPDATER) + +if(BUILD_CLIENT) + if(USE_INTERNAL_JPEG) + add_subdirectory("${CMAKELIST_DIR}/internal_jpeg") + endif() + + add_subdirectory("${CMAKELIST_DIR}/client") + + if(USE_RENDERER_DLOPEN) + add_subdirectory("${CMAKELIST_DIR}/renderergl1") + endif(USE_RENDERER_DLOPEN) + if(BUILD_RENDERER_OPENGL2) + add_subdirectory("${CMAKELIST_DIR}/renderergl2") + endif(BUILD_RENDERER_OPENGL2) +endif(BUILD_CLIENT) + +if(BUILD_SERVER) + add_subdirectory("${CMAKELIST_DIR}/server") +endif(BUILD_SERVER) + +if(BUILD_GAME_VM) + if(BUILD_BASEGAME) + add_subdirectory("${CMAKELIST_DIR}/vm/${BASEGAME}") + endif(BUILD_BASEGAME) + + if(BUILD_MISSIONPACK) + add_subdirectory("${CMAKELIST_DIR}/vm/${MISSIONPACK}") + endif(BUILD_MISSIONPACK) +endif(BUILD_GAME_VM) + +GET_VM_SUPPORT(HAVE_VM_COMPILED) +if(BUILD_GAME_QVM AND HAVE_VM_COMPILED) + add_subdirectory("${CMAKELIST_DIR}/tools") + + if(BUILD_BASEGAME) + add_subdirectory("${CMAKELIST_DIR}/qvm/${BASEGAME}") + endif(BUILD_BASEGAME) + + if(BUILD_MISSIONPACK) + add_subdirectory("${CMAKELIST_DIR}/qvm/${MISSIONPACK}") + endif(BUILD_MISSIONPACK) +endif() + + +if(GIT_REV) + set(git_rev_string "${GIT_REV}") +else() + set(git_rev_string "") +endif(GIT_REV) +if(gen_multi) + set(build_type_string "") +elseif(CMAKE_BUILD_TYPE) + set(build_type_string "${CMAKE_BUILD_TYPE}") +else() + set(build_type_string "") +endif() +#CMAKE_C_FLAGS is initialized by the CFLAGS environment variable +if(CMAKE_C_FLAGS) + set(c_flags_string "${CMAKE_C_FLAGS}") +else() + set(c_flags_string "") +endif() +if(CMAKE_C_FLAGS_RELEASE) + set(c_flags_release_string "${CMAKE_C_FLAGS_RELEASE}") +else() + set(c_flags_release_string "") +endif() +if(MSVC) + if(BUILD_STATIC_CRT) + set(static_crt_string "yes (/MT)") + else() + set(static_crt_string "no") + endif() +else() + set(static_crt_string "") +endif() +if(DEFINED ENV{SOURCE_DATE_EPOCH}) + if(NOT ${CMAKE_VERSION} VERSION_LESS "3.8.0") + set(source_date_epoch_string "$ENV{SOURCE_DATE_EPOCH}") + else() + set(source_date_epoch_string "") + endif() +else() + set(source_date_epoch_string "") +endif() + +set(INTERNAL_LIBS "") +if(USE_INTERNAL_CURL) + list(APPEND INTERNAL_LIBS "cURL") +endif() +if(USE_INTERNAL_JPEG) + list(APPEND INTERNAL_LIBS "JPEG") +endif() +if(USE_INTERNAL_OGG) + list(APPEND INTERNAL_LIBS "Ogg") +endif() +if(USE_INTERNAL_OPENAL) + list(APPEND INTERNAL_LIBS "OpenAL") +endif() +if(USE_INTERNAL_OPUS) + list(APPEND INTERNAL_LIBS "Opus") +endif() +if(USE_INTERNAL_SDL) + list(APPEND INTERNAL_LIBS "SDL") +endif() +if(USE_INTERNAL_VORBIS) + list(APPEND INTERNAL_LIBS "Vorbis") +endif() +if(USE_INTERNAL_ZLIB) + list(APPEND INTERNAL_LIBS "zlib") +endif() +string(REPLACE ";" ", " internal_libs_string "${INTERNAL_LIBS}") + +message("Building in ${CMAKE_BINARY_DIR}:") +message(" Project: ${CMAKE_PROJECT_NAME}") +message(" Project version: ${PRODUCT_VERSION}") +message(" Git revision: ${git_rev_string}") +message(" Platform: ${CMAKE_HOST_SYSTEM_NAME}") +message(" Platform version: ${CMAKE_HOST_SYSTEM_VERSION}") +message(" Architecture: ${CMAKE_HOST_SYSTEM_PROCESSOR}") +message(" Compile platform: ${COMPILE_PLATFORM}") +message(" Compile architecture: ${COMPILE_ARCH}") +message(" CMake generator: ${CMAKE_GENERATOR}") +message(" C compiler ID: ${CMAKE_C_COMPILER_ID}") +message(" C compiler version: ${CMAKE_C_COMPILER_VERSION}") +message(" SOURCE_DATE_EPOCH: ${source_date_epoch_string}") +message(" CMAKE_BUILD_TYPE: ${build_type_string}") +message(" CMAKE_C_FLAGS: ${c_flags_string}") +message(" CMAKE_C_FLAGS_RELEASE:${c_flags_release_string}") +message(" BUILD_STATIC_CRT: ${static_crt_string}") +message(" Internal libraries: ${internal_libs_string}") + + +# dist target +find_package(Git) + +if(NOT GIT_FOUND) + set(GIT_EXECUTABLE "git") +endif() + +if(USE_GIT_REV AND GIT_REV) + set(DIST_VERSION "${PRODUCT_VERSION}_GIT_${GIT_REV}") +else() + set(DIST_VERSION "${PRODUCT_VERSION}") +endif() + +add_custom_target(dist + COMMAND "${GIT_EXECUTABLE}" archive --format zip --output "${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}-${DIST_VERSION}.zip" HEAD + COMMENT "git archive --format zip --output ${CMAKE_PROJECT_NAME}-${DIST_VERSION}.zip HEAD" + WORKING_DIRECTORY ${SOURCE_DIR}) + +include(CPack) + +if(NOT hide_build_notice AND CMAKE_GENERATOR STREQUAL "Visual Studio 16 2019") + message("For a Visual Studio 16 2019 32-bit build use these components:\n" + " C++ core features\n" + " Windows Universal C Runtime\n" + " MSVC v142 - VS 2019 C++ x64/x86 build tools (latest)\n" + " Python 3 32-bit (3.9.7)\n" + " C++ CMake tools for Windows\n" + " Windows 11 SDK (10.0.22000.0)\n" + " Windows Universal CRT SDK\n" + " C++ Windows XP Support for VS 2017 (v141) tools\n" + " MSVC v142 - VS 2019 C++ x64/x86 build tools (14.29-16.10)\n" + " Windows 10 SDK (10.0.20348.0)") + message("MSVC -> Tools -> Command Line -> Developer Command Prompt") +endif() +if(NOT hide_build_notice AND CMAKE_GENERATOR STREQUAL "MSYS Makefiles") + message("For a MSYS build install these packages:\n" + " (a CMake version that supports the MSYS generator)\n" + " 64-bit: mingw-w64-x86_64-toolchain (gcc, make and binutils [strip, ld, ...])\n" + " 32-bit: mingw-w64-i686-toolchain\n" + " Optional libraries:\n" + " libcurl-devel, libcurl, libjpeg, libogg, openal, opus, opusfile, SDL2, libvorbis, zlib-devel, zlib\n") +endif() +set(hide_build_notice 1 CACHE INTERNAL "Only show build requirements once") diff --git a/misc/CMakeLists/autoupdater/CMakeLists.txt b/misc/CMakeLists/autoupdater/CMakeLists.txt new file mode 100644 index 0000000000..a3229a5ff9 --- /dev/null +++ b/misc/CMakeLists/autoupdater/CMakeLists.txt @@ -0,0 +1,131 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("autoupdater") + +set(AUTOUPDATER_TARGET "autoupdater") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +set(MOUNT_DIR "${SOURCE_DIR}/code" CACHE PATH "path to the code directory") + +set(AUTOUPDATER_SRC_DIR "${MOUNT_DIR}/autoupdater") +set(LIBTOMCRYPT_SRC_DIR "${AUTOUPDATER_SRC_DIR}/rsa_tools/libtomcrypt-1.17") +set(TOMSFASTMATH_SRC_DIR "${AUTOUPDATER_SRC_DIR}/rsa_tools/tomsfastmath-0.13.1") + +include("${CMAKELIST_DIR}/include/compat.cmake") +include("${CMAKELIST_DIR}/include/default_options.cmake") +include(CheckCCompilerFlag) + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + option(GENERATE_DEPENDENCIES "Preprocessing: Generate dependencies for make outputting" ${DEFAULT_GENERATE_DEPENDENCIES}) +endif() + +set(AUTOUPDATER_SOURCES + "${AUTOUPDATER_SRC_DIR}/autoupdater.c" + +) +set(AUTOUPDATER_HEADERS + +) + +find_package(TOMCRYPT 1.17 QUIET) +if(TOMCRYPT_FOUND) + list(APPEND AUTOUPDATER_DEFINITIONS ${TOMCRYPT_DEFINITIONS}) + if(TOMCRYPT_INCLUDE_DIR) + list(APPEND AUTOUPDATER_INCLUDE_DIRS "${TOMCRYPT_INCLUDE_DIR}") + endif(TOMCRYPT_INCLUDE_DIR) + list(APPEND AUTOUPDATER_INCLUDE_DIRS ${TOMCRYPT_INCLUDE_DIRS}) + list(APPEND AUTOUPDATER_LIBRARIES "${TOMCRYPT_LIBRARY}") + list(APPEND AUTOUPDATER_LIBRARIES ${TOMCRYPT_LIBRARIES}) +else(TOMCRYPT_FOUND) + list(APPEND AUTOUPDATER_LIBRARIES "tomcrypt") + link_directories("${LIBTOMCRYPT_SRC_DIR}") + list(APPEND AUTOUPDATER_INCLUDE_DIRS "${LIBTOMCRYPT_SRC_DIR}/src/headers") +endif(TOMCRYPT_FOUND) + +find_package(TOMSFASTMATH 0.13.1 QUIET) +if(TOMSFASTMATH_FOUND) + list(APPEND AUTOUPDATER_DEFINITIONS ${TOMSFASTMATH_DEFINITIONS}) + if(TOMSFASTMATH_INCLUDE_DIR) + list(APPEND AUTOUPDATER_INCLUDE_DIRS "${TOMSFASTMATH_INCLUDE_DIR}") + endif(TOMSFASTMATH_INCLUDE_DIR) + list(APPEND AUTOUPDATER_INCLUDE_DIRS ${TOMSFASTMATH_INCLUDE_DIRS}) + list(APPEND AUTOUPDATER_LIBRARIES "${TOMSFASTMATH_LIBRARY}") + list(APPEND AUTOUPDATER_LIBRARIES ${TOMSFASTMATH_LIBRARIES}) +else(TOMSFASTMATH_FOUND) + list(APPEND AUTOUPDATER_LIBRARIES "tfm") + link_directories("${TOMSFASTMATH_SRC_DIR}") + list(APPEND AUTOUPDATER_INCLUDE_DIRS "${TOMSFASTMATH_SRC_DIR}/src/headers") +endif(TOMSFASTMATH_FOUND) + +if(MINGW AND (CMAKE_COMPILER_IS_GNUCC + OR CMAKE_C_COMPILER_ID STREQUAL "Clang")) + #InternetOpen, HttpQueryInfo, InternetOpenUrl, + #InternetCloseHandle, InternetReadFile functions + list(APPEND AUTOUPDATER_LIBRARIES "wininet") + +endif() + +if(MSVC) + + #disable deprecation warnings about old functions like strcmp + list(APPEND AUTOUPDATER_DEFINITIONS "-D_CRT_SECURE_NO_WARNINGS") + + if(BUILD_STATIC_CRT) + list(APPEND AUTOUPDATER_CFLAGS "/MT") + endif() + +endif(MSVC) + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + +# list(APPEND AUTOUPDATER_CFLAGS_OPTIMIZE "-g") +# list(APPEND AUTOUPDATER_CFLAGS_OPTIMIZE "-Wall") +# list(APPEND AUTOUPDATER_CFLAGS_OPTIMIZE "-fno-strict-aliasing") + + CHECK_C_COMPILER_FLAG("-MMD" COMPILER_SUPPORTS_-MMD) + if(GENERATE_DEPENDENCIES AND COMPILER_SUPPORTS_-MMD) + list(APPEND AUTOUPDATER_CFLAGS "-MMD") + endif() + +endif() + +#source_group("Source Files" FILES ${AUTOUPDATER_SOURCES}) +#source_group("Header Files" FILES ${AUTOUPDATER_HEADERS}) + +add_executable(${AUTOUPDATER_TARGET} ${AUTOUPDATER_SOURCES} ${AUTOUPDATER_HEADERS}) + +target_compile_definitions(${AUTOUPDATER_TARGET} PRIVATE ${AUTOUPDATER_DEFINITIONS}) + +target_include_directories(${AUTOUPDATER_TARGET} PRIVATE ${AUTOUPDATER_INCLUDE_DIRS}) + +compat_target_compile_options(${AUTOUPDATER_TARGET} PRIVATE ${AUTOUPDATER_CFLAGS}) + +target_link_libraries(${AUTOUPDATER_TARGET} ${AUTOUPDATER_LIBRARIES}) + +compat_target_link_options(${AUTOUPDATER_TARGET} PRIVATE ${AUTOUPDATER_LDFLAGS}) diff --git a/misc/CMakeLists/client/CMakeLists.txt b/misc/CMakeLists/client/CMakeLists.txt new file mode 100644 index 0000000000..6c12381429 --- /dev/null +++ b/misc/CMakeLists/client/CMakeLists.txt @@ -0,0 +1,964 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("client") + +set(CLIENT_TARGET "client") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/cflags.cmake") +include("${CMAKELIST_DIR}/include/compat.cmake") +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") +include("${CMAKELIST_DIR}/include/git_rev.cmake") +include("${CMAKELIST_DIR}/include/strip.cmake") +include("${CMAKELIST_DIR}/include/platform.cmake") +include("${CMAKELIST_DIR}/include/vm_sources.cmake") + +include(CheckCSourceCompiles) +include(CheckIncludeFile) + + +#cmake does append any extensions +set(CLIENT_BIN "${DEFAULT_CLIENT_BIN}" CACHE STRING "binary/executable name") + +option(BUILD_STANDALONE "Standalone" ${DEFAULT_BUILD_STANDALONE}) + +#Note: options and build directories get cached +option(USE_INTERNAL_LIBS "Use internal libraries (Ogg,Vorbis,Opus,zlib,JPEG,...)" ${DEFAULT_USE_INTERNAL_LIBS}) +option(USE_INTERNAL_CURL "Use internal cURL library" ${USE_INTERNAL_LIBS}) +option(USE_INTERNAL_OGG "Use internal Ogg" ${USE_INTERNAL_LIBS}) +option(USE_INTERNAL_OPENAL "Use internal OpenAL library" ${USE_INTERNAL_LIBS}) +option(USE_INTERNAL_OPUS "Use internal Opus" ${USE_INTERNAL_LIBS}) +#option(USE_INTERNAL_SPEEX "Use internal Speex library" ${USE_INTERNAL_LIBS}) +option(USE_INTERNAL_SDL "Use internal SDL library" ${USE_INTERNAL_LIBS}) +option(USE_INTERNAL_VORBIS "Use internal Vorbis" ${USE_INTERNAL_LIBS}) +option(USE_INTERNAL_ZLIB "Use internal zlib" ${USE_INTERNAL_LIBS}) +option(USE_LOCAL_HEADERS "Use local headers" ${USE_INTERNAL_LIBS}) + +option(USE_CURL "Use cURL" ${DEFAULT_USE_CURL}) +option(USE_CURL_DLOPEN "Use cURL dynamic library opening" ${DEFAULT_USE_CURL_DLOPEN}) +#on Apple/MacOS the icon of the AppBundle is used +if(NOT PLATFORM STREQUAL "darwin") + option(USE_ICON "Use window icon" ${DEFAULT_USE_ICON}) +endif() +option(USE_OPENAL "Use OpenAL" ${DEFAULT_USE_OPENAL}) +option(USE_OPENAL_DLOPEN "Use OpenAL dynamic library opening" ${DEFAULT_USE_OPENAL_DLOPEN}) +option(USE_RENDERER_DLOPEN "Use renderer dynamic library opening" ${DEFAULT_USE_RENDERER_DLOPEN}) +option(USE_VOIP "Use VOIP" ${DEFAULT_USE_VOIP}) +option(USE_MUMBLE "Use Mumble support" ${DEFAULT_USE_MUMBLE}) +option(USE_CODEC_OPUS "Use Opus support" ${DEFAULT_USE_CODEC_OPUS}) +option(USE_CODEC_VORBIS "Use Vorbis support" ${DEFAULT_USE_CODEC_VORBIS}) +option(USE_FREETYPE "Use Freetype2 support" ${DEFAULT_USE_FREETYPE}) +option(USE_AUTOUPDATER "Use Autoupdater" ${DEFAULT_USE_AUTOUPDATER}) + +option(USE_RENDERER_DLOPEN "Use renderer dynamic library opening" ${DEFAULT_USE_RENDERER_DLOPEN}) +set(PRODUCT_VERSION "${DEFAULT_VERSION}" CACHE STRING "Product version") +option(USE_GIT_REV "Use Git revision for version" ${DEFAULT_USE_GIT_REV}) + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + option(GENERATE_DEPENDENCIES "Preprocessing: Generate dependencies for make outputting" ${DEFAULT_GENERATE_DEPENDENCIES}) +endif() +option(NO_STRIP "No strip (keep all symbol table and relocation information)" ${DEFAULT_NO_STRIP}) +if(MSVC) + option(BUILD_STATIC_CRT "Build (static) multi-threaded C runtime library" ${DEFAULT_BUILD_STATIC_CRT}) +endif() + +set(BIN_EXT "${DEFAULT_BIN_EXT}" CACHE STRING "Binary/executable extension") + +set(REL_INSTALL_DEST "${DEFAULT_REL_INSTALL_DEST}" CACHE PATH "Relative installation destination") +set(INSTALL_DIR "${DEFAULT_INSTALL_DIR}" CACHE PATH "Installation directory") + +set(BOTLIB_SOURCES + "${BOTLIB_DIR}/be_aas_bspq3.c" + "${BOTLIB_DIR}/be_aas_cluster.c" + "${BOTLIB_DIR}/be_aas_debug.c" + "${BOTLIB_DIR}/be_aas_entity.c" + "${BOTLIB_DIR}/be_aas_file.c" + "${BOTLIB_DIR}/be_aas_main.c" + "${BOTLIB_DIR}/be_aas_move.c" + "${BOTLIB_DIR}/be_aas_optimize.c" + "${BOTLIB_DIR}/be_aas_reach.c" + "${BOTLIB_DIR}/be_aas_route.c" + "${BOTLIB_DIR}/be_aas_routealt.c" + "${BOTLIB_DIR}/be_aas_sample.c" + "${BOTLIB_DIR}/be_ai_char.c" + "${BOTLIB_DIR}/be_ai_chat.c" + "${BOTLIB_DIR}/be_ai_gen.c" + "${BOTLIB_DIR}/be_ai_goal.c" + "${BOTLIB_DIR}/be_ai_move.c" + "${BOTLIB_DIR}/be_ai_weap.c" + "${BOTLIB_DIR}/be_ai_weight.c" + "${BOTLIB_DIR}/be_ea.c" + "${BOTLIB_DIR}/be_interface.c" + "${BOTLIB_DIR}/l_crc.c" + "${BOTLIB_DIR}/l_libvar.c" + "${BOTLIB_DIR}/l_log.c" + "${BOTLIB_DIR}/l_memory.c" + "${BOTLIB_DIR}/l_precomp.c" + "${BOTLIB_DIR}/l_script.c" + "${BOTLIB_DIR}/l_struct.c" +) +set(BOTLIB_HEADERS + "${BOTLIB_DIR}/aasfile.h" + "${BOTLIB_DIR}/be_aas.h" + "${BOTLIB_DIR}/be_aas_bsp.h" + "${BOTLIB_DIR}/be_aas_cluster.h" + "${BOTLIB_DIR}/be_aas_debug.h" + "${BOTLIB_DIR}/be_aas_def.h" + "${BOTLIB_DIR}/be_aas_entity.h" + "${BOTLIB_DIR}/be_aas_file.h" + "${BOTLIB_DIR}/be_aas_funcs.h" + "${BOTLIB_DIR}/be_aas_main.h" + "${BOTLIB_DIR}/be_aas_move.h" + "${BOTLIB_DIR}/be_aas_optimize.h" + "${BOTLIB_DIR}/be_aas_reach.h" + "${BOTLIB_DIR}/be_aas_route.h" + "${BOTLIB_DIR}/be_aas_routealt.h" + "${BOTLIB_DIR}/be_aas_sample.h" + "${BOTLIB_DIR}/be_ai_char.h" + "${BOTLIB_DIR}/be_ai_chat.h" + "${BOTLIB_DIR}/be_ai_gen.h" + "${BOTLIB_DIR}/be_ai_goal.h" + "${BOTLIB_DIR}/be_ai_move.h" + "${BOTLIB_DIR}/be_ai_weap.h" + "${BOTLIB_DIR}/be_ai_weight.h" + "${BOTLIB_DIR}/be_ea.h" + "${BOTLIB_DIR}/be_interface.h" + "${BOTLIB_DIR}/botlib.h" + "${BOTLIB_DIR}/l_crc.h" + "${BOTLIB_DIR}/l_libvar.h" + "${BOTLIB_DIR}/l_log.h" + "${BOTLIB_DIR}/l_memory.h" + "${BOTLIB_DIR}/l_precomp.h" + "${BOTLIB_DIR}/l_script.h" + "${BOTLIB_DIR}/l_struct.h" + "${BOTLIB_DIR}/l_utils.h" +) +set(CLIENT_SOURCES + "${CLIENT_DIR}/cl_avi.c" + "${CLIENT_DIR}/cl_cgame.c" + "${CLIENT_DIR}/cl_cin.c" + "${CLIENT_DIR}/cl_console.c" + "${CLIENT_DIR}/cl_curl.c" + "${CLIENT_DIR}/cl_input.c" + "${CLIENT_DIR}/cl_keys.c" + "${CLIENT_DIR}/cl_main.c" + "${CLIENT_DIR}/cl_net_chan.c" + "${CLIENT_DIR}/cl_parse.c" + "${CLIENT_DIR}/cl_scrn.c" + "${CLIENT_DIR}/cl_ui.c" +# "${CLIENT_DIR}/libmumblelink.c" + "${CLIENT_DIR}/qal.c" + "${CLIENT_DIR}/snd_adpcm.c" + "${CLIENT_DIR}/snd_codec.c" + "${CLIENT_DIR}/snd_codec_ogg.c" + "${CLIENT_DIR}/snd_codec_opus.c" + "${CLIENT_DIR}/snd_codec_wav.c" + "${CLIENT_DIR}/snd_dma.c" + "${CLIENT_DIR}/snd_main.c" + "${CLIENT_DIR}/snd_mem.c" + "${CLIENT_DIR}/snd_mix.c" + "${CLIENT_DIR}/snd_openal.c" + "${CLIENT_DIR}/snd_wavelet.c" +) +set(CLIENT_HEADERS + "${CLIENT_DIR}/cl_curl.h" + "${CLIENT_DIR}/client.h" + "${CLIENT_DIR}/keycodes.h" + "${CLIENT_DIR}/keys.h" + "${CLIENT_DIR}/libmumblelink.h" + "${CLIENT_DIR}/qal.h" + "${CLIENT_DIR}/snd_codec.h" + "${CLIENT_DIR}/snd_local.h" + "${CLIENT_DIR}/snd_public.h" +) +set(CLIENT_MUMBLE_SOURCES + "${CLIENT_DIR}/libmumblelink.c" +) + +include("${CMAKELIST_DIR}/include/libsdl_headers.cmake") + +set(QCOMMON_SOURCES + "${QCOMMON_DIR}/cm_load.c" + "${QCOMMON_DIR}/cm_patch.c" + "${QCOMMON_DIR}/cm_polylib.c" + "${QCOMMON_DIR}/cm_test.c" + "${QCOMMON_DIR}/cm_trace.c" + "${QCOMMON_DIR}/cmd.c" + "${QCOMMON_DIR}/common.c" + "${QCOMMON_DIR}/cvar.c" + "${QCOMMON_DIR}/files.c" + "${QCOMMON_DIR}/huffman.c" + "${QCOMMON_DIR}/ioapi.c" + "${QCOMMON_DIR}/md4.c" + "${QCOMMON_DIR}/md5.c" + "${QCOMMON_DIR}/msg.c" + "${QCOMMON_DIR}/net_chan.c" + "${QCOMMON_DIR}/net_ip.c" + "${QCOMMON_DIR}/puff.c" + "${QCOMMON_DIR}/q_math.c" + "${QCOMMON_DIR}/q_shared.c" + "${QCOMMON_DIR}/unzip.c" + "${QCOMMON_DIR}/vm.c" + "${QCOMMON_DIR}/vm_interpreted.c" +# "${QCOMMON_DIR}/vm_none.c" +# "${QCOMMON_DIR}/vm_armv7l.c" +# "${QCOMMON_DIR}/vm_powerpc.c" +# "${QCOMMON_DIR}/vm_powerpc_asm.c" +# "${QCOMMON_DIR}/vm_sparc.c" +# "${QCOMMON_DIR}/vm_x86.c" +) +set(QCOMMON_HEADERS + "${QCOMMON_DIR}/cm_local.h" + "${QCOMMON_DIR}/cm_patch.h" + "${QCOMMON_DIR}/cm_polylib.h" + "${QCOMMON_DIR}/cm_public.h" + "${QCOMMON_DIR}/ioapi.h" + "${QCOMMON_DIR}/puff.h" + "${QCOMMON_DIR}/q_platform.h" + "${QCOMMON_DIR}/q_shared.h" + "${QCOMMON_DIR}/qcommon.h" + "${QCOMMON_DIR}/qfiles.h" + "${QCOMMON_DIR}/surfaceflags.h" + "${QCOMMON_DIR}/unzip.h" + "${QCOMMON_DIR}/vm_local.h" +# "${QCOMMON_DIR}/vm_powerpc_asm.h" +# "${QCOMMON_DIR}/vm_sparc.h" +) + +set(SDL_SOURCES +# "${SDL_DIR}/sdl_gamma.c" +# "${SDL_DIR}/sdl_glimp.c" + "${SDL_DIR}/sdl_input.c" + "${SDL_DIR}/sdl_snd.c" +) +set(SDL_HEADERS + "${SDL_DIR}/sdl_icon.h" +) + + +set(SERVER_SOURCES + "${SERVER_DIR}/sv_bot.c" + "${SERVER_DIR}/sv_ccmds.c" + "${SERVER_DIR}/sv_client.c" + "${SERVER_DIR}/sv_game.c" + "${SERVER_DIR}/sv_init.c" + "${SERVER_DIR}/sv_main.c" + "${SERVER_DIR}/sv_net_chan.c" +# "${SERVER_DIR}/sv_rankings.c" + "${SERVER_DIR}/sv_snapshot.c" + "${SERVER_DIR}/sv_world.c" +) +set(SERVER_HEADERS + "${SERVER_DIR}/server.h" +) + +set(SYS_SOURCES + "${SYS_DIR}/con_log.c" +# "${SYS_DIR}/con_passive.c" +# "${SYS_DIR}/con_tty.c" +# "${SYS_DIR}/con_win32.c" + "${SYS_DIR}/sys_autoupdater.c" + "${SYS_DIR}/sys_main.c" +# "${SYS_DIR}/sys_unix.c" +# "${SYS_DIR}/sys_win32.c" +) +set(SYS_HEADERS + "${SYS_DIR}/sys_loadlib.h" + "${SYS_DIR}/sys_local.h" + "${SYS_DIR}/win_resource.h" +) +list(APPEND SYS_RC_SOURCES + "${SYS_DIR}/win_manifest.xml" + "${SYS_DIR}/win_resource.rc" +) +list(APPEND SYS_WIN_SOURCES + "${SYS_DIR}/con_passive.c" + "${SYS_DIR}/sys_win32.c" +# "${SYS_DIR}/con_win32.c" +) +list(APPEND SYS_UNIX_SOURCES +# "${SYS_DIR}/con_unix.c" + "${SYS_DIR}/con_tty.c" + "${SYS_DIR}/sys_unix.c" +) +list(APPEND SYS_OSX_SOURCES +# "${SYS_DIR}/sys_osx.c" + "${SYS_DIR}/sys_osx.m" +) + + +if(WIN32) + #requires parent directory for misc/quake3.ico in win_resource.rc + list(APPEND CLIENT_INCLUDE_DIRS "${SOURCE_DIR}") +endif(WIN32) + +if(MSVC) + if(NOT SDL_FOUND AND USE_INTERNAL_SDL) + if(ARCH STREQUAL "x86_64") + list(APPEND SDL_LIBRARIES + "${LIBS_DIR}/win64/SDL2main.lib" + "${LIBS_DIR}/win64/SDL2.lib" + ) + set(SDL_FOUND TRUE) + elseif(ARCH STREQUAL "x86") + list(APPEND SDL_LIBRARIES + "${LIBS_DIR}/win32/SDL2main.lib" + "${LIBS_DIR}/win32/SDL2.lib" + ) + set(SDL_FOUND TRUE) + + endif() + + if(SDL_FOUND) + foreach(FILEPATH ${SDL_LIBRARIES}) + if(NOT EXISTS "${FILEPATH}") + message(WARNING "Could not find the file for MSVC: ${FILEPATH}\n") + endif() + endforeach(FILEPATH) + endif(SDL_FOUND) + endif() + + if(USE_CURL AND NOT USE_CURL_DLOPEN AND USE_INTERNAL_CURL) + if(ARCH STREQUAL "x86_64") + list(APPEND CURL_LIBRARIES "${LIBS_DIR}/win64/curl.lib") + set(CURL_FOUND TRUE) + elseif(ARCH STREQUAL "x86") + list(APPEND CURL_LIBRARIES "${LIBS_DIR}/win32/curl.lib") + set(CURL_FOUND TRUE) + + endif() + if(CURL_FOUND) + list(APPEND CURL_DEFINITIONS "-DCURL_STATICLIB") + foreach(FILEPATH ${CURL_LIBRARIES}) + if(NOT EXISTS "${FILEPATH}") + message(WARNING "Could not find the file for MSVC: ${FILEPATH}\n") + endif() + endforeach(FILEPATH) + endif(CURL_FOUND) + endif() + + include(CheckLanguage) + check_language(ASM_MASM) + if(CMAKE_ASM_MASM_COMPILER) + enable_language(ASM_MASM) + set(HAVE_MASM_COMPILER TRUE) + endif(CMAKE_ASM_MASM_COMPILER) + + if(NOT HAVE_MASM_COMPILER) + message(WARNING "Microsoft ASM compiler is required!") + else() + if(NOT (ARCH STREQUAL "x86" OR ARCH STREQUAL "x86_64")) + message(WARNING "Only architecture x86 and x86_64 are supported for MSVC!") + endif() + endif() + + set(USE_MASM_SOURCES TRUE) + + list(APPEND SYS_SOURCES ${SYS_WIN_SOURCES}) + + #Character Set, CharacterSet="0", Not Set, ASCII/SBCS (Single Byte Character Set) + list(APPEND CLIENT_DEFINITIONS "-D_SBCS") + + #disable deprecation warnings about old functions like strcmp + list(APPEND CLIENT_DEFINITIONS "-D_CRT_SECURE_NO_WARNINGS") + + #fix msvc 2019 not setting __i386__ + if(ARCH STREQUAL "x86") + list(APPEND CLIENT_DEFINITIONS "-D__i386__") + endif() + + #Whole program optimization, no /GL- + list(APPEND CLIENT_CFLAGS "/GL-") + + #Warning Level /W4 + list(APPEND CLIENT_CFLAGS "/W4") + + #Enable String Pooling /GF + list(APPEND CLIENT_CFLAGS "/GF") + #Enable C++ Exceptions, No /EHa- + list(APPEND CLIENT_CFLAGS "/EHa-") + #Enable Function-Level Linking /Gy + list(APPEND CLIENT_CFLAGS "/Gy") + #Floating Point Model /fp:fast + list(APPEND CLIENT_CFLAGS "/fp:fast") + + #Compile as, C Code /TC + list(APPEND CLIENT_CFLAGS "/TC") + + #Disable specific warnings + #warning C4706: assignment within conditional expression + list(APPEND CLIENT_CFLAGS "/wd4706") + #warning C4389: '!=' : signed/unsigned mismatch + list(APPEND CLIENT_CFLAGS "/wd4389") + #warning C4100: 'opaque' : unreferenced formal parameter + list(APPEND CLIENT_CFLAGS "/wd4100") + #warning C4131: 'fill_fopen_filefunc' : uses old-style declarator + list(APPEND CLIENT_CFLAGS "/wd4131") + #warning C4245: 'return' : conversion from 'int' to 'uLong', signed/unsigned mismatch + list(APPEND CLIENT_CFLAGS "/wd4245") + + #Subsystem /SUBSYSTEM:WINDOWS + list(APPEND CLIENT_LDFLAGS "/SUBSYSTEM:WINDOWS") + #Stack Reserve Size /STACK:8388608 + list(APPEND CLIENT_LDFLAGS "/STACK:8388608") + #Randomized Base Address /DYNAMICBASE:NO + list(APPEND CLIENT_LDFLAGS "/DYNAMICBASE:NO") + #Data Execution Prevenbtion (DEP) /NXCOMPAT:NO + list(APPEND CLIENT_LDFLAGS "/NXCOMPAT:NO") + #Image Has Safe Exception Handlers, is no longer default no in msvc 2013, /SAFESEH:NO + list(APPEND CLIENT_LDFLAGS "/SAFESEH:NO") + + #not generating manifest, using win_manifest.xml + list(APPEND CLIENT_LDFLAGS "/MANIFEST:NO") + + #time functions winmm.lib + #EnumProcesses function psapi.lib + #windows socket functions ws2_32.lib + list(APPEND CLIENT_LIBRARIES "winmm" "psapi" "ws2_32") + + #requires directory misc/msvc for ../quake3.ico in win_resource.rc + list(APPEND CLIENT_INCLUDE_DIRS "${SOURCE_DIR}/misc/msvc") + +endif(MSVC) + +if(MINGW AND (CMAKE_COMPILER_IS_GNUCC + OR CMAKE_C_COMPILER_ID STREQUAL "Clang")) + if(NOT SDL_FOUND AND USE_INTERNAL_SDL) + if(ARCH STREQUAL "x86_64") + list(APPEND SDL_LIBRARIES + "${LIBS_DIR}/win64/libSDL264main.a" + "${LIBS_DIR}/win64/libSDL264.dll.a" + ) + set(SDL_FOUND TRUE) + elseif(ARCH STREQUAL "x86") + list(APPEND SDL_LIBRARIES + "${LIBS_DIR}/win32/libSDL2main.a" + "${LIBS_DIR}/win32/libSDL2.dll.a" + ) + set(SDL_FOUND TRUE) + + endif() + if(SDL_FOUND) + foreach(FILEPATH ${SDL_LIBRARIES}) + if(NOT EXISTS "${FILEPATH}") + message(WARNING "Could not find the file for MinGW: ${FILEPATH}\n") + endif() + endforeach(FILEPATH) + endif(SDL_FOUND) + endif() + + if(USE_CURL AND NOT USE_CURL_DLOPEN AND USE_INTERNAL_CURL) + if(ARCH STREQUAL "x86_64") + list(APPEND CURL_LIBRARIES "${LIBS_DIR}/win64/libcurl.a") + set(CURL_FOUND TRUE) + elseif(ARCH STREQUAL "x86") + list(APPEND CURL_LIBRARIES "${LIBS_DIR}/win32/libcurl.a") + set(CURL_FOUND TRUE) + + endif() + if(CURL_FOUND) + list(APPEND CURL_DEFINITIONS "-DCURL_STATICLIB") + + foreach(FILEPATH ${CURL_LIBRARIES}) + if(NOT EXISTS "${FILEPATH}") + message(WARNING "Could not find the file for MinGW: ${FILEPATH}\n") + endif() + endforeach(FILEPATH) + #MinGW: These libs need to be after libcurl + list(APPEND CURL_LIBRARIES "Ws2_32" "Crypt32") + endif(CURL_FOUND) + endif() + + list(APPEND SYS_SOURCES ${SYS_WIN_SOURCES}) + + #link the MinGW library first and especially before SDL + #32-bit and 64-bit link to mingw32 + list(INSERT CLIENT_LIBRARIES 0 "mingw32") + + #time functions winmm.lib + #EnumProcesses function psapi.lib + #socket functions Ws2_32.lib + #ImmGetIMEFileName imm32.lib + #GetFileVersionInfoSize Version.lib + #Certificate functions Crypt32.lib + list(APPEND CLIENT_LIBRARIES "imm32" "Version" "winmm" "psapi" "Ws2_32") + + #WINVER is the minimum operating system version the code supports for the Windows SDK. + # 0x0501 for Windows XP, 0x0502 for Windows Server 2003, + # 0x0600 for Windows Vista, 0x0601 for Windows 7, + # 0x0602 for Windows 8, 0x603 for Windows 8.1 and 0x0A00 for Windows 10. + list(APPEND CLIENT_DEFINITIONS "-DWINVER=0x0501") + +endif() + +if(PLATFORM STREQUAL "darwin" AND (CMAKE_COMPILER_IS_GNUCC + OR CMAKE_C_COMPILER_ID STREQUAL "Clang")) + if(NOT SDL_FOUND AND USE_INTERNAL_SDL) + list(APPEND SDL_LIBRARIES + "${LIBS_DIR}/macosx/libSDL2main.a" + "${LIBS_DIR}/macosx/libSDL2-2.0.0.dylib" + ) + set(SDL_FOUND TRUE) + + foreach(FILEPATH ${SDL_LIBRARIES}) + if(NOT EXISTS "${FILEPATH}") + message(WARNING "Could not find the file for MacOS: ${FILEPATH}\n") + endif() + endforeach(FILEPATH) + + endif() + + if(ENV{MACOSX_VERSION_MIN}) + set(MACOSX_VERSION_MIN "$ENV{MACOSX_VERSION_MIN}") + elseif(NOT MACOSX_VERSION_MIN) + set(MACOSX_VERSION_MIN "10.7") + endif() + + string(REPLACE "." ";" VERSION_LIST ${MACOSX_VERSION_MIN}) + list(GET VERSION_LIST 0 MACOSX_MAJOR) + list(GET VERSION_LIST 1 MACOSX_MINOR) +# list(GET VERSION_LIST 2 MACOSX_PATCH) + + if(${MACOSX_MINOR} GREATER 9) + # Multiply and then remove decimal. 10.10 -> 101000.0 -> 101000 + math(EXPR MAC_OS_X_VERSION_MIN_REQUIRED "${MACOSX_MAJOR} * 10000 + ${MACOSX_MINOR} * 100") + else() + # Multiply by 100 and then remove decimal. 10.7 -> 1070.0 -> 1070 + math(EXPR MAC_OS_X_VERSION_MIN_REQUIRED "${MACOSX_MAJOR} * 100 + ${MACOSX_MINOR} * 10") + endif() + + list(APPEND CLIENT_DEFINITIONS "-DMAC_OS_X_VERSION_MIN_REQUIRED=${MAC_OS_X_VERSION_MIN_REQUIRED}") + list(APPEND CLIENT_CFLAGS "-mmacosx-version-min=${MACOSX_VERSION_MIN}") + list(APPEND CLIENT_LDFLAGS "-mmacosx-version-min=${MACOSX_VERSION_MIN}") + + + list(APPEND SYS_SOURCES ${SYS_OSX_SOURCES}) + set_source_files_properties("${SYS_DIR}/sys_osx.m" PROPERTIES LANGUAGE C) + + list(APPEND CLIENT_DEFINITIONS "-DMACOS_X") + #NSConstantString NSString + find_library(COCOA_LIBRARY Cocoa) + if(COCOA_LIBRARY) + list(APPEND CLIENT_LIBRARIES "${COCOA_LIBRARY}") + else() + list(APPEND CLIENT_LDFLAGS "-framework Cocoa") + endif() + +endif() + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + if(ARCH STREQUAL "x86") #not for x86_64 + set(USE_ASM_SOURCES TRUE) + endif() + if(ARCH STREQUAL "x86" OR ARCH STREQUAL "x86_64") + set(USE_INLINE_ASM_SOURCES TRUE) + endif() + + CHECK_C_SOURCE_COMPILES("int foo(const char *str, ...) __attribute__((format(printf, 1, 2))); int main() {return 0;}" HAVE_GCC_FORMAT) + if(HAVE_GCC_FORMAT) + list(APPEND CLIENT_DEFINITIONS "-DHAVE_GCC_FORMAT") + endif(HAVE_GCC_FORMAT) + + if(NOT MINGW) + list(APPEND SYS_SOURCES ${SYS_UNIX_SOURCES}) + endif() + +endif() + +if(USE_INLINE_ASM_SOURCES) + add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/internal_inline_asm") + list(APPEND CLIENT_LIBRARIES ${INTERNAL_INLINE_ASM_LIBRARIES}) +endif() + +if(USE_MASM_SOURCES) + add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/internal_masm") + list(APPEND CLIENT_LIBRARIES ${INTERNAL_MASM_LIBRARIES}) +endif() + +if(USE_ASM_SOURCES) + add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/internal_asm") + list(APPEND CLIENT_LIBRARIES ${INTERNAL_ASM_LIBRARIES}) +endif() + +ADD_CLIENT_DEFINITIONS(CLIENT_DEFINITIONS) +ADD_CLIENT_CFLAGS(CLIENT_CFLAGS) +ADD_STRIP_LDFLAG(CLIENT_LDFLAGS) + +if(CMAKE_C_COMPILER_ID MATCHES "Clang") + list(APPEND CLIENT_CFLAGS "-Qunused-arguments") +endif() + +GET_VM_SOURCES(VM_SOURCES) +if(VM_SOURCES) + list(APPEND QCOMMON_SOURCES ${VM_SOURCES}) +else() + set(NO_VM_COMPILED TRUE) +endif() +if(NO_VM_COMPILED) + list(APPEND CLIENT_DEFINITIONS "-DNO_VM_COMPILED") +endif() + + + +if(USE_GIT_REV AND GIT_REV) + list(APPEND CLIENT_DEFINITIONS "-DPRODUCT_VERSION=\"${PRODUCT_VERSION}_GIT_${GIT_REV}\"") +else() + list(APPEND CLIENT_DEFINITIONS "-DPRODUCT_VERSION=\"${PRODUCT_VERSION}\"") +endif() + +if(DEFINED ENV{SOURCE_DATE_EPOCH}) + if(NOT ${CMAKE_VERSION} VERSION_LESS "3.8.0") + string(TIMESTAMP PRODUCT_DATE "%b %d %Y" UTC) #Nov 28 2021 + list(APPEND CLIENT_DEFINITIONS "-DPRODUCT_DATE=\"${PRODUCT_DATE}\"") + else() + message(WARNING "Update CMake to version 3.8 or later for SOURCE_DATE_EPOCH support!") + endif() +endif() + +if(USE_INTERNAL_SDL) + list(APPEND CLIENT_DEFINITIONS "-DUSE_INTERNAL_SDL") + if(ARCH STREQUAL "ppc" OR ARCH STREQUAL "ppc64") + list(APPEND SDL_INCLUDE_DIRS "${LIBSDL_DIR}/include-macppc") + else() + list(APPEND SDL_INCLUDE_DIRS "${LIBSDL_DIR}/include") + endif() + list(APPEND CLIENT_C_HEADERS ${LIBSDL_HEADERS}) + +elseif(NOT SDL_FOUND) + #find_package sets *_FOUND *_INCLUDE_DIRS *_LIBRARIES (*_INCLUDE_DIR *_LIBRARY) + find_package(SDL REQUIRED) + if(DEFINED SDL_VERSION AND NOT SDL_VERSION STREQUAL "") + if(${SDL_VERSION} VERSION_LESS 2) + message(FATAL_ERROR "The SDL library version is ${SDL_VERSION} but required is at least version 2.") + endif() + endif() + +endif(USE_INTERNAL_SDL) + +list(APPEND CLIENT_DEFINITIONS ${SDL_DEFINITIONS}) +if(SDL_INCLUDE_DIR) + list(APPEND CLIENT_INCLUDE_DIRS "${SDL_INCLUDE_DIR}") +endif(SDL_INCLUDE_DIR) +list(APPEND CLIENT_INCLUDE_DIRS ${SDL_INCLUDE_DIRS}) +list(APPEND CLIENT_LIBRARIES "${SDL_LIBRARY}") +list(APPEND CLIENT_LIBRARIES ${SDL_LIBRARIES}) + +if(USE_INTERNAL_ZLIB) + list(APPEND CLIENT_DEFINITIONS "-DUSE_INTERNAL_ZLIB") + if(NOT DEFINED INTERNAL_ZLIB_LIBRARIES) + add_subdirectory("${CMAKELIST_DIR}/internal_zlib" "internal_zlib") + endif() + list(APPEND CLIENT_DEFINITIONS ${INTERNAL_ZLIB_DEFINITIONS}) + list(APPEND CLIENT_INCLUDE_DIRS ${INTERNAL_ZLIB_INCLUDE_DIRS}) + list(APPEND CLIENT_LIBRARIES ${INTERNAL_ZLIB_LIBRARIES}) +else() + find_package(ZLIB REQUIRED) + list(APPEND CLIENT_DEFINITIONS ${ZLIB_DEFINITIONS}) + list(APPEND CLIENT_INCLUDE_DIRS ${ZLIB_INCLUDE_DIRS}) + list(APPEND CLIENT_LIBRARIES ${ZLIB_LIBRARIES}) +endif(USE_INTERNAL_ZLIB) + +if(USE_CODEC_OPUS) + list(APPEND CLIENT_DEFINITIONS "-DUSE_CODEC_OPUS") + set(NEED_OGG TRUE) + + if(USE_INTERNAL_OPUS) + add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/internal_opusfile") +# list(APPEND CLIENT_DEFINITIONS "-DUSE_INTERNAL_OPUS") + list(APPEND CLIENT_DEFINITIONS ${INTERNAL_OPUSFILE_DEFINITIONS}) + list(APPEND CLIENT_INCLUDE_DIRS ${INTERNAL_OPUSFILE_INCLUDE_DIRS}) + list(APPEND CLIENT_LIBRARIES ${INTERNAL_OPUSFILE_LIBRARIES}) + add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/internal_opus") +# list(APPEND CLIENT_DEFINITIONS "-DUSE_INTERNAL_OPUSFILE") + list(APPEND CLIENT_DEFINITIONS ${INTERNAL_OPUS_DEFINITIONS}) + list(APPEND CLIENT_INCLUDE_DIRS ${INTERNAL_OPUS_INCLUDE_DIRS}) + list(APPEND CLIENT_LIBRARIES ${INTERNAL_OPUS_LIBRARIES}) + else() + find_package(OPUSFILE REQUIRED) + find_package(OPUS REQUIRED) + list(APPEND CLIENT_DEFINITIONS ${OPUSFILE_DEFINITIONS}) + if(OPUSFILE_INCLUDE_DIR) + list(APPEND CLIENT_INCLUDE_DIRS "${OPUSFILE_INCLUDE_DIR}") + endif(OPUSFILE_INCLUDE_DIR) + list(APPEND CLIENT_INCLUDE_DIRS ${OPUSFILE_INCLUDE_DIRS}) + list(APPEND CLIENT_LIBRARIES "${OPUSFILE_LIBRARY}") + list(APPEND CLIENT_LIBRARIES ${OPUSFILE_LIBRARIES}) + + list(APPEND CLIENT_DEFINITIONS ${OPUS_DEFINITIONS}) + if(OPUS_INCLUDE_DIR) + list(APPEND CLIENT_INCLUDE_DIRS "${OPUS_INCLUDE_DIR}") + endif(OPUS_INCLUDE_DIR) + list(APPEND CLIENT_INCLUDE_DIRS ${OPUS_INCLUDE_DIRS}) + list(APPEND CLIENT_LIBRARIES "${OPUS_LIBRARY}") + list(APPEND CLIENT_LIBRARIES ${OPUS_LIBRARIES}) + + endif(USE_INTERNAL_OPUS) + +endif(USE_CODEC_OPUS) + +if(USE_CODEC_VORBIS) + list(APPEND CLIENT_DEFINITIONS "-DUSE_CODEC_VORBIS") + set(NEED_OGG TRUE) + + if(USE_INTERNAL_VORBIS) +# list(APPEND CLIENT_DEFINITIONS "-DUSE_INTERNAL_VORBIS") + add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/internal_vorbis") + list(APPEND CLIENT_DEFINITIONS ${INTERNAL_VORBIS_DEFINITIONS}) + list(APPEND CLIENT_INCLUDE_DIRS ${INTERNAL_VORBIS_INCLUDE_DIRS}) + list(APPEND CLIENT_LIBRARIES ${INTERNAL_VORBIS_LIBRARIES}) + else() + find_package(VORBIS REQUIRED) + list(APPEND CLIENT_DEFINITIONS ${VORBIS_DEFINITIONS}) + if(VORBIS_INCLUDE_DIR) + list(APPEND CLIENT_INCLUDE_DIRS "${VORBIS_INCLUDE_DIR}") + endif(VORBIS_INCLUDE_DIR) + list(APPEND CLIENT_INCLUDE_DIRS ${VORBIS_INCLUDE_DIRS}) + list(APPEND CLIENT_LIBRARIES "${VORBIS_LIBRARY}") + list(APPEND CLIENT_LIBRARIES ${VORBIS_LIBRARIES}) + endif(USE_INTERNAL_VORBIS) + +endif(USE_CODEC_VORBIS) + +if(NEED_OGG) + list(APPEND CLIENT_DEFINITIONS "-DUSE_CODEC_OGG") + + if(USE_INTERNAL_OGG) +# list(APPEND CLIENT_DEFINITIONS "-DUSE_INTERNAL_OGG") + add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/internal_ogg") + list(APPEND CLIENT_DEFINITIONS ${INTERNAL_OGG_DEFINITIONS}) + list(APPEND CLIENT_INCLUDE_DIRS ${INTERNAL_OGG_INCLUDE_DIRS}) + list(APPEND CLIENT_LIBRARIES ${INTERNAL_OGG_LIBRARIES}) + else() + find_package(OGG REQUIRED) + list(APPEND CLIENT_DEFINITIONS ${OGG_DEFINITIONS}) + if(OGG_INCLUDE_DIR) + list(APPEND CLIENT_INCLUDE_DIRS "${OGG_INCLUDE_DIR}") + endif(OGG_INCLUDE_DIR) + list(APPEND CLIENT_INCLUDE_DIRS ${OGG_INCLUDE_DIRS}) + list(APPEND CLIENT_LIBRARIES "${OGG_LIBRARY}") + list(APPEND CLIENT_LIBRARIES ${OGG_LIBRARIES}) + endif(USE_INTERNAL_OGG) + +endif(NEED_OGG) + +if(USE_MUMBLE) + CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H) + if(HAVE_UNISTD_H) + list(APPEND CLIENT_DEFINITIONS "-DHAVE_UNISTD_H") + endif(HAVE_UNISTD_H) + + CHECK_INCLUDE_FILE("sys/mman.h" HAVE_SYS_MMAN_H) + if(HAVE_SYS_MMAN_H) + list(APPEND CLIENT_DEFINITIONS "-DHAVE_SYS_MMAN_H") + endif(HAVE_SYS_MMAN_H) + + #For mode constants + CHECK_INCLUDE_FILE("sys/stat.h" HAVE_SYS_STAT_H) + if(HAVE_SYS_STAT_H) + list(APPEND CLIENT_DEFINITIONS "-DHAVE_SYS_STAT_H") + endif(HAVE_SYS_STAT_H) + + #For O_* constants + CHECK_INCLUDE_FILE("fcntl.h" HAVE_FCNTL_H) + if(HAVE_FCNTL_H) + list(APPEND CLIENT_DEFINITIONS "-DHAVE_FCNTL_H") + endif(HAVE_FCNTL_H) + + CHECK_C_SOURCE_COMPILES("#include \n int main () {int shmfd;shmfd = shm_open(\"\", 0, 0);return 0;}" HAVE_SHM_OPEN) + if(HAVE_SHM_OPEN) + list(APPEND CLIENT_DEFINITIONS "-DHAVE_SHM_OPEN") + endif(HAVE_SHM_OPEN) + + set(CMAKE_REQUIRED_LIBRARIES "rt") + CHECK_C_SOURCE_COMPILES("#include \n int main () {int shmfd;shmfd = shm_open(\"\", 0, 0);return 0;}" HAVE_SHM_OPEN_IN_RT) + set(CMAKE_REQUIRED_LIBRARIES) + if(HAVE_SHM_OPEN_IN_RT) + list(APPEND CLIENT_DEFINITIONS "-DHAVE_SHM_OPEN") + list(APPEND CLIENT_LIBRARIES "rt") + endif(HAVE_SHM_OPEN_IN_RT) + + CHECK_INCLUDE_FILE("stdint.h" HAVE_STDINT_H) + if(HAVE_STDINT_H) + list(APPEND CLIENT_DEFINITIONS "-DHAVE_STDINT_H") + endif(HAVE_STDINT_H) + + list(APPEND CLIENT_DEFINITIONS "-DUSE_MUMBLE") + list(APPEND CLIENT_C_SOURCES ${CLIENT_MUMBLE_SOURCES}) + +endif(USE_MUMBLE) + +if(USE_VOIP) + list(APPEND CLIENT_DEFINITIONS "-DUSE_VOIP") +endif(USE_VOIP) + +if(USE_FREETYPE) + find_package(Freetype REQUIRED) + if(DEFINED FREETYPE_VERSION AND NOT FREETYPE_VERSION STREQUAL "") + if(${FREETYPE_VERSION} VERSION_LESS 2) + message(FATAL_ERROR "The freetype library version is ${FREETYPE_VERSION} but required is at least version 2.") + endif() + endif() + + list(APPEND CLIENT_DEFINITIONS "-DBUILD_FREETYPE") + + list(APPEND CLIENT_DEFINITIONS ${FREETYPE_DEFINITIONS}) + if(FREETYPE_INCLUDE_DIR) + list(APPEND CLIENT_INCLUDE_DIRS "${FREETYPE_INCLUDE_DIR}") + endif(FREETYPE_INCLUDE_DIR) + list(APPEND CLIENT_INCLUDE_DIRS ${FREETYPE_INCLUDE_DIRS}) + list(APPEND CLIENT_LIBRARIES "${FREETYPE_LIBRARY}") + list(APPEND CLIENT_LIBRARIES ${FREETYPE_LIBRARIES}) + +endif(USE_FREETYPE) + +#required for l_precomp.c and l_script.c +list(APPEND CLIENT_DEFINITIONS "-DBOTLIB") + +if(USE_CURL) + list(APPEND CLIENT_DEFINITIONS "-DUSE_CURL") + if(USE_CURL_DLOPEN) + list(APPEND CLIENT_DEFINITIONS "-DUSE_CURL_DLOPEN") + endif(USE_CURL_DLOPEN) + + if(USE_INTERNAL_CURL) + list(APPEND CLIENT_DEFINITIONS "-DUSE_INTERNAL_CURL") + list(APPEND CURL_INCLUDE_DIRS "${CURL_DIR}") + + elseif(NOT CURL_FOUND) + #CURLOPT_PROTOCOLS was added in 7.19.4 + find_package(CURL REQUIRED) + endif(USE_INTERNAL_CURL) + + list(APPEND CLIENT_DEFINITIONS ${CURL_DEFINITIONS}) + if(CURL_INCLUDE_DIR) + list(APPEND CLIENT_INCLUDE_DIRS "${CURL_INCLUDE_DIR}") + endif(CURL_INCLUDE_DIR) + list(APPEND CLIENT_INCLUDE_DIRS ${CURL_INCLUDE_DIRS}) + list(APPEND CLIENT_LIBRARIES "${CURL_LIBRARY}") + list(APPEND CLIENT_LIBRARIES ${CURL_LIBRARIES}) + +endif(USE_CURL) + +if(USE_ICON) + list(APPEND CLIENT_DEFINITIONS "-DUSE_ICON") +endif() + +if(USE_LOCAL_HEADERS) + list(APPEND CLIENT_DEFINITIONS "-DUSE_LOCAL_HEADERS") +endif(USE_LOCAL_HEADERS) + +if(USE_OPENAL) + list(APPEND CLIENT_DEFINITIONS "-DUSE_OPENAL") + if(USE_OPENAL_DLOPEN) + list(APPEND CLIENT_DEFINITIONS "-DUSE_OPENAL_DLOPEN") + endif(USE_OPENAL_DLOPEN) + if(USE_INTERNAL_OPENAL) + list(APPEND CLIENT_DEFINITIONS "-DUSE_INTERNAL_OPENAL") + endif(USE_INTERNAL_OPENAL) +endif(USE_OPENAL) + +if(USE_RENDERER_DLOPEN) + list(APPEND CLIENT_DEFINITIONS "-DUSE_RENDERER_DLOPEN") +endif(USE_RENDERER_DLOPEN) + +if(BUILD_STANDALONE) + list(APPEND CLIENT_DEFINITIONS "-DSTANDALONE") +endif(BUILD_STANDALONE) + +if(DEFAULT_BASEDIR) + list(APPEND CLIENT_DEFINITIONS "-DDEFAULT_BASEDIR=\"${DEFAULT_BASEDIR}\"") +endif(DEFAULT_BASEDIR) + +if(USE_AUTOUPDATER) + list(APPEND CLIENT_DEFINITIONS "-DUSE_AUTOUPDATER") + if(NOT DEFINED AUTOUPDATER_BIN) + set(AUTOUPDATER_BIN ${DEFAULT_AUTOUPDATER_BIN}) + endif() + list(APPEND CLIENT_DEFINITIONS "-DAUTOUPDATER_BIN=\"${AUTOUPDATER_BIN}\"") +endif(USE_AUTOUPDATER) + +list(APPEND CLIENT_C_SOURCES ${SDL_SOURCES} ${SERVER_SOURCES} ${BOTLIB_SOURCES} ${QCOMMON_SOURCES} ${CLIENT_SOURCES} ${SYS_SOURCES}) +list(APPEND CLIENT_C_HEADERS ${SDL_HEADERS} ${SERVER_HEADERS} ${BOTLIB_HEADERS} ${QCOMMON_HEADERS} ${CLIENT_HEADERS} ${SYS_HEADERS}) + +#IDE grouping +source_group("botlib\\Source Files" FILES ${BOTLIB_SOURCES}) +source_group("botlib\\Header Files" FILES ${BOTLIB_HEADERS}) +source_group("client\\Source Files" FILES ${CLIENT_SOURCES}) +source_group("client\\Header Files" FILES ${CLIENT_HEADERS}) +source_group("libsdl\\Header Files" FILES ${LIBSDL_HEADERS}) +source_group("mumble" FILES ${CLIENT_MUMBLE_SOURCES}) +source_group("qcommon\\Source Files" FILES ${QCOMMON_SOURCES}) +source_group("qcommon\\Header Files" FILES ${QCOMMON_HEADERS}) +source_group("server\\Source Files" FILES ${SERVER_SOURCES}) +source_group("server\\Header Files" FILES ${SERVER_HEADERS}) +source_group("sys\\Source Files" FILES ${SYS_SOURCES}) +source_group("sys\\Header Files" FILES ${SYS_HEADERS}) +source_group("sys" FILES ${SYS_RC_SOURCES}) +source_group("sdl\\Source Files" FILES ${SDL_SOURCES}) +source_group("sdl\\Header Files" FILES ${SDL_HEADERS}) + +add_executable(${CLIENT_TARGET} ${CLIENT_C_SOURCES} ${CLIENT_C_HEADERS} ${SYS_RC_SOURCES}) + +target_compile_definitions(${CLIENT_TARGET} PRIVATE ${CLIENT_DEFINITIONS}) + +target_include_directories(${CLIENT_TARGET} PRIVATE ${CLIENT_INCLUDE_DIRS}) + +compat_target_compile_options(${CLIENT_TARGET} PRIVATE ${CLIENT_CFLAGS}) + +target_link_libraries(${CLIENT_TARGET} ${CLIENT_LIBRARIES}) + +compat_target_link_options(${CLIENT_TARGET} PRIVATE ${CLIENT_LDFLAGS}) + +set_target_properties(${CLIENT_TARGET} PROPERTIES RUNTIME_OUTPUT_NAME "${CLIENT_BIN}${BIN_EXT}") + +set(RENDERERGL1_SUBDIR "${CMAKELIST_DIR}/renderergl1") +if(NOT EXISTS "${RENDERERGL1_SUBDIR}/CMakeLists.txt") + message(WARNING "Could not find renderergl1 in: ${RENDERERGL1_SUBDIR}") +endif() +if(NOT USE_RENDERER_DLOPEN) + add_subdirectory("${RENDERERGL1_SUBDIR}" "${CMAKE_CURRENT_BINARY_DIR}/renderergl1") +endif() + +STRIP_TARGET(${CLIENT_TARGET}) + +set(DESTINATION_DIR "${REL_INSTALL_DEST}") +if(INSTALL_DIR) + set(DESTINATION_DIR "${INSTALL_DIR}") +endif(INSTALL_DIR) + +install(TARGETS ${CLIENT_TARGET} + RUNTIME + DESTINATION "${DESTINATION_DIR}" + PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ + GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE + CONFIGURATIONS Release + COMPONENT client +) +include(CPack) diff --git a/misc/CMakeLists/client/internal_asm/CMakeLists.txt b/misc/CMakeLists/client/internal_asm/CMakeLists.txt new file mode 100644 index 0000000000..c19375490d --- /dev/null +++ b/misc/CMakeLists/client/internal_asm/CMakeLists.txt @@ -0,0 +1,68 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("internal asm") + +set(ASM_TARGET "internal_client_asm") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/compat.cmake") +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") +include("${CMAKELIST_DIR}/include/platform.cmake") + +set(ASM_SOURCES + "${ASM_DIR}/matha.s" + "${ASM_DIR}/snd_mixa.s" +) +set(ASM_HEADERS + "${ASM_DIR}/qasm.h" + "${ASM_DIR}/qasm-inline.h" +) + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + list(APPEND ASM_CFLAGS "-x assembler-with-cpp") +endif() + +source_group("asm" FILES ${ASM_SOURCES} ${ASM_HEADERS}) +#source_group("asm\\Source Files" FILES ${ASM_SOURCES}) +#source_group("asm\\Header Files" FILES ${ASM_HEADERS}) + +enable_language(ASM) + +add_library(${ASM_TARGET} STATIC ${ASM_SOURCES} ${ASM_HEADERS}) + +target_compile_definitions(${ASM_TARGET} PRIVATE ${ASM_DEFINITIONS}) + +compat_target_compile_options(${ASM_TARGET} PRIVATE ${ASM_CFLAGS}) + +set_target_properties(${ASM_TARGET} PROPERTIES LINKER_LANGUAGE C) + +set(INTERNAL_ASM_INCLUDE_DIRS "" PARENT_SCOPE) +set(INTERNAL_ASM_DEFINITIONS "" PARENT_SCOPE) +set(INTERNAL_ASM_LIBRARIES "${ASM_TARGET}" PARENT_SCOPE) diff --git a/misc/CMakeLists/client/internal_inline_asm/CMakeLists.txt b/misc/CMakeLists/client/internal_inline_asm/CMakeLists.txt new file mode 100644 index 0000000000..bfcc318959 --- /dev/null +++ b/misc/CMakeLists/client/internal_inline_asm/CMakeLists.txt @@ -0,0 +1,74 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("internal inline asm") + +set(INLINE_ASM_TARGET "internal_client_inline_asm") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/cflags.cmake") +include("${CMAKELIST_DIR}/include/compat.cmake") +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") +include("${CMAKELIST_DIR}/include/platform.cmake") + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + option(GENERATE_DEPENDENCIES "Preprocessing: Generate dependencies for make outputting" ${DEFAULT_GENERATE_DEPENDENCIES}) +endif() + +set(INLINE_ASM_SOURCES + "${ASM_DIR}/ftola.c" + "${ASM_DIR}/snapvector.c" +) +set(INLINE_ASM_HEADERS + "${ASM_DIR}/qasm.h" + "${ASM_DIR}/qasm-inline.h" +) + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") +# set(FLAGS "-msse4.1" "-msse4" "-msse3" "-msse2" "-msse" "-march=k8" "-march=pentium-m" "-march=pentium3") + # k8 so inline assembler knows about SSE + set(FLAGS "-march=k8" "-W") + + ADD_SUPPORTED_CFLAGS(FLAGS INLINE_ASM_CFLAGS) + +endif() + +#source_group("asm" FILES ${INLINE_ASM_SOURCES} ${INLINE_ASM_HEADERS}) +#source_group("asm\\Source Files" FILES ${INLINE_ASM_SOURCES}) +#source_group("asm\\Header Files" FILES ${INLINE_ASM_HEADERS}) + +add_library(${INLINE_ASM_TARGET} STATIC ${INLINE_ASM_SOURCES} ${INLINE_ASM_HEADERS}) + +target_compile_definitions(${INLINE_ASM_TARGET} PRIVATE ${INLINE_ASM_DEFINITIONS}) + +compat_target_compile_options(${INLINE_ASM_TARGET} PRIVATE ${INLINE_ASM_CFLAGS}) + +set(INTERNAL_INLINE_ASM_INCLUDE_DIRS "" PARENT_SCOPE) +set(INTERNAL_INLINE_ASM_DEFINITIONS "" PARENT_SCOPE) +set(INTERNAL_INLINE_ASM_LIBRARIES "${INLINE_ASM_TARGET}" PARENT_SCOPE) diff --git a/misc/CMakeLists/client/internal_masm/CMakeLists.txt b/misc/CMakeLists/client/internal_masm/CMakeLists.txt new file mode 100644 index 0000000000..d3fad4232e --- /dev/null +++ b/misc/CMakeLists/client/internal_masm/CMakeLists.txt @@ -0,0 +1,68 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("internal masm") + +set(MASM_TARGET "internal_client_masm") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") +include("${CMAKELIST_DIR}/include/platform.cmake") + +#microsoft macro assembler files +set(MASM_SOURCES + "${ASM_DIR}/ftola.asm" + "${ASM_DIR}/snapvector.asm" +# "${ASM_DIR}/vm_x86_64.asm" +) +set(MASM_x86_64_SOURCES + "${ASM_DIR}/vm_x86_64.asm" +) + +if(ARCH STREQUAL "x86_64") + list(APPEND MASM_SOURCES ${MASM_x86_64_SOURCES}) +endif() + +#source_group("asm" FILES ${MASM_SOURCES}) +#source_group("asm\\Source Files" FILES ${MASM_SOURCES}) +#source_group("asm\\Header Files" FILES ${MASM_HEADERS}) + +enable_language(ASM_MASM) + +add_library(${MASM_TARGET} STATIC ${MASM_SOURCES}) + +target_compile_definitions(${MASM_TARGET} PRIVATE ${MASM_DEFINITIONS}) + +target_compile_options(${MASM_TARGET} PRIVATE ${MASM_CFLAGS}) + +set_target_properties(${MASM_TARGET} PROPERTIES LINKER_LANGUAGE C) + +set(INTERNAL_MASM_INCLUDE_DIRS "" PARENT_SCOPE) +set(INTERNAL_MASM_DEFINITIONS "" PARENT_SCOPE) +set(INTERNAL_MASM_LIBRARIES "${MASM_TARGET}" PARENT_SCOPE) diff --git a/misc/CMakeLists/client/internal_ogg/CMakeLists.txt b/misc/CMakeLists/client/internal_ogg/CMakeLists.txt new file mode 100644 index 0000000000..2f4b0392fc --- /dev/null +++ b/misc/CMakeLists/client/internal_ogg/CMakeLists.txt @@ -0,0 +1,123 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("internal ogg") + +set(OGG_TARGET "internal_ogg") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/cflags.cmake") +include("${CMAKELIST_DIR}/include/compat.cmake") +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + option(GENERATE_DEPENDENCIES "Preprocessing: Generate dependencies for make outputting" ${DEFAULT_GENERATE_DEPENDENCIES}) +endif() +if(MSVC) + option(BUILD_STATIC_CRT "Build (static) multi-threaded C runtime library" ${DEFAULT_BUILD_STATIC_CRT}) +endif() + +set(OGG_SOURCES + "${OGG_DIR}/src/bitwise.c" + "${OGG_DIR}/src/framing.c" +) +set(OGG_HEADERS + "${OGG_DIR}/include/ogg/config_types.h" + "${OGG_DIR}/include/ogg/ogg.h" + "${OGG_DIR}/include/ogg/os_types.h" +) + + +if(MSVC) + #Optimization, Maximum Speed /O2 + list(APPEND OGG_CFLAGS $<$:/O2>) + #Inline Function Expansion, only Suitable /Ob2 + list(APPEND OGG_CFLAGS $<$:/Ob2>) + #Enable Intrinsic Functions /Oi + list(APPEND OGG_CFLAGS $<$:/Oi>) + #Favor Size of Speed, Favor Fast Code /Ot + list(APPEND OGG_CFLAGS $<$:/Ot>) + + #Enable String Pooling /GF + list(APPEND OGG_CFLAGS "/GF") + #Buffer Security Check, No /GS- + list(APPEND OGG_CFLAGS "/GS-") + + #Calling Convention, __cdecl /Gd + list(APPEND OGG_CFLAGS "/Gd") + #Compile as, C Code /TC + list(APPEND OGG_CFLAGS "/TC") + #Disable specific warnings + list(APPEND OGG_CFLAGS "/wd4244") + +endif(MSVC) + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + + if(PLATFORM MATCHES "linux") + list(APPEND OGG_RELEASE_CFLAGS "-Wall" "-fsigned-char" "-O20" "-ffast-math") + list(APPEND OGG_DEBUG_CFLAGS "-Wall" "-fsigned-char" "-g") + elseif(PLATFORM MATCHES "darwin") + list(APPEND OGG_RELEASE_CFLAGS "-Wall" "-fno-common" "-fsigned-char" "-ffast-math" "-O4") + list(APPEND OGG_DEBUG_CFLAGS "-Wall" "-fno-common" "-fsigned-char" "-g") + elseif(ARCH STREQUAL "sparc") + list(APPEND OGG_RELEASE_CFLAGS "-fsigned-char" "-O20") + list(APPEND OGG_DEBUG_CFLAGS "-fsigned-char" "-g" "-Wall") + else() + list(APPEND OGG_RELEASE_CFLAGS "-fsigned-char" "-O20") + list(APPEND OGG_DEBUG_CFLAGS "-fsigned-char" "-g" "-Wall") + endif() + + list(APPEND VORBIS_DEFINITIONS $<$:${OGG_RELEASE_DEFINITIONS}>) + list(APPEND OGG_CFLAGS $<$:${OGG_RELEASE_CFLAGS}>) + list(APPEND VORBIS_DEFINITIONS $<$:${OGG_DEBUG_DEFINITIONS}>) + list(APPEND OGG_CFLAGS $<$:${OGG_DEBUG_CFLAGS}>) + +endif() + +ADD_INTERNAL_DEFINITIONS(OGG_DEFINITIONS) +ADD_INTERNAL_CFLAGS(OGG_CFLAGS) + +list(APPEND OGG_INCLUDE_DIRS "${OGG_DIR}/include") + +#source_group("Source Files" FILES ${OGG_SOURCES} ${OGG_HEADERS}) +#source_group("Source Files" FILES ${OGG_SOURCES}) +#source_group("Header Files" FILES ${OGG_HEADERS}) + +add_library(${OGG_TARGET} STATIC ${OGG_SOURCES} ${OGG_HEADERS}) + +target_compile_definitions(${OGG_TARGET} PRIVATE ${OGG_DEFINITIONS}) + +target_include_directories(${OGG_TARGET} PRIVATE ${OGG_INCLUDE_DIRS}) + +compat_target_compile_options(${OGG_TARGET} PRIVATE ${OGG_CFLAGS}) + +set(INTERNAL_OGG_DEFINITIONS "" PARENT_SCOPE) +set(INTERNAL_OGG_INCLUDE_DIRS "${OGG_DIR}/include" PARENT_SCOPE) +set(INTERNAL_OGG_LIBRARIES "${OGG_TARGET}" PARENT_SCOPE) diff --git a/misc/CMakeLists/client/internal_opus/CMakeLists.txt b/misc/CMakeLists/client/internal_opus/CMakeLists.txt new file mode 100644 index 0000000000..b9a58a1789 --- /dev/null +++ b/misc/CMakeLists/client/internal_opus/CMakeLists.txt @@ -0,0 +1,340 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("internal opus") + +set(OPUS_TARGET "internal_opus") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/cflags.cmake") +include("${CMAKELIST_DIR}/include/compat.cmake") +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") + +include(CheckCSourceCompiles) +include(CheckIncludeFile) + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + option(GENERATE_DEPENDENCIES "Preprocessing: Generate dependencies for make outputting" ${DEFAULT_GENERATE_DEPENDENCIES}) +endif() +if(MSVC) + option(BUILD_STATIC_CRT "Build (static) multi-threaded C runtime library" ${DEFAULT_BUILD_STATIC_CRT}) +endif() + +set(OPUS_SOURCES + "${OPUS_DIR}/src/analysis.c" + "${OPUS_DIR}/src/mlp.c" + "${OPUS_DIR}/src/mlp_data.c" + "${OPUS_DIR}/src/opus.c" + "${OPUS_DIR}/src/opus_decoder.c" + "${OPUS_DIR}/src/opus_encoder.c" + "${OPUS_DIR}/src/opus_multistream.c" + "${OPUS_DIR}/src/opus_multistream_encoder.c" + "${OPUS_DIR}/src/opus_multistream_decoder.c" + "${OPUS_DIR}/src/repacketizer.c" + + "${OPUS_DIR}/celt/bands.c" + "${OPUS_DIR}/celt/celt.c" + "${OPUS_DIR}/celt/cwrs.c" + "${OPUS_DIR}/celt/entcode.c" + "${OPUS_DIR}/celt/entdec.c" + "${OPUS_DIR}/celt/entenc.c" + "${OPUS_DIR}/celt/kiss_fft.c" + "${OPUS_DIR}/celt/laplace.c" + "${OPUS_DIR}/celt/mathops.c" + "${OPUS_DIR}/celt/mdct.c" + "${OPUS_DIR}/celt/modes.c" + "${OPUS_DIR}/celt/pitch.c" + "${OPUS_DIR}/celt/celt_encoder.c" + "${OPUS_DIR}/celt/celt_decoder.c" + "${OPUS_DIR}/celt/celt_lpc.c" + "${OPUS_DIR}/celt/quant_bands.c" + "${OPUS_DIR}/celt/rate.c" + "${OPUS_DIR}/celt/vq.c" + + "${OPUS_DIR}/silk/CNG.c" + "${OPUS_DIR}/silk/code_signs.c" + "${OPUS_DIR}/silk/init_decoder.c" + "${OPUS_DIR}/silk/decode_core.c" + "${OPUS_DIR}/silk/decode_frame.c" + "${OPUS_DIR}/silk/decode_parameters.c" + "${OPUS_DIR}/silk/decode_indices.c" + "${OPUS_DIR}/silk/decode_pulses.c" + "${OPUS_DIR}/silk/decoder_set_fs.c" + "${OPUS_DIR}/silk/dec_API.c" + "${OPUS_DIR}/silk/enc_API.c" + "${OPUS_DIR}/silk/encode_indices.c" + "${OPUS_DIR}/silk/encode_pulses.c" + "${OPUS_DIR}/silk/gain_quant.c" + "${OPUS_DIR}/silk/interpolate.c" + "${OPUS_DIR}/silk/LP_variable_cutoff.c" + "${OPUS_DIR}/silk/NLSF_decode.c" + "${OPUS_DIR}/silk/NSQ.c" + "${OPUS_DIR}/silk/NSQ_del_dec.c" + "${OPUS_DIR}/silk/PLC.c" + "${OPUS_DIR}/silk/shell_coder.c" + "${OPUS_DIR}/silk/tables_gain.c" + "${OPUS_DIR}/silk/tables_LTP.c" + "${OPUS_DIR}/silk/tables_NLSF_CB_NB_MB.c" + "${OPUS_DIR}/silk/tables_NLSF_CB_WB.c" + "${OPUS_DIR}/silk/tables_other.c" + "${OPUS_DIR}/silk/tables_pitch_lag.c" + "${OPUS_DIR}/silk/tables_pulses_per_block.c" + "${OPUS_DIR}/silk/VAD.c" + "${OPUS_DIR}/silk/control_audio_bandwidth.c" + "${OPUS_DIR}/silk/quant_LTP_gains.c" + "${OPUS_DIR}/silk/VQ_WMat_EC.c" + + "${OPUS_DIR}/silk/HP_variable_cutoff.c" + "${OPUS_DIR}/silk/NLSF_encode.c" + "${OPUS_DIR}/silk/NLSF_VQ.c" + "${OPUS_DIR}/silk/NLSF_unpack.c" + "${OPUS_DIR}/silk/NLSF_del_dec_quant.c" + "${OPUS_DIR}/silk/process_NLSFs.c" + "${OPUS_DIR}/silk/stereo_LR_to_MS.c" + "${OPUS_DIR}/silk/stereo_MS_to_LR.c" + "${OPUS_DIR}/silk/check_control_input.c" + "${OPUS_DIR}/silk/control_SNR.c" + "${OPUS_DIR}/silk/init_encoder.c" + "${OPUS_DIR}/silk/control_codec.c" + "${OPUS_DIR}/silk/A2NLSF.c" + "${OPUS_DIR}/silk/ana_filt_bank_1.c" + "${OPUS_DIR}/silk/biquad_alt.c" + "${OPUS_DIR}/silk/bwexpander_32.c" + "${OPUS_DIR}/silk/bwexpander.c" + "${OPUS_DIR}/silk/debug.c" + "${OPUS_DIR}/silk/decode_pitch.c" + "${OPUS_DIR}/silk/inner_prod_aligned.c" + "${OPUS_DIR}/silk/lin2log.c" + "${OPUS_DIR}/silk/log2lin.c" + "${OPUS_DIR}/silk/LPC_analysis_filter.c" + "${OPUS_DIR}/silk/LPC_fit.c" + "${OPUS_DIR}/silk/LPC_inv_pred_gain.c" + "${OPUS_DIR}/silk/table_LSF_cos.c" + "${OPUS_DIR}/silk/NLSF2A.c" + "${OPUS_DIR}/silk/NLSF_stabilize.c" + "${OPUS_DIR}/silk/NLSF_VQ_weights_laroia.c" + "${OPUS_DIR}/silk/pitch_est_tables.c" + "${OPUS_DIR}/silk/resampler.c" + "${OPUS_DIR}/silk/resampler_down2_3.c" + "${OPUS_DIR}/silk/resampler_down2.c" + "${OPUS_DIR}/silk/resampler_private_AR2.c" + "${OPUS_DIR}/silk/resampler_private_down_FIR.c" + "${OPUS_DIR}/silk/resampler_private_IIR_FIR.c" + "${OPUS_DIR}/silk/resampler_private_up2_HQ.c" + "${OPUS_DIR}/silk/resampler_rom.c" + "${OPUS_DIR}/silk/sigm_Q15.c" + "${OPUS_DIR}/silk/sort.c" + "${OPUS_DIR}/silk/sum_sqr_shift.c" + "${OPUS_DIR}/silk/stereo_decode_pred.c" + "${OPUS_DIR}/silk/stereo_encode_pred.c" + "${OPUS_DIR}/silk/stereo_find_predictor.c" + "${OPUS_DIR}/silk/stereo_quant_pred.c" + + "${OPUS_DIR}/silk/float/apply_sine_window_FLP.c" + "${OPUS_DIR}/silk/float/autocorrelation_FLP.c" + "${OPUS_DIR}/silk/float/burg_modified_FLP.c" + "${OPUS_DIR}/silk/float/bwexpander_FLP.c" + "${OPUS_DIR}/silk/float/corrMatrix_FLP.c" + "${OPUS_DIR}/silk/float/encode_frame_FLP.c" + "${OPUS_DIR}/silk/float/energy_FLP.c" + "${OPUS_DIR}/silk/float/find_LPC_FLP.c" + "${OPUS_DIR}/silk/float/find_LTP_FLP.c" + "${OPUS_DIR}/silk/float/find_pitch_lags_FLP.c" + "${OPUS_DIR}/silk/float/find_pred_coefs_FLP.c" + "${OPUS_DIR}/silk/float/inner_product_FLP.c" + "${OPUS_DIR}/silk/float/k2a_FLP.c" +# "${OPUS_DIR}/silk/float/levinsondurbin_FLP.c" + "${OPUS_DIR}/silk/float/LPC_analysis_filter_FLP.c" + "${OPUS_DIR}/silk/float/LPC_inv_pred_gain_FLP.c" + "${OPUS_DIR}/silk/float/LTP_analysis_filter_FLP.c" + "${OPUS_DIR}/silk/float/LTP_scale_ctrl_FLP.c" + "${OPUS_DIR}/silk/float/noise_shape_analysis_FLP.c" + "${OPUS_DIR}/silk/float/pitch_analysis_core_FLP.c" +# "${OPUS_DIR}/silk/float/prefilter_FLP.c" + "${OPUS_DIR}/silk/float/process_gains_FLP.c" + "${OPUS_DIR}/silk/float/regularize_correlations_FLP.c" + "${OPUS_DIR}/silk/float/residual_energy_FLP.c" + "${OPUS_DIR}/silk/float/scale_copy_vector_FLP.c" + "${OPUS_DIR}/silk/float/scale_vector_FLP.c" + "${OPUS_DIR}/silk/float/schur_FLP.c" + "${OPUS_DIR}/silk/float/sort_FLP.c" +# "${OPUS_DIR}/silk/float/solve_LS_FLP.c" + "${OPUS_DIR}/silk/float/warped_autocorrelation_FLP.c" + "${OPUS_DIR}/silk/float/wrappers_FLP.c" +) +set(OPUS_HEADERS + "${OPUS_DIR}/include/opus.h" + "${OPUS_DIR}/include/opus_custom.h" + "${OPUS_DIR}/include/opus_defines.h" + "${OPUS_DIR}/include/opus_multistream.h" + "${OPUS_DIR}/include/opus_types.h" + + "${OPUS_DIR}/src/analysis.h" + "${OPUS_DIR}/src/mlp.h" + "${OPUS_DIR}/src/opus_private.h" + "${OPUS_DIR}/src/tansig_table.h" + + "${OPUS_DIR}/celt/_kiss_fft_guts.h" + "${OPUS_DIR}/celt/arch.h" + "${OPUS_DIR}/celt/bands.h" + "${OPUS_DIR}/celt/celt.h" + "${OPUS_DIR}/celt/celt_lpc.h" + "${OPUS_DIR}/celt/cpu_support.h" + "${OPUS_DIR}/celt/cwrs.h" + "${OPUS_DIR}/celt/ecintrin.h" + "${OPUS_DIR}/celt/entcode.h" + "${OPUS_DIR}/celt/entdec.h" + "${OPUS_DIR}/celt/entenc.h" + "${OPUS_DIR}/celt/fixed_debug.h" + "${OPUS_DIR}/celt/fixed_generic.h" + "${OPUS_DIR}/celt/float_cast.h" + "${OPUS_DIR}/celt/kiss_fft.h" + "${OPUS_DIR}/celt/laplace.h" + "${OPUS_DIR}/celt/mathops.h" + "${OPUS_DIR}/celt/mdct.h" + "${OPUS_DIR}/celt/mfrngcod.h" + "${OPUS_DIR}/celt/modes.h" + "${OPUS_DIR}/celt/os_support.h" + "${OPUS_DIR}/celt/pitch.h" + "${OPUS_DIR}/celt/quant_bands.h" + "${OPUS_DIR}/celt/rate.h" + "${OPUS_DIR}/celt/stack_alloc.h" + "${OPUS_DIR}/celt/static_modes_fixed.h" + "${OPUS_DIR}/celt/static_modes_float.h" + "${OPUS_DIR}/celt/vq.h" + + "${OPUS_DIR}/silk/API.h" + "${OPUS_DIR}/silk/control.h" + "${OPUS_DIR}/silk/debug.h" + "${OPUS_DIR}/silk/define.h" + "${OPUS_DIR}/silk/errors.h" + "${OPUS_DIR}/silk/Inlines.h" + "${OPUS_DIR}/silk/MacroCount.h" + "${OPUS_DIR}/silk/MacroDebug.h" + "${OPUS_DIR}/silk/macros.h" + "${OPUS_DIR}/silk/main.h" + "${OPUS_DIR}/silk/pitch_est_defines.h" + "${OPUS_DIR}/silk/PLC.h" + "${OPUS_DIR}/silk/resampler_private.h" + "${OPUS_DIR}/silk/resampler_rom.h" + "${OPUS_DIR}/silk/resampler_structs.h" + "${OPUS_DIR}/silk/SigProc_FIX.h" + "${OPUS_DIR}/silk/structs.h" + "${OPUS_DIR}/silk/tables.h" + "${OPUS_DIR}/silk/tuning_parameters.h" + "${OPUS_DIR}/silk/typedef.h" + + "${OPUS_DIR}/silk/float/main_FLP.h" + "${OPUS_DIR}/silk/float/SigProc_FLP.h" + "${OPUS_DIR}/silk/float/structs_FLP.h" + +) + +CHECK_INCLUDE_FILE("malloc.h" HAVE_MALLOC_H) +if(HAVE_MALLOC_H) + list(APPEND OPUS_DEFINITIONS "-DHAVE_MALLOC_H") +endif(HAVE_MALLOC_H) +CHECK_INCLUDE_FILE("alloca.h" HAVE_ALLOCA_H) +if(HAVE_ALLOCA_H) + list(APPEND OPUS_DEFINITIONS "-DHAVE_ALLOCA_H") +endif(HAVE_ALLOCA_H) + +CHECK_C_SOURCE_COMPILES("#include \n int main () {int foo=10;int *array = alloca(foo);return 0;}" HAVE_ALLOCA_IN_ALLOCA_H) +CHECK_C_SOURCE_COMPILES("#include \n int main () {int foo=10;int *array = alloca(foo);return 0;}" HAVE_ALLOCA_IN_STDLIB_H) +CHECK_C_SOURCE_COMPILES("#include \n int main () {int foo=10;int *array = alloca(foo);return 0;}" HAVE_ALLOCA_IN_MALLOC_H) +if(USE_ALLOCA OR HAVE_ALLOCA_IN_ALLOCA_H OR HAVE_ALLOCA_IN_STDLIB_H OR HAVE_ALLOCA_IN_MALLOC_H) + list(APPEND OPUS_DEFINITIONS "-DUSE_ALLOCA") +endif() + +CHECK_C_SOURCE_COMPILES("#include \n int main () {int value = lrintf (3.1415);return 0;}" HAVE_LRINTF) +if(HAVE_LRINTF) + list(APPEND OPUS_DEFINITIONS "-DHAVE_LRINTF") +endif(HAVE_LRINTF) +set(CMAKE_REQUIRED_LIBRARIES "m") +CHECK_C_SOURCE_COMPILES("#include \n int main () {int value = lrintf (3.1415);return 0;}" HAVE_LRINTF_IN_M) +set(CMAKE_REQUIRED_LIBRARIES) +if(HAVE_LRINTF_IN_M) + list(APPEND OPUS_DEFINITIONS "-DHAVE_LRINTF") + list(APPEND OPUS_LIBRARIES "m") +endif(HAVE_LRINTF_IN_M) + +if(MSVC) + #Enable Intrinsic Functions /Oi + list(APPEND OPUS_CFLAGS $<$:/Oi>) + + #Disable specific warnings + #list(APPEND OPUS_CFLAGS "/wd4996") + +endif(MSVC) + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + + set(WARNING_CFLAGS "-Wall" "-W" "-Wstrict-prototypes" "-Wextra" "-Wcast-align" "-Wnested-externs" "-Wshadow") + ADD_SUPPORTED_CFLAGS(WARNING_CFLAGS OPUS_CFLAGS) + + set(OFLAGS "-O4" "-O3" "-O2" "-O") + set(OFLAGS_SUPPORTED) + ADD_FIRST_SUPPORTED_CFLAG(OFLAGS OFLAGS_SUPPORTED) + list(APPEND OPUS_CFLAGS $<$:${OFLAGS_SUPPORTED}>) + + set(DFLAGS "-g") + set(DFLAGS_SUPPORTED) + ADD_SUPPORTED_CFLAGS(DFLAGS DFLAGS_SUPPORTED) + list(APPEND OPUS_CFLAGS $<$:${DFLAGS_SUPPORTED}>) + +endif() + +ADD_INTERNAL_DEFINITIONS(OPUS_DEFINITIONS) +ADD_INTERNAL_CFLAGS(OPUS_CFLAGS) + +list(APPEND OPUS_INCLUDE_DIRS "${OPUS_DIR}/include") +list(APPEND OPUS_INCLUDE_DIRS "${OPUS_DIR}/celt") +list(APPEND OPUS_INCLUDE_DIRS "${OPUS_DIR}/silk") +list(APPEND OPUS_INCLUDE_DIRS "${OPUS_DIR}/silk/float") +list(APPEND OPUS_INCLUDE_DIRS "${OPUS_DIR}/src") + +list(APPEND OPUS_DEFINITIONS "-DOPUS_BUILD") +list(APPEND OPUS_DEFINITIONS "-DFLOAT_APPROX") + +source_group("Source Files" FILES ${OPUS_SOURCES}) +source_group("Header Files" FILES ${OPUS_HEADERS}) + +add_library(${OPUS_TARGET} STATIC ${OPUS_SOURCES} ${OPUS_HEADERS}) + +target_compile_definitions(${OPUS_TARGET} PRIVATE ${OPUS_DEFINITIONS}) + +target_include_directories(${OPUS_TARGET} PRIVATE ${OPUS_INCLUDE_DIRS}) + +compat_target_compile_options(${OPUS_TARGET} PRIVATE ${OPUS_CFLAGS}) + +list(APPEND OPUS_LIBRARIES ${OPUS_TARGET}) + +set(INTERNAL_OPUS_DEFINITIONS "" PARENT_SCOPE) +set(INTERNAL_OPUS_INCLUDE_DIRS "" PARENT_SCOPE) +set(INTERNAL_OPUS_LIBRARIES "${OPUS_LIBRARIES}" PARENT_SCOPE) diff --git a/misc/CMakeLists/client/internal_opusfile/CMakeLists.txt b/misc/CMakeLists/client/internal_opusfile/CMakeLists.txt new file mode 100644 index 0000000000..613cb2d6f0 --- /dev/null +++ b/misc/CMakeLists/client/internal_opusfile/CMakeLists.txt @@ -0,0 +1,130 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("internal opusfile") + +set(OPUSFILE_TARGET "internal_opusfile") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/cflags.cmake") +include("${CMAKELIST_DIR}/include/compat.cmake") +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + option(GENERATE_DEPENDENCIES "Preprocessing: Generate dependencies for make outputting" ${DEFAULT_GENERATE_DEPENDENCIES}) +endif() +if(MSVC) + option(BUILD_STATIC_CRT "Build (static) multi-threaded C runtime library" ${DEFAULT_BUILD_STATIC_CRT}) +endif() + +set(OPUSFILE_SOURCES + "${OPUSFILE_DIR}/src/http.c" + "${OPUSFILE_DIR}/src/info.c" + "${OPUSFILE_DIR}/src/internal.c" + "${OPUSFILE_DIR}/src/opusfile.c" + "${OPUSFILE_DIR}/src/stream.c" + "${OPUSFILE_DIR}/src/wincerts.c" +) +set(OPUSFILE_HEADERS + "${OPUSFILE_DIR}/include/opusfile.h" +) + +if(MSVC) + #disable deprecation warnings about old functions like strcmp + list(APPEND OPUSFILE_DEFINITIONS "-D_CRT_SECURE_NO_WARNINGS") + + #Optimization, Maximum Speed /O2 + list(APPEND OPUSFILE_CFLAGS "$<$:/O2>") + #Inline Function Expansion, only Suitable /Ob2 + list(APPEND OPUSFILE_CFLAGS "$<$:/Ob2>") + #Enable Intrinsic Functions /Oi + list(APPEND OPUSFILE_CFLAGS "$<$:/Oi>") + #Favor Size of Speed, Favor Fast Code /Ot + list(APPEND OPUSFILE_CFLAGS "$<$:/Ot>") + #Omit Frame Pointers, Yes /Oy + list(APPEND OPUSFILE_CFLAGS "$<$:/Oy>") + + #Enable String Pooling /GF + list(APPEND OPUSFILE_CFLAGS "/GF") + #Buffer Security Check, No /GS- + list(APPEND OPUSFILE_CFLAGS "/GS-") + #Enable Function-Level Linking /Gy + list(APPEND OPUSFILE_CFLAGS "/Gy") + #Floating Point Model /fp:fast + list(APPEND OPUSFILE_CFLAGS "/fp:fast") + +endif(MSVC) + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + + set(OFLAGS "-O4" "-O3" "-O2" "-O") + set(OFLAGS_SUPPORTED) + ADD_FIRST_SUPPORTED_CFLAG("${OFLAGS}" OFLAGS_SUPPORTED) + list(APPEND OPUSFILE_CFLAGS $<$:${OFLAGS_SUPPORTED}>) + + set(FLAGS "-std=c89" "-pedantic" "-Wall" "-Wextra" "-Wno-parentheses" "-Wno-long-long") + + if(MINGW) + list(APPEND FLAGS "-U__STRICT_ANSI__") + endif(MINGW) + + ADD_SUPPORTED_CFLAGS(FLAGS OPUSFILE_CFLAGS) + + set(DFLAGS "-O0" "-ggdb") + set(DFLAGS_SUPPORTED) + ADD_SUPPORTED_CFLAGS(DFLAGS DFLAGS_SUPPORTED) + list(APPEND OPUSFILE_CFLAGS $<$:${DFLAGS_SUPPORTED}>) + +endif() + +ADD_INTERNAL_DEFINITIONS(OPUSFILE_DEFINITIONS) +ADD_INTERNAL_CFLAGS(OPUSFILE_CFLAGS) + +list(APPEND OPUSFILE_DEFINITIONS $<$:-DOP_ENABLE_ASSERTIONS>) + +list(APPEND OPUSFILE_INCLUDE_DIRS "${OGG_DIR}/include") +list(APPEND OPUSFILE_INCLUDE_DIRS "${OPUS_DIR}/include") +list(APPEND OPUSFILE_INCLUDE_DIRS "${OPUSFILE_DIR}/include") + +#source_group("Source Files" FILES ${OPUSFILE_SOURCES}) +#source_group("Header Files" FILES ${OPUSFILE_HEADERS}) + +add_library(${OPUSFILE_TARGET} STATIC ${OPUSFILE_SOURCES} ${OPUSFILE_HEADERS}) + +target_compile_definitions(${OPUSFILE_TARGET} PRIVATE ${OPUSFILE_DEFINITIONS}) + +target_include_directories(${OPUSFILE_TARGET} PRIVATE ${OPUSFILE_INCLUDE_DIRS}) + +compat_target_compile_options(${OPUSFILE_TARGET} PRIVATE ${OPUSFILE_CFLAGS}) + +list(APPEND OPUSFILE_LIBRARIES ${OPUSFILE_TARGET}) + +set(INTERNAL_OPUSFILE_DEFINITIONS "" PARENT_SCOPE) +set(INTERNAL_OPUSFILE_INCLUDE_DIRS "${OPUSFILE_INCLUDE_DIRS}" PARENT_SCOPE) +set(INTERNAL_OPUSFILE_LIBRARIES "${OPUSFILE_LIBRARIES}" PARENT_SCOPE) diff --git a/misc/CMakeLists/client/internal_vorbis/CMakeLists.txt b/misc/CMakeLists/client/internal_vorbis/CMakeLists.txt new file mode 100644 index 0000000000..338a7ae5ab --- /dev/null +++ b/misc/CMakeLists/client/internal_vorbis/CMakeLists.txt @@ -0,0 +1,202 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +set(VORBIS_TARGET "internal_vorbis") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/cflags.cmake") +include("${CMAKELIST_DIR}/include/compat.cmake") +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + option(GENERATE_DEPENDENCIES "Preprocessing: Generate dependencies for make outputting" ${DEFAULT_GENERATE_DEPENDENCIES}) +endif() +if(MSVC) + option(BUILD_STATIC_CRT "Build (static) multi-threaded C runtime library" ${DEFAULT_BUILD_STATIC_CRT}) +endif() + +set(VORBIS_SOURCES + "${VORBIS_DIR}/lib/analysis.c" + "${VORBIS_DIR}/lib/bitrate.c" + "${VORBIS_DIR}/lib/block.c" + "${VORBIS_DIR}/lib/codebook.c" + "${VORBIS_DIR}/lib/envelope.c" + "${VORBIS_DIR}/lib/floor0.c" + "${VORBIS_DIR}/lib/floor1.c" + "${VORBIS_DIR}/lib/info.c" + "${VORBIS_DIR}/lib/lookup.c" + "${VORBIS_DIR}/lib/lpc.c" + "${VORBIS_DIR}/lib/lsp.c" + "${VORBIS_DIR}/lib/mapping0.c" + "${VORBIS_DIR}/lib/mdct.c" + "${VORBIS_DIR}/lib/psy.c" + "${VORBIS_DIR}/lib/registry.c" + "${VORBIS_DIR}/lib/res0.c" + "${VORBIS_DIR}/lib/smallft.c" + "${VORBIS_DIR}/lib/sharedbook.c" + "${VORBIS_DIR}/lib/synthesis.c" + "${VORBIS_DIR}/lib/vorbisfile.c" + "${VORBIS_DIR}/lib/window.c" +) +set(VORBIS_HEADERS + "${VORBIS_DIR}/include/vorbis/codec.h" + "${VORBIS_DIR}/include/vorbis/vorbisenc.h" + "${VORBIS_DIR}/include/vorbis/vorbisfile.h" + + "${VORBIS_DIR}/lib/backends.h" + "${VORBIS_DIR}/lib/bitrate.h" + "${VORBIS_DIR}/lib/codebook.h" + "${VORBIS_DIR}/lib/codec_internal.h" + "${VORBIS_DIR}/lib/envelope.h" + "${VORBIS_DIR}/lib/highlevel.h" + "${VORBIS_DIR}/lib/lookup.h" + "${VORBIS_DIR}/lib/lookup_data.h" + "${VORBIS_DIR}/lib/lpc.h" + "${VORBIS_DIR}/lib/lsp.h" + "${VORBIS_DIR}/lib/masking.h" + "${VORBIS_DIR}/lib/mdct.h" + "${VORBIS_DIR}/lib/misc.h" + "${VORBIS_DIR}/lib/os.h" + "${VORBIS_DIR}/lib/psy.h" + "${VORBIS_DIR}/lib/registry.h" + "${VORBIS_DIR}/lib/scales.h" + "${VORBIS_DIR}/lib/smallft.h" + "${VORBIS_DIR}/lib/window.h" + +) + +if(MSVC) + #Optimization, Full /Ox + list(APPEND VORBIS_CFLAGS $<$:/Ox>) + #Inline Function Expansion, only Suitable /Ob2 + list(APPEND VORBIS_CFLAGS $<$:/Ob2>) + #Enable Intrinsic Functions /Oi + list(APPEND VORBIS_CFLAGS $<$:/Oi>) + #Favor Size of Speed, Favor Fast Code /Ot + list(APPEND VORBIS_CFLAGS $<$:/Ot>) + + #Enable String Pooling /GF + list(APPEND VORBIS_CFLAGS "/GF") + #Buffer Security Check, No /GS- + list(APPEND VORBIS_CFLAGS "/GS-") + + #Calling Convention, __cdecl /Gd + list(APPEND VORBIS_CFLAGS "/Gd") + #Compile as, C Code /TC + list(APPEND VORBIS_CFLAGS "/TC") + #Disable specific warnings + list(APPEND VORBIS_CFLAGS "/wd4244") + list(APPEND VORBIS_CFLAGS "/wd4100") + list(APPEND VORBIS_CFLAGS "/wd4267") + list(APPEND VORBIS_CFLAGS "/wd4189") + + list(APPEND VORBIS_CFLAGS "/wd4189") + list(APPEND VORBIS_CFLAGS "/wd4305") + list(APPEND VORBIS_CFLAGS "/wd4127") + list(APPEND VORBIS_CFLAGS "/wd4706") + +endif(MSVC) + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + + if(PLATFORM MATCHES "linux*spe") + list(APPEND VORBIS_RELEASE_DEFINITIONS "-D_REENTRANT") + list(APPEND VORBIS_RELEASE_CFLAGS "-Wall" "-Wextra" "-ffast-math" "-O3" "-mfused-madd") + list(APPEND VORBIS_DEBUG_DEFINITIONS "-D_REENTRANT" "-D__NO_MATH_INLINES") + list(APPEND VORBIS_DEBUG_CFLAGS "-Wall" "-Wextra" "-g") + elseif(PLATFORM MATCHES "linux") + if(ARCH MATCHES "ppc") + list(APPEND VORBIS_RELEASE_DEFINITIONS "-D_REENTRANT") + list(APPEND VORBIS_RELEASE_CFLAGS "-Wall" "-Wextra" "-ffast-math" "-O3" "-mfused-madd" "-mcpu=750") + list(APPEND VORBIS_DEBUG_DEFINITIONS "-D_REENTRANT" "-D__NO_MATH_INLINES") + list(APPEND VORBIS_DEBUG_CFLAGS "-Wall" "-Wextra" "-g") + elsef(ARCH STREQUAL "x86") + list(APPEND VORBIS_RELEASE_DEFINITIONS "-D_REENTRANT") + list(APPEND VORBIS_RELEASE_CFLAGS "-fsigned-char" "-O20" "-ffast-math" "-mno-ieee-fp") + list(APPEND VORBIS_DEBUG_DEFINITIONS "-D_REENTRANT" "-D__NO_MATH_INLINES") + list(APPEND VORBIS_DEBUG_CFLAGS "-fsigned-char" "-g" "-Wall" "-Wextra") + else() + list(APPEND VORBIS_RELEASE_DEFINITIONS "-D_REENTRANT") + list(APPEND VORBIS_RELEASE_CFLAGS "-fsigned-char" "-Wall" "-Wextra" "-O20" "-ffast-math") + list(APPEND VORBIS_DEBUG_DEFINITIONS "-D_REENTRANT" "-D__NO_MATH_INLINES") + list(APPEND VORBIS_DEBUG_CFLAGS "-fsigned-char" "-Wall" "-Wextra" "-g") + endif() + elseif(PLATFORM MATCHES "darwin") + list(APPEND VORBIS_DEFINITIONS "-DDARWIN") + + list(APPEND VORBIS_RELEASE_CFLAGS "-fno-common" "-force_cpusubtype_ALL" "-g" "-Wall" "-fsigned-char" "-ffast-math" "-O4") + list(APPEND VORBIS_DEBUG_CFLAGS "-fno-common" "-force_cpusubtype_ALL" "-g" "-Wall" "-fsigned-char" "-O0") + elseif(PLATFORM MATCHES "os2") + list(APPEND VORBIS_RELEASE_DEFINITIONS "-D_REENTRANT") + # Use -W instead of -Wextra because gcc on OS/2 is an old version. + list(APPEND VORBIS_RELEASE_CFLAGS "-Wall" "-W" "-fsigned-char" "-ffast-math" "-O20") + list(APPEND VORBIS_DEBUG_DEFINITIONS "-D_REENTRANT" "-D__NO_MATH_INLINES") + list(APPEND VORBIS_DEBUG_CFLAGS "-Wall" "-W" "-fsigned-char" "-g") + elseif(ARCH STREQUAL "sparc") + list(APPEND VORBIS_RELEASE_CFLAGS "-Wall" "-Wextra" "-fsigned-char" "-ffast-math" "-O20") + list(APPEND VORBIS_DEBUG_DEFINITIONS "-D__NO_MATH_INLINES") + list(APPEND VORBIS_DEBUG_CFLAGS "-Wall" "-Wextra" "-fsigned-char" "-g") + else() + list(APPEND VORBIS_DEFINITIONS "-D__NO_MATH_INLINES") + + list(APPEND VORBIS_RELEASE_CFLAGS "-Wall" "-Wextra" "-fsigned-char" "-O20") + list(APPEND VORBIS_DEBUG_CFLAGS "-Wall" "-Wextra" "-fsigned-char" "-g") + endif() + + list(APPEND VORBIS_DEFINITIONS $<$:${VORBIS_RELEASE_DEFINITIONS}>) + list(APPEND VORBIS_CFLAGS $<$:${VORBIS_RELEASE_CFLAGS}>) + + list(APPEND VORBIS_DEFINITIONS $<$:${VORBIS_DEBUG_DEFINITIONS}>) + list(APPEND VORBIS_CFLAGS $<$:${VORBIS_DEBUG_CFLAGS}>) + +endif() + +ADD_INTERNAL_DEFINITIONS(VORBIS_DEFINITIONS) +ADD_INTERNAL_CFLAGS(VORBIS_CFLAGS) + +list(APPEND VORBIS_INCLUDE_DIRS "${OGG_DIR}/include") +list(APPEND VORBIS_INCLUDE_DIRS "${VORBIS_DIR}/include") +list(APPEND VORBIS_INCLUDE_DIRS "${VORBIS_DIR}/lib") + +source_group("Source Files" FILES ${VORBIS_SOURCES}) +source_group("Header Files" FILES ${VORBIS_HEADERS}) + +add_library(${VORBIS_TARGET} STATIC ${VORBIS_SOURCES} ${VORBIS_HEADERS}) + +target_compile_definitions(${VORBIS_TARGET} PRIVATE ${VORBIS_DEFINITIONS}) + +target_include_directories(${VORBIS_TARGET} PRIVATE ${VORBIS_INCLUDE_DIRS}) + +compat_target_compile_options(${VORBIS_TARGET} PRIVATE ${VORBIS_CFLAGS}) + +list(APPEND VORBIS_LIBRARIES ${VORBIS_TARGET}) + +set(INTERNAL_VORBIS_DEFINITIONS "" PARENT_SCOPE) +set(INTERNAL_VORBIS_INCLUDE_DIRS "${VORBIS_INCLUDE_DIRS}" PARENT_SCOPE) +set(INTERNAL_VORBIS_LIBRARIES "${VORBIS_LIBRARIES}" PARENT_SCOPE) diff --git a/misc/CMakeLists/include/cflags.cmake b/misc/CMakeLists/include/cflags.cmake new file mode 100644 index 0000000000..94b1d02f87 --- /dev/null +++ b/misc/CMakeLists/include/cflags.cmake @@ -0,0 +1,259 @@ +include(CheckCCompilerFlag) + +macro(ADD_SUPPORTED_CFLAG IN_CFLAG OUT_LIST_CFLAGS) + string(REGEX REPLACE "[^A-Za-z0-9_-]" "_" CURRENT_VAR_FLAG ${IN_CFLAG}) + CHECK_C_COMPILER_FLAG("${IN_CFLAG}" COMPILER_SUPPORTS_${CURRENT_VAR_FLAG}) + if(COMPILER_SUPPORTS_${CURRENT_VAR_FLAG}) + list(APPEND ${OUT_LIST_CFLAGS} ${IN_CFLAG}) + endif(COMPILER_SUPPORTS_${CURRENT_VAR_FLAG}) +endmacro() + +macro(ADD_SUPPORTED_CFLAGS LIST_CFLAGS OUT_LIST_CFLAGS) + foreach(CURRENT_FLAG IN LISTS ${LIST_CFLAGS}) + ADD_SUPPORTED_CFLAG("${CURRENT_FLAG}" ${OUT_LIST_CFLAGS}) + endforeach() +endmacro() + +macro(ADD_FIRST_SUPPORTED_CFLAG LIST_CFLAGS OUT_LIST_CFLAGS) + foreach(CURRENT_FLAG IN LISTS ${LIST_CFLAGS}) + string(REGEX REPLACE "[^A-Za-z0-9_-]" "_" CURRENT_VAR_FLAG "${CURRENT_FLAG}") + CHECK_C_COMPILER_FLAG("${CURRENT_FLAG}" COMPILER_SUPPORTS_${CURRENT_VAR_FLAG}) + if(COMPILER_SUPPORTS_${CURRENT_VAR_FLAG}) + list(APPEND ${OUT_LIST_CFLAGS} "${CURRENT_FLAG}") + break() + endif(COMPILER_SUPPORTS_${CURRENT_VAR_FLAG}) + endforeach() +endmacro() + +macro(ADD_SUPPORTED_RELEASE_CFLAGS LIST_CFLAGS OUT_LIST_CFLAGS) + set(SUPPORTED_CFLAGS) + ADD_SUPPORTED_CFLAGS(${LIST_CFLAGS} SUPPORTED_CFLAGS) + foreach(CURRENT_FLAG IN LISTS SUPPORTED_CFLAGS) + if(NOT ${CMAKE_VERSION} VERSION_LESS "3.13.0") + list(APPEND ${OUT_LIST_CFLAGS} $<$:${CURRENT_FLAG}>) + elseif(CMAKE_BUILD_TYPE MATCHES "Release|release") + list(APPEND ${OUT_LIST_CFLAGS} ${CURRENT_FLAG}) + endif() + endforeach() +endmacro() + +macro(ADD_BASE_DEFINITIONS BASE_DEFINITIONS) + if(MSVC) + #Character Set, CharacterSet="0", Not Set, ASCII/SBCS (Single Byte Character Set) + list(APPEND ${BASE_DEFINITIONS} "-D_SBCS") + + #disable deprecation warnings about old functions like strcmp + list(APPEND ${BASE_DEFINITIONS} "-D_CRT_SECURE_NO_WARNINGS") + list(APPEND ${BASE_DEFINITIONS} "-D_CRT_NONSTDC_NO_DEPRECATE") + endif() + if(PLATFORM STREQUAL "openbsd" + OR PLATFORM STREQUAL "freebsd" + OR PLATFORM STREQUAL "openbsd") + + list(APPEND ${BASE_DEFINITIONS} "-DMAP_ANONYMOUS=MAP_ANON") + endif() + + if(ARCH STREQUAL "darwin") + list(APPEND ${BASE_DEFINITIONS} "-D_THREAD_SAFE=1") + endif() + +endmacro() + +macro(ADD_GNUCC_BASE_CFLAGS BASE_CFLAGS) + set(DEBUG_CFLAGS "-ggdb" "-O0") + set(SUPPORTED_DEBUG_CFLAGS) + ADD_SUPPORTED_CFLAGS(DEBUG_CFLAGS SUPPORTED_DEBUG_CFLAGS) + list(APPEND ${BASE_CFLAGS} $<$:${SUPPORTED_DEBUG_CFLAGS}>) + + if(GENERATE_DEPENDENCIES) + ADD_SUPPORTED_CFLAG("-MMD" ${BASE_CFLAGS}) + endif() + + set(OPTIMIZEVM) + list(APPEND OPTIMIZEVM "-O3") + ADD_SUPPORTED_CFLAG("-fno-common" ${BASE_CFLAGS}) + ADD_SUPPORTED_CFLAG("-fno-strict-aliasing" ${BASE_CFLAGS}) + ADD_SUPPORTED_CFLAG("-pipe" ${BASE_CFLAGS}) + + if(ARCH STREQUAL "x86") + list(APPEND OPTIMIZEVM "-march=i586") + endif() + + if(PLATFORM STREQUAL "sunos") + if(ARCH STREQUAL "sparc") + list(APPEND OPTIMIZEVM "-mno-faster-structs") + list(APPEND OPTIMIZEVM "-mtune=ultrasparc3") + list(APPEND OPTIMIZEVM "-mv8plus") + endif() + endif() + + if(PLATFORM STREQUAL "darwin") + if(ARCH STREQUAL "ppc") + ADD_SUPPORTED_CFLAG("-arch ppc" ${BASE_CFLAGS}) +# ADD_SUPPORTED_CFLAG("-maltivec" ${BASE_CFLAGS}) + endif() + if(ARCH STREQUAL "ppc64") + ADD_SUPPORTED_CFLAG("-arch ppc64" ${BASE_CFLAGS}) +# ADD_SUPPORTED_CFLAG("-maltivec" ${BASE_CFLAGS}) + endif() + if(ARCH STREQUAL "x86") + list(APPEND OPTIMIZEVM "-march=prescott") + list(APPEND OPTIMIZEVM "-mfpmath=sse") + ADD_SUPPORTED_CFLAG("-arch i386" ${BASE_CFLAGS}) + # x86 vm will crash without -mstackrealign since MMX instructions will be + # used no matter what and they corrupt the frame pointer in VM calls + ADD_SUPPORTED_CFLAG("-mstackrealign" ${BASE_CFLAGS}) + endif() + if(ARCH STREQUAL "x86_64") + list(APPEND OPTIMIZEVM "-mfpmath=sse") + ADD_SUPPORTED_CFLAG("-arch x86_64" ${BASE_CFLAGS}) + endif() + + endif() + + ADD_SUPPORTED_RELEASE_CFLAGS(OPTIMIZEVM ${BASE_CFLAGS}) + + + set(WARNING_CFLAGS) + list(APPEND WARNING_CFLAGS "-Wall") + list(APPEND WARNING_CFLAGS "-Wimplicit") + list(APPEND WARNING_CFLAGS "-Wstrict-prototypes") + + list(APPEND WARNING_CFLAGS "-Wformat=2") + list(APPEND WARNING_CFLAGS "-Wno-format-zero-length") + list(APPEND WARNING_CFLAGS "-Wformat-security") + list(APPEND WARNING_CFLAGS "-Wno-format-nonliteral") + list(APPEND WARNING_CFLAGS "-Wstrict-aliasing=2") + list(APPEND WARNING_CFLAGS "-Wmissing-format-attribute") + list(APPEND WARNING_CFLAGS "-Wdisabled-optimization") + list(APPEND WARNING_CFLAGS "-Werror-implicit-function-declaration") + + ADD_SUPPORTED_CFLAGS(WARNING_CFLAGS ${BASE_CFLAGS}) + +endmacro() + +macro(ADD_BASE_CFLAGS BASE_CFLAGS) + if(MSVC) + if(BUILD_STATIC_CRT) + list(APPEND ${BASE_CFLAGS} "/MT") + endif() + elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + ADD_GNUCC_BASE_CFLAGS(${BASE_CFLAGS}) + else() + #other compilers like open64 support gcc cflags + ADD_SUPPORTED_CFLAG("-O3" ${BASE_CFLAGS}) + endif() + +endmacro() + +#compiler definitions for renderer and vm libraries +macro(ADD_LIB_DEFINITIONS LIB_DEFINITIONS) + +endmacro() + +#compiler flags for renderer and vm libraries +macro(ADD_LIB_CFLAGS LIB_CFLAGS) + if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + ADD_SUPPORTED_CFLAGS("-fvisibility=hidden" ${LIB_CFLAGS}) + + endif() + +endmacro() + +macro(ADD_VM_DEFINITIONS VM_DEFINITIONS) + ADD_BASE_DEFINITIONS(${VM_DEFINITIONS}) + ADD_LIB_DEFINITIONS(${VM_DEFINITIONS}) + +endmacro() + +macro(ADD_VM_CFLAGS BASE_CFLAGS) + ADD_BASE_CFLAGS(${BASE_CFLAGS}) + ADD_LIB_CFLAGS(${BASE_CFLAGS}) + + if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + # According to http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=410555 + # -ffast-math will cause the client to die with SIGFPE on Alpha + if(NOT ARCH STREQUAL "alpha") + ADD_SUPPORTED_CFLAG("-ffast-math" ${BASE_CFLAGS}) + else() + message(WARNING "Backwards compatibility might break without the -ffast-math compiler flag.") + endif() + endif() + + message(DEBUG "${BASE_CFLAGS}=${${BASE_CFLAGS}}") +endmacro() + +macro(ADD_TOOLS_DEFINITIONS TOOLS_DEFINITIONS) + ADD_BASE_DEFINITIONS(${TOOLS_DEFINITIONS}) + +endmacro() + +macro(ADD_TOOLS_CFLAGS TOOLS_CFLAGS) + if(MSVC) + if(BUILD_STATIC_CRT) + list(APPEND ${TOOLS_CFLAGS} "/MT") + endif() + endif() + if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + set(TOOLS_OPTIMIZE) + #Produce debugging information + list(APPEND TOOLS_OPTIMIZE "-g") + #enable all compiler warning messages + list(APPEND TOOLS_OPTIMIZE "-Wall") + #Causes the compiler to avoid assumptions regarding non-aliasing of objects of different types + list(APPEND TOOLS_OPTIMIZE "-fno-strict-aliasing") + + ADD_SUPPORTED_RELEASE_CFLAGS(TOOLS_OPTIMIZE ${TOOLS_CFLAGS}) + + if(GENERATE_DEPENDENCIES) + ADD_SUPPORTED_CFLAG("-MMD" ${TOOLS_CFLAGS}) + endif() + + endif() + +endmacro() + +macro(ADD_RENDER_DEFINITIONS RENDER_DEFINITIONS) + ADD_BASE_DEFINITIONS(${RENDER_DEFINITIONS}) + ADD_LIB_DEFINITIONS(${RENDER_DEFINITIONS}) + +endmacro() + +macro(ADD_RENDER_CFLAGS RENDER_CFLAGS) + ADD_BASE_CFLAGS(${RENDER_CFLAGS}) + ADD_LIB_CFLAGS(${RENDER_CFLAGS}) + +endmacro() + +macro(ADD_SERVER_DEFINITIONS SERVER_DEFINITIONS) + ADD_BASE_DEFINITIONS(${SERVER_DEFINITIONS}) + +endmacro() + +macro(ADD_SERVER_CFLAGS SERVER_CFLAGS) + ADD_BASE_CFLAGS(${SERVER_CFLAGS}) + +endmacro() + +macro(ADD_CLIENT_DEFINITIONS CLIENT_DEFINITIONS) + ADD_SERVER_DEFINITIONS(${CLIENT_DEFINITIONS}) + +endmacro() + +macro(ADD_CLIENT_CFLAGS CLIENT_CFLAGS) + ADD_SERVER_CFLAGS(${CLIENT_CFLAGS}) + +endmacro() + +macro(ADD_INTERNAL_DEFINITIONS INTERNAL_DEFINITIONS) + +endmacro() + +macro(ADD_INTERNAL_CFLAGS INTERNAL_CFLAGS) + if(MSVC) + if(BUILD_STATIC_CRT) + list(APPEND ${INTERNAL_CFLAGS} "/MT") + endif() + endif() + +endmacro() diff --git a/misc/CMakeLists/include/compat.cmake b/misc/CMakeLists/include/compat.cmake new file mode 100644 index 0000000000..1b9e5e4f25 --- /dev/null +++ b/misc/CMakeLists/include/compat.cmake @@ -0,0 +1,88 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# + +macro(compat_target_compile_options TARGET SCOPE) +#Problem: cmake does not handle list entrys with a space properly +#because a list is just a string with semicolon separator +#therefor flags with a parameter (option groups) require a prefix "SHELL:-arch ppc" + if(NOT ${CMAKE_VERSION} VERSION_LESS "3.13.0") + set(sflags) + set(oflags) + set(list_var "${ARGN}") + foreach(SOURCE IN LISTS list_var) + string(FIND "${SOURCE}" " " POS) + if(${POS} LESS 0) + list(APPEND oflags ${SOURCE}) + else() + list(APPEND sflags SHELL:${SOURCE}) + endif() + endforeach() + target_compile_options("${TARGET}" PRIVATE ${oflags} ${sflags}) + else() + set(sflags) + set(oflags) + set(list_var "${ARGN}") + foreach(SOURCE IN LISTS list_var) + string(FIND "${SOURCE}" " " POS) + if(${POS} LESS 0) + list(APPEND oflags ${SOURCE}) + else() + list(APPEND sflags ${SOURCE}) + endif() + endforeach() + string(REPLACE ";" " " CFLAGS_STRING "${sflags}") + set_target_properties("${TARGET}" PROPERTIES COMPILE_FLAGS "${CFLAGS_STRING}") + target_compile_options("${TARGET}" PRIVATE ${oflags}) + endif() +endmacro() + +macro(compat_target_link_options TARGET SCOPE) + if(NOT ${CMAKE_VERSION} VERSION_LESS "3.13.0") + set(sflags) + set(oflags) + set(list_var "${ARGN}") + foreach(SOURCE IN LISTS list_var) + string(FIND "${SOURCE}" " " POS) + if(${POS} LESS 0) + list(APPEND oflags ${SOURCE}) + else() + list(APPEND sflags SHELL:${SOURCE}) + endif() + endforeach() + target_link_options("${TARGET}" PRIVATE ${oflags} ${sflags}) + else() + set(list_var "${ARGN}") + if(CMAKE_BUILD_TYPE MATCHES "Release|release") + string(REGEX REPLACE "\\$<\\$:(.*)>" "\\1" list_var "${list_var}") + else() + string(REGEX REPLACE "\\$<\\$:(.*)>" "" list_var "${list_var}") + endif() + if(CMAKE_BUILD_TYPE MATCHES "Debug|debug") + string(REGEX REPLACE "\\$<\\$:(.*)>" "\\1" list_var "${list_var}") + else() + string(REGEX REPLACE "\\$<\\$:(.*)>" "" list_var "${list_var}") + endif() + string(REPLACE ";" " " LDFLAGS_STRING "${list_var}") + set_target_properties("${TARGET}" PROPERTIES LINK_FLAGS "${LDFLAGS_STRING}") + endif() +endmacro() diff --git a/misc/CMakeLists/include/default_options.cmake b/misc/CMakeLists/include/default_options.cmake new file mode 100644 index 0000000000..9f49e441e2 --- /dev/null +++ b/misc/CMakeLists/include/default_options.cmake @@ -0,0 +1,60 @@ + +set(DEFAULT_BASEGAME "baseq3") +set(DEFAULT_MISSIONPACK "missionpack") + +set(DEFAULT_USE_INTERNAL_LIBS TRUE) +set(DEFAULT_USE_RENDERER_DLOPEN TRUE) + +set(DEFAULT_BUILD_STANDALONE FALSE) + +#cmake is using CMAKE_INSTALL_PREFIX/DEFAULT_REL_INSTALL_DEST +set(DEFAULT_REL_INSTALL_DEST "games/quake3") +#install directories (COPYDIR) overwrite the relative installation destination +#set(DEFAULT_INSTALL_DIR "/usr/local/games/quake3") +#set(DEFAULT_BASEGAME_VM_INSTALL_DIR "/path/to/vm") +#set(DEFAULT_MISSIONPACK_VM_INSTALL_DIR "/path/to/vm") +#set(DEFAULT_BASEGAME_QVM_INSTALL_DIR "/path/to/vm") +#set(DEFAULT_MISSIONPACK_QVM_INSTALL_DIR "/path/to/vm") + +set(DEFAULT_GENERATE_DEPENDENCIES TRUE) +set(DEFAULT_USE_AUTOUPDATER FALSE) +set(DEFAULT_AUTOUPDATER_BIN "autosyncerator") + +#set(DEFAULT_BIN_EXT "") + +#client and server +set(DEFAULT_VERSION "1.36") +set(DEFAULT_USE_GIT_REV TRUE) +#set(DEFAULT_BASEDIR "") + +#client only +set(DEFAULT_CLIENT_BIN "ioquake3") +set(DEFAULT_USE_CODEC_OPUS TRUE) +set(DEFAULT_USE_CODEC_VORBIS FALSE) +set(DEFAULT_USE_CURL TRUE) +set(DEFAULT_USE_CURL_DLOPEN TRUE) +set(DEFAULT_USE_FREETYPE FALSE) +set(DEFAULT_USE_ICON TRUE) +set(DEFAULT_USE_MUMBLE TRUE) +set(DEFAULT_USE_OPENAL TRUE) +set(DEFAULT_USE_OPENAL_DLOPEN TRUE) +set(DEFAULT_USE_VOIP TRUE) + +#server only +set(DEFAULT_SERVER_BIN "ioq3ded") + +#main cmakelist only +set(DEFAULT_BUILD_BASEGAME TRUE) +set(DEFAULT_BUILD_CLIENT TRUE) +set(DEFAULT_BUILD_GAME_QVM TRUE) +set(DEFAULT_BUILD_GAME_VM TRUE) #native vm (so/dll) +set(DEFAULT_BUILD_MISSIONPACK TRUE) +set(DEFAULT_BUILD_RENDERER_OPENGL2 TRUE) +set(DEFAULT_BUILD_SERVER TRUE) + +#cgame, game, ui +#Produce a qvm file compatible with Q3 1.32b +set(DEFAULT_VQ3_COMPATIBLE_QVM TRUE) + +set(DEFAULT_NO_STRIP FALSE) +set(DEFAULT_BUILD_STATIC_CRT TRUE) diff --git a/misc/CMakeLists/include/directory_constants.cmake b/misc/CMakeLists/include/directory_constants.cmake new file mode 100644 index 0000000000..ecdf0e063a --- /dev/null +++ b/misc/CMakeLists/include/directory_constants.cmake @@ -0,0 +1,39 @@ + +set(MOUNT_DIR "${SOURCE_DIR}/code" CACHE PATH "path to the code directory") + +set(ASM_DIR "${MOUNT_DIR}/asm") +set(BOTLIB_DIR "${MOUNT_DIR}/botlib") +set(CGAME_DIR "${MOUNT_DIR}/cgame") +set(GAME_DIR "${MOUNT_DIR}/game") +set(LIBS_DIR "${MOUNT_DIR}/libs") +set(Q3_UI_DIR "${MOUNT_DIR}/q3_ui") +set(QCOMMON_DIR "${MOUNT_DIR}/qcommon") +set(SERVER_DIR "${MOUNT_DIR}/server") +set(SYS_DIR "${MOUNT_DIR}/sys") +set(UI_DIR "${MOUNT_DIR}/ui") + +#client and renderer +set(LIBSDL_DIR "${MOUNT_DIR}/SDL2") +set(SDL_DIR "${MOUNT_DIR}/sdl") + +#client only +set(CLIENT_DIR "${MOUNT_DIR}/client") +set(CURL_DIR "${MOUNT_DIR}/curl-7.54.0") + +#server only +set(NULL_DIR "${MOUNT_DIR}/null") + +#renderer +set(RENDERERCOMMON_DIR "${MOUNT_DIR}/renderercommon") +set(RENDERERGL1_DIR "${MOUNT_DIR}/renderergl1") +set(RENDERERGL2_DIR "${MOUNT_DIR}/renderergl2") +set(GLSL_DIR "${RENDERERGL2_DIR}/glsl") + +#internal libs +set(JPEG_DIR "${MOUNT_DIR}/jpeg-8c") +set(OGG_DIR "${MOUNT_DIR}/libogg-1.3.3") +set(OPUS_DIR "${MOUNT_DIR}/opus-1.2.1") +set(OPUSFILE_DIR "${MOUNT_DIR}/opusfile-0.9") +set(SPEEX_DIR "${MOUNT_DIR}/libspeex") +set(VORBIS_DIR "${MOUNT_DIR}/libvorbis-1.3.6") +set(ZLIB_DIR "${MOUNT_DIR}/zlib") diff --git a/misc/CMakeLists/include/git_rev.cmake b/misc/CMakeLists/include/git_rev.cmake new file mode 100644 index 0000000000..aa28ae0883 --- /dev/null +++ b/misc/CMakeLists/include/git_rev.cmake @@ -0,0 +1,21 @@ + +if(USE_GIT_REV AND IS_DIRECTORY "${SOURCE_DIR}/.git") + find_package(Git) + + if(NOT GIT_FOUND) + set(GIT_EXECUTABLE "git") + endif() + + execute_process( + COMMAND "${GIT_EXECUTABLE}" show -s --pretty=format:%h-%ad --date=short + WORKING_DIRECTORY "${SOURCE_DIR}" + OUTPUT_VARIABLE GIT_REV + RESULT_VARIABLE GIT_REV_RESULT + ERROR_VARIABLE GIT_REV_ERROR + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + if(NOT GIT_REV) + message(WARNING "Could not execute Git. ${GIT_REV_ERROR} ${GIT_REV_RESULT}") + endif(NOT GIT_REV) +endif() \ No newline at end of file diff --git a/misc/CMakeLists/include/glsl_to_c.cmake b/misc/CMakeLists/include/glsl_to_c.cmake new file mode 100644 index 0000000000..25165aa6a8 --- /dev/null +++ b/misc/CMakeLists/include/glsl_to_c.cmake @@ -0,0 +1,53 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +#i.e.: cmake -DSHADERNAME="bokeh_fp" -DINPUT="bokeh_fp.glsl" -DOUTPUT="bokeh_fp.c" -P glsl_to_c.cmake + +if(NOT DEFINED INPUT OR INPUT STREQUAL "") + message("glsl_to_c.cmake: No INPUT defined.") + return() +endif() + +if(NOT DEFINED OUTPUT OR OUTPUT STREQUAL "") + message("glsl_to_c.cmake: No OUTPUT defined.") + return() +endif() + +if(NOT DEFINED SHADERNAME OR SHADERNAME STREQUAL "") + message("glsl_to_c.cmake: No SHADERNAME defined.") + return() +endif() + +set(HEADER "const char *fallbackShader_${SHADERNAME}=\n") +set(FOOTER ";\n") + +#message("glsl_to_c.cmake ${INPUT} ${OUTPUT}") + +file(READ "${INPUT}" GLSL_SHADER) + +string(REGEX REPLACE "([^\n]*)\r?\n" "\"\\1\\\\n\"\n" GLSL_C "${GLSL_SHADER}") + +#set(GLSL_C "${HEADER}${GLSL_C}") + +file(WRITE "${OUTPUT}" "${HEADER}${GLSL_C}${FOOTER}") diff --git a/misc/CMakeLists/include/libsdl_headers.cmake b/misc/CMakeLists/include/libsdl_headers.cmake new file mode 100644 index 0000000000..b63bb24015 --- /dev/null +++ b/misc/CMakeLists/include/libsdl_headers.cmake @@ -0,0 +1,78 @@ + +set(LIBSDL_HEADERS + "${LIBSDL_DIR}/include/begin_code.h" + "${LIBSDL_DIR}/include/close_code.h" + "${LIBSDL_DIR}/include/SDL.h" + "${LIBSDL_DIR}/include/SDL_assert.h" + "${LIBSDL_DIR}/include/SDL_atomic.h" + "${LIBSDL_DIR}/include/SDL_audio.h" + "${LIBSDL_DIR}/include/SDL_bits.h" + "${LIBSDL_DIR}/include/SDL_blendmode.h" + "${LIBSDL_DIR}/include/SDL_clipboard.h" + "${LIBSDL_DIR}/include/SDL_config.h" + "${LIBSDL_DIR}/include/SDL_config_android.h" + "${LIBSDL_DIR}/include/SDL_config_iphoneos.h" + "${LIBSDL_DIR}/include/SDL_config_macosx.h" + "${LIBSDL_DIR}/include/SDL_config_minimal.h" + "${LIBSDL_DIR}/include/SDL_config_pandora.h" + "${LIBSDL_DIR}/include/SDL_config_psp.h" + "${LIBSDL_DIR}/include/SDL_config_windows.h" + "${LIBSDL_DIR}/include/SDL_config_winrt.h" + "${LIBSDL_DIR}/include/SDL_config_wiz.h" + "${LIBSDL_DIR}/include/SDL_copying.h" + "${LIBSDL_DIR}/include/SDL_cpuinfo.h" + "${LIBSDL_DIR}/include/SDL_egl.h" + "${LIBSDL_DIR}/include/SDL_endian.h" + "${LIBSDL_DIR}/include/SDL_error.h" + "${LIBSDL_DIR}/include/SDL_events.h" + "${LIBSDL_DIR}/include/SDL_filesystem.h" + "${LIBSDL_DIR}/include/SDL_gamecontroller.h" + "${LIBSDL_DIR}/include/SDL_gesture.h" + "${LIBSDL_DIR}/include/SDL_haptic.h" + "${LIBSDL_DIR}/include/SDL_hints.h" + "${LIBSDL_DIR}/include/SDL_joystick.h" + "${LIBSDL_DIR}/include/SDL_keyboard.h" + "${LIBSDL_DIR}/include/SDL_keycode.h" + "${LIBSDL_DIR}/include/SDL_loadso.h" + "${LIBSDL_DIR}/include/SDL_log.h" + "${LIBSDL_DIR}/include/SDL_main.h" + "${LIBSDL_DIR}/include/SDL_messagebox.h" + "${LIBSDL_DIR}/include/SDL_mouse.h" + "${LIBSDL_DIR}/include/SDL_mutex.h" + "${LIBSDL_DIR}/include/SDL_name.h" + "${LIBSDL_DIR}/include/SDL_opengl.h" + "${LIBSDL_DIR}/include/SDL_opengles.h" + "${LIBSDL_DIR}/include/SDL_opengles2.h" + "${LIBSDL_DIR}/include/SDL_pixels.h" + "${LIBSDL_DIR}/include/SDL_platform.h" + "${LIBSDL_DIR}/include/SDL_power.h" + "${LIBSDL_DIR}/include/SDL_quit.h" + "${LIBSDL_DIR}/include/SDL_rect.h" + "${LIBSDL_DIR}/include/SDL_render.h" + "${LIBSDL_DIR}/include/SDL_revision.h" + "${LIBSDL_DIR}/include/SDL_rwops.h" + "${LIBSDL_DIR}/include/SDL_scancode.h" + "${LIBSDL_DIR}/include/SDL_shape.h" + "${LIBSDL_DIR}/include/SDL_stdinc.h" + "${LIBSDL_DIR}/include/SDL_surface.h" + "${LIBSDL_DIR}/include/SDL_system.h" + "${LIBSDL_DIR}/include/SDL_syswm.h" + "${LIBSDL_DIR}/include/SDL_test.h" + "${LIBSDL_DIR}/include/SDL_test_assert.h" + "${LIBSDL_DIR}/include/SDL_test_common.h" + "${LIBSDL_DIR}/include/SDL_test_compare.h" + "${LIBSDL_DIR}/include/SDL_test_crc32.h" + "${LIBSDL_DIR}/include/SDL_test_font.h" + "${LIBSDL_DIR}/include/SDL_test_fuzzer.h" + "${LIBSDL_DIR}/include/SDL_test_harness.h" + "${LIBSDL_DIR}/include/SDL_test_images.h" + "${LIBSDL_DIR}/include/SDL_test_log.h" + "${LIBSDL_DIR}/include/SDL_test_md5.h" + "${LIBSDL_DIR}/include/SDL_test_random.h" + "${LIBSDL_DIR}/include/SDL_thread.h" + "${LIBSDL_DIR}/include/SDL_timer.h" + "${LIBSDL_DIR}/include/SDL_touch.h" + "${LIBSDL_DIR}/include/SDL_types.h" + "${LIBSDL_DIR}/include/SDL_version.h" + "${LIBSDL_DIR}/include/SDL_video.h" +) diff --git a/misc/CMakeLists/include/platform.cmake b/misc/CMakeLists/include/platform.cmake new file mode 100644 index 0000000000..6f52f59748 --- /dev/null +++ b/misc/CMakeLists/include/platform.cmake @@ -0,0 +1,56 @@ + +string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" SYSTEM_PROCESSOR) + +if(NOT DEFINED COMPILE_ARCH) + if(SYSTEM_PROCESSOR STREQUAL "unknown") + message(FATAL_ERROR "CMAKE_SYSTEM_PROCESSOR is unknown! Check your CMake generator or toolchain.") + endif() +endif() + +#converting arch types to gcc -march types (also -arch on Darwin) +#https://stackoverflow.com/questions/70475665/what-are-the-possible-values-of-cmake-system-processor +if(SYSTEM_PROCESSOR MATCHES "powerpc") + set(COMPILE_ARCH "ppc") +elseif(SYSTEM_PROCESSOR MATCHES "powerpc64|ppc64le") + set(COMPILE_ARCH "ppc64") +elseif(SYSTEM_PROCESSOR MATCHES "axp") + set(COMPILE_ARCH "alpha") +elseif(SYSTEM_PROCESSOR MATCHES "i386|i686|(i.86)|i86pc|x86pc|x86at") + set(COMPILE_ARCH "x86") +elseif(SYSTEM_PROCESSOR MATCHES "x86-64|ia64|em64t|amd64|x64") + set(COMPILE_ARCH "x86_64") +elseif(SYSTEM_PROCESSOR MATCHES "armv8b|armv8l|aarch64_be|aarch64") + set(COMPILE_ARCH "arm64") +elseif(SYSTEM_PROCESSOR MATCHES "armv7l|armv6l") + set(COMPILE_ARCH "arm") +endif() + + +if(NOT DEFINED COMPILE_ARCH) + set(COMPILE_ARCH "${SYSTEM_PROCESSOR}") +endif() +if(NOT DEFINED ARCH) + string(TOLOWER "${COMPILE_ARCH}" ARCH) +endif() + +set(COMPILE_PLATFORM "${CMAKE_SYSTEM_NAME}") +if(NOT DEFINED PLATFORM) + string(TOLOWER "${COMPILE_PLATFORM}" PLATFORM) +endif() + +if(NOT PLATFORM STREQUAL COMPILE_PLATFORM) + set(CROSS_COMPILING TRUE) +else() + set(CROSS_COMPILING FALSE) + if(NOT ARCH STREQUAL COMPILE_ARCH) + set(CROSS_COMPILING TRUE) + endif() +endif() + + + +if(NOT DEFINED DEFAULT_BIN_EXT) + if(ARCH) + set(DEFAULT_BIN_EXT ".${ARCH}") + endif(ARCH) +endif() diff --git a/misc/CMakeLists/include/strip.cmake b/misc/CMakeLists/include/strip.cmake new file mode 100644 index 0000000000..64bfad125e --- /dev/null +++ b/misc/CMakeLists/include/strip.cmake @@ -0,0 +1,28 @@ +include(CheckCCompilerFlag) + +macro(ADD_STRIP_LDFLAG LDFLAGS_VAR) + if(NOT NO_STRIP) + if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + set(STRIP_FLAG) + CHECK_C_COMPILER_FLAG("-s" COMPILER_SUPPORTS_-s) + if(COMPILER_SUPPORTS_-s) + set(STRIP_FLAG "-s") + endif() + list(APPEND ${LDFLAGS_VAR} $<$:${STRIP_FLAG}>) + endif() + endif() +endmacro() + +macro(STRIP_TARGET STRIP_TARGET_NAME) + + if(CMAKE_STRIP) + set(STRIP_EXECUTABLE "${CMAKE_STRIP}") + else() + find_program(STRIP_EXECUTABLE "strip") + endif() + if(STRIP_EXECUTABLE AND NOT NO_STRIP) + add_custom_command(TARGET "${STRIP_TARGET_NAME}" POST_BUILD + COMMAND $<$:${STRIP_EXECUTABLE}> ARGS $) + endif() + +endmacro() diff --git a/misc/CMakeLists/include/vm_sources.cmake b/misc/CMakeLists/include/vm_sources.cmake new file mode 100644 index 0000000000..30c972f5be --- /dev/null +++ b/misc/CMakeLists/include/vm_sources.cmake @@ -0,0 +1,33 @@ +set(QCOMMON_SOURCES_armv7l + "${QCOMMON_DIR}/vm_armv7l.c" +) +set(QCOMMON_SOURCES_arm ${QCOMMON_SOURCES_armv7l}) +set(QCOMMON_SOURCES_arm64 ${QCOMMON_SOURCES_armv7l}) +set(QCOMMON_SOURCES_x86 + "${QCOMMON_DIR}/vm_x86.c" +) +set(QCOMMON_SOURCES_x86_64 ${QCOMMON_SOURCES_x86}) +set(QCOMMON_SOURCES_ppc + "${QCOMMON_DIR}/vm_powerpc.c" + "${QCOMMON_DIR}/vm_powerpc_asm.c" +) +set(QCOMMON_SOURCES_ppc64 ${QCOMMON_SOURCES_ppc}) +set(QCOMMON_SOURCES_sparc + "${QCOMMON_DIR}/vm_sparc.c" +) +set(QCOMMON_SOURCES_sparc64 ${QCOMMON_SOURCES_sparc}) + + +macro(GET_VM_SUPPORT ARG_VAR) + if(DEFINED QCOMMON_SOURCES_${ARCH}) + set(${ARG_VAR} TRUE) + else() + set(${ARG_VAR} FALSE) + endif() +endmacro() + +macro(GET_VM_SOURCES ARG_VAR) + if(DEFINED QCOMMON_SOURCES_${ARCH}) + set(${ARG_VAR} ${QCOMMON_SOURCES_${ARCH}}) + endif() +endmacro() diff --git a/misc/CMakeLists/internal_jpeg/CMakeLists.txt b/misc/CMakeLists/internal_jpeg/CMakeLists.txt new file mode 100644 index 0000000000..01e4d99b79 --- /dev/null +++ b/misc/CMakeLists/internal_jpeg/CMakeLists.txt @@ -0,0 +1,142 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("internal jpeg") + +set(JPEG_TARGET "internal_jpeg") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/cflags.cmake") +include("${CMAKELIST_DIR}/include/compat.cmake") +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + option(GENERATE_DEPENDENCIES "Preprocessing: Generate dependencies for make outputting" ${DEFAULT_GENERATE_DEPENDENCIES}) +endif() +if(MSVC) + option(BUILD_STATIC_CRT "Build (static) multi-threaded C runtime library" ${DEFAULT_BUILD_STATIC_CRT}) +endif() + +set(JPEG_SOURCES + "${JPEG_DIR}/jaricom.c" + "${JPEG_DIR}/jcapimin.c" + "${JPEG_DIR}/jcapistd.c" + "${JPEG_DIR}/jcarith.c" + "${JPEG_DIR}/jccoefct.c" + "${JPEG_DIR}/jccolor.c" + "${JPEG_DIR}/jcdctmgr.c" + "${JPEG_DIR}/jchuff.c" + "${JPEG_DIR}/jcinit.c" + "${JPEG_DIR}/jcmainct.c" + "${JPEG_DIR}/jcmarker.c" + "${JPEG_DIR}/jcmaster.c" + "${JPEG_DIR}/jcomapi.c" + "${JPEG_DIR}/jcparam.c" + "${JPEG_DIR}/jcprepct.c" + "${JPEG_DIR}/jcsample.c" + "${JPEG_DIR}/jctrans.c" + "${JPEG_DIR}/jdapimin.c" + "${JPEG_DIR}/jdapistd.c" + "${JPEG_DIR}/jdarith.c" + "${JPEG_DIR}/jdatadst.c" + "${JPEG_DIR}/jdatasrc.c" + "${JPEG_DIR}/jdcoefct.c" + "${JPEG_DIR}/jdcolor.c" + "${JPEG_DIR}/jddctmgr.c" + "${JPEG_DIR}/jdhuff.c" + "${JPEG_DIR}/jdinput.c" + "${JPEG_DIR}/jdmainct.c" + "${JPEG_DIR}/jdmarker.c" + "${JPEG_DIR}/jdmaster.c" + "${JPEG_DIR}/jdmerge.c" + "${JPEG_DIR}/jdpostct.c" + "${JPEG_DIR}/jdsample.c" + "${JPEG_DIR}/jdtrans.c" + "${JPEG_DIR}/jerror.c" + "${JPEG_DIR}/jfdctflt.c" + "${JPEG_DIR}/jfdctfst.c" + "${JPEG_DIR}/jfdctint.c" + "${JPEG_DIR}/jidctflt.c" + "${JPEG_DIR}/jidctfst.c" + "${JPEG_DIR}/jidctint.c" + "${JPEG_DIR}/jmemmgr.c" + "${JPEG_DIR}/jmemnobs.c" + "${JPEG_DIR}/jquant1.c" + "${JPEG_DIR}/jquant2.c" + "${JPEG_DIR}/jutils.c" +) +set(JPEG_HEADERS + "${JPEG_DIR}/jconfig.h" + "${JPEG_DIR}/jdct.h" + "${JPEG_DIR}/jerror.h" + "${JPEG_DIR}/jinclude.h" + "${JPEG_DIR}/jmemsys.h" + "${JPEG_DIR}/jmorecfg.h" + "${JPEG_DIR}/jpegint.h" + "${JPEG_DIR}/jpeglib.h" + "${JPEG_DIR}/jversion.h" +) + + +if(MSVC) + #disable deprecation warnings about old functions like strcmp + list(APPEND JPEG_DEFINITIONS "-D_CRT_SECURE_NO_WARNINGS") + + #Optimization, Full /Ox + list(APPEND JPEG_CFLAGS "/Ox") + #Enable Intrinsic Functions, No /Oi- + list(APPEND JPEG_CFLAGS "/Oi-") + #Omit Frame Pointers, Yes /Oy + list(APPEND JPEG_CFLAGS "/Oy") + #Enable Fiber-Safe Optimizations /GT + list(APPEND JPEG_CFLAGS "/GT") + #Enable Function-Level Linking /Gy + list(APPEND JPEG_CFLAGS "/Gy") + #Disable specific warnings + list(APPEND JPEG_CFLAGS "/wd4996") + +endif(MSVC) + +ADD_INTERNAL_DEFINITIONS(JPEG_DEFINITIONS) +ADD_INTERNAL_CFLAGS(JPEG_CFLAGS) + +source_group("Source Files" FILES ${JPEG_SOURCES}) +source_group("Header Files" FILES ${JPEG_HEADERS}) + +add_library(${JPEG_TARGET} STATIC ${JPEG_SOURCES} ${JPEG_HEADERS}) + +target_compile_definitions(${JPEG_TARGET} PRIVATE ${JPEG_DEFINITIONS}) + +target_include_directories(${JPEG_TARGET} PRIVATE ${JPEG_INCLUDE_DIRS}) + +compat_target_compile_options(${JPEG_TARGET} PRIVATE ${JPEG_CFLAGS}) + +set(INTERNAL_JPEG_DEFINITIONS "" PARENT_SCOPE) +set(INTERNAL_JPEG_INCLUDE_DIRS "${JPEG_DIR}" PARENT_SCOPE) +set(INTERNAL_JPEG_LIBRARIES "${JPEG_TARGET}" PARENT_SCOPE) diff --git a/misc/CMakeLists/internal_zlib/CMakeLists.txt b/misc/CMakeLists/internal_zlib/CMakeLists.txt new file mode 100644 index 0000000000..2479ebba45 --- /dev/null +++ b/misc/CMakeLists/internal_zlib/CMakeLists.txt @@ -0,0 +1,131 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("internal zlib") + +set(ZLIB_TARGET "internal_zlib") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/cflags.cmake") +include("${CMAKELIST_DIR}/include/compat.cmake") +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + option(GENERATE_DEPENDENCIES "Preprocessing: Generate dependencies for make outputting" ${DEFAULT_GENERATE_DEPENDENCIES}) +endif() +if(MSVC) + option(BUILD_STATIC_CRT "Build (static) multi-threaded C runtime library" ${DEFAULT_BUILD_STATIC_CRT}) +endif() + +set(ZLIB_SOURCES + "${ZLIB_DIR}/adler32.c" + "${ZLIB_DIR}/crc32.c" + "${ZLIB_DIR}/inffast.c" + "${ZLIB_DIR}/inflate.c" + "${ZLIB_DIR}/inftrees.c" + "${ZLIB_DIR}/zutil.c" +) +set(ZLIB_HEADERS + "${ZLIB_DIR}/crc32.h" + "${ZLIB_DIR}/inffast.h" + "${ZLIB_DIR}/inffixed.h" + "${ZLIB_DIR}/inflate.h" + "${ZLIB_DIR}/inftrees.h" + "${ZLIB_DIR}/zconf.h" + "${ZLIB_DIR}/zlib.h" + "${ZLIB_DIR}/zutil.h" +) + +if(MSVC) + #no crt warnings + list(APPEND ZLIB_DEFINITIONS "-D_CRT_NONSTDC_NO_DEPRECATE") + list(APPEND ZLIB_DEFINITIONS "-D_CRT_SECURE_NO_DEPRECATE") + list(APPEND ZLIB_DEFINITIONS "-D_CRT_NONSTDC_NO_WARNINGS") + + #Character Set, CharacterSet="0", Not Set, ASCII/SBCS (Single Byte Character Set) + list(APPEND ZLIB_DEFINITIONS "-D_SBCS") + + #switch on the WINAPI (STDCALL) convention + #list(APPEND ZLIB_DEFINITIONS "-DZLIB_WINAPI") + #unused + #list(APPEND ZLIB_DEFINITIONS "-DASMV") + #machine dependent optimization + #list(APPEND ZLIB_DEFINITIONS "-DASMINF") + + #Inline Function Expansion, only __inline /Ob1 + list(APPEND ZLIB_CFLAGS $<$:/Ob1>) + #Omit Frame Pointers, Yes /Oy + list(APPEND ZLIB_CFLAGS $<$:/Oy>) + + #Enable String Pooling /GF + list(APPEND ZLIB_CFLAGS "/GF") + #Buffer Security Check, No /GS- + list(APPEND ZLIB_CFLAGS "/GS-") + #Enable Function-Level Linking /Gy + list(APPEND ZLIB_CFLAGS "/Gy") + +endif(MSVC) + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + + set(OFLAGS "-O4" "-O3" "-O2" "-O") + set(OFLAGS_SUPPORTED) + ADD_FIRST_SUPPORTED_CFLAG(OFLAGS OFLAGS_SUPPORTED) + list(APPEND ZLIB_CFLAGS $<$:${OFLAGS_SUPPORTED}>) + + set(DFLAGS "-Wall" "-Wextra" "-Wcast-qual" "-pedantic") + set(DFLAGS_SUPPORTED) + ADD_SUPPORTED_CFLAGS(DFLAGS DFLAGS_SUPPORTED) + list(APPEND ZLIB_CFLAGS $<$:${DFLAGS_SUPPORTED}>) + +endif() + +ADD_INTERNAL_DEFINITIONS(ZLIB_DEFINITIONS) +ADD_INTERNAL_CFLAGS(ZLIB_CFLAGS) + +#unused +#list(APPEND ZLIB_DEFINITIONS "-DZLIB_CONST") + +list(APPEND ZLIB_DEFINITIONS "-DNO_GZIP") +#list(APPEND ZLIB_INCLUDE_DIRS "${ZLIB_DIR}") + +source_group("Source Files" FILES ${ZLIB_SOURCES}) +source_group("Header Files" FILES ${ZLIB_HEADERS}) + +add_library(${ZLIB_TARGET} STATIC ${ZLIB_SOURCES} ${ZLIB_HEADERS}) + +target_compile_definitions(${ZLIB_TARGET} PRIVATE ${ZLIB_DEFINITIONS}) + +target_include_directories(${ZLIB_TARGET} PRIVATE ${ZLIB_INCLUDE_DIRS}) + +compat_target_compile_options(${ZLIB_TARGET} PRIVATE ${ZLIB_CFLAGS}) + +set(INTERNAL_ZLIB_DEFINITIONS "" PARENT_SCOPE) +set(INTERNAL_ZLIB_INCLUDE_DIRS "${ZLIB_DIR}" PARENT_SCOPE) +set(INTERNAL_ZLIB_LIBRARIES "${ZLIB_TARGET}" PARENT_SCOPE) diff --git a/misc/CMakeLists/qvm/CMakeLists.txt b/misc/CMakeLists/qvm/CMakeLists.txt new file mode 100644 index 0000000000..8fe0d0618c --- /dev/null +++ b/misc/CMakeLists/qvm/CMakeLists.txt @@ -0,0 +1,14 @@ +project("qvm") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/default_options.cmake") + +set(BASEGAME "${DEFAULT_BASEGAME}" CACHE STRING "") +set(MISSIONPACK "${DEFAULT_MISSIONPACK}" CACHE STRING "") + +add_subdirectory("${BASEGAME}") +add_subdirectory("${MISSIONPACK}") diff --git a/misc/CMakeLists/qvm/baseq3/CMakeLists.txt b/misc/CMakeLists/qvm/baseq3/CMakeLists.txt new file mode 100644 index 0000000000..a646174407 --- /dev/null +++ b/misc/CMakeLists/qvm/baseq3/CMakeLists.txt @@ -0,0 +1,29 @@ +project("basegame qvm") + +add_subdirectory("cgame") +add_subdirectory("game") +add_subdirectory("ui") + +if(NOT ${CMAKE_VERSION} VERSION_LESS "3.3.0") + + get_target_property(CGAME_FILENAME ${BASE_CGAME_QVM_TARGET} QVM_FILENAME) + get_target_property(GAME_FILENAME ${BASE_GAME_QVM_TARGET} QVM_FILENAME) + get_target_property(UI_FILENAME ${BASE_UI_QVM_TARGET} QVM_FILENAME) + + set(BASE_DIR "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/basegame") + set(PK3_FILENAME "basegame_qvm.pk3") + set(PK3_FILE "${BASE_DIR}/${PK3_FILENAME}") + + add_custom_target(dist_basegame_qvm + COMMAND ${CMAKE_COMMAND} -E chdir "${BASE_DIR}" + tar "cfv" "${PK3_FILE}" --format=zip + "vm/${CGAME_FILENAME}" + "vm/${GAME_FILENAME}" + "vm/${UI_FILENAME}" + DEPENDS "${BASE_DIR}/vm/${CGAME_FILENAME}" + "${BASE_DIR}/vm/${GAME_FILENAME}" + "${BASE_DIR}/vm/${UI_FILENAME}" + COMMENT ${PK3_FILE} + ) + +endif() diff --git a/misc/CMakeLists/qvm/baseq3/cgame/CMakeLists.txt b/misc/CMakeLists/qvm/baseq3/cgame/CMakeLists.txt new file mode 100644 index 0000000000..6bc7d69daa --- /dev/null +++ b/misc/CMakeLists/qvm/baseq3/cgame/CMakeLists.txt @@ -0,0 +1,164 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("basegame cgame qvm") + +set(BASE_CGAME_QVM_TARGET "basegame_cgame_qvm" CACHE INTERNAL "Target name") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") + +option(VQ3_COMPATIBLE_QVM "Produce a qvm file compatible with Q3 1.32b" ${DEFAULT_VQ3_COMPATIBLE_QVM}) + +set(BASEGAME_QVM_INSTALL_DIR "${DEFAULT_BASEGAME_QVM_INSTALL_DIR}" CACHE PATH "Installation directory") + +#*_main.c has to be the first for vmMain in qvms +set(CGAME_SOURCES + "${CGAME_DIR}/cg_main.c" + + "${CGAME_DIR}/cg_consolecmds.c" + "${CGAME_DIR}/cg_draw.c" + "${CGAME_DIR}/cg_drawtools.c" + "${CGAME_DIR}/cg_effects.c" + "${CGAME_DIR}/cg_ents.c" + "${CGAME_DIR}/cg_event.c" + "${CGAME_DIR}/cg_info.c" + "${CGAME_DIR}/cg_localents.c" + + "${CGAME_DIR}/cg_marks.c" + "${CGAME_DIR}/cg_particles.c" + "${CGAME_DIR}/cg_players.c" + "${CGAME_DIR}/cg_playerstate.c" + "${CGAME_DIR}/cg_predict.c" + "${CGAME_DIR}/cg_scoreboard.c" + "${CGAME_DIR}/cg_servercmds.c" + "${CGAME_DIR}/cg_snapshot.c" + "${CGAME_DIR}/cg_view.c" + "${CGAME_DIR}/cg_weapons.c" + +# "${CGAME_DIR}/cg_syscalls.c" +) +set(CGAME_HEADERS + "${CGAME_DIR}/cg_local.h" + "${CGAME_DIR}/cg_public.h" +) +set(CGAME_ASM_SOURCES + "${CGAME_DIR}/cg_syscalls.asm" +) +set(GAME_SOURCES + "${GAME_DIR}/bg_misc.c" + "${GAME_DIR}/bg_pmove.c" + "${GAME_DIR}/bg_slidemove.c" + "${GAME_DIR}/bg_lib.c" +) +set(GAME_HEADERS + "${GAME_DIR}/bg_local.h" + "${GAME_DIR}/bg_public.h" + "${GAME_DIR}/bg_lib.h" +) +set(QCOMMON_SOURCES + "${QCOMMON_DIR}/q_math.c" + "${QCOMMON_DIR}/q_shared.c" +) +set(QCOMMON_HEADERS + "${QCOMMON_DIR}/q_shared.h" +) + +list(APPEND CGAME_DEFINITIONS "-DCGAME") +list(APPEND CGAME_DEFINITIONS "-DQ3_VM") + +list(APPEND CGAME_C_SOURCES ${CGAME_SOURCES} ${GAME_SOURCES} ${QCOMMON_SOURCES}) +list(APPEND CGAME_C_HEADERS ${CGAME_HEADERS} ${GAME_HEADERS} ${QCOMMON_HEADERS}) + +source_group("cgame\\Source Files" FILES ${CGAME_SOURCES}) +source_group("cgame\\Header Files" FILES ${CGAME_HEADERS}) +source_group("cgame" FILES ${CGAME_ASM_SOURCES}) +source_group("game\\Source Files" FILES ${GAME_SOURCES}) +source_group("game\\Header Files" FILES ${GAME_HEADERS}) +source_group("qcommon\\Source Files" FILES ${QCOMMON_SOURCES}) +source_group("qcommon\\Header Files" FILES ${QCOMMON_HEADERS}) + +set(QVM_FILENAME "cgame.qvm") +set(QVM_FILE "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/basegame/vm/${QVM_FILENAME}") + +set(ASM_BDIR "${CMAKE_CURRENT_BINARY_DIR}/asm") +file(MAKE_DIRECTORY "${ASM_BDIR}") + +set(CGAME_ASM_FILES) + +set(Q3CPP_VERBOSE_OPTION $<$:-v>) +set(Q3LCC_VERBOSE_OPTION $<$:-v>) + +foreach(SOURCE ${CGAME_C_SOURCES}) + get_filename_component(BASE_FILENAME "${SOURCE}" NAME_WE) + set(ASM_FILENAME "${ASM_BDIR}/${BASE_FILENAME}.asm") + + add_custom_command(OUTPUT "${ASM_FILENAME}" + COMMAND "$" ARGS ${Q3LCC_OPTIIONS} ${Q3LCC_VERBOSE_OPTION} ${CGAME_DEFINITIONS} -o "${ASM_FILENAME}" "${SOURCE}" -Wo-lrccdir=$ -Wo-lcppdir=$ -I${CGAME_DIR} -I${GAME_DIR} -I${QCOMMON_DIR} + DEPENDS ${Q3LCC_TARGET} ${Q3RCC_TARGET} ${Q3CPP_TARGET} ${SOURCE} + ) + list(APPEND CGAME_ASM_FILES "${ASM_FILENAME}") + set_source_files_properties("${SOURCE}" PROPERTIES HEADER_FILE_ONLY TRUE) +endforeach() + +foreach(SOURCE ${CGAME_ASM_SOURCES}) + set_source_files_properties("${SOURCE}" PROPERTIES HEADER_FILE_ONLY TRUE) +endforeach() + +set(SOURCES ${CGAME_ASM_FILES} ${CGAME_ASM_SOURCES}) + +if(VQ3_COMPATIBLE_QVM) + set(VQ3_OPTION "-vq3") +endif(VQ3_COMPATIBLE_QVM) + +add_custom_command(OUTPUT "${QVM_FILE}" + COMMAND "$" ${Q3CPP_OPTIIONS} ${Q3CPP_VERBOSE_OPTION} ${VQ3_OPTION} -o "${QVM_FILE}" ${SOURCES} + DEPENDS ${Q3ASM_TARGET} ${SOURCES} +) + +add_custom_target(${BASE_CGAME_QVM_TARGET} ALL + DEPENDS "${QVM_FILE}" + SOURCES ${CGAME_C_SOURCES} ${CGAME_C_HEADERS} +) +set_target_properties(${BASE_CGAME_QVM_TARGET} PROPERTIES QVM_FILENAME "${QVM_FILENAME}") + +set(DESTIONATION_DIR) +if(BASEGAME_QVM_INSTALL_DIR) + set(DESTIONATION_DIR "${BASEGAME_QVM_INSTALL_DIR}") +endif(BASEGAME_QVM_INSTALL_DIR) + +if(DESTIONATION_DIR) + install(FILES "${QVM_FILE}" + DESTINATION "${DESTIONATION_DIR}" + CONFIGURATIONS Release + COMPONENT basegame_qvm + ) +endif(DESTIONATION_DIR) + +include(CPack) diff --git a/misc/CMakeLists/qvm/baseq3/game/CMakeLists.txt b/misc/CMakeLists/qvm/baseq3/game/CMakeLists.txt new file mode 100644 index 0000000000..f072bf8181 --- /dev/null +++ b/misc/CMakeLists/qvm/baseq3/game/CMakeLists.txt @@ -0,0 +1,231 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("basegame game qvm") + +set(BASE_GAME_QVM_TARGET "basegame_game_qvm" CACHE INTERNAL "Target name") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") + +option(VQ3_COMPATIBLE_QVM "Produce a qvm file compatible with Q3 1.32b" ${DEFAULT_VQ3_COMPATIBLE_QVM}) + +set(BASEGAME_QVM_INSTALL_DIR "${DEFAULT_BASEGAME_QVM_INSTALL_DIR}" CACHE PATH "Installation directory") + +set(BOTLIB_HEADERS + "${BOTLIB_DIR}/aasfile.h" + "${BOTLIB_DIR}/be_aas.h" + "${BOTLIB_DIR}/be_aas_bsp.h" + "${BOTLIB_DIR}/be_aas_cluster.h" + "${BOTLIB_DIR}/be_aas_debug.h" + "${BOTLIB_DIR}/be_aas_def.h" + "${BOTLIB_DIR}/be_aas_entity.h" + "${BOTLIB_DIR}/be_aas_file.h" + "${BOTLIB_DIR}/be_aas_funcs.h" + "${BOTLIB_DIR}/be_aas_main.h" + "${BOTLIB_DIR}/be_aas_move.h" + "${BOTLIB_DIR}/be_aas_optimize.h" + "${BOTLIB_DIR}/be_aas_reach.h" + "${BOTLIB_DIR}/be_aas_route.h" + "${BOTLIB_DIR}/be_aas_routealt.h" + "${BOTLIB_DIR}/be_aas_sample.h" + "${BOTLIB_DIR}/be_ai_char.h" + "${BOTLIB_DIR}/be_ai_chat.h" + "${BOTLIB_DIR}/be_ai_gen.h" + "${BOTLIB_DIR}/be_ai_goal.h" + "${BOTLIB_DIR}/be_ai_move.h" + "${BOTLIB_DIR}/be_ai_weap.h" + "${BOTLIB_DIR}/be_ai_weight.h" + "${BOTLIB_DIR}/be_ea.h" + "${BOTLIB_DIR}/be_interface.h" + "${BOTLIB_DIR}/botlib.h" + "${BOTLIB_DIR}/l_crc.h" + "${BOTLIB_DIR}/l_libvar.h" + "${BOTLIB_DIR}/l_log.h" + "${BOTLIB_DIR}/l_memory.h" + "${BOTLIB_DIR}/l_precomp.h" + "${BOTLIB_DIR}/l_script.h" + "${BOTLIB_DIR}/l_struct.h" + "${BOTLIB_DIR}/l_utils.h" +) +set(GAME_SOURCES + "${GAME_DIR}/g_main.c" + + "${GAME_DIR}/ai_chat.c" + "${GAME_DIR}/ai_cmd.c" + "${GAME_DIR}/ai_dmnet.c" + "${GAME_DIR}/ai_dmq3.c" + "${GAME_DIR}/ai_main.c" + "${GAME_DIR}/ai_team.c" + "${GAME_DIR}/ai_vcmd.c" + + "${GAME_DIR}/bg_misc.c" + "${GAME_DIR}/bg_pmove.c" + "${GAME_DIR}/bg_slidemove.c" + "${GAME_DIR}/bg_lib.c" + + "${GAME_DIR}/g_active.c" + "${GAME_DIR}/g_arenas.c" + "${GAME_DIR}/g_bot.c" + "${GAME_DIR}/g_client.c" + "${GAME_DIR}/g_cmds.c" + "${GAME_DIR}/g_combat.c" + "${GAME_DIR}/g_items.c" + + "${GAME_DIR}/g_mem.c" + "${GAME_DIR}/g_misc.c" + "${GAME_DIR}/g_missile.c" + "${GAME_DIR}/g_mover.c" + "${GAME_DIR}/g_session.c" + "${GAME_DIR}/g_spawn.c" + "${GAME_DIR}/g_svcmds.c" + "${GAME_DIR}/g_target.c" + "${GAME_DIR}/g_team.c" + "${GAME_DIR}/g_trigger.c" + "${GAME_DIR}/g_utils.c" + "${GAME_DIR}/g_weapon.c" + +# "${GAME_DIR}/g_syscalls.c" +) +set(GAME_ASM_SOURCES + "${GAME_DIR}/g_syscalls.asm" +) +set(GAME_HEADERS + "${GAME_DIR}/ai_chat.h" + "${GAME_DIR}/ai_cmd.h" + "${GAME_DIR}/ai_dmnet.h" + "${GAME_DIR}/ai_dmq3.h" + "${GAME_DIR}/ai_main.h" + "${GAME_DIR}/ai_team.h" + "${GAME_DIR}/ai_vcmd.h" + "${GAME_DIR}/chars.h" + "${GAME_DIR}/inv.h" + "${GAME_DIR}/match.h" + "${GAME_DIR}/syn.h" + + "${GAME_DIR}/bg_local.h" + "${GAME_DIR}/bg_public.h" + "${GAME_DIR}/bg_lib.h" + + "${GAME_DIR}/g_local.h" + "${GAME_DIR}/g_public.h" + + "${GAME_DIR}/g_team.h" + +) +set(QCOMMON_SOURCES + "${QCOMMON_DIR}/q_math.c" + "${QCOMMON_DIR}/q_shared.c" +) +set(QCOMMON_HEADERS + "${QCOMMON_DIR}/q_shared.h" +) + +list(APPEND GAME_DEFINITIONS "-DQAGAME") +list(APPEND GAME_DEFINITIONS "-DQ3_VM") + +#todo use add_custom_command with VERBATIM to get quotation marks working? +#-DPRODUCT_DATE="Nov 28 2021" still creates a q3lcc error cause of the blank char +if(FALSE AND DEFINED ENV{SOURCE_DATE_EPOCH}) + if(NOT ${CMAKE_VERSION} VERSION_LESS "3.8.0") + string(TIMESTAMP PRODUCT_DATE "%b %d %Y" UTC) #Nov 28 2021 + list(APPEND GAME_DEFINITIONS "-DPRODUCT_DATE=\"${PRODUCT_DATE}\"") + else() + message(WARNING "Update CMake to version 3.8 or later for SOURCE_DATE_EPOCH support!") + endif() +endif() + +list(APPEND GAME_C_SOURCES ${GAME_SOURCES} ${QCOMMON_SOURCES}) +list(APPEND GAME_C_HEADERS ${GAME_HEADERS} ${QCOMMON_HEADERS} ${BOTLIB_HEADERS}) + +source_group("botlib\\Header Files" FILES ${BOTLIB_HEADERS}) +source_group("game\\Source Files" FILES ${GAME_SOURCES}) +source_group("game\\Header Files" FILES ${GAME_HEADERS}) +source_group("game" FILES ${GAME_ASM_SOURCES}) +source_group("qcommon\\Source Files" FILES ${QCOMMON_SOURCES}) +source_group("qcommon\\Header Files" FILES ${QCOMMON_HEADERS}) + +set(QVM_FILENAME "qagame.qvm") +set(QVM_FILE "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/basegame/vm/${QVM_FILENAME}") + +set(ASM_BDIR "${CMAKE_CURRENT_BINARY_DIR}/asm") +file(MAKE_DIRECTORY "${ASM_BDIR}") + +set(GAME_ASM_FILES) + +set(Q3CPP_VERBOSE_OPTION $<$:-v>) +set(Q3LCC_VERBOSE_OPTION $<$:-v>) + +foreach(SOURCE ${GAME_C_SOURCES}) + get_filename_component(BASE_FILENAME "${SOURCE}" NAME_WE) + set(ASM_FILENAME "${ASM_BDIR}/${BASE_FILENAME}.asm") + + add_custom_command(OUTPUT "${ASM_FILENAME}" + COMMAND "$" ARGS ${Q3LCC_OPTIIONS} ${Q3LCC_VERBOSE_OPTION} ${GAME_DEFINITIONS} -o "${ASM_FILENAME}" "${SOURCE}" -Wo-lrccdir=$ -Wo-lcppdir=$ -I${BOTLIB_DIR} -I${GAME_DIR} -I${QCOMMON_DIR} + DEPENDS ${Q3LCC_TARGET} ${Q3RCC_TARGET} ${Q3CPP_TARGET} ${SOURCE} + ) + list(APPEND GAME_ASM_FILES "${ASM_FILENAME}") + set_source_files_properties("${SOURCE}" PROPERTIES HEADER_FILE_ONLY TRUE) +endforeach() + +foreach(SOURCE ${GAME_ASM_SOURCES}) + set_source_files_properties("${SOURCE}" PROPERTIES HEADER_FILE_ONLY TRUE) +endforeach() + +set(SOURCES ${GAME_ASM_FILES} ${GAME_ASM_SOURCES}) + +if(VQ3_COMPATIBLE_QVM) + set(VQ3_OPTION "-vq3") +endif(VQ3_COMPATIBLE_QVM) + +add_custom_command(OUTPUT "${QVM_FILE}" + COMMAND "$" ${Q3CPP_OPTIIONS} ${Q3CPP_VERBOSE_OPTION} ${VQ3_OPTION} -o "${QVM_FILE}" ${SOURCES} + DEPENDS ${Q3ASM_TARGET} ${SOURCES} +) + +add_custom_target(${BASE_GAME_QVM_TARGET} ALL + DEPENDS "${QVM_FILE}" + SOURCES ${GAME_C_SOURCES} ${GAME_C_HEADERS} +) +set_target_properties(${BASE_GAME_QVM_TARGET} PROPERTIES QVM_FILENAME "${QVM_FILENAME}") + +set(DESTIONATION_DIR) +if(BASEGAME_QVM_INSTALL_DIR) + set(DESTIONATION_DIR "${BASEGAME_QVM_INSTALL_DIR}") +endif(BASEGAME_QVM_INSTALL_DIR) + +if(DESTIONATION_DIR) + install(FILES "${QVM_FILE}" + DESTINATION "${DESTIONATION_DIR}" + CONFIGURATIONS Release + COMPONENT basegame_qvm + ) +endif(DESTIONATION_DIR) + +include(CPack) diff --git a/misc/CMakeLists/qvm/baseq3/ui/CMakeLists.txt b/misc/CMakeLists/qvm/baseq3/ui/CMakeLists.txt new file mode 100644 index 0000000000..2670dec610 --- /dev/null +++ b/misc/CMakeLists/qvm/baseq3/ui/CMakeLists.txt @@ -0,0 +1,189 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("basegame ui qvm") + +set(BASE_UI_QVM_TARGET "basegame_ui_qvm" CACHE INTERNAL "Target name") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") + +option(VQ3_COMPATIBLE_QVM "Produce a qvm file compatible with Q3 1.32b" ${DEFAULT_VQ3_COMPATIBLE_QVM}) + +set(BASEGAME_QVM_INSTALL_DIR "${DEFAULT_BASEGAME_QVM_INSTALL_DIR}" CACHE PATH "Installation directory") + +set(GAME_SOURCES + "${GAME_DIR}/bg_misc.c" + "${GAME_DIR}/bg_lib.c" +) +set(GAME_HEADERS + "${GAME_DIR}/bg_local.h" + "${GAME_DIR}/bg_public.h" + "${GAME_DIR}/bg_lib.h" +) +set(Q3_UI_SOURCES + "${Q3_UI_DIR}/ui_main.c" + + "${Q3_UI_DIR}/ui_addbots.c" + "${Q3_UI_DIR}/ui_atoms.c" + "${Q3_UI_DIR}/ui_cdkey.c" + "${Q3_UI_DIR}/ui_cinematics.c" + "${Q3_UI_DIR}/ui_confirm.c" + "${Q3_UI_DIR}/ui_connect.c" + "${Q3_UI_DIR}/ui_controls2.c" + "${Q3_UI_DIR}/ui_credits.c" + "${Q3_UI_DIR}/ui_demo2.c" + "${Q3_UI_DIR}/ui_display.c" + "${Q3_UI_DIR}/ui_gameinfo.c" + "${Q3_UI_DIR}/ui_ingame.c" + "${Q3_UI_DIR}/ui_loadconfig.c" + + "${Q3_UI_DIR}/ui_menu.c" + "${Q3_UI_DIR}/ui_mfield.c" + "${Q3_UI_DIR}/ui_mods.c" + "${Q3_UI_DIR}/ui_network.c" + "${Q3_UI_DIR}/ui_options.c" + "${Q3_UI_DIR}/ui_playermodel.c" + "${Q3_UI_DIR}/ui_players.c" + "${Q3_UI_DIR}/ui_playersettings.c" + "${Q3_UI_DIR}/ui_preferences.c" + "${Q3_UI_DIR}/ui_qmenu.c" + "${Q3_UI_DIR}/ui_removebots.c" + "${Q3_UI_DIR}/ui_saveconfig.c" + "${Q3_UI_DIR}/ui_serverinfo.c" + "${Q3_UI_DIR}/ui_servers2.c" + "${Q3_UI_DIR}/ui_setup.c" + "${Q3_UI_DIR}/ui_sound.c" + "${Q3_UI_DIR}/ui_sparena.c" + "${Q3_UI_DIR}/ui_specifyserver.c" + "${Q3_UI_DIR}/ui_splevel.c" + "${Q3_UI_DIR}/ui_sppostgame.c" + "${Q3_UI_DIR}/ui_spskill.c" + "${Q3_UI_DIR}/ui_startserver.c" + "${Q3_UI_DIR}/ui_team.c" + "${Q3_UI_DIR}/ui_teamorders.c" + "${Q3_UI_DIR}/ui_video.c" + +) +set(UI_ASM_SOURCES + "${UI_DIR}/ui_syscalls.asm" +) + +set(Q3_UI_HEADERS + "${Q3_UI_DIR}/ui_local.h" + +) +set(QCOMMON_SOURCES + "${QCOMMON_DIR}/q_math.c" + "${QCOMMON_DIR}/q_shared.c" +) +set(QCOMMON_HEADERS + "${QCOMMON_DIR}/q_shared.h" +) +set(UI_SOURCES + +) +set(UI_HEADERS + +) + +list(APPEND UI_DEFINITIONS "-DUI") +list(APPEND UI_DEFINITIONS "-DQ3_VM") + +list(APPEND UI_C_SOURCES ${Q3_UI_SOURCES} ${UI_SOURCES} ${GAME_SOURCES} ${QCOMMON_SOURCES}) +list(APPEND UI_C_HEADERS ${Q3_UI_HEADERS} ${UI_HEADERS} ${GAME_HEADERS} ${QCOMMON_HEADERS}) + +source_group("game\\Source Files" FILES ${GAME_SOURCES}) +source_group("game\\Header Files" FILES ${GAME_HEADERS}) +source_group("q3_ui\\Source Files" FILES ${Q3_UI_SOURCES}) +source_group("q3_ui\\Header Files" FILES ${Q3_UI_HEADERS}) +source_group("qcommon\\Source Files" FILES ${QCOMMON_SOURCES}) +source_group("qcommon\\Header Files" FILES ${QCOMMON_HEADERS}) +source_group("ui\\Source Files" FILES ${UI_SOURCES}) +source_group("ui\\Header Files" FILES ${UI_HEADERS}) +source_group("ui" FILES ${UI_ASM_SOURCES}) + +set(QVM_FILENAME "ui.qvm") +set(QVM_FILE "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/basegame/vm/${QVM_FILENAME}") + +set(ASM_BDIR "${CMAKE_CURRENT_BINARY_DIR}/asm") +file(MAKE_DIRECTORY "${ASM_BDIR}") + +set(UI_ASM_FILES) + +set(Q3CPP_VERBOSE_OPTION $<$:-v>) +set(Q3LCC_VERBOSE_OPTION $<$:-v>) + +foreach(SOURCE ${UI_C_SOURCES}) + get_filename_component(BASE_FILENAME "${SOURCE}" NAME_WE) + set(ASM_FILENAME "${ASM_BDIR}/${BASE_FILENAME}.asm") + + add_custom_command(OUTPUT "${ASM_FILENAME}" + COMMAND "$" ARGS ${Q3LCC_OPTIIONS} ${Q3LCC_VERBOSE_OPTION} ${UI_DEFINITIONS} -o "${ASM_FILENAME}" "${SOURCE}" -Wo-lrccdir=$ -Wo-lcppdir=$ -I${UI_DIR} -I${GAME_DIR} -I${QCOMMON_DIR} + DEPENDS ${Q3LCC_TARGET} ${Q3RCC_TARGET} ${Q3CPP_TARGET} ${SOURCE} + ) + list(APPEND UI_ASM_FILES "${ASM_FILENAME}") + set_source_files_properties("${SOURCE}" PROPERTIES HEADER_FILE_ONLY TRUE) +endforeach() + +foreach(SOURCE ${UI_ASM_SOURCES}) + set_source_files_properties("${SOURCE}" PROPERTIES HEADER_FILE_ONLY TRUE) +endforeach() + +set(SOURCES ${UI_ASM_FILES} ${UI_ASM_SOURCES}) + +if(VQ3_COMPATIBLE_QVM) + set(VQ3_OPTION "-vq3") +endif(VQ3_COMPATIBLE_QVM) + +add_custom_command(OUTPUT "${QVM_FILE}" + COMMAND "$" ${Q3CPP_OPTIIONS} ${Q3CPP_VERBOSE_OPTION} ${VQ3_OPTION} -o "${QVM_FILE}" ${SOURCES} + DEPENDS ${Q3ASM_TARGET} ${SOURCES} +) + +add_custom_target(${BASE_UI_QVM_TARGET} ALL + DEPENDS "${QVM_FILE}" + SOURCES ${UI_C_SOURCES} ${UI_C_HEADERS} +) +set_target_properties(${BASE_UI_QVM_TARGET} PROPERTIES QVM_FILENAME "${QVM_FILENAME}") + +set(DESTIONATION_DIR) +if(BASEGAME_QVM_INSTALL_DIR) + set(DESTIONATION_DIR "${BASEGAME_QVM_INSTALL_DIR}") +endif(BASEGAME_QVM_INSTALL_DIR) + +if(DESTIONATION_DIR) + install(FILES "${QVM_FILE}" + DESTINATION "${DESTIONATION_DIR}" + CONFIGURATIONS Release + COMPONENT basegame_qvm + ) +endif(DESTIONATION_DIR) + +include(CPack) diff --git a/misc/CMakeLists/qvm/missionpack/CMakeLists.txt b/misc/CMakeLists/qvm/missionpack/CMakeLists.txt new file mode 100644 index 0000000000..cd4d6423d3 --- /dev/null +++ b/misc/CMakeLists/qvm/missionpack/CMakeLists.txt @@ -0,0 +1,29 @@ +project("missionpack qvm") + +add_subdirectory("cgame") +add_subdirectory("game") +add_subdirectory("ui") + +if(NOT ${CMAKE_VERSION} VERSION_LESS "3.3.0") + + get_target_property(CGAME_FILENAME ${MISSION_CGAME_QVM_TARGET} QVM_FILENAME) + get_target_property(GAME_FILENAME ${MISSION_GAME_QVM_TARGET} QVM_FILENAME) + get_target_property(UI_FILENAME ${MISSION_UI_QVM_TARGET} QVM_FILENAME) + + set(MISSION_DIR "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/missionpack") + set(PK3_FILENAME "missionpack_qvm.pk3") + set(PK3_FILE "${MISSION_DIR}/${PK3_FILENAME}") + + add_custom_target(dist_missionpack_qvm + COMMAND ${CMAKE_COMMAND} -E chdir "${MISSION_DIR}" + tar "cfv" "${PK3_FILE}" --format=zip + "vm/${CGAME_FILENAME}" + "vm/${GAME_FILENAME}" + "vm/${UI_FILENAME}" + DEPENDS "${MISSION_DIR}/vm/${CGAME_FILENAME}" + "${MISSION_DIR}/vm/${GAME_FILENAME}" + "${MISSION_DIR}/vm/${UI_FILENAME}" + COMMENT ${PK3_FILE} + ) + +endif() \ No newline at end of file diff --git a/misc/CMakeLists/qvm/missionpack/cgame/CMakeLists.txt b/misc/CMakeLists/qvm/missionpack/cgame/CMakeLists.txt new file mode 100644 index 0000000000..013e8513e3 --- /dev/null +++ b/misc/CMakeLists/qvm/missionpack/cgame/CMakeLists.txt @@ -0,0 +1,173 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("missionpack cgame qvm") + +set(MISSION_CGAME_QVM_TARGET "missionpack_cgame_qvm" CACHE INTERNAL "Target name") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") + +option(VQ3_COMPATIBLE_QVM "Produce a qvm file compatible with Q3 1.32b" ${DEFAULT_VQ3_COMPATIBLE_QVM}) + +set(MISSIONPACK_QVM_INSTALL_DIR "${DEFAULT_MISSIONPACK_QVM_INSTALL_DIR}" CACHE PATH "Installation directory") + +set(CGAME_SOURCES + "${CGAME_DIR}/cg_main.c" + + "${CGAME_DIR}/cg_consolecmds.c" + "${CGAME_DIR}/cg_draw.c" + "${CGAME_DIR}/cg_drawtools.c" + "${CGAME_DIR}/cg_effects.c" + "${CGAME_DIR}/cg_ents.c" + "${CGAME_DIR}/cg_event.c" + "${CGAME_DIR}/cg_info.c" + "${CGAME_DIR}/cg_localents.c" + + "${CGAME_DIR}/cg_marks.c" + "${CGAME_DIR}/cg_newdraw.c" + "${CGAME_DIR}/cg_particles.c" + "${CGAME_DIR}/cg_players.c" + "${CGAME_DIR}/cg_playerstate.c" + "${CGAME_DIR}/cg_predict.c" + "${CGAME_DIR}/cg_scoreboard.c" + "${CGAME_DIR}/cg_servercmds.c" + "${CGAME_DIR}/cg_snapshot.c" + "${CGAME_DIR}/cg_view.c" + "${CGAME_DIR}/cg_weapons.c" + +# "${CGAME_DIR}/cg_syscalls.c" +) +set(CGAME_ASM_SOURCES + "${CGAME_DIR}/cg_syscalls.asm" +) +set(CGAME_HEADERS + "${CGAME_DIR}/cg_local.h" + "${CGAME_DIR}/cg_public.h" +) +set(GAME_SOURCES + "${GAME_DIR}/bg_misc.c" + "${GAME_DIR}/bg_pmove.c" + "${GAME_DIR}/bg_slidemove.c" + "${GAME_DIR}/bg_lib.c" +) +set(GAME_HEADERS + "${GAME_DIR}/bg_local.h" + "${GAME_DIR}/bg_public.h" + "${GAME_DIR}/bg_lib.h" +) +set(UI_SOURCES + "${UI_DIR}/ui_shared.c" +) +set(UI_HEADERS + "${UI_DIR}/ui_shared.h" +) +set(QCOMMON_SOURCES + "${QCOMMON_DIR}/q_math.c" + "${QCOMMON_DIR}/q_shared.c" +) +set(QCOMMON_HEADERS + "${QCOMMON_DIR}/q_shared.h" +) + +list(APPEND CGAME_DEFINITIONS "-DCGAME") +list(APPEND CGAME_DEFINITIONS "-DQ3_VM") +list(APPEND CGAME_DEFINITIONS "-DMISSIONPACK") + +list(APPEND CGAME_C_SOURCES ${CGAME_SOURCES} ${GAME_SOURCES} ${UI_SOURCES} ${QCOMMON_SOURCES}) +list(APPEND CGAME_C_HEADERS ${CGAME_HEADERS} ${GAME_HEADERS} ${UI_HEADERS} ${QCOMMON_HEADERS}) + +source_group("cgame\\Source Files" FILES ${CGAME_SOURCES}) +source_group("cgame\\Header Files" FILES ${CGAME_HEADERS}) +source_group("cgame" FILES ${CGAME_ASM_SOURCES}) +source_group("game\\Source Files" FILES ${GAME_SOURCES}) +source_group("game\\Header Files" FILES ${GAME_HEADERS}) +source_group("ui\\Source Files" FILES ${UI_SOURCES}) +source_group("ui\\Header Files" FILES ${UI_HEADERS}) +source_group("qcommon\\Source Files" FILES ${QCOMMON_SOURCES}) +source_group("qcommon\\Header Files" FILES ${QCOMMON_HEADERS}) + +set(QVM_FILENAME "cgame.qvm") +set(QVM_FILE "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/missionpack/vm/${QVM_FILENAME}") + +set(ASM_BDIR "${CMAKE_CURRENT_BINARY_DIR}/asm") +file(MAKE_DIRECTORY "${ASM_BDIR}") + +set(CGAME_ASM_FILES) + +set(Q3CPP_VERBOSE_OPTION $<$:-v>) +set(Q3LCC_VERBOSE_OPTION $<$:-v>) + +foreach(SOURCE ${CGAME_C_SOURCES}) + get_filename_component(BASE_FILENAME "${SOURCE}" NAME_WE) + set(ASM_FILENAME "${ASM_BDIR}/${BASE_FILENAME}.asm") + + add_custom_command(OUTPUT "${ASM_FILENAME}" + COMMAND "$" ARGS ${Q3LCC_OPTIIONS} ${Q3LCC_VERBOSE_OPTION} ${CGAME_DEFINITIONS} -o "${ASM_FILENAME}" "${SOURCE}" -Wo-lrccdir=$ -Wo-lcppdir=$ -I${CGAME_DIR} -I${GAME_DIR} -I${QCOMMON_DIR} + DEPENDS ${Q3LCC_TARGET} ${Q3RCC_TARGET} ${Q3CPP_TARGET} ${SOURCE} + ) + list(APPEND CGAME_ASM_FILES "${ASM_FILENAME}") + set_source_files_properties("${SOURCE}" PROPERTIES HEADER_FILE_ONLY TRUE) +endforeach() + +foreach(SOURCE ${CGAME_ASM_SOURCES}) + set_source_files_properties("${SOURCE}" PROPERTIES HEADER_FILE_ONLY TRUE) +endforeach() + +set(SOURCES ${CGAME_ASM_FILES} ${CGAME_ASM_SOURCES}) + +if(VQ3_COMPATIBLE_QVM) + set(VQ3_OPTION "-vq3") +endif(VQ3_COMPATIBLE_QVM) + +add_custom_command(OUTPUT "${QVM_FILE}" + COMMAND "$" ${Q3CPP_OPTIIONS} ${Q3CPP_VERBOSE_OPTION} ${VQ3_OPTION} -o "${QVM_FILE}" ${SOURCES} + DEPENDS ${Q3ASM_TARGET} ${SOURCES} +) + +add_custom_target(${MISSION_CGAME_QVM_TARGET} ALL + DEPENDS "${QVM_FILE}" + SOURCES ${CGAME_C_SOURCES} ${CGAME_C_HEADERS} +) +set_target_properties(${MISSION_CGAME_QVM_TARGET} PROPERTIES QVM_FILENAME "${QVM_FILENAME}") + +set(DESTIONATION_DIR) +if(MISSIONPACK_QVM_INSTALL_DIR) + set(DESTIONATION_DIR "${MISSIONPACK_QVM_INSTALL_DIR}") +endif(MISSIONPACK_QVM_INSTALL_DIR) + +if(DESTIONATION_DIR) + install(FILES "${QVM_FILE}" + DESTINATION "${DESTIONATION_DIR}" + CONFIGURATIONS Release + COMPONENT missionpack_qvm + ) +endif(DESTIONATION_DIR) + +include(CPack) diff --git a/misc/CMakeLists/qvm/missionpack/game/CMakeLists.txt b/misc/CMakeLists/qvm/missionpack/game/CMakeLists.txt new file mode 100644 index 0000000000..90d0e22b6a --- /dev/null +++ b/misc/CMakeLists/qvm/missionpack/game/CMakeLists.txt @@ -0,0 +1,232 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("missionpack game qvm") + +set(MISSION_GAME_QVM_TARGET "missionpack_game_qvm" CACHE INTERNAL "Target name") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") + +option(VQ3_COMPATIBLE_QVM "Produce a qvm file compatible with Q3 1.32b" ${DEFAULT_VQ3_COMPATIBLE_QVM}) + +set(MISSIONPACK_QVM_INSTALL_DIR "${DEFAULT_MISSIONPACK_QVM_INSTALL_DIR}" CACHE PATH "Installation directory") + +set(BOTLIB_HEADERS + "${BOTLIB_DIR}/aasfile.h" + "${BOTLIB_DIR}/be_aas.h" + "${BOTLIB_DIR}/be_aas_bsp.h" + "${BOTLIB_DIR}/be_aas_cluster.h" + "${BOTLIB_DIR}/be_aas_debug.h" + "${BOTLIB_DIR}/be_aas_def.h" + "${BOTLIB_DIR}/be_aas_entity.h" + "${BOTLIB_DIR}/be_aas_file.h" + "${BOTLIB_DIR}/be_aas_funcs.h" + "${BOTLIB_DIR}/be_aas_main.h" + "${BOTLIB_DIR}/be_aas_move.h" + "${BOTLIB_DIR}/be_aas_optimize.h" + "${BOTLIB_DIR}/be_aas_reach.h" + "${BOTLIB_DIR}/be_aas_route.h" + "${BOTLIB_DIR}/be_aas_routealt.h" + "${BOTLIB_DIR}/be_aas_sample.h" + "${BOTLIB_DIR}/be_ai_char.h" + "${BOTLIB_DIR}/be_ai_chat.h" + "${BOTLIB_DIR}/be_ai_gen.h" + "${BOTLIB_DIR}/be_ai_goal.h" + "${BOTLIB_DIR}/be_ai_move.h" + "${BOTLIB_DIR}/be_ai_weap.h" + "${BOTLIB_DIR}/be_ai_weight.h" + "${BOTLIB_DIR}/be_ea.h" + "${BOTLIB_DIR}/be_interface.h" + "${BOTLIB_DIR}/botlib.h" + "${BOTLIB_DIR}/l_crc.h" + "${BOTLIB_DIR}/l_libvar.h" + "${BOTLIB_DIR}/l_log.h" + "${BOTLIB_DIR}/l_memory.h" + "${BOTLIB_DIR}/l_precomp.h" + "${BOTLIB_DIR}/l_script.h" + "${BOTLIB_DIR}/l_struct.h" + "${BOTLIB_DIR}/l_utils.h" +) +set(GAME_SOURCES + "${GAME_DIR}/g_main.c" + + "${GAME_DIR}/ai_chat.c" + "${GAME_DIR}/ai_cmd.c" + "${GAME_DIR}/ai_dmnet.c" + "${GAME_DIR}/ai_dmq3.c" + "${GAME_DIR}/ai_main.c" + "${GAME_DIR}/ai_team.c" + "${GAME_DIR}/ai_vcmd.c" + + "${GAME_DIR}/bg_misc.c" + "${GAME_DIR}/bg_pmove.c" + "${GAME_DIR}/bg_slidemove.c" + "${GAME_DIR}/bg_lib.c" + + "${GAME_DIR}/g_active.c" + "${GAME_DIR}/g_arenas.c" + "${GAME_DIR}/g_bot.c" + "${GAME_DIR}/g_client.c" + "${GAME_DIR}/g_cmds.c" + "${GAME_DIR}/g_combat.c" + "${GAME_DIR}/g_items.c" + + "${GAME_DIR}/g_mem.c" + "${GAME_DIR}/g_misc.c" + "${GAME_DIR}/g_missile.c" + "${GAME_DIR}/g_mover.c" + "${GAME_DIR}/g_session.c" + "${GAME_DIR}/g_spawn.c" + "${GAME_DIR}/g_svcmds.c" + "${GAME_DIR}/g_target.c" + "${GAME_DIR}/g_team.c" + "${GAME_DIR}/g_trigger.c" + "${GAME_DIR}/g_utils.c" + "${GAME_DIR}/g_weapon.c" + +# "${GAME_DIR}/g_syscalls.c" +) +set(GAME_ASM_SOURCES + "${GAME_DIR}/g_syscalls.asm" +) +set(GAME_HEADERS + "${GAME_DIR}/ai_chat.h" + "${GAME_DIR}/ai_cmd.h" + "${GAME_DIR}/ai_dmnet.h" + "${GAME_DIR}/ai_dmq3.h" + "${GAME_DIR}/ai_main.h" + "${GAME_DIR}/ai_team.h" + "${GAME_DIR}/ai_vcmd.h" + "${GAME_DIR}/chars.h" + "${GAME_DIR}/inv.h" + "${GAME_DIR}/match.h" + "${GAME_DIR}/syn.h" + + "${GAME_DIR}/bg_local.h" + "${GAME_DIR}/bg_public.h" + "${GAME_DIR}/bg_lib.h" + + "${GAME_DIR}/g_local.h" + "${GAME_DIR}/g_public.h" + + "${GAME_DIR}/g_team.h" + +) +set(QCOMMON_SOURCES + "${QCOMMON_DIR}/q_math.c" + "${QCOMMON_DIR}/q_shared.c" +) +set(QCOMMON_HEADERS + "${QCOMMON_DIR}/q_shared.h" +) + +list(APPEND GAME_DEFINITIONS "-DQAGAME") +list(APPEND GAME_DEFINITIONS "-DQ3_VM") +list(APPEND GAME_DEFINITIONS "-DMISSIONPACK") + +#todo use add_custom_command with VERBATIM to get quotation marks working? +#-DPRODUCT_DATE="Nov 28 2021" still creates a q3lcc error cause of the blank char +if(FALSE AND DEFINED ENV{SOURCE_DATE_EPOCH}) + if(NOT ${CMAKE_VERSION} VERSION_LESS "3.8.0") + string(TIMESTAMP PRODUCT_DATE "%b %d %Y" UTC) #Nov 28 2021 + list(APPEND GAME_DEFINITIONS "-DPRODUCT_DATE=\"${PRODUCT_DATE}\"") + else() + message(WARNING "Update CMake to version 3.8 or later for SOURCE_DATE_EPOCH support!") + endif() +endif() + +list(APPEND GAME_C_SOURCES ${GAME_SOURCES} ${QCOMMON_SOURCES}) +list(APPEND GAME_C_HEADERS ${GAME_HEADERS} ${QCOMMON_HEADERS} ${BOTLIB_HEADERS}) + +source_group("botlib\\Header Files" FILES ${BOTLIB_HEADERS}) +source_group("game\\Source Files" FILES ${GAME_SOURCES}) +source_group("game\\Header Files" FILES ${GAME_HEADERS}) +source_group("game" FILES ${GAME_ASM_SOURCES}) +source_group("qcommon\\Source Files" FILES ${QCOMMON_SOURCES}) +source_group("qcommon\\Header Files" FILES ${QCOMMON_HEADERS}) + +set(QVM_FILENAME "qagame.qvm") +set(QVM_FILE "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/missionpack/vm/${QVM_FILENAME}") + +set(ASM_BDIR "${CMAKE_CURRENT_BINARY_DIR}/asm") +file(MAKE_DIRECTORY "${ASM_BDIR}") + +set(GAME_ASM_FILES) + +set(Q3CPP_VERBOSE_OPTION $<$:-v>) +set(Q3LCC_VERBOSE_OPTION $<$:-v>) + +foreach(SOURCE ${GAME_C_SOURCES}) + get_filename_component(BASE_FILENAME "${SOURCE}" NAME_WE) + set(ASM_FILENAME "${ASM_BDIR}/${BASE_FILENAME}.asm") + + add_custom_command(OUTPUT "${ASM_FILENAME}" + COMMAND "$" ARGS ${Q3LCC_OPTIIONS} ${Q3LCC_VERBOSE_OPTION} ${GAME_DEFINITIONS} -o "${ASM_FILENAME}" "${SOURCE}" -Wo-lrccdir=$ -Wo-lcppdir=$ -I${BOTLIB_DIR} -I${GAME_DIR} -I${QCOMMON_DIR} + DEPENDS ${Q3LCC_TARGET} ${Q3RCC_TARGET} ${Q3CPP_TARGET} ${SOURCE} + ) + list(APPEND GAME_ASM_FILES "${ASM_FILENAME}") + set_source_files_properties("${SOURCE}" PROPERTIES HEADER_FILE_ONLY TRUE) +endforeach() + +foreach(SOURCE ${GAME_ASM_SOURCES}) + set_source_files_properties("${SOURCE}" PROPERTIES HEADER_FILE_ONLY TRUE) +endforeach() + +set(SOURCES ${GAME_ASM_FILES} ${GAME_ASM_SOURCES}) + +if(VQ3_COMPATIBLE_QVM) + set(VQ3_OPTION "-vq3") +endif(VQ3_COMPATIBLE_QVM) + +add_custom_command(OUTPUT "${QVM_FILE}" + COMMAND "$" ${Q3CPP_OPTIIONS} ${Q3CPP_VERBOSE_OPTION} ${VQ3_OPTION} -o "${QVM_FILE}" ${SOURCES} + DEPENDS ${Q3ASM_TARGET} ${SOURCES} +) + +add_custom_target(${MISSION_GAME_QVM_TARGET} ALL + DEPENDS "${QVM_FILE}" + SOURCES ${GAME_C_SOURCES} ${GAME_C_HEADERS} +) +set_target_properties(${MISSION_GAME_QVM_TARGET} PROPERTIES QVM_FILENAME "${QVM_FILENAME}") + +set(DESTIONATION_DIR) +if(MISSIONPACK_QVM_INSTALL_DIR) + set(DESTIONATION_DIR "${MISSIONPACK_QVM_INSTALL_DIR}") +endif(MISSIONPACK_QVM_INSTALL_DIR) + +if(DESTIONATION_DIR) + install(FILES "${QVM_FILE}" + DESTINATION "${DESTIONATION_DIR}" + CONFIGURATIONS Release + COMPONENT missionpack_qvm + ) +endif(DESTIONATION_DIR) + +include(CPack) diff --git a/misc/CMakeLists/qvm/missionpack/ui/CMakeLists.txt b/misc/CMakeLists/qvm/missionpack/ui/CMakeLists.txt new file mode 100644 index 0000000000..7abb6d48de --- /dev/null +++ b/misc/CMakeLists/qvm/missionpack/ui/CMakeLists.txt @@ -0,0 +1,151 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("missionpack ui qvm") + +set(MISSION_UI_QVM_TARGET "missionpack_ui_qvm" CACHE INTERNAL "Target name") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") + +option(VQ3_COMPATIBLE_QVM "Produce a qvm file compatible with Q3 1.32b" ${DEFAULT_VQ3_COMPATIBLE_QVM}) + +set(MISSIONPACK_QVM_INSTALL_DIR "${DEFAULT_MISSIONPACK_QVM_INSTALL_DIR}" CACHE PATH "Installation directory") + +set(GAME_SOURCES + "${GAME_DIR}/bg_misc.c" + "${GAME_DIR}/bg_lib.c" +) +set(GAME_HEADERS + "${GAME_DIR}/bg_local.h" + "${GAME_DIR}/bg_public.h" + "${GAME_DIR}/bg_lib.h" +) +set(UI_SOURCES + "${UI_DIR}/ui_main.c" + + "${UI_DIR}/ui_atoms.c" + + "${UI_DIR}/ui_gameinfo.c" + "${UI_DIR}/ui_players.c" + "${UI_DIR}/ui_shared.c" + +# "${UI_DIR}/ui_syscalls.c" +) +set(UI_ASM_SOURCES + "${UI_DIR}/ui_syscalls.asm" +) +set(UI_HEADERS + "${UI_DIR}/ui_local.h" + "${UI_DIR}/ui_public.h" + + "${UI_DIR}/ui_shared.h" + +) +set(QCOMMON_SOURCES + "${QCOMMON_DIR}/q_math.c" + "${QCOMMON_DIR}/q_shared.c" +) +set(QCOMMON_HEADERS + "${QCOMMON_DIR}/q_shared.h" +) + +list(APPEND UI_DEFINITIONS "-DUI") +list(APPEND UI_DEFINITIONS "-DQ3_VM") +list(APPEND UI_DEFINITIONS "-DMISSIONPACK") + +list(APPEND UI_C_SOURCES ${UI_SOURCES} ${GAME_SOURCES} ${QCOMMON_SOURCES}) +list(APPEND UI_C_HEADERS ${UI_HEADERS} ${GAME_HEADERS} ${QCOMMON_HEADERS}) + +source_group("game\\Source Files" FILES ${GAME_SOURCES}) +source_group("game\\Header Files" FILES ${GAME_HEADERS}) +source_group("qcommon\\Source Files" FILES ${QCOMMON_SOURCES}) +source_group("qcommon\\Header Files" FILES ${QCOMMON_HEADERS}) +source_group("ui\\Source Files" FILES ${UI_SOURCES}) +source_group("ui\\Header Files" FILES ${UI_HEADERS}) +source_group("ui" FILES ${UI_ASM_SOURCES}) + +set(QVM_FILENAME "ui.qvm") +set(QVM_FILE "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/missionpack/vm/${QVM_FILENAME}") + +set(ASM_BDIR "${CMAKE_CURRENT_BINARY_DIR}/asm") +file(MAKE_DIRECTORY "${ASM_BDIR}") + +set(UI_ASM_FILES) + +set(Q3CPP_VERBOSE_OPTION $<$:-v>) +set(Q3LCC_VERBOSE_OPTION $<$:-v>) + +foreach(SOURCE ${UI_C_SOURCES}) + get_filename_component(BASE_FILENAME "${SOURCE}" NAME_WE) + set(ASM_FILENAME "${ASM_BDIR}/${BASE_FILENAME}.asm") + + add_custom_command(OUTPUT "${ASM_FILENAME}" + COMMAND "$" ARGS ${Q3LCC_OPTIIONS} ${Q3LCC_VERBOSE_OPTION} ${UI_DEFINITIONS} -o "${ASM_FILENAME}" "${SOURCE}" -Wo-lrccdir=$ -Wo-lcppdir=$ -I${UI_DIR} -I${GAME_DIR} -I${QCOMMON_DIR} + DEPENDS ${Q3LCC_TARGET} ${Q3RCC_TARGET} ${Q3CPP_TARGET} ${SOURCE} + ) + list(APPEND UI_ASM_FILES "${ASM_FILENAME}") + set_source_files_properties("${SOURCE}" PROPERTIES HEADER_FILE_ONLY TRUE) +endforeach() + +foreach(SOURCE ${UI_ASM_SOURCES}) + set_source_files_properties("${SOURCE}" PROPERTIES HEADER_FILE_ONLY TRUE) +endforeach() + +set(SOURCES ${UI_ASM_FILES} ${UI_ASM_SOURCES}) + +if(VQ3_COMPATIBLE_QVM) + set(VQ3_OPTION "-vq3") +endif(VQ3_COMPATIBLE_QVM) + +add_custom_command(OUTPUT "${QVM_FILE}" + COMMAND "$" ${Q3CPP_OPTIIONS} ${Q3CPP_VERBOSE_OPTION} ${VQ3_OPTION} -o "${QVM_FILE}" ${SOURCES} + DEPENDS ${Q3ASM_TARGET} ${SOURCES} +) + +add_custom_target(${MISSION_UI_QVM_TARGET} ALL + DEPENDS "${QVM_FILE}" + SOURCES ${UI_C_SOURCES} ${UI_C_HEADERS} +) +set_target_properties(${MISSION_UI_QVM_TARGET} PROPERTIES QVM_FILENAME "${QVM_FILENAME}") + +set(DESTIONATION_DIR) +if(MISSIONPACK_QVM_INSTALL_DIR) + set(DESTIONATION_DIR "${MISSIONPACK_QVM_INSTALL_DIR}") +endif(MISSIONPACK_QVM_INSTALL_DIR) + +if(DESTIONATION_DIR) + install(FILES "${QVM_FILE}" + DESTINATION "${DESTIONATION_DIR}" + CONFIGURATIONS Release + COMPONENT missionpack_qvm + ) +endif(DESTIONATION_DIR) + +include(CPack) diff --git a/misc/CMakeLists/renderergl1/CMakeLists.txt b/misc/CMakeLists/renderergl1/CMakeLists.txt new file mode 100644 index 0000000000..9023c41cdf --- /dev/null +++ b/misc/CMakeLists/renderergl1/CMakeLists.txt @@ -0,0 +1,422 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("renderer opengl1") + +set(RENDERERGL1_TARGET "renderer_opengl1") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/cflags.cmake") +include("${CMAKELIST_DIR}/include/compat.cmake") +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") +include("${CMAKELIST_DIR}/include/strip.cmake") +include("${CMAKELIST_DIR}/include/platform.cmake") + +include(CheckCCompilerFlag) +include(CheckCSourceCompiles) +include(CheckIncludeFile) + +option(USE_INTERNAL_LIBS "Use internal libraries (Ogg,Vorbis,Opus,zlib,JPEG,...)" ${DEFAULT_USE_INTERNAL_LIBS}) +option(USE_INTERNAL_JPEG "Use internal JPEG library" ${USE_INTERNAL_LIBS}) +option(USE_INTERNAL_SDL "Use internal SDL library" ${USE_INTERNAL_LIBS}) +option(USE_LOCAL_HEADERS "Use local headers" ${USE_INTERNAL_LIBS}) + +option(USE_RENDERER_DLOPEN "Use renderer dynamic library opening" ${DEFAULT_USE_RENDERER_DLOPEN}) + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + option(GENERATE_DEPENDENCIES "Preprocessing: Generate dependencies for make outputting" ${DEFAULT_GENERATE_DEPENDENCIES}) +endif() +option(NO_STRIP "No strip (keep all symbol table and relocation information)" ${DEFAULT_NO_STRIP}) +if(MSVC) + option(BUILD_STATIC_CRT "Build (static) multi-threaded C runtime library" ${DEFAULT_BUILD_STATIC_CRT}) +endif() + +set(REL_INSTALL_DEST "${DEFAULT_REL_INSTALL_DEST}" CACHE PATH "Relative installation destination") +set(INSTALL_DIR "${DEFAULT_INSTALL_DIR}" CACHE PATH "Installation directory") + +include("${CMAKELIST_DIR}/include/libsdl_headers.cmake") + +set(QCOMMON_SOURCES +# "${QCOMMON_DIR}/cm_load.c" +# "${QCOMMON_DIR}/cm_patch.c" +# "${QCOMMON_DIR}/cm_polylib.c" +# "${QCOMMON_DIR}/cm_test.c" +# "${QCOMMON_DIR}/cm_trace.c" +# "${QCOMMON_DIR}/cmd.c" +# "${QCOMMON_DIR}/common.c" +# "${QCOMMON_DIR}/cvar.c" +# "${QCOMMON_DIR}/files.c" +# "${QCOMMON_DIR}/huffman.c" +# "${QCOMMON_DIR}/ioapi.c" +# "${QCOMMON_DIR}/md4.c" +# "${QCOMMON_DIR}/md5.c" +# "${QCOMMON_DIR}/msg.c" +# "${QCOMMON_DIR}/net_chan.c" +# "${QCOMMON_DIR}/net_ip.c" + "${QCOMMON_DIR}/puff.c" + "${QCOMMON_DIR}/q_math.c" + "${QCOMMON_DIR}/q_shared.c" +# "${QCOMMON_DIR}/unzip.c" +# "${QCOMMON_DIR}/vm.c" +# "${QCOMMON_DIR}/vm_interpreted.c" +# "${QCOMMON_DIR}/vm_none.c" +# "${QCOMMON_DIR}/vm_powerpc.c" +# "${QCOMMON_DIR}/vm_powerpc_asm.c" +# "${QCOMMON_DIR}/vm_sparc.c" +# "${QCOMMON_DIR}/vm_x86.c" +) +set(QCOMMON_HEADERS +# "${QCOMMON_DIR}/cm_local.h" +# "${QCOMMON_DIR}/cm_patch.h" +# "${QCOMMON_DIR}/cm_polylib.h" +# "${QCOMMON_DIR}/cm_public.h" +# "${QCOMMON_DIR}/ioapi.h" + "${QCOMMON_DIR}/puff.h" +# "${QCOMMON_DIR}/q_platform.h" + "${QCOMMON_DIR}/q_shared.h" + "${QCOMMON_DIR}/qcommon.h" + "${QCOMMON_DIR}/qfiles.h" + "${QCOMMON_DIR}/surfaceflags.h" + "${QCOMMON_DIR}/unzip.h" + "${QCOMMON_DIR}/vm_local.h" +# "${QCOMMON_DIR}/vm_powerpc_asm.h" +# "${QCOMMON_DIR}/vm_sparc.h" +) +list(APPEND RENDERERCOMMON_SOURCES + "${RENDERERCOMMON_DIR}/tr_font.c" + "${RENDERERCOMMON_DIR}/tr_image_bmp.c" + "${RENDERERCOMMON_DIR}/tr_image_jpg.c" + "${RENDERERCOMMON_DIR}/tr_image_pcx.c" + "${RENDERERCOMMON_DIR}/tr_image_png.c" + "${RENDERERCOMMON_DIR}/tr_image_tga.c" + "${RENDERERCOMMON_DIR}/tr_noise.c" +) +list(APPEND RENDERERCOMMON_HEADERS + "${RENDERERCOMMON_DIR}/iqm.h" + "${RENDERERCOMMON_DIR}/qgl.h" + "${RENDERERCOMMON_DIR}/tr_common.h" + "${RENDERERCOMMON_DIR}/tr_public.h" + "${RENDERERCOMMON_DIR}/tr_types.h" +) + +list(APPEND RENDERERGL1_SOURCES + "${RENDERERGL1_DIR}/tr_animation.c" + "${RENDERERGL1_DIR}/tr_backend.c" + "${RENDERERGL1_DIR}/tr_bsp.c" + "${RENDERERGL1_DIR}/tr_cmds.c" + "${RENDERERGL1_DIR}/tr_curve.c" + "${RENDERERGL1_DIR}/tr_flares.c" + "${RENDERERGL1_DIR}/tr_image.c" + "${RENDERERGL1_DIR}/tr_init.c" + "${RENDERERGL1_DIR}/tr_light.c" + "${RENDERERGL1_DIR}/tr_main.c" + "${RENDERERGL1_DIR}/tr_marks.c" + "${RENDERERGL1_DIR}/tr_mesh.c" + "${RENDERERGL1_DIR}/tr_model.c" + "${RENDERERGL1_DIR}/tr_model_iqm.c" + "${RENDERERGL1_DIR}/tr_scene.c" + "${RENDERERGL1_DIR}/tr_shade.c" + "${RENDERERGL1_DIR}/tr_shade_calc.c" + "${RENDERERGL1_DIR}/tr_shader.c" + "${RENDERERGL1_DIR}/tr_shadows.c" + "${RENDERERGL1_DIR}/tr_sky.c" + "${RENDERERGL1_DIR}/tr_subs.c" + "${RENDERERGL1_DIR}/tr_surface.c" + "${RENDERERGL1_DIR}/tr_world.c" +) +list(APPEND RENDERERGL1_ALTIVEC_SOURCES + "${RENDERERGL1_DIR}/tr_altivec.c" +) +list(APPEND RENDERERGL1_HEADERS + "${RENDERERGL1_DIR}/tr_local.h" +) + +set(SDL_SOURCES + "${SDL_DIR}/sdl_gamma.c" + "${SDL_DIR}/sdl_glimp.c" +# "${SDL_DIR}/sdl_input.c" +# "${SDL_DIR}/sdl_snd.c" +) +set(SDL_HEADERS +# "${SDL_DIR}/sdl_icon.h" +) + +if(MSVC) + if(NOT SDL_FOUND AND USE_INTERNAL_SDL) + if(ARCH STREQUAL "x86_64") + list(APPEND SDL_LIBRARIES + "${LIBS_DIR}/win64/SDL2main.lib" + "${LIBS_DIR}/win64/SDL2.lib" + ) + set(SDL_FOUND TRUE) + elseif(ARCH STREQUAL "x86") + list(APPEND SDL_LIBRARIES + "${LIBS_DIR}/win32/SDL2main.lib" + "${LIBS_DIR}/win32/SDL2.lib" + ) + set(SDL_FOUND TRUE) + + endif() + if(SDL_FOUND) + foreach(FILEPATH ${SDL_LIBRARIES}) + if(NOT EXISTS "${FILEPATH}") + message(WARNING "Could not find the file for MinGW: ${FILEPATH}") + endif() + endforeach(FILEPATH) + endif(SDL_FOUND) + endif() + + #Character Set, CharacterSet="0", Not Set, ASCII/SBCS (Single Byte Character Set) + list(APPEND RENDERERGL1_DEFINITIONS "-D_SBCS") + + #disable deprecation warnings about old functions like strcmp + list(APPEND RENDERERGL1_DEFINITIONS "-D_CRT_SECURE_NO_WARNINGS") + + #Randomized Base Address /DYNAMICBASE:NO + list(APPEND RENDERERGL1_LDFLAGS "/DYNAMICBASE:NO") + #Data Execution Prevenbtion (DEP) /NXCOMPAT:NO + list(APPEND RENDERERGL1_LDFLAGS "/NXCOMPAT:NO") + #Image Has Safe Exception Handlers, is no longer default no in msvc 2013 /SAFESEH:NO + list(APPEND RENDERERGL1_LDFLAGS "/SAFESEH:NO") + + #requires directory misc/msvc for ../quake3.ico in win_resource.rc + list(APPEND RENDERERGL1_INCLUDE_DIRS "${SOURCE_DIR}/misc/msvc") + +endif(MSVC) + +if(MINGW AND (CMAKE_COMPILER_IS_GNUCC + OR CMAKE_C_COMPILER_ID STREQUAL "Clang")) + if(NOT SDL_FOUND AND USE_INTERNAL_SDL) + if(ARCH STREQUAL "x86_64") + list(APPEND SDL_LIBRARIES + "${LIBS_DIR}/win64/libSDL264main.a" + "${LIBS_DIR}/win64/libSDL264.dll.a" + ) + set(SDL_FOUND TRUE) + elseif(ARCH STREQUAL "x86") + list(APPEND SDL_LIBRARIES + "${LIBS_DIR}/win32/libSDL2main.a" + "${LIBS_DIR}/win32/libSDL2.dll.a" + ) + set(SDL_FOUND TRUE) + + endif() + if(SDL_FOUND) + foreach(FILEPATH ${SDL_LIBRARIES}) + if(NOT EXISTS "${FILEPATH}") + message(WARNING "Could not find the file for MinGW: ${FILEPATH}") + endif() + endforeach(FILEPATH) + endif(SDL_FOUND) + endif() + +endif() + +if(PLATFORM STREQUAL "darwin" AND (CMAKE_COMPILER_IS_GNUCC + OR CMAKE_C_COMPILER_ID STREQUAL "Clang")) + list(APPEND RENDERERGL1_DEFINITIONS "-DMACOS_X") + + if(NOT SDL_FOUND AND USE_INTERNAL_SDL) + list(APPEND SDL_LIBRARIES + "${LIBS_DIR}/macosx/libSDL2main.a" + "${LIBS_DIR}/macosx/libSDL2-2.0.0.dylib" + ) + set(SDL_FOUND TRUE) + + foreach(FILEPATH ${SDL_LIBRARIES}) + if(NOT EXISTS "${FILEPATH}") + message(WARNING "Could not find the file for MacOS: ${FILEPATH}\n") + endif() + endforeach(FILEPATH) + + endif() + + find_library(COCOA_LIBRARY Cocoa) + if(COCOA_LIBRARY) + list(APPEND RENDERERGL1_LIBRARIES "${COCOA_LIBRARY}") + else() + list(APPEND RENDERERGL1_LDFLAGS "-framework Cocoa") + endif() + +endif() + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + if(ARCH STREQUAL "ppc" OR ARCH STREQUAL "ppc64") + list(APPEND RENDERERGL1_SOURCES ${RENDERERGL1_ALTIVEC_SOURCES}) + foreach(ALTIVEC_SOURCE IN LISTS RENDERERGL1_ALTIVEC_SOURCES) + set_source_files_properties("${ALTIVEC_SOURCE}" PROPERTIES COMPILE_FLAGS "-maltivec") + endforeach() + endif() + +#handled by q_shared.h +# CHECK_C_SOURCE_COMPILES("int __attribute__((visibility(\"default\"))) foo;int main() {return(0);}" HAVE_ATTRIBUTE_VISIBILITY_DEFAULT) +# if(HAVE_ATTRIBUTE_VISIBILITY_DEFAULT) +# list(APPEND RENDERERGL1_DEFINITIONS "-DHAVE_ATTRIBUTE_VISIBILITY_DEFAULT") +# endif(HAVE_ATTRIBUTE_VISIBILITY_DEFAULT) + +endif() + +ADD_RENDER_DEFINITIONS(RENDERERGL1_DEFINITIONS) +ADD_RENDER_CFLAGS(RENDERERGL1_CFLAGS) +ADD_STRIP_LDFLAG(RENDERERGL1_LDFLAGS) + +if(USE_INTERNAL_SDL) + list(APPEND RENDERERGL1_DEFINITIONS "-DUSE_INTERNAL_SDL") + + if(ARCH STREQUAL "ppc" OR ARCH STREQUAL "ppc64") + list(APPEND SDL_INCLUDE_DIRS "${LIBSDL_DIR}/include-macppc") + else() + list(APPEND SDL_INCLUDE_DIRS "${LIBSDL_DIR}/include") + endif() + list(APPEND RENDERERGL1_C_HEADERS ${LIBSDL_HEADERS}) + +elseif(NOT SDL_FOUND) + find_package(SDL REQUIRED) + if(DEFINED SDL_VERSION AND NOT SDL_VERSION STREQUAL "") + if(${SDL_VERSION} VERSION_LESS 2) + message(FATAL_ERROR "The SDL library version is ${SDL_VERSION} but required is at least version 2.") + endif() + endif() + +endif(USE_INTERNAL_SDL) + +list(APPEND RENDERERGL1_DEFINITIONS ${SDL_DEFINITIONS}) +if(SDL_INCLUDE_DIR) + list(APPEND RENDERERGL1_INCLUDE_DIRS "${SDL_INCLUDE_DIR}") +endif(SDL_INCLUDE_DIR) +list(APPEND RENDERERGL1_INCLUDE_DIRS ${SDL_INCLUDE_DIRS}) +list(APPEND RENDERERGL1_LIBRARIES "${SDL_LIBRARY}") +list(APPEND RENDERERGL1_LIBRARIES ${SDL_LIBRARIES}) + +if(NOT OPENGL_FOUND) + find_package(OpenGL REQUIRED) +endif(NOT OPENGL_FOUND) + +list(APPEND RENDERERGL1_DEFINITIONS ${OPENGL_DEFINITIONS}) +if(OPENGL_INCLUDE_DIR) + list(APPEND RENDERERGL1_INCLUDE_DIRS "${OPENGL_INCLUDE_DIR}") +endif(OPENGL_INCLUDE_DIR) +list(APPEND RENDERERGL1_INCLUDE_DIRS ${OPENGL_INCLUDE_DIRS}) +list(APPEND RENDERERGL1_LIBRARIES "${OPENGL_LIBRARY}") +list(APPEND RENDERERGL1_LIBRARIES ${OPENGL_LIBRARIES}) + +if(USE_INTERNAL_JPEG) + list(APPEND RENDERERGL1_DEFINITIONS "-DUSE_INTERNAL_JPEG") + if(NOT DEFINED INTERNAL_JPEG_LIBRARIES) + add_subdirectory("${CMAKELIST_DIR}/internal_jpeg" "internal_jpeg") + endif() + list(APPEND RENDERERGL1_DEFINITIONS ${INTERNAL_JPEG_DEFINITIONS}) + list(APPEND RENDERERGL1_INCLUDE_DIRS ${INTERNAL_JPEG_INCLUDE_DIRS}) + list(APPEND RENDERERGL1_LIBRARIES ${INTERNAL_JPEG_LIBRARIES}) +else() + #tr_image_jpg.c JPEG_LIB_VERSION >= 80 + find_package(JPEG REQUIRED) + if(DEFINED JPEG_VERSION AND NOT JPEG_VERSION STREQUAL "") + if(${JPEG_VERSION} VERSION_LESS 80) + message(FATAL_ERROR "The JPEG library version is ${JPEG_VERSION} but required is at least version 80.") + endif() + endif() +endif(USE_INTERNAL_JPEG) + +list(APPEND RENDERERGL1_DEFINITIONS ${JPEG_DEFINITIONS}) +if(JPEG_INCLUDE_DIR) + list(APPEND RENDERERGL1_INCLUDE_DIRS "${JPEG_INCLUDE_DIR}") +endif(JPEG_INCLUDE_DIR) +list(APPEND RENDERERGL1_INCLUDE_DIRS ${JPEG_INCLUDE_DIRS}) +list(APPEND RENDERERGL1_LIBRARIES "${JPEG_LIBRARY}") +list(APPEND RENDERERGL1_LIBRARIES ${JPEG_LIBRARIES}) + +if(USE_RENDERER_DLOPEN) + list(APPEND RENDERERGL1_DEFINITIONS "-DUSE_RENDERER_DLOPEN") +endif(USE_RENDERER_DLOPEN) + +if(USE_LOCAL_HEADERS) + list(APPEND RENDERERGL1_DEFINITIONS "-DUSE_LOCAL_HEADERS") +endif(USE_LOCAL_HEADERS) + +if(DEFINED ENV{SOURCE_DATE_EPOCH}) + if(NOT ${CMAKE_VERSION} VERSION_LESS "3.8.0") + string(TIMESTAMP PRODUCT_DATE "%b %d %Y" UTC) #Nov 28 2021 + list(APPEND RENDERERGL1_DEFINITIONS "-DPRODUCT_DATE=\"${PRODUCT_DATE}\"") + else() + message(WARNING "Update CMake to version 3.8 or later for SOURCE_DATE_EPOCH support!") + endif() +endif() + +list(APPEND RENDERERGL1_C_SOURCES ${RENDERERCOMMON_SOURCES} ${RENDERERGL1_SOURCES} ${SDL_SOURCES} ${QCOMMON_SOURCES}) +list(APPEND RENDERERGL1_C_HEADERS ${RENDERERCOMMON_HEADERS} ${RENDERERGL1_HEADERS} ${SDL_HEADERS} ${QCOMMON_HEADERS}) + +source_group("libsdl\\Header Files" FILES ${LIBSDL_HEADERS}) +source_group("qcommon\\Source Files" FILES ${QCOMMON_SOURCES}) +source_group("qcommon\\Header Files" FILES ${QCOMMON_HEADERS}) +source_group("renderercommon\\Source Files" FILES ${RENDERERCOMMON_SOURCES}) +source_group("renderercommon\\Header Files" FILES ${RENDERERCOMMON_HEADERS}) +source_group("renderergl1\\Source Files" FILES ${RENDERERGL1_SOURCES}) +source_group("renderergl1\\Header Files" FILES ${RENDERERGL1_HEADERS}) +source_group("sdl\\Header Files" FILES ${SDL_HEADERS}) +source_group("sdl\\Source Files" FILES ${SDL_SOURCES}) + +if(USE_RENDERER_DLOPEN) + add_library(${RENDERERGL1_TARGET} SHARED ${RENDERERGL1_C_SOURCES} ${RENDERERGL1_C_HEADERS}) + set_target_properties(${RENDERERGL1_TARGET} PROPERTIES PREFIX "") + set_target_properties(${RENDERERGL1_TARGET} PROPERTIES OUTPUT_NAME "renderer_opengl1_${ARCH}") +else() + add_library(${RENDERERGL1_TARGET} STATIC ${RENDERERGL1_C_SOURCES} ${RENDERERGL1_C_HEADERS}) +endif(USE_RENDERER_DLOPEN) + +target_compile_definitions(${RENDERERGL1_TARGET} PRIVATE ${RENDERERGL1_DEFINITIONS}) + +target_include_directories(${RENDERERGL1_TARGET} PRIVATE ${RENDERERGL1_INCLUDE_DIRS}) + +compat_target_compile_options(${RENDERERGL1_TARGET} PRIVATE ${RENDERERGL1_CFLAGS}) + +target_link_libraries(${RENDERERGL1_TARGET} ${RENDERERGL1_LIBRARIES}) + +compat_target_link_options(${RENDERERGL1_TARGET} PRIVATE ${RENDERERGL1_LDFLAGS}) + +STRIP_TARGET(${RENDERERGL1_TARGET}) + +set(DESTINATION_DIR "${REL_INSTALL_DEST}") +if(INSTALL_DIR) + set(DESTINATION_DIR "${INSTALL_DIR}") +endif(INSTALL_DIR) + +if(USE_RENDERER_DLOPEN) + #cmake 2.8.12 requires RUNTIME instead of LIBRARY DESTINATION + install(TARGETS ${RENDERERGL1_TARGET} + RUNTIME DESTINATION "${DESTINATION_DIR}" + LIBRARY DESTINATION "${DESTINATION_DIR}" + PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ + GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE + CONFIGURATIONS Release + COMPONENT renderer + ) +endif(USE_RENDERER_DLOPEN) + +include(CPack) diff --git a/misc/CMakeLists/renderergl2/CMakeLists.txt b/misc/CMakeLists/renderergl2/CMakeLists.txt new file mode 100644 index 0000000000..81fd255f1a --- /dev/null +++ b/misc/CMakeLists/renderergl2/CMakeLists.txt @@ -0,0 +1,463 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("renderer opengl2") + +set(RENDERERGL2_TARGET "renderer_opengl2") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/cflags.cmake") +include("${CMAKELIST_DIR}/include/compat.cmake") +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") +include("${CMAKELIST_DIR}/include/libsdl_headers.cmake") +include("${CMAKELIST_DIR}/include/strip.cmake") +include("${CMAKELIST_DIR}/include/platform.cmake") + +include(CheckCCompilerFlag) +include(CheckCSourceCompiles) +include(CheckIncludeFile) + +option(USE_INTERNAL_LIBS "Use internal libraries (Ogg,Vorbis,Opus,zlib,JPEG,...)" ${DEFAULT_USE_INTERNAL_LIBS}) +option(USE_INTERNAL_JPEG "Use internal JPEG library" ${USE_INTERNAL_LIBS}) +option(USE_INTERNAL_SDL "Use internal SDL library" ${USE_INTERNAL_LIBS}) +option(USE_LOCAL_HEADERS "Use local headers" ${USE_INTERNAL_LIBS}) + +option(USE_RENDERER_DLOPEN "Use renderer dynamic library opening" ${DEFAULT_USE_RENDERER_DLOPEN}) + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + option(GENERATE_DEPENDENCIES "Preprocessing: Generate dependencies for make outputting" ${DEFAULT_GENERATE_DEPENDENCIES}) +endif() +option(NO_STRIP "No strip (keep all symbol table and relocation information)" ${DEFAULT_NO_STRIP}) +if(MSVC) + option(BUILD_STATIC_CRT "Build (static) multi-threaded C runtime library" ${DEFAULT_BUILD_STATIC_CRT}) +endif() + +set(REL_INSTALL_DEST "${DEFAULT_REL_INSTALL_DEST}" CACHE PATH "Relative installation destination") +set(INSTALL_DIR "${DEFAULT_INSTALL_DIR}" CACHE PATH "Installation directory") + + +set(GLSL_SOURCES + "${GLSL_DIR}/bokeh_fp.glsl" + "${GLSL_DIR}/bokeh_vp.glsl" + "${GLSL_DIR}/calclevels4x_fp.glsl" + "${GLSL_DIR}/calclevels4x_vp.glsl" + "${GLSL_DIR}/depthblur_fp.glsl" + "${GLSL_DIR}/depthblur_vp.glsl" + "${GLSL_DIR}/dlight_fp.glsl" + "${GLSL_DIR}/dlight_vp.glsl" + "${GLSL_DIR}/down4x_fp.glsl" + "${GLSL_DIR}/down4x_vp.glsl" + "${GLSL_DIR}/fogpass_fp.glsl" + "${GLSL_DIR}/fogpass_vp.glsl" + "${GLSL_DIR}/generic_fp.glsl" + "${GLSL_DIR}/generic_vp.glsl" + "${GLSL_DIR}/lightall_fp.glsl" + "${GLSL_DIR}/lightall_vp.glsl" + "${GLSL_DIR}/pshadow_fp.glsl" + "${GLSL_DIR}/pshadow_vp.glsl" + "${GLSL_DIR}/shadowfill_fp.glsl" + "${GLSL_DIR}/shadowfill_vp.glsl" + "${GLSL_DIR}/shadowmask_fp.glsl" + "${GLSL_DIR}/shadowmask_vp.glsl" + "${GLSL_DIR}/ssao_fp.glsl" + "${GLSL_DIR}/ssao_vp.glsl" + "${GLSL_DIR}/texturecolor_fp.glsl" + "${GLSL_DIR}/texturecolor_vp.glsl" + "${GLSL_DIR}/tonemap_fp.glsl" + "${GLSL_DIR}/tonemap_vp.glsl" +) +set(QCOMMON_SOURCES +# "${QCOMMON_DIR}/cm_load.c" +# "${QCOMMON_DIR}/cm_patch.c" +# "${QCOMMON_DIR}/cm_polylib.c" +# "${QCOMMON_DIR}/cm_test.c" +# "${QCOMMON_DIR}/cm_trace.c" +# "${QCOMMON_DIR}/cmd.c" +# "${QCOMMON_DIR}/common.c" +# "${QCOMMON_DIR}/cvar.c" +# "${QCOMMON_DIR}/files.c" +# "${QCOMMON_DIR}/huffman.c" +# "${QCOMMON_DIR}/ioapi.c" +# "${QCOMMON_DIR}/md4.c" +# "${QCOMMON_DIR}/md5.c" +# "${QCOMMON_DIR}/msg.c" +# "${QCOMMON_DIR}/net_chan.c" +# "${QCOMMON_DIR}/net_ip.c" + "${QCOMMON_DIR}/puff.c" + "${QCOMMON_DIR}/q_math.c" + "${QCOMMON_DIR}/q_shared.c" +# "${QCOMMON_DIR}/unzip.c" +# "${QCOMMON_DIR}/vm.c" +# "${QCOMMON_DIR}/vm_interpreted.c" +# "${QCOMMON_DIR}/vm_none.c" +# "${QCOMMON_DIR}/vm_powerpc.c" +# "${QCOMMON_DIR}/vm_powerpc_asm.c" +# "${QCOMMON_DIR}/vm_sparc.c" +# "${QCOMMON_DIR}/vm_x86.c" +) +set(QCOMMON_HEADERS +# "${QCOMMON_DIR}/cm_local.h" +# "${QCOMMON_DIR}/cm_patch.h" +# "${QCOMMON_DIR}/cm_polylib.h" +# "${QCOMMON_DIR}/cm_public.h" +# "${QCOMMON_DIR}/ioapi.h" + "${QCOMMON_DIR}/puff.h" +# "${QCOMMON_DIR}/q_platform.h" + "${QCOMMON_DIR}/q_shared.h" + "${QCOMMON_DIR}/qcommon.h" + "${QCOMMON_DIR}/qfiles.h" + "${QCOMMON_DIR}/surfaceflags.h" + "${QCOMMON_DIR}/unzip.h" + "${QCOMMON_DIR}/vm_local.h" +# "${QCOMMON_DIR}/vm_powerpc_asm.h" +# "${QCOMMON_DIR}/vm_sparc.h" +) +list(APPEND RENDERERCOMMON_SOURCES + "${RENDERERCOMMON_DIR}/tr_font.c" + "${RENDERERCOMMON_DIR}/tr_image_bmp.c" + "${RENDERERCOMMON_DIR}/tr_image_jpg.c" + "${RENDERERCOMMON_DIR}/tr_image_pcx.c" + "${RENDERERCOMMON_DIR}/tr_image_png.c" + "${RENDERERCOMMON_DIR}/tr_image_tga.c" + "${RENDERERCOMMON_DIR}/tr_noise.c" +) +list(APPEND RENDERERCOMMON_HEADERS + "${RENDERERCOMMON_DIR}/iqm.h" + "${RENDERERCOMMON_DIR}/qgl.h" + "${RENDERERCOMMON_DIR}/tr_common.h" + "${RENDERERCOMMON_DIR}/tr_public.h" + "${RENDERERCOMMON_DIR}/tr_types.h" +) + +list(APPEND RENDERERGL2_SOURCES + "${RENDERERGL2_DIR}/tr_animation.c" + "${RENDERERGL2_DIR}/tr_backend.c" + "${RENDERERGL2_DIR}/tr_bsp.c" + "${RENDERERGL2_DIR}/tr_cmds.c" + "${RENDERERGL2_DIR}/tr_curve.c" + "${RENDERERGL2_DIR}/tr_dsa.c" + "${RENDERERGL2_DIR}/tr_extensions.c" + "${RENDERERGL2_DIR}/tr_extramath.c" + "${RENDERERGL2_DIR}/tr_fbo.c" + "${RENDERERGL2_DIR}/tr_flares.c" + "${RENDERERGL2_DIR}/tr_glsl.c" + "${RENDERERGL2_DIR}/tr_image.c" + "${RENDERERGL2_DIR}/tr_image_dds.c" + "${RENDERERGL2_DIR}/tr_init.c" + "${RENDERERGL2_DIR}/tr_light.c" + "${RENDERERGL2_DIR}/tr_main.c" + "${RENDERERGL2_DIR}/tr_marks.c" + "${RENDERERGL2_DIR}/tr_mesh.c" + "${RENDERERGL2_DIR}/tr_model.c" + "${RENDERERGL2_DIR}/tr_model_iqm.c" + "${RENDERERGL2_DIR}/tr_postprocess.c" + "${RENDERERGL2_DIR}/tr_scene.c" + "${RENDERERGL2_DIR}/tr_shade.c" + "${RENDERERGL2_DIR}/tr_shade_calc.c" + "${RENDERERGL2_DIR}/tr_shader.c" + "${RENDERERGL2_DIR}/tr_shadows.c" + "${RENDERERGL2_DIR}/tr_sky.c" + "${RENDERERGL2_DIR}/tr_subs.c" + "${RENDERERGL2_DIR}/tr_surface.c" + "${RENDERERGL2_DIR}/tr_vbo.c" + "${RENDERERGL2_DIR}/tr_world.c" +) +list(APPEND RENDERERGL2_HEADERS + "${RENDERERGL2_DIR}/tr_dsa.h" + "${RENDERERGL2_DIR}/tr_local.h" + "${RENDERERGL2_DIR}/tr_extramath.h" + "${RENDERERGL2_DIR}/tr_extratypes.h" + "${RENDERERGL2_DIR}/tr_postprocess.h" +) + +set(SDL_SOURCES + "${SDL_DIR}/sdl_gamma.c" + "${SDL_DIR}/sdl_glimp.c" +# "${SDL_DIR}/sdl_input.c" +# "${SDL_DIR}/sdl_snd.c" +) +set(SDL_HEADERS +# "${SDL_DIR}/sdl_icon.h" +) + +if(MSVC) + if(NOT SDL_FOUND AND USE_INTERNAL_SDL) + if(ARCH STREQUAL "x86_64") + list(APPEND SDL_LIBRARIES + "${LIBS_DIR}/win64/SDL264main.lib" + "${LIBS_DIR}/win64/SDL264.lib" + ) + set(SDL_FOUND TRUE) + elseif(ARCH STREQUAL "x86") + list(APPEND SDL_LIBRARIES + "${LIBS_DIR}/win32/SDL2main.lib" + "${LIBS_DIR}/win32/SDL2.lib" + ) + set(SDL_FOUND TRUE) + endif() + if(SDL_FOUND) + foreach(FILEPATH ${SDL_LIBRARIES}) + if(NOT EXISTS "${FILEPATH}") + message(WARNING "Could not find the file for MinGW: ${FILEPATH}\n") + endif() + endforeach(FILEPATH) + endif() + endif() + + #Character Set, CharacterSet="0", Not Set, ASCII/SBCS (Single Byte Character Set) + list(APPEND RENDERERGL2_DEFINITIONS "-D_SBCS") + + #disable deprecation warnings about old functions like strcmp + list(APPEND RENDERERGL2_DEFINITIONS "-D_CRT_SECURE_NO_WARNINGS") + + #Randomized Base Address /DYNAMICBASE:NO + list(APPEND RENDERERGL2_LDFLAGS "/DYNAMICBASE:NO") + #Data Execution Prevenbtion (DEP) /NXCOMPAT:NO + list(APPEND RENDERERGL2_LDFLAGS "/NXCOMPAT:NO") + #Image Has Safe Exception Handlers, is no longer default no in msvc 2013 /SAFESEH:NO + list(APPEND RENDERERGL2_LDFLAGS "/SAFESEH:NO") + + #requires directory misc/msvc for ../quake3.ico in win_resource.rc + list(APPEND RENDERERGL2_INCLUDE_DIRS "${SOURCE_DIR}/misc/msvc") + +endif(MSVC) + +if(MINGW AND (CMAKE_COMPILER_IS_GNUCC + OR CMAKE_C_COMPILER_ID STREQUAL "Clang")) + if(NOT SDL_FOUND AND USE_INTERNAL_SDL) + if(ARCH STREQUAL "x86_64") + list(APPEND SDL_LIBRARIES + "${LIBS_DIR}/win64/libSDL264main.a" + "${LIBS_DIR}/win64/libSDL264.dll.a" + ) + set(SDL_FOUND TRUE) + elseif(ARCH STREQUAL "x86") + list(APPEND SDL_LIBRARIES + "${LIBS_DIR}/win32/libSDL2main.a" + "${LIBS_DIR}/win32/libSDL2.dll.a" + ) + set(SDL_FOUND TRUE) + endif() + if(SDL_FOUND) + foreach(FILEPATH ${SDL_LIBRARIES}) + if(NOT EXISTS "${FILEPATH}") + message(WARNING "Could not find the file for MinGW: ${FILEPATH}\n") + endif() + endforeach(FILEPATH) + endif() + endif() + +endif() + +if(PLATFORM STREQUAL "darwin" AND (CMAKE_COMPILER_IS_GNUCC + OR CMAKE_C_COMPILER_ID STREQUAL "Clang")) + list(APPEND RENDERERGL2_DEFINITIONS "-DMACOS_X") + + if(NOT SDL_FOUND AND USE_INTERNAL_SDL) + list(APPEND SDL_LIBRARIES + "${LIBS_DIR}/macosx/libSDL2main.a" + "${LIBS_DIR}/macosx/libSDL2-2.0.0.dylib" + ) + set(SDL_FOUND TRUE) + + foreach(FILEPATH ${SDL_LIBRARIES}) + if(NOT EXISTS "${FILEPATH}") + message(WARNING "Could not find the file for MacOS: ${FILEPATH}\n") + endif() + endforeach(FILEPATH) + + endif() + + find_library(COCOA_LIBRARY Cocoa) + if(COCOA_LIBRARY) + list(APPEND RENDERERGL2_LIBRARIES "${COCOA_LIBRARY}") + else() + list(APPEND RENDERERGL2_LDFLAGS "-framework Cocoa") + endif() + +endif() + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + +#handled by q_shared.h +# CHECK_C_SOURCE_COMPILES("int __attribute__((visibility(\"default\"))) foo;int main() {return(0);}" HAVE_ATTRIBUTE_VISIBILITY_DEFAULT) +# if(HAVE_ATTRIBUTE_VISIBILITY_DEFAULT) +# list(APPEND RENDERERGL2_DEFINITIONS "-DHAVE_ATTRIBUTE_VISIBILITY_DEFAULT") +# endif(HAVE_ATTRIBUTE_VISIBILITY_DEFAULT) + +endif() + +ADD_RENDER_DEFINITIONS(RENDERERGL2_DEFINITIONS) +ADD_RENDER_CFLAGS(RENDERERGL2_CFLAGS) +ADD_STRIP_LDFLAG(RENDERERGL2_LDFLAGS) + +if(USE_INTERNAL_SDL) + list(APPEND RENDERERGL2_DEFINITIONS "-DUSE_INTERNAL_SDL") + + if(ARCH STREQUAL "ppc" OR ARCH STREQUAL "ppc64") + list(APPEND SDL_INCLUDE_DIRS "${LIBSDL_DIR}/include-macppc") + else() + list(APPEND SDL_INCLUDE_DIRS "${LIBSDL_DIR}/include") + endif() + list(APPEND RENDERERGL2_C_HEADERS ${LIBSDL_HEADERS}) + +elseif(NOT SDL_FOUND) + find_package(SDL REQUIRED) + if(DEFINED SDL_VERSION AND NOT SDL_VERSION STREQUAL "") + if(${SDL_VERSION} VERSION_LESS 2) + message(FATAL_ERROR "The SDL library version is ${SDL_VERSION} but required is at least version 2.") + endif() + endif() + +endif(USE_INTERNAL_SDL) + +list(APPEND RENDERERGL2_DEFINITIONS ${SDL_DEFINITIONS}) +if(SDL_INCLUDE_DIR) + list(APPEND RENDERERGL2_INCLUDE_DIRS "${SDL_INCLUDE_DIR}") +endif(SDL_INCLUDE_DIR) +list(APPEND RENDERERGL2_INCLUDE_DIRS ${SDL_INCLUDE_DIRS}) +list(APPEND RENDERERGL2_LIBRARIES "${SDL_LIBRARY}") +list(APPEND RENDERERGL2_LIBRARIES ${SDL_LIBRARIES}) + +if(NOT OPENGL_FOUND) + find_package(OpenGL REQUIRED) +endif(NOT OPENGL_FOUND) + +list(APPEND RENDERERGL2_DEFINITIONS ${OPENGL_DEFINITIONS}) +if(OPENGL_INCLUDE_DIR) + list(APPEND RENDERERGL2_INCLUDE_DIRS "${OPENGL_INCLUDE_DIR}") +endif(OPENGL_INCLUDE_DIR) +list(APPEND RENDERERGL2_INCLUDE_DIRS ${OPENGL_INCLUDE_DIRS}) +list(APPEND RENDERERGL2_LIBRARIES "${OPENGL_LIBRARY}") +list(APPEND RENDERERGL2_LIBRARIES ${OPENGL_LIBRARIES}) + +if(USE_INTERNAL_JPEG) + list(APPEND RENDERERGL2_DEFINITIONS "-DUSE_INTERNAL_JPEG") + if(NOT DEFINED INTERNAL_JPEG_LIBRARIES) + add_subdirectory("${CMAKELIST_DIR}/internal_jpeg" "internal_jpeg") + endif() + list(APPEND RENDERERGL2_DEFINITIONS ${INTERNAL_JPEG_DEFINITIONS}) + list(APPEND RENDERERGL2_INCLUDE_DIRS ${INTERNAL_JPEG_INCLUDE_DIRS}) + list(APPEND RENDERERGL2_LIBRARIES ${INTERNAL_JPEG_LIBRARIES}) +else() + find_package(JPEG REQUIRED) + if(DEFINED JPEG_VERSION AND NOT JPEG_VERSION STREQUAL "") + if(${JPEG_VERSION} VERSION_LESS 80) + message(FATAL_ERROR "The JPEG library version is ${JPEG_VERSION} but required is 80.") + endif() + endif() +endif(USE_INTERNAL_JPEG) + +list(APPEND RENDERERGL2_DEFINITIONS ${JPEG_DEFINITIONS}) +if(JPEG_INCLUDE_DIR) + list(APPEND RENDERERGL2_INCLUDE_DIRS "${JPEG_INCLUDE_DIR}") +endif(JPEG_INCLUDE_DIR) +list(APPEND RENDERERGL2_INCLUDE_DIRS ${JPEG_INCLUDE_DIRS}) +list(APPEND RENDERERGL2_LIBRARIES "${JPEG_LIBRARY}") +list(APPEND RENDERERGL2_LIBRARIES ${JPEG_LIBRARIES}) + +if(USE_RENDERER_DLOPEN) + list(APPEND RENDERERGL2_DEFINITIONS "-DUSE_RENDERER_DLOPEN") +endif(USE_RENDERER_DLOPEN) + +if(USE_LOCAL_HEADERS) + list(APPEND RENDERERGL2_DEFINITIONS "-DUSE_LOCAL_HEADERS") +endif(USE_LOCAL_HEADERS) + +if(DEFINED ENV{SOURCE_DATE_EPOCH}) + if(NOT CMAKE_VERSION VERSION_LESS "3.8.0") + string(TIMESTAMP PRODUCT_DATE "%b %d %Y" UTC) #Nov 28 2021 + list(APPEND RENDERERGL2_DEFINITIONS "-DPRODUCT_DATE=\"${PRODUCT_DATE}\"") + else() + message(WARNING "Update CMake to version 3.8 or later for SOURCE_DATE_EPOCH support!") + endif() +endif() + +list(APPEND RENDERERGL2_C_SOURCES ${RENDERERCOMMON_SOURCES} ${RENDERERGL2_SOURCES} ${SDL_SOURCES} ${QCOMMON_SOURCES}) +list(APPEND RENDERERGL2_C_HEADERS ${RENDERERCOMMON_HEADERS} ${RENDERERGL2_HEADERS} ${SDL_HEADERS} ${QCOMMON_HEADERS}) + +set(GLSL_DIRNAME "Generated_c${CMAKE_BUILD_TYPE}") +set(GLSL_BDIR "${CMAKE_CURRENT_BINARY_DIR}/${GLSL_DIRNAME}") +file(MAKE_DIRECTORY "${GLSL_BDIR}") + +set(GLSL_C_SOURCES) + +foreach(SOURCE ${GLSL_SOURCES}) + get_filename_component(BASE_FILENAME "${SOURCE}" NAME_WE) + set(OUT_FILENAME "${GLSL_BDIR}/${BASE_FILENAME}.c") + add_custom_command(OUTPUT "${OUT_FILENAME}" + COMMAND ${CMAKE_COMMAND} ARGS -DSHADERNAME="${BASE_FILENAME}" -DINPUT="${SOURCE}" -DOUTPUT="${OUT_FILENAME}" -P "${CMAKELIST_DIR}/include/glsl_to_c.cmake" + DEPENDS "${SOURCE}" + ) + list(APPEND GLSL_C_SOURCES "${OUT_FILENAME}") +endforeach() + +source_group("glsl" FILES ${GLSL_SOURCES}) +source_group("glsl\\Generated_c" FILES ${GLSL_C_SOURCES}) +source_group("libsdl\\Header Files" FILES ${LIBSDL_HEADERS}) +source_group("qcommon\\Source Files" FILES ${QCOMMON_SOURCES}) +source_group("qcommon\\Header Files" FILES ${QCOMMON_HEADERS}) +source_group("renderercommon\\Source Files" FILES ${RENDERERCOMMON_SOURCES}) +source_group("renderercommon\\Header Files" FILES ${RENDERERCOMMON_HEADERS}) +source_group("renderergl2\\Source Files" FILES ${RENDERERGL2_SOURCES}) +source_group("renderergl2\\Header Files" FILES ${RENDERERGL2_HEADERS}) +source_group("sdl\\Header Files" FILES ${SDL_HEADERS}) +source_group("sdl\\Source Files" FILES ${SDL_SOURCES}) + +add_library(${RENDERERGL2_TARGET} SHARED ${RENDERERGL2_C_SOURCES} ${RENDERERGL2_C_HEADERS} ${GLSL_SOURCES} ${GLSL_C_SOURCES}) + +set_target_properties(${RENDERERGL2_TARGET} PROPERTIES PREFIX "") +set_target_properties(${RENDERERGL2_TARGET} PROPERTIES OUTPUT_NAME "renderer_opengl2_${ARCH}") + +target_compile_definitions(${RENDERERGL2_TARGET} PRIVATE ${RENDERERGL2_DEFINITIONS}) + +target_include_directories(${RENDERERGL2_TARGET} PRIVATE ${RENDERERGL2_INCLUDE_DIRS}) + +compat_target_compile_options(${RENDERERGL2_TARGET} PRIVATE ${RENDERERGL2_CFLAGS}) + +target_link_libraries(${RENDERERGL2_TARGET} ${RENDERERGL2_LIBRARIES}) + +compat_target_link_options(${RENDERERGL2_TARGET} PRIVATE ${RENDERERGL2_LDFLAGS}) + +STRIP_TARGET(${RENDERERGL2_TARGET}) + +set(DESTINATION_DIR "${REL_INSTALL_DEST}") +if(INSTALL_DIR) + set(DESTINATION_DIR "${INSTALL_DIR}") +endif(INSTALL_DIR) + +install(TARGETS ${RENDERERGL2_TARGET} + RUNTIME DESTINATION "${DESTINATION_DIR}" + LIBRARY DESTINATION "${DESTINATION_DIR}" + PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ + GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE + CONFIGURATIONS Release + COMPONENT renderer +) +include(CPack) diff --git a/misc/CMakeLists/server/CMakeLists.txt b/misc/CMakeLists/server/CMakeLists.txt new file mode 100644 index 0000000000..5571a8d5a4 --- /dev/null +++ b/misc/CMakeLists/server/CMakeLists.txt @@ -0,0 +1,555 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("server") + +set(SERVER_TARGET "server") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/cflags.cmake") +include("${CMAKELIST_DIR}/include/compat.cmake") +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") +include("${CMAKELIST_DIR}/include/git_rev.cmake") +include("${CMAKELIST_DIR}/include/strip.cmake") +include("${CMAKELIST_DIR}/include/platform.cmake") +include("${CMAKELIST_DIR}/include/vm_sources.cmake") + +include(CheckCSourceCompiles) +include(CheckIncludeFile) + +#cmake does append any extensions +set(SERVER_BIN "${DEFAULT_SERVER_BIN}" CACHE STRING "binary/executable name") + +#Note: options and build directories get cached +option(USE_INTERNAL_LIBS "Use internal libraries (zlib)" ${DEFAULT_USE_INTERNAL_LIBS}) +option(USE_INTERNAL_ZLIB "Use internal zlib" ${USE_INTERNAL_LIBS}) +option(USE_LOCAL_HEADERS "Use local headers" ${USE_INTERNAL_LIBS}) +option(USE_VOIP "Use VOIP" ${DEFAULT_USE_VOIP}) +if(NOT PLATFORM STREQUAL "darwin") + option(USE_ICON "Use window icon" ${DEFAULT_USE_ICON}) +endif() +option(USE_AUTOUPDATER "Use Autoupdater" ${DEFAULT_USE_AUTOUPDATER}) +set(PRODUCT_VERSION "${DEFAULT_VERSION}" CACHE STRING "Product version") +option(USE_GIT_REV "Use Git revision for version" ${DEFAULT_USE_GIT_REV}) + +option(BUILD_STANDALONE "Standalone" ${DEFAULT_BUILD_STANDALONE}) +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + option(GENERATE_DEPENDENCIES "Preprocessing: Generate dependencies for make outputting" ${DEFAULT_GENERATE_DEPENDENCIES}) +endif() +option(NO_STRIP "No strip (keep all symbol table and relocation information)" ${DEFAULT_NO_STRIP}) +if(MSVC) + option(BUILD_STATIC_CRT "Build (static) multi-threaded C runtime library" ${DEFAULT_BUILD_STATIC_CRT}) +endif() + +set(BIN_EXT "${DEFAULT_BIN_EXT}" CACHE STRING "Binary/executable extension") + +set(REL_INSTALL_DEST "${DEFAULT_REL_INSTALL_DEST}" CACHE PATH "Relative installation destination") +set(INSTALL_DIR "${DEFAULT_INSTALL_DIR}" CACHE PATH "Installation directory") + +set(ASM_SOURCES + +) + +set(ASM_C_SOURCES + "${ASM_DIR}/ftola.c" + "${ASM_DIR}/snapvector.c" +) + +set(ASM_MASM_SOURCES + "${ASM_DIR}/ftola.asm" + "${ASM_DIR}/snapvector.asm" +# "${ASM_DIR}/vm_x86_64.asm" +) + +set(ASM_S_SOURCES + "${ASM_DIR}/matha.s" +# "${ASM_DIR}/snd_mixa.s" +) + +set(ASM_HEADERS +# "${ASM_DIR}/qasm.h" +# "${ASM_DIR}/qasm-inline.h" +) + +set(BOTLIB_SOURCES + "${BOTLIB_DIR}/be_aas_bspq3.c" + "${BOTLIB_DIR}/be_aas_cluster.c" + "${BOTLIB_DIR}/be_aas_debug.c" + "${BOTLIB_DIR}/be_aas_entity.c" + "${BOTLIB_DIR}/be_aas_file.c" + "${BOTLIB_DIR}/be_aas_main.c" + "${BOTLIB_DIR}/be_aas_move.c" + "${BOTLIB_DIR}/be_aas_optimize.c" + "${BOTLIB_DIR}/be_aas_reach.c" + "${BOTLIB_DIR}/be_aas_route.c" + "${BOTLIB_DIR}/be_aas_routealt.c" + "${BOTLIB_DIR}/be_aas_sample.c" + "${BOTLIB_DIR}/be_ai_char.c" + "${BOTLIB_DIR}/be_ai_chat.c" + "${BOTLIB_DIR}/be_ai_gen.c" + "${BOTLIB_DIR}/be_ai_goal.c" + "${BOTLIB_DIR}/be_ai_move.c" + "${BOTLIB_DIR}/be_ai_weap.c" + "${BOTLIB_DIR}/be_ai_weight.c" + "${BOTLIB_DIR}/be_ea.c" + "${BOTLIB_DIR}/be_interface.c" + "${BOTLIB_DIR}/l_crc.c" + "${BOTLIB_DIR}/l_libvar.c" + "${BOTLIB_DIR}/l_log.c" + "${BOTLIB_DIR}/l_memory.c" + "${BOTLIB_DIR}/l_precomp.c" + "${BOTLIB_DIR}/l_script.c" + "${BOTLIB_DIR}/l_struct.c" +) +set(BOTLIB_HEADERS + "${BOTLIB_DIR}/aasfile.h" + "${BOTLIB_DIR}/be_aas.h" + "${BOTLIB_DIR}/be_aas_bsp.h" + "${BOTLIB_DIR}/be_aas_cluster.h" + "${BOTLIB_DIR}/be_aas_debug.h" + "${BOTLIB_DIR}/be_aas_def.h" + "${BOTLIB_DIR}/be_aas_entity.h" + "${BOTLIB_DIR}/be_aas_file.h" + "${BOTLIB_DIR}/be_aas_funcs.h" + "${BOTLIB_DIR}/be_aas_main.h" + "${BOTLIB_DIR}/be_aas_move.h" + "${BOTLIB_DIR}/be_aas_optimize.h" + "${BOTLIB_DIR}/be_aas_reach.h" + "${BOTLIB_DIR}/be_aas_route.h" + "${BOTLIB_DIR}/be_aas_routealt.h" + "${BOTLIB_DIR}/be_aas_sample.h" + "${BOTLIB_DIR}/be_ai_char.h" + "${BOTLIB_DIR}/be_ai_chat.h" + "${BOTLIB_DIR}/be_ai_gen.h" + "${BOTLIB_DIR}/be_ai_goal.h" + "${BOTLIB_DIR}/be_ai_move.h" + "${BOTLIB_DIR}/be_ai_weap.h" + "${BOTLIB_DIR}/be_ai_weight.h" + "${BOTLIB_DIR}/be_ea.h" + "${BOTLIB_DIR}/be_interface.h" + "${BOTLIB_DIR}/botlib.h" + "${BOTLIB_DIR}/l_crc.h" + "${BOTLIB_DIR}/l_libvar.h" + "${BOTLIB_DIR}/l_log.h" + "${BOTLIB_DIR}/l_memory.h" + "${BOTLIB_DIR}/l_precomp.h" + "${BOTLIB_DIR}/l_script.h" + "${BOTLIB_DIR}/l_struct.h" + "${BOTLIB_DIR}/l_utils.h" +) +set(NULL_SOURCES + "${NULL_DIR}/null_client.c" + "${NULL_DIR}/null_input.c" + "${NULL_DIR}/null_snddma.c" +) +set(NULL_HEADERS + +) +set(QCOMMON_SOURCES + "${QCOMMON_DIR}/cm_load.c" + "${QCOMMON_DIR}/cm_patch.c" + "${QCOMMON_DIR}/cm_polylib.c" + "${QCOMMON_DIR}/cm_test.c" + "${QCOMMON_DIR}/cm_trace.c" + "${QCOMMON_DIR}/cmd.c" + "${QCOMMON_DIR}/common.c" + "${QCOMMON_DIR}/cvar.c" + "${QCOMMON_DIR}/files.c" + "${QCOMMON_DIR}/huffman.c" + "${QCOMMON_DIR}/ioapi.c" + "${QCOMMON_DIR}/md4.c" + "${QCOMMON_DIR}/md5.c" + "${QCOMMON_DIR}/msg.c" + "${QCOMMON_DIR}/net_chan.c" + "${QCOMMON_DIR}/net_ip.c" + "${QCOMMON_DIR}/puff.c" + "${QCOMMON_DIR}/q_math.c" + "${QCOMMON_DIR}/q_shared.c" + "${QCOMMON_DIR}/unzip.c" + "${QCOMMON_DIR}/vm.c" + "${QCOMMON_DIR}/vm_interpreted.c" +# "${QCOMMON_DIR}/vm_none.c" +# "${QCOMMON_DIR}/vm_powerpc.c" +# "${QCOMMON_DIR}/vm_powerpc_asm.c" +# "${QCOMMON_DIR}/vm_sparc.c" +# "${QCOMMON_DIR}/vm_x86.c" +) +set(QCOMMON_HEADERS + "${QCOMMON_DIR}/cm_local.h" + "${QCOMMON_DIR}/cm_patch.h" + "${QCOMMON_DIR}/cm_polylib.h" + "${QCOMMON_DIR}/cm_public.h" + "${QCOMMON_DIR}/ioapi.h" + "${QCOMMON_DIR}/puff.h" + "${QCOMMON_DIR}/q_platform.h" + "${QCOMMON_DIR}/q_shared.h" + "${QCOMMON_DIR}/qcommon.h" + "${QCOMMON_DIR}/qfiles.h" + "${QCOMMON_DIR}/surfaceflags.h" + "${QCOMMON_DIR}/unzip.h" + "${QCOMMON_DIR}/vm_local.h" +# "${QCOMMON_DIR}/vm_powerpc_asm.h" +# "${QCOMMON_DIR}/vm_sparc.h" +) + +set(SERVER_SOURCES + "${SERVER_DIR}/sv_bot.c" + "${SERVER_DIR}/sv_ccmds.c" + "${SERVER_DIR}/sv_client.c" + "${SERVER_DIR}/sv_game.c" + "${SERVER_DIR}/sv_init.c" + "${SERVER_DIR}/sv_main.c" + "${SERVER_DIR}/sv_net_chan.c" +# "${SERVER_DIR}/sv_rankings.c" + "${SERVER_DIR}/sv_snapshot.c" + "${SERVER_DIR}/sv_world.c" +) +set(SERVER_HEADERS + "${SERVER_DIR}/server.h" +) + +set(SYS_SOURCES + "${SYS_DIR}/con_log.c" +# "${SYS_DIR}/con_passive.c" +# "${SYS_DIR}/con_tty.c" +# "${SYS_DIR}/con_win32.c" + "${SYS_DIR}/sys_autoupdater.c" + "${SYS_DIR}/sys_main.c" +# "${SYS_DIR}/sys_unix.c" +# "${SYS_DIR}/sys_win32.c" +) +set(SYS_HEADERS + "${SYS_DIR}/sys_loadlib.h" + "${SYS_DIR}/sys_local.h" + "${SYS_DIR}/win_resource.h" +) +list(APPEND SYS_RC_SOURCES + "${SYS_DIR}/win_resource.rc" + "${SYS_DIR}/win_manifest.xml" +) +list(APPEND SYS_WIN_SOURCES + "${SYS_DIR}/con_passive.c" + "${SYS_DIR}/sys_win32.c" +# "${SYS_DIR}/con_win32.c" +) +list(APPEND SYS_UNIX_SOURCES +# "${SYS_DIR}/con_unix.c" + "${SYS_DIR}/con_tty.c" + "${SYS_DIR}/sys_unix.c" +) +list(APPEND SYS_OSX_SOURCES +# "${SYS_DIR}/sys_osx.c" + "${SYS_DIR}/sys_osx.m" +) + +CHECK_INCLUDE_FILE("dlfcn.h" HAVE_DLFCN_H) +if(HAVE_DLFCN_H) + list(APPEND SERVER_DEFINITIONS "-DHAVE_DLFCN_H") +endif(HAVE_DLFCN_H) + +set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_DL_LIBS}) +CHECK_C_SOURCE_COMPILES("#include \n int main () {void *dl = dlopen(\"libm.so\", RTLD_NOW);return 0;}" HAVE_DLOPEN_IN_DLFCN_H) +set(CMAKE_REQUIRED_LIBRARIES) +if(HAVE_DLOPEN_IN_DLFCN_H) + list(APPEND SERVER_DEFINITIONS "-DHAVE_DLOPEN") + list(APPEND SERVER_LIBRARIES ${CMAKE_DL_LIBS}) +endif(HAVE_DLOPEN_IN_DLFCN_H) + +if(WIN32) + #requires parent directory for misc/quake3.ico in win_resource.rc + list(APPEND SERVER_INCLUDE_DIRS "${SOURCE_DIR}") +endif(WIN32) + +if(MSVC) + list(APPEND SYS_SOURCES ${SYS_WIN_SOURCES}) + + include(CheckLanguage) + check_language(ASM_MASM) + if(CMAKE_ASM_MASM_COMPILER) + enable_language(ASM_MASM) + set(HAVE_MASM_COMPILER TRUE) + endif(CMAKE_ASM_MASM_COMPILER) + + set(USE_MASM_SOURCES TRUE) + + #Character Set, CharacterSet="0", Not Set, ASCII/SBCS (Single Byte Character Set) + list(APPEND SERVER_DEFINITIONS "-D_SBCS") + + #disable deprecation warnings about old functions like strcmp + list(APPEND SERVER_DEFINITIONS "-D_CRT_SECURE_NO_WARNINGS") + + if(ARCH STREQUAL "x86") + list(APPEND SERVER_DEFINITIONS "-D__i386__") + endif() + + #Enable String Pooling /GF + list(APPEND SERVER_CFLAGS "/GF") + #Enable Function-Level Linking /Gy + list(APPEND SERVER_CFLAGS "/Gy") + #Warning Level /W4 + list(APPEND SERVER_CFLAGS "/W4") + #Floating Point Model /fp:fast + list(APPEND SERVER_CFLAGS "/fp:fast") + #Compile as, C Code /TC + list(APPEND SERVER_CFLAGS "/TC") + #Enable C++ Exceptions, No /EHa- + list(APPEND SERVER_CFLAGS "/EHa-") + #Whole program optimization, no /GL- + list(APPEND SERVER_CFLAGS "/GL-") + + #Disable specific warnings + #list(APPEND SERVER_CFLAGS "/wd4244") + + #Subsystem /SUBSYSTEM:CONSOLE + list(APPEND SERVER_LDFLAGS "/SUBSYSTEM:CONSOLE") + #Stack Reserve Size /STACK:8388608 + list(APPEND SERVER_LDFLAGS "/STACK:8388608") + #Randomized Base Address /DYNAMICBASE:NO + list(APPEND SERVER_LDFLAGS "/DYNAMICBASE:NO") + #Data Execution Prevenbtion (DEP) /NXCOMPAT:NO + list(APPEND SERVER_LDFLAGS "/NXCOMPAT:NO") + #Image Has Safe Exception Handlers, is no longer default no in msvc 2013 /SAFESEH:NO + list(APPEND SERVER_LDFLAGS "/SAFESEH:NO") + + #not generating manifest, using win_manifest.xml + list(APPEND SERVER_LDFLAGS "/MANIFEST:NO") + + #time functions winmm.lib + #EnumProcesses function psapi.lib + #windows socket functions ws2_32.lib + list(APPEND SERVER_LIBRARIES "winmm" "psapi" "ws2_32") + + #requires directory misc/msvc for ../quake3.ico in win_resource.rc + list(APPEND SERVER_INCLUDE_DIRS "${SOURCE_DIR}/misc/msvc") + +endif(MSVC) + +if(MINGW AND (CMAKE_COMPILER_IS_GNUCC + OR CMAKE_C_COMPILER_ID STREQUAL "Clang")) + list(APPEND SYS_SOURCES ${SYS_WIN_SOURCES}) + + #link the MinGW library first + list(INSERT SERVER_LIBRARIES 0 "mingw32") + + #time functions winmm.lib + #EnumProcesses function psapi.lib + #socket functions ws2_32.lib + #ImmGetIMEFileName imm32.lib + #GetFileVersionInfoSize Version.lib + list(APPEND SERVER_LIBRARIES "imm32" "Version" "winmm" "psapi" "ws2_32") + + #WINVER is the minimum operating system version the code supports for the Windows SDK. + # 0x0501 for Windows XP, 0x0502 for Windows Server 2003, + # 0x0600 for Windows Vista, 0x0601 for Windows 7, + # 0x0602 for Windows 8, 0x603 for Windows 8.1 and 0x0A00 for Windows 10. + list(APPEND SERVER_DEFINITIONS "-DWINVER=0x0501") + +endif() + +if(PLATFORM STREQUAL "darwin" AND (CMAKE_COMPILER_IS_GNUCC + OR CMAKE_C_COMPILER_ID STREQUAL "Clang")) + list(APPEND SYS_SOURCES ${SYS_OSX_SOURCES}) + set_source_files_properties("${SYS_DIR}/sys_osx.m" PROPERTIES LANGUAGE C) + + list(APPEND SERVER_DEFINITIONS "-DMACOS_X") + find_library(COCOA_LIBRARY Cocoa) + if(COCOA_LIBRARY) + list(APPEND SERVER_LIBRARIES "${COCOA_LIBRARY}") + else() + list(APPEND SERVER_LDFLAGS "-framework Cocoa") + endif() + +endif() + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + if(ARCH STREQUAL "x86" OR ARCH STREQUAL "x86_64") + set(USE_INLINE_ASM_SOURCES TRUE) + endif() + + if(NOT MINGW) + list(APPEND SYS_SOURCES ${SYS_UNIX_SOURCES}) + endif() + +endif() + +if(USE_INLINE_ASM_SOURCES) + add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/internal_inline_asm") + list(APPEND SERVER_LIBRARIES ${INTERNAL_INLINE_ASM_LIBRARIES}) +endif() + +if(USE_MASM_SOURCES) + add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/internal_masm") + list(APPEND SERVER_LIBRARIES ${INTERNAL_MASM_LIBRARIES}) +endif() + +ADD_SERVER_DEFINITIONS(SERVER_DEFINITIONS) +ADD_SERVER_CFLAGS(SERVER_CFLAGS) +ADD_STRIP_LDFLAG(SERVER_LDFLAGS) + +if(CMAKE_C_COMPILER_ID MATCHES "Clang") + list(APPEND SERVER_CFLAGS "-Qunused-arguments") +endif() + +GET_VM_SOURCES(VM_SOURCES) +if(VM_SOURCES) + list(APPEND QCOMMON_SOURCES ${VM_SOURCES}) +else() + set(NO_VM_COMPILED TRUE) +endif() +if(NO_VM_COMPILED) + list(APPEND SERVER_DEFINITIONS "-DNO_VM_COMPILED") +endif() + +if(USE_GIT_REV AND GIT_REV) + list(APPEND SERVER_DEFINITIONS "-DPRODUCT_VERSION=\"${PRODUCT_VERSION}_GIT_${GIT_REV}\"") +else() + list(APPEND SERVER_DEFINITIONS "-DPRODUCT_VERSION=\"${PRODUCT_VERSION}\"") +endif() + +if(DEFINED ENV{SOURCE_DATE_EPOCH}) + if(NOT ${CMAKE_VERSION} VERSION_LESS "3.8.0") + string(TIMESTAMP PRODUCT_DATE "%b %d %Y" UTC) #Nov 28 2021 + list(APPEND SERVER_DEFINITIONS "-DPRODUCT_DATE=\"${PRODUCT_DATE}\"") + else() + message(WARNING "Update CMake to version 3.8 or later for SOURCE_DATE_EPOCH support!") + endif() +endif() + +if(USE_INTERNAL_ZLIB) + list(APPEND SERVER_DEFINITIONS "-DUSE_INTERNAL_ZLIB") + if(NOT DEFINED INTERNAL_ZLIB_LIBRARIES) + add_subdirectory("${CMAKELIST_DIR}/internal_zlib" "internal_zlib") + endif() + list(APPEND SERVER_DEFINITIONS ${INTERNAL_ZLIB_DEFINITIONS}) + list(APPEND SERVER_INCLUDE_DIRS ${INTERNAL_ZLIB_INCLUDE_DIRS}) + list(APPEND SERVER_LIBRARIES ${INTERNAL_ZLIB_LIBRARIES}) +else() + find_package(ZLIB REQUIRED) + list(APPEND SERVER_DEFINITIONS ${ZLIB_DEFINITIONS}) + list(APPEND SERVER_INCLUDE_DIRS ${ZLIB_INCLUDE_DIRS}) + list(APPEND SERVER_LIBRARIES ${ZLIB_LIBRARIES}) +endif(USE_INTERNAL_ZLIB) + +if(USE_FREETYPE) + find_package(Freetype REQUIRED) + if(DEFINED FREETYPE_VERSION AND NOT FREETYPE_VERSION STREQUAL "") + if(${FREETYPE_VERSION} VERSION_LESS 2) + message(FATAL_ERROR "The Freetype library version is ${FREETYPE_VERSION} but required is at least version 2.") + endif() + endif() + + list(APPEND SERVER_DEFINITIONS "-DBUILD_FREETYPE") + + list(APPEND SERVER_DEFINITIONS ${FREETYPE_DEFINITIONS}) + if(FREETYPE_INCLUDE_DIR) + list(APPEND SERVER_INCLUDE_DIRS "${FREETYPE_INCLUDE_DIR}") + endif(FREETYPE_INCLUDE_DIR) + list(APPEND SERVER_INCLUDE_DIRS ${FREETYPE_INCLUDE_DIRS}) + list(APPEND SERVER_LIBRARIES "${FREETYPE_LIBRARY}") + list(APPEND SERVER_LIBRARIES ${FREETYPE_LIBRARIES}) + +endif(USE_FREETYPE) + +list(APPEND SERVER_DEFINITIONS "-DBOTLIB") +list(APPEND SERVER_DEFINITIONS "-DDEDICATED") + +if(USE_ICON) + list(APPEND SERVER_DEFINITIONS "-DUSE_ICON") +endif(USE_ICON) + +if(BUILD_STANDALONE) + list(APPEND SERVER_DEFINITIONS "-DSTANDALONE") +endif(BUILD_STANDALONE) + +if(USE_LOCAL_HEADERS) + list(APPEND SERVER_DEFINITIONS "-DUSE_LOCAL_HEADERS") +endif(USE_LOCAL_HEADERS) + +if(DEFAULT_BASEDIR) + list(APPEND SERVER_DEFINITIONS "-DDEFAULT_BASEDIR=\"${DEFAULT_BASEDIR}\"") +endif(DEFAULT_BASEDIR) + +if(USE_VOIP) + list(APPEND SERVER_DEFINITIONS "-DUSE_VOIP") +endif(USE_VOIP) + +if(USE_AUTOUPDATER) + list(APPEND SERVER_DEFINITIONS "-DUSE_AUTOUPDATER") + if(NOT DEFINED AUTOUPDATER_BIN) + set(AUTOUPDATER_BIN, DEFAULT_AUTOUPDATER_BIN) + endif() + list(APPEND SERVER_DEFINITIONS "-DAUTOUPDATER_BIN=\"${AUTOUPDATER_BIN}\"") +endif(USE_AUTOUPDATER) + +list(APPEND SERVER_C_SOURCES ${NULL_SOURCES} ${SERVER_SOURCES} ${BOTLIB_SOURCES} ${QCOMMON_SOURCES} ${SYS_SOURCES}) +list(APPEND SERVER_C_HEADERS ${NULL_HEADERS} ${SERVER_HEADERS} ${BOTLIB_HEADERS} ${QCOMMON_HEADERS} ${SYS_HEADERS}) + +#IDE grouping +source_group("asm\\Source Files" FILES ${ASM_SOURCES}) +source_group("asm\\Header Files" FILES ${ASM_HEADERS}) +source_group("botlib\\Source Files" FILES ${BOTLIB_SOURCES}) +source_group("botlib\\Header Files" FILES ${BOTLIB_HEADERS}) +source_group("qcommon\\Source Files" FILES ${QCOMMON_SOURCES}) +source_group("qcommon\\Header Files" FILES ${QCOMMON_HEADERS}) +source_group("server\\Source Files" FILES ${SERVER_SOURCES}) +source_group("server\\Header Files" FILES ${SERVER_HEADERS}) +source_group("sys\\Source Files" FILES ${SYS_SOURCES}) +source_group("sys\\Header Files" FILES ${SYS_HEADERS}) +source_group("sys" FILES ${SYS_RC_SOURCES}) + +add_executable(${SERVER_TARGET} ${SERVER_C_SOURCES} ${SERVER_C_HEADERS} ${SYS_RC_SOURCES}) + +target_compile_definitions(${SERVER_TARGET} PRIVATE ${SERVER_DEFINITIONS}) + +target_include_directories(${SERVER_TARGET} PRIVATE ${SERVER_INCLUDE_DIRS}) + +compat_target_compile_options(${SERVER_TARGET} PRIVATE ${SERVER_CFLAGS}) + +target_link_libraries(${SERVER_TARGET} ${SERVER_LIBRARIES}) + +compat_target_link_options(${SERVER_TARGET} PRIVATE ${SERVER_LDFLAGS}) + +set_target_properties(${SERVER_TARGET} PROPERTIES RUNTIME_OUTPUT_NAME "${SERVER_BIN}${BIN_EXT}") + +STRIP_TARGET(${SERVER_TARGET}) + +set(DESTINATION_DIR "${REL_INSTALL_DEST}") +if(INSTALL_DIR) + set(DESTINATION_DIR "${INSTALL_DIR}") +endif(INSTALL_DIR) + +install(TARGETS ${SERVER_TARGET} + RUNTIME + DESTINATION "${DESTINATION_DIR}" + PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ + GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE + CONFIGURATIONS Release + COMPONENT server +) +include(CPack) diff --git a/misc/CMakeLists/server/internal_inline_asm/CMakeLists.txt b/misc/CMakeLists/server/internal_inline_asm/CMakeLists.txt new file mode 100644 index 0000000000..dbb652a653 --- /dev/null +++ b/misc/CMakeLists/server/internal_inline_asm/CMakeLists.txt @@ -0,0 +1,74 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("internal inline asm") + +set(INLINE_ASM_TARGET "internal_server_inline_asm") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/cflags.cmake") +include("${CMAKELIST_DIR}/include/compat.cmake") +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") +include("${CMAKELIST_DIR}/include/platform.cmake") + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + option(GENERATE_DEPENDENCIES "Preprocessing: Generate dependencies for make outputting" ${DEFAULT_GENERATE_DEPENDENCIES}) +endif() + +set(INLINE_ASM_SOURCES + "${ASM_DIR}/ftola.c" + "${ASM_DIR}/snapvector.c" +) +set(INLINE_ASM_HEADERS + "${ASM_DIR}/qasm.h" + "${ASM_DIR}/qasm-inline.h" +) + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") +# set(FLAGS "-msse4.1" "-msse4" "-msse3" "-msse2" "-msse" "-march=k8" "-march=pentium-m" "-march=pentium3") + # k8 so inline assembler knows about SSE + set(FLAGS "-march=k8" "-W") + + ADD_SUPPORTED_CFLAGS(FLAGS INLINE_ASM_CFLAGS) + +endif() + +#source_group("asm" FILES ${INLINE_ASM_SOURCES} ${INLINE_ASM_HEADERS}) +#source_group("asm\\Source Files" FILES ${INLINE_ASM_SOURCES}) +#source_group("asm\\Header Files" FILES ${INLINE_ASM_HEADERS}) + +add_library(${INLINE_ASM_TARGET} STATIC ${INLINE_ASM_SOURCES} ${INLINE_ASM_HEADERS}) + +target_compile_definitions(${INLINE_ASM_TARGET} PRIVATE ${INLINE_ASM_DEFINITIONS}) + +compat_target_compile_options(${INLINE_ASM_TARGET} PRIVATE ${INLINE_ASM_CFLAGS}) + +set(INTERNAL_INLINE_ASM_INCLUDE_DIRS "" PARENT_SCOPE) +set(INTERNAL_INLINE_ASM_DEFINITIONS "" PARENT_SCOPE) +set(INTERNAL_INLINE_ASM_LIBRARIES "${INLINE_ASM_TARGET}" PARENT_SCOPE) diff --git a/misc/CMakeLists/server/internal_masm/CMakeLists.txt b/misc/CMakeLists/server/internal_masm/CMakeLists.txt new file mode 100644 index 0000000000..c445649d40 --- /dev/null +++ b/misc/CMakeLists/server/internal_masm/CMakeLists.txt @@ -0,0 +1,68 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("internal masm") + +set(MASM_TARGET "internal_server_masm") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") +include("${CMAKELIST_DIR}/include/platform.cmake") + +#microsoft macro assembler files +set(MASM_SOURCES + "${ASM_DIR}/ftola.asm" + "${ASM_DIR}/snapvector.asm" +# "${ASM_DIR}/vm_x86_64.asm" +) +set(MASM_x86_64_SOURCES + "${ASM_DIR}/vm_x86_64.asm" +) + +if(ARCH STREQUAL "x86_64") + list(APPEND MASM_SOURCES ${MASM_x86_64_SOURCES}) +endif() + +#source_group("asm" FILES ${MASM_SOURCES} ${MASM_HEADERS}) +#source_group("asm\\Source Files" FILES ${MASM_SOURCES}) +#source_group("asm\\Header Files" FILES ${MASM_HEADERS}) + +enable_language(ASM_MASM) + +add_library(${MASM_TARGET} STATIC ${MASM_SOURCES}) + +target_compile_definitions(${MASM_TARGET} PRIVATE ${MASM_DEFINITIONS}) + +target_compile_options(${MASM_TARGET} PRIVATE ${MASM_CFLAGS}) + +set_target_properties(${MASM_TARGET} PROPERTIES LINKER_LANGUAGE C) + +set(INTERNAL_MASM_INCLUDE_DIRS "" PARENT_SCOPE) +set(INTERNAL_MASM_DEFINITIONS "" PARENT_SCOPE) +set(INTERNAL_MASM_LIBRARIES "${MASM_TARGET}" PARENT_SCOPE) diff --git a/misc/CMakeLists/tools/CMakeLists.txt b/misc/CMakeLists/tools/CMakeLists.txt new file mode 100644 index 0000000000..ca923bb56c --- /dev/null +++ b/misc/CMakeLists/tools/CMakeLists.txt @@ -0,0 +1,7 @@ +project("tools") + +add_subdirectory("lburg") +add_subdirectory("q3asm") +add_subdirectory("q3cpp") +add_subdirectory("q3lcc") +add_subdirectory("q3rcc") diff --git a/misc/CMakeLists/tools/lburg/CMakeLists.txt b/misc/CMakeLists/tools/lburg/CMakeLists.txt new file mode 100644 index 0000000000..b173b2ea54 --- /dev/null +++ b/misc/CMakeLists/tools/lburg/CMakeLists.txt @@ -0,0 +1,74 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("lburg") + +set(LBURG_TARGET "lburg" CACHE INTERNAL "Target name") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +set(LBURG_DIR "${SOURCE_DIR}/code/tools/lcc/lburg") + +include("${CMAKELIST_DIR}/include/cflags.cmake") +include("${CMAKELIST_DIR}/include/compat.cmake") +include("${CMAKELIST_DIR}/include/default_options.cmake") + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + option(GENERATE_DEPENDENCIES "Preprocessing: Generate dependencies for make outputting" ${DEFAULT_GENERATE_DEPENDENCIES}) +endif() +if(MSVC) + option(BUILD_STATIC_CRT "Build (static) multi-threaded C runtime library" ${DEFAULT_BUILD_STATIC_CRT}) +endif() + +set(LBURG_SOURCES + "${LBURG_DIR}/lburg.c" + "${LBURG_DIR}/gram.c" +) +set(LBURG_HEADERS + "${LBURG_DIR}/lburg.h" +) + +list(APPEND ${LBURG_DEFINITIONS} "$<$:-DYYDEBUG=1>") +list(APPEND ${LBURG_DEFINITIONS} "$<$:-DYYERROR_VERBOSE=1>") + +ADD_TOOLS_DEFINITIONS(LBURG_DEFINITIONS) +ADD_TOOLS_CFLAGS(LBURG_CFLAGS) + +#source_group("Source Files" FILES ${LBURG_SOURCES}) +#source_group("Header Files" FILES ${LBURG_HEADERS}) + +add_executable(${LBURG_TARGET} ${LBURG_SOURCES} ${LBURG_HEADERS}) + +target_compile_definitions(${LBURG_TARGET} PRIVATE ${LBURG_DEFINITIONS}) + +target_include_directories(${LBURG_TARGET} PRIVATE ${LBURG_INCLUDE_DIRS}) + +compat_target_compile_options(${LBURG_TARGET} PRIVATE ${LBURG_CFLAGS}) + +target_link_libraries(${LBURG_TARGET} ${LBURG_LIBRARIES}) + +compat_target_link_options(${LBURG_TARGET} PRIVATE ${LBURG_LDFLAGS}) diff --git a/misc/CMakeLists/tools/q3asm/CMakeLists.txt b/misc/CMakeLists/tools/q3asm/CMakeLists.txt new file mode 100644 index 0000000000..9881a57570 --- /dev/null +++ b/misc/CMakeLists/tools/q3asm/CMakeLists.txt @@ -0,0 +1,73 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("q3asm") + +set(Q3ASM_TARGET "q3asm" CACHE INTERNAL "Target name") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +set(Q3ASM_DIR "${SOURCE_DIR}/code/tools/asm") + +include("${CMAKELIST_DIR}/include/cflags.cmake") +include("${CMAKELIST_DIR}/include/compat.cmake") +include("${CMAKELIST_DIR}/include/default_options.cmake") + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + option(GENERATE_DEPENDENCIES "Preprocessing: Generate dependencies for make outputting" ${DEFAULT_GENERATE_DEPENDENCIES}) +endif() +if(MSVC) + option(BUILD_STATIC_CRT "Build (static) multi-threaded C runtime library" ${DEFAULT_BUILD_STATIC_CRT}) +endif() + +set(Q3ASM_SOURCES + "${Q3ASM_DIR}/cmdlib.c" + "${Q3ASM_DIR}/q3asm.c" +) +set(Q3ASM_HEADERS + "${Q3ASM_DIR}/cmdlib.h" + "${Q3ASM_DIR}/mathlib.h" + "${Q3ASM_DIR}/opstrings.h" +) + +ADD_TOOLS_DEFINITIONS(Q3ASM_DEFINITIONS) +ADD_TOOLS_CFLAGS(Q3ASM_CFLAGS) + +#source_group("Source Files" FILES ${Q3ASM_SOURCES}) +#source_group("Header Files" FILES ${Q3ASM_HEADERS}) + +add_executable(${Q3ASM_TARGET} ${Q3ASM_SOURCES} ${Q3ASM_HEADERS}) + +target_compile_definitions(${Q3ASM_TARGET} PRIVATE ${Q3ASM_DEFINITIONS}) + +target_include_directories(${Q3ASM_TARGET} PRIVATE ${Q3ASM_INCLUDE_DIRS}) + +target_compile_options(${Q3ASM_TARGET} PRIVATE ${Q3ASM_CFLAGS}) + +target_link_libraries(${Q3ASM_TARGET} ${Q3ASM_LIBRARIES}) + +compat_target_link_options(${Q3ASM_TARGET} PRIVATE ${Q3ASM_LDFLAGS}) diff --git a/misc/CMakeLists/tools/q3cpp/CMakeLists.txt b/misc/CMakeLists/tools/q3cpp/CMakeLists.txt new file mode 100644 index 0000000000..8ff1472dfb --- /dev/null +++ b/misc/CMakeLists/tools/q3cpp/CMakeLists.txt @@ -0,0 +1,87 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("q3cpp") + +set(Q3CPP_TARGET "q3cpp" CACHE INTERNAL "Target name") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +set(Q3CPP_DIR "${SOURCE_DIR}/code/tools/lcc/cpp") + +include("${CMAKELIST_DIR}/include/cflags.cmake") +include("${CMAKELIST_DIR}/include/compat.cmake") +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/platform.cmake") + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + option(GENERATE_DEPENDENCIES "Preprocessing: Generate dependencies for make outputting" ${DEFAULT_GENERATE_DEPENDENCIES}) +endif() +if(MSVC) + option(BUILD_STATIC_CRT "Build (static) multi-threaded C runtime library" ${DEFAULT_BUILD_STATIC_CRT}) +endif() + +set(Q3CPP_SOURCES + "${Q3CPP_DIR}/cpp.c" + "${Q3CPP_DIR}/lex.c" + "${Q3CPP_DIR}/nlist.c" + "${Q3CPP_DIR}/tokens.c" + "${Q3CPP_DIR}/macro.c" + "${Q3CPP_DIR}/eval.c" + "${Q3CPP_DIR}/include.c" + "${Q3CPP_DIR}/hideset.c" + "${Q3CPP_DIR}/getopt.c" + "${Q3CPP_DIR}/unix.c" +) +set(Q3CPP_HEADERS + "${Q3CPP_DIR}/cpp.h" +) + +if(PLATFORM STREQUAL "darwin" AND (CMAKE_COMPILER_IS_GNUCC + OR CMAKE_C_COMPILER_ID STREQUAL "Clang")) + #required to use the mac memmove function + list(APPEND Q3CPP_DEFINITIONS "-DMACOS_X") + +endif() + +ADD_TOOLS_DEFINITIONS(Q3CPP_DEFINITIONS) +ADD_TOOLS_CFLAGS(Q3CPP_CFLAGS) + +#source_group("Source Files" FILES ${Q3CPP_SOURCES}) +#source_group("Header Files" FILES ${Q3CPP_HEADERS}) + +add_executable(${Q3CPP_TARGET} ${Q3CPP_SOURCES} ${Q3CPP_HEADERS}) + +target_compile_definitions(${Q3CPP_TARGET} PRIVATE ${Q3CPP_DEFINITIONS}) + +target_include_directories(${Q3CPP_TARGET} PRIVATE ${Q3CPP_INCLUDE_DIRS}) + +compat_target_compile_options(${Q3CPP_TARGET} PRIVATE ${Q3CPP_CFLAGS}) + +target_link_libraries(${Q3CPP_TARGET} ${Q3CPP_LIBRARIES}) + +compat_target_link_options(${Q3CPP_TARGET} PRIVATE ${Q3CPP_LDFLAGS}) diff --git a/misc/CMakeLists/tools/q3lcc/CMakeLists.txt b/misc/CMakeLists/tools/q3lcc/CMakeLists.txt new file mode 100644 index 0000000000..097c2029d9 --- /dev/null +++ b/misc/CMakeLists/tools/q3lcc/CMakeLists.txt @@ -0,0 +1,85 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("q3lcc") + +set(Q3LCC_TARGET "q3lcc" CACHE INTERNAL "Target name") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +set(Q3LCCETC_DIR "${SOURCE_DIR}/code/tools/lcc/etc") + +include("${CMAKELIST_DIR}/include/cflags.cmake") +include("${CMAKELIST_DIR}/include/compat.cmake") +include("${CMAKELIST_DIR}/include/default_options.cmake") + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + option(GENERATE_DEPENDENCIES "Preprocessing: Generate dependencies for make outputting" ${DEFAULT_GENERATE_DEPENDENCIES}) +endif() +if(MSVC) + option(BUILD_STATIC_CRT "Build (static) multi-threaded C runtime library" ${DEFAULT_BUILD_STATIC_CRT}) +endif() + +set(DEFAULT_TEMP_DIR "$ENV{TMP}") +if(DEFAULT_TEMP_DIR STREQUAL "") + set(DEFAULT_TEMP_DIR "$ENV{TEMP}") + if(DEFAULT_TEMP_DIR STREQUAL "") + set(DEFAULT_TEMP_DIR "$ENV{TMPDIR}") + endif() +endif() +set(TEMP_DIR "${DEFAULT_TEMP_DIR}" CACHE PATH "Temporary directory") + +set(Q3LCC_SOURCES + "${Q3LCCETC_DIR}/lcc.c" + "${Q3LCCETC_DIR}/bytecode.c" +) +set(Q3LCC_HEADERS + +) + +if(TEMP_DIR) + string(REPLACE "\\" "\\\\" TEMP_DIR_C_STRING "${TEMP_DIR}") + list(APPEND Q3LCC_DEFINITIONS "-DTEMPDIR=\"${TEMP_DIR_C_STRING}\"") +endif() + +ADD_TOOLS_DEFINITIONS(Q3LCC_DEFINITIONS) +ADD_TOOLS_CFLAGS(Q3LCC_CFLAGS) + +#source_group("Source Files" FILES ${Q3LCC_SOURCES}) +#source_group("Header Files" FILES ${Q3LCC_HEADERS}) + +add_executable(${Q3LCC_TARGET} ${Q3LCC_SOURCES} ${Q3LCC_HEADERS}) + +target_compile_definitions(${Q3LCC_TARGET} PRIVATE ${Q3LCC_DEFINITIONS}) + +target_include_directories(${Q3LCC_TARGET} PRIVATE ${Q3LCC_INCLUDE_DIRS}) + +compat_target_compile_options(${Q3LCC_TARGET} PRIVATE ${Q3LCC_CFLAGS}) + +target_link_libraries(${Q3LCC_TARGET} ${Q3LCC_LIBRARIES}) + +compat_target_link_options(${Q3LCC_TARGET} PRIVATE ${Q3LCC_LDFLAGS}) diff --git a/misc/CMakeLists/tools/q3rcc/CMakeLists.txt b/misc/CMakeLists/tools/q3rcc/CMakeLists.txt new file mode 100644 index 0000000000..ab00039aab --- /dev/null +++ b/misc/CMakeLists/tools/q3rcc/CMakeLists.txt @@ -0,0 +1,118 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("q3rcc") + +set(Q3RCC_TARGET "q3rcc" CACHE INTERNAL "Target name") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +set(Q3RCC_DIR "${SOURCE_DIR}/code/tools/lcc/src") + +include("${CMAKELIST_DIR}/include/cflags.cmake") +include("${CMAKELIST_DIR}/include/compat.cmake") +include("${CMAKELIST_DIR}/include/default_options.cmake") + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + option(GENERATE_DEPENDENCIES "Preprocessing: Generate dependencies for make outputting" ${DEFAULT_GENERATE_DEPENDENCIES}) +endif() +if(MSVC) + option(BUILD_STATIC_CRT "Build (static) multi-threaded C runtime library" ${DEFAULT_BUILD_STATIC_CRT}) +endif() + +set(DAG_FILE "${CMAKE_CURRENT_BINARY_DIR}/dagcheck.c") + +set(Q3RCC_SOURCES + "${Q3RCC_DIR}/alloc.c" + "${Q3RCC_DIR}/bind.c" + "${Q3RCC_DIR}/bytecode.c" + "${Q3RCC_DIR}/dag.c" +# "${Q3RCC_DIR}/dagcheck.c" + "${DAG_FILE}" + "${Q3RCC_DIR}/decl.c" + "${Q3RCC_DIR}/enode.c" + "${Q3RCC_DIR}/error.c" + "${Q3RCC_DIR}/event.c" + "${Q3RCC_DIR}/expr.c" + "${Q3RCC_DIR}/gen.c" + "${Q3RCC_DIR}/init.c" + "${Q3RCC_DIR}/inits.c" + "${Q3RCC_DIR}/input.c" + "${Q3RCC_DIR}/lex.c" + "${Q3RCC_DIR}/list.c" + "${Q3RCC_DIR}/main.c" + "${Q3RCC_DIR}/null.c" + "${Q3RCC_DIR}/output.c" + "${Q3RCC_DIR}/prof.c" + "${Q3RCC_DIR}/profio.c" + "${Q3RCC_DIR}/simp.c" + "${Q3RCC_DIR}/stmt.c" + "${Q3RCC_DIR}/string.c" + "${Q3RCC_DIR}/sym.c" + "${Q3RCC_DIR}/symbolic.c" + "${Q3RCC_DIR}/trace.c" + "${Q3RCC_DIR}/tree.c" + "${Q3RCC_DIR}/types.c" + +) +set(Q3RCC_HEADERS + "${Q3RCC_DIR}/config.h" + "${Q3RCC_DIR}/token.h" + "${Q3RCC_DIR}/c.h" +) + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + set_source_files_properties("${DAG_FILE}" PROPERTIES COMPILE_FLAGS "-Wno-unused") + +endif() + +ADD_TOOLS_DEFINITIONS(Q3RCC_DEFINITIONS) +ADD_TOOLS_CFLAGS(Q3RCC_CFLAGS) + +#dagcheck.c requires c.h +list(APPEND Q3RCC_INCLUDE_DIRS "${Q3RCC_DIR}") + +source_group("Source Files" FILES ${Q3RCC_SOURCES}) +source_group("Header Files" FILES ${Q3RCC_HEADERS}) + +add_executable(${Q3RCC_TARGET} ${Q3RCC_SOURCES} ${Q3RCC_HEADERS}) + +target_compile_definitions(${Q3RCC_TARGET} PRIVATE ${Q3RCC_DEFINITIONS}) + +target_include_directories(${Q3RCC_TARGET} PRIVATE ${Q3RCC_INCLUDE_DIRS}) + +compat_target_compile_options(${Q3RCC_TARGET} PRIVATE ${Q3RCC_CFLAGS}) + +target_link_libraries(${Q3RCC_TARGET} ${Q3RCC_LIBRARIES}) + +compat_target_link_options(${Q3RCC_TARGET} PRIVATE ${Q3RCC_LDFLAGS}) + +add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/dagcheck.c" + COMMAND "$" + ARGS "${Q3RCC_DIR}/dagcheck.md" "${DAG_FILE}" + DEPENDS "${Q3RCC_DIR}/dagcheck.md" "${LBURG_TARGET}" +) diff --git a/misc/CMakeLists/vm/CMakeLists.txt b/misc/CMakeLists/vm/CMakeLists.txt new file mode 100644 index 0000000000..f0b9f25663 --- /dev/null +++ b/misc/CMakeLists/vm/CMakeLists.txt @@ -0,0 +1,14 @@ +project("vm") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/default_options.cmake") + +set(BASEGAME "${DEFAULT_BASEGAME}" CACHE STRING "Directory for the base game") +set(MISSIONPACK "${DEFAULT_MISSIONPACK}" CACHE STRING "Directory for the missionpack") + +add_subdirectory("${BASEGAME}") +add_subdirectory("${MISSIONPACK}") diff --git a/misc/CMakeLists/vm/baseq3/CMakeLists.txt b/misc/CMakeLists/vm/baseq3/CMakeLists.txt new file mode 100644 index 0000000000..0a2de0b7cb --- /dev/null +++ b/misc/CMakeLists/vm/baseq3/CMakeLists.txt @@ -0,0 +1,25 @@ +project("basegame vm") + +add_subdirectory("cgame") +add_subdirectory("game") +add_subdirectory("ui") + +if(NOT ${CMAKE_VERSION} VERSION_LESS "3.3.0") + + set(BASE_DIR "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/basegame") + set(PK3_FILENAME "basegame_vm.pk3") + set(PK3_FILE "${BASE_DIR}/${PK3_FILENAME}") + + add_custom_target(dist_basegame_vm + COMMAND ${CMAKE_COMMAND} -E chdir "${BASE_DIR}" + tar "cfv" "${PK3_FILE}" --format=zip + "vm/$" + "vm/$" + "vm/$" + DEPENDS ${BASE_CGAME_VM_TARGET} + ${BASE_GAME_VM_TARGET} + ${BASE_UI_VM_TARGET} + COMMENT ${PK3_FILE} + ) + +endif() diff --git a/misc/CMakeLists/vm/baseq3/cgame/CMakeLists.txt b/misc/CMakeLists/vm/baseq3/cgame/CMakeLists.txt new file mode 100644 index 0000000000..686eb19939 --- /dev/null +++ b/misc/CMakeLists/vm/baseq3/cgame/CMakeLists.txt @@ -0,0 +1,148 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("basegame cgame vm") + +set(BASE_CGAME_VM_TARGET "basegame_cgame_vm" CACHE INTERNAL "Target name") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/cflags.cmake") +include("${CMAKELIST_DIR}/include/compat.cmake") +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") +include("${CMAKELIST_DIR}/include/strip.cmake") +include("${CMAKELIST_DIR}/include/platform.cmake") + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + option(GENERATE_DEPENDENCIES "Preprocessing: Generate dependencies for make outputting" ${DEFAULT_GENERATE_DEPENDENCIES}) +endif() +option(NO_STRIP "No strip (keep all symbol table and relocation information)" ${DEFAULT_NO_STRIP}) +if(MSVC) + option(BUILD_STATIC_CRT "Build (static) multi-threaded C runtime library" ${DEFAULT_BUILD_STATIC_CRT}) +endif() + +set(BASEGAME_VM_INSTALL_DIR "${DEFAULT_BASEGAME_VM_INSTALL_DIR}" CACHE PATH "Basegame VM Installation directory") + +set(CGAME_SOURCES + "${CGAME_DIR}/cg_consolecmds.c" + "${CGAME_DIR}/cg_draw.c" + "${CGAME_DIR}/cg_drawtools.c" + "${CGAME_DIR}/cg_effects.c" + "${CGAME_DIR}/cg_ents.c" + "${CGAME_DIR}/cg_event.c" + "${CGAME_DIR}/cg_info.c" + "${CGAME_DIR}/cg_localents.c" + "${CGAME_DIR}/cg_main.c" + "${CGAME_DIR}/cg_marks.c" + "${CGAME_DIR}/cg_particles.c" + "${CGAME_DIR}/cg_players.c" + "${CGAME_DIR}/cg_playerstate.c" + "${CGAME_DIR}/cg_predict.c" + "${CGAME_DIR}/cg_scoreboard.c" + "${CGAME_DIR}/cg_servercmds.c" + "${CGAME_DIR}/cg_snapshot.c" + "${CGAME_DIR}/cg_view.c" + "${CGAME_DIR}/cg_weapons.c" + + "${CGAME_DIR}/cg_syscalls.c" +) +set(CGAME_HEADERS + "${CGAME_DIR}/cg_local.h" + "${CGAME_DIR}/cg_public.h" +) +set(GAME_SOURCES + "${GAME_DIR}/bg_misc.c" + "${GAME_DIR}/bg_pmove.c" + "${GAME_DIR}/bg_slidemove.c" + "${GAME_DIR}/bg_lib.c" +) +set(GAME_HEADERS + "${GAME_DIR}/bg_local.h" + "${GAME_DIR}/bg_public.h" + "${GAME_DIR}/bg_lib.h" +) +set(QCOMMON_SOURCES + "${QCOMMON_DIR}/q_math.c" + "${QCOMMON_DIR}/q_shared.c" +) +set(QCOMMON_HEADERS + "${QCOMMON_DIR}/q_shared.h" +) + +ADD_VM_DEFINITIONS(CGAME_DEFINITIONS) +ADD_VM_CFLAGS(CGAME_CFLAGS) +ADD_STRIP_LDFLAG(CGAME_LDFLAGS) + +list(APPEND CGAME_DEFINITIONS "-DCGAME") + +list(APPEND CGAME_C_SOURCES ${CGAME_SOURCES} ${GAME_SOURCES} ${QCOMMON_SOURCES}) +list(APPEND CGAME_C_HEADERS ${CGAME_HEADERS} ${GAME_HEADERS} ${QCOMMON_HEADERS}) + +source_group("cgame\\Source Files" FILES ${CGAME_SOURCES}) +source_group("cgame\\Header Files" FILES ${CGAME_HEADERS}) +source_group("game\\Source Files" FILES ${GAME_SOURCES}) +source_group("game\\Header Files" FILES ${GAME_HEADERS}) +source_group("qcommon\\Source Files" FILES ${QCOMMON_SOURCES}) +source_group("qcommon\\Header Files" FILES ${QCOMMON_HEADERS}) + +add_library(${BASE_CGAME_VM_TARGET} MODULE ${CGAME_C_SOURCES} ${CGAME_C_HEADERS}) + +target_compile_definitions(${BASE_CGAME_VM_TARGET} PRIVATE ${CGAME_DEFINITIONS}) + +target_include_directories(${BASE_CGAME_VM_TARGET} PRIVATE ${CGAME_INCLUDE_DIRS}) + +compat_target_compile_options(${BASE_CGAME_VM_TARGET} PRIVATE ${CGAME_CFLAGS}) + +target_link_libraries(${BASE_CGAME_VM_TARGET} ${CGAME_LIBRARIES}) + +compat_target_link_options(${BASE_CGAME_VM_TARGET} PRIVATE ${CGAME_LDFLAGS}) + +#no lib prefix, libcgame -> cgame +set_target_properties(${BASE_CGAME_VM_TARGET} PROPERTIES PREFIX "") +set_target_properties(${BASE_CGAME_VM_TARGET} PROPERTIES LIBRARY_OUTPUT_NAME "cgame${ARCH}") +set_target_properties(${BASE_CGAME_VM_TARGET} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/basegame/vm") + +STRIP_TARGET(${BASE_CGAME_VM_TARGET}) + +set(DESTIONATION_DIR) +if(BASEGAME_VM_INSTALL_DIR) + set(DESTIONATION_DIR "${BASEGAME_VM_INSTALL_DIR}") +endif(BASEGAME_VM_INSTALL_DIR) + +if(DESTIONATION_DIR) + install(TARGETS ${BASE_CGAME_VM_TARGET} + DESTINATION "${DESTIONATION_DIR}" + PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ + GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE + CONFIGURATIONS Release + COMPONENT missionpack_vm + ) +endif(DESTIONATION_DIR) + + +include(CPack) diff --git a/misc/CMakeLists/vm/baseq3/game/CMakeLists.txt b/misc/CMakeLists/vm/baseq3/game/CMakeLists.txt new file mode 100644 index 0000000000..78ae52f51d --- /dev/null +++ b/misc/CMakeLists/vm/baseq3/game/CMakeLists.txt @@ -0,0 +1,212 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("basegame game vm") + +set(BASE_GAME_VM_TARGET "basegame_game_vm" CACHE INTERNAL "Target name") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/cflags.cmake") +include("${CMAKELIST_DIR}/include/compat.cmake") +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") +include("${CMAKELIST_DIR}/include/strip.cmake") +include("${CMAKELIST_DIR}/include/platform.cmake") + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + option(GENERATE_DEPENDENCIES "Preprocessing: Generate dependencies for make outputting" ${DEFAULT_GENERATE_DEPENDENCIES}) +endif() +option(NO_STRIP "No strip (keep all symbol table and relocation information)" ${DEFAULT_NO_STRIP}) +if(MSVC) + option(BUILD_STATIC_CRT "Build (static) multi-threaded C runtime library" ${DEFAULT_BUILD_STATIC_CRT}) +endif() + +set(BASEGAME_VM_INSTALL_DIR "${DEFAULT_BASEGAME_VM_INSTALL_DIR}" CACHE PATH "Basegame VM Installation directory") + +set(BOTLIB_HEADERS + "${BOTLIB_DIR}/aasfile.h" + "${BOTLIB_DIR}/be_aas.h" + "${BOTLIB_DIR}/be_aas_bsp.h" + "${BOTLIB_DIR}/be_aas_cluster.h" + "${BOTLIB_DIR}/be_aas_debug.h" + "${BOTLIB_DIR}/be_aas_def.h" + "${BOTLIB_DIR}/be_aas_entity.h" + "${BOTLIB_DIR}/be_aas_file.h" + "${BOTLIB_DIR}/be_aas_funcs.h" + "${BOTLIB_DIR}/be_aas_main.h" + "${BOTLIB_DIR}/be_aas_move.h" + "${BOTLIB_DIR}/be_aas_optimize.h" + "${BOTLIB_DIR}/be_aas_reach.h" + "${BOTLIB_DIR}/be_aas_route.h" + "${BOTLIB_DIR}/be_aas_routealt.h" + "${BOTLIB_DIR}/be_aas_sample.h" + "${BOTLIB_DIR}/be_ai_char.h" + "${BOTLIB_DIR}/be_ai_chat.h" + "${BOTLIB_DIR}/be_ai_gen.h" + "${BOTLIB_DIR}/be_ai_goal.h" + "${BOTLIB_DIR}/be_ai_move.h" + "${BOTLIB_DIR}/be_ai_weap.h" + "${BOTLIB_DIR}/be_ai_weight.h" + "${BOTLIB_DIR}/be_ea.h" + "${BOTLIB_DIR}/be_interface.h" + "${BOTLIB_DIR}/botlib.h" + "${BOTLIB_DIR}/l_crc.h" + "${BOTLIB_DIR}/l_libvar.h" + "${BOTLIB_DIR}/l_log.h" + "${BOTLIB_DIR}/l_memory.h" + "${BOTLIB_DIR}/l_precomp.h" + "${BOTLIB_DIR}/l_script.h" + "${BOTLIB_DIR}/l_struct.h" + "${BOTLIB_DIR}/l_utils.h" +) +set(GAME_SOURCES + "${GAME_DIR}/ai_chat.c" + "${GAME_DIR}/ai_cmd.c" + "${GAME_DIR}/ai_dmnet.c" + "${GAME_DIR}/ai_dmq3.c" + "${GAME_DIR}/ai_main.c" + "${GAME_DIR}/ai_team.c" + "${GAME_DIR}/ai_vcmd.c" + + "${GAME_DIR}/bg_misc.c" + "${GAME_DIR}/bg_pmove.c" + "${GAME_DIR}/bg_slidemove.c" + "${GAME_DIR}/bg_lib.c" + + "${GAME_DIR}/g_active.c" + "${GAME_DIR}/g_arenas.c" + "${GAME_DIR}/g_bot.c" + "${GAME_DIR}/g_client.c" + "${GAME_DIR}/g_cmds.c" + "${GAME_DIR}/g_combat.c" + "${GAME_DIR}/g_items.c" + "${GAME_DIR}/g_main.c" + "${GAME_DIR}/g_mem.c" + "${GAME_DIR}/g_misc.c" + "${GAME_DIR}/g_missile.c" + "${GAME_DIR}/g_mover.c" + "${GAME_DIR}/g_session.c" + "${GAME_DIR}/g_spawn.c" + "${GAME_DIR}/g_svcmds.c" + "${GAME_DIR}/g_target.c" + "${GAME_DIR}/g_team.c" + "${GAME_DIR}/g_trigger.c" + "${GAME_DIR}/g_utils.c" + "${GAME_DIR}/g_weapon.c" + + "${GAME_DIR}/g_syscalls.c" +) +set(GAME_HEADERS + "${GAME_DIR}/ai_chat.h" + "${GAME_DIR}/ai_cmd.h" + "${GAME_DIR}/ai_dmnet.h" + "${GAME_DIR}/ai_dmq3.h" + "${GAME_DIR}/ai_main.h" + "${GAME_DIR}/ai_team.h" + "${GAME_DIR}/ai_vcmd.h" + "${GAME_DIR}/chars.h" + "${GAME_DIR}/inv.h" + "${GAME_DIR}/match.h" + "${GAME_DIR}/syn.h" + + "${GAME_DIR}/bg_local.h" + "${GAME_DIR}/bg_public.h" + "${GAME_DIR}/bg_lib.h" + + "${GAME_DIR}/g_local.h" + "${GAME_DIR}/g_public.h" + + "${GAME_DIR}/g_team.h" + +) +set(QCOMMON_SOURCES + "${QCOMMON_DIR}/q_math.c" + "${QCOMMON_DIR}/q_shared.c" +) +set(QCOMMON_HEADERS + "${QCOMMON_DIR}/q_shared.h" +) + +ADD_VM_DEFINITIONS(GAME_DEFINITIONS) +ADD_VM_CFLAGS(GAME_CFLAGS) +ADD_STRIP_LDFLAG(GAME_LDFLAGS) + +list(APPEND GAME_DEFINITIONS "-DQAGAME") + +if(DEFINED ENV{SOURCE_DATE_EPOCH}) + if(NOT ${CMAKE_VERSION} VERSION_LESS "3.8.0") + string(TIMESTAMP PRODUCT_DATE "%b %d %Y" UTC) #Nov 28 2021 + list(APPEND GAME_DEFINITIONS "-DPRODUCT_DATE=\"${PRODUCT_DATE}\"") + else() + message(WARNING "Update CMake to version 3.8 or later for SOURCE_DATE_EPOCH support!") + endif() +endif() + +list(APPEND GAME_C_SOURCES ${GAME_SOURCES} ${QCOMMON_SOURCES}) +list(APPEND GAME_C_HEADERS ${GAME_HEADERS} ${QCOMMON_HEADERS} ${BOTLIB_HEADERS}) + +source_group("botlib\\Header Files" FILES ${BOTLIB_HEADERS}) +source_group("game\\Source Files" FILES ${GAME_SOURCES}) +source_group("game\\Header Files" FILES ${GAME_HEADERS}) +source_group("qcommon\\Source Files" FILES ${QCOMMON_SOURCES}) +source_group("qcommon\\Header Files" FILES ${QCOMMON_HEADERS}) + +add_library(${BASE_GAME_VM_TARGET} MODULE ${GAME_C_SOURCES} ${GAME_C_HEADERS}) + +target_compile_definitions(${BASE_GAME_VM_TARGET} PRIVATE ${GAME_DEFINITIONS}) + +target_include_directories(${BASE_GAME_VM_TARGET} PRIVATE ${GAME_INCLUDE_DIRS}) + +compat_target_compile_options(${BASE_GAME_VM_TARGET} PRIVATE ${GAME_CFLAGS}) + +target_link_libraries(${BASE_GAME_VM_TARGET} ${GAME_LIBRARIES}) + +compat_target_link_options(${BASE_GAME_VM_TARGET} PRIVATE ${GAME_LDFLAGS}) + +set_target_properties(${BASE_GAME_VM_TARGET} PROPERTIES PREFIX "") +set_target_properties(${BASE_GAME_VM_TARGET} PROPERTIES LIBRARY_OUTPUT_NAME "qagame${ARCH}") +set_target_properties(${BASE_GAME_VM_TARGET} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/basegame/vm") + +STRIP_TARGET(${BASE_GAME_VM_TARGET}) + +set(DESTIONATION_DIR) +if(BASEGAME_VM_INSTALL_DIR) + set(DESTIONATION_DIR "${BASEGAME_VM_INSTALL_DIR}") +endif(BASEGAME_VM_INSTALL_DIR) + +if(DESTIONATION_DIR) + install(TARGETS ${BASE_GAME_VM_TARGET} + DESTINATION "${DESTIONATION_DIR}" + PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ + GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE + CONFIGURATIONS Release + COMPONENT missionpack_vm + ) +endif(DESTIONATION_DIR) + +include(CPack) diff --git a/misc/CMakeLists/vm/baseq3/ui/CMakeLists.txt b/misc/CMakeLists/vm/baseq3/ui/CMakeLists.txt new file mode 100644 index 0000000000..13d6f44dd7 --- /dev/null +++ b/misc/CMakeLists/vm/baseq3/ui/CMakeLists.txt @@ -0,0 +1,171 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("basegame ui vm") + +set(BASE_UI_VM_TARGET "basegame_ui_vm" CACHE INTERNAL "Target name") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/cflags.cmake") +include("${CMAKELIST_DIR}/include/compat.cmake") +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") +include("${CMAKELIST_DIR}/include/strip.cmake") +include("${CMAKELIST_DIR}/include/platform.cmake") + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + option(GENERATE_DEPENDENCIES "Preprocessing: Generate dependencies for make outputting" ${DEFAULT_GENERATE_DEPENDENCIES}) +endif() +option(NO_STRIP "No strip (keep all symbol table and relocation information)" ${DEFAULT_NO_STRIP}) +if(MSVC) + option(BUILD_STATIC_CRT "Build (static) multi-threaded C runtime library" ${DEFAULT_BUILD_STATIC_CRT}) +endif() + +set(BASEGAME_VM_INSTALL_DIR "${DEFAULT_BASEGAME_VM_INSTALL_DIR}" CACHE PATH "Basegame VM Installation directory") + +set(GAME_SOURCES + "${GAME_DIR}/bg_misc.c" + "${GAME_DIR}/bg_lib.c" +) +set(GAME_HEADERS + "${GAME_DIR}/bg_local.h" + "${GAME_DIR}/bg_public.h" + "${GAME_DIR}/bg_lib.h" +) +set(Q3_UI_SOURCES + "${Q3_UI_DIR}/ui_addbots.c" + "${Q3_UI_DIR}/ui_atoms.c" + "${Q3_UI_DIR}/ui_cdkey.c" + "${Q3_UI_DIR}/ui_cinematics.c" + "${Q3_UI_DIR}/ui_confirm.c" + "${Q3_UI_DIR}/ui_connect.c" + "${Q3_UI_DIR}/ui_controls2.c" + "${Q3_UI_DIR}/ui_credits.c" + "${Q3_UI_DIR}/ui_demo2.c" + "${Q3_UI_DIR}/ui_display.c" + "${Q3_UI_DIR}/ui_gameinfo.c" + "${Q3_UI_DIR}/ui_ingame.c" + "${Q3_UI_DIR}/ui_loadconfig.c" + "${Q3_UI_DIR}/ui_main.c" + "${Q3_UI_DIR}/ui_menu.c" + "${Q3_UI_DIR}/ui_mfield.c" + "${Q3_UI_DIR}/ui_mods.c" + "${Q3_UI_DIR}/ui_network.c" + "${Q3_UI_DIR}/ui_options.c" + "${Q3_UI_DIR}/ui_playermodel.c" + "${Q3_UI_DIR}/ui_players.c" + "${Q3_UI_DIR}/ui_playersettings.c" + "${Q3_UI_DIR}/ui_preferences.c" + "${Q3_UI_DIR}/ui_qmenu.c" + "${Q3_UI_DIR}/ui_removebots.c" + "${Q3_UI_DIR}/ui_saveconfig.c" + "${Q3_UI_DIR}/ui_serverinfo.c" + "${Q3_UI_DIR}/ui_servers2.c" + "${Q3_UI_DIR}/ui_setup.c" + "${Q3_UI_DIR}/ui_sound.c" + "${Q3_UI_DIR}/ui_sparena.c" + "${Q3_UI_DIR}/ui_specifyserver.c" + "${Q3_UI_DIR}/ui_splevel.c" + "${Q3_UI_DIR}/ui_sppostgame.c" + "${Q3_UI_DIR}/ui_spskill.c" + "${Q3_UI_DIR}/ui_startserver.c" + "${Q3_UI_DIR}/ui_team.c" + "${Q3_UI_DIR}/ui_teamorders.c" + "${Q3_UI_DIR}/ui_video.c" + +) +set(Q3_UI_HEADERS + "${Q3_UI_DIR}/ui_local.h" + +) +set(QCOMMON_SOURCES + "${QCOMMON_DIR}/q_math.c" + "${QCOMMON_DIR}/q_shared.c" +) +set(QCOMMON_HEADERS + "${QCOMMON_DIR}/q_shared.h" +) +set(UI_SOURCES + "${UI_DIR}/ui_syscalls.c" +) +set(UI_HEADERS + +) + +ADD_VM_DEFINITIONS(UI_DEFINITIONS) +ADD_VM_CFLAGS(UI_CFLAGS) +ADD_STRIP_LDFLAG(UI_LDFLAGS) + +list(APPEND UI_DEFINITIONS "-DUI") + +list(APPEND UI_C_SOURCES ${Q3_UI_SOURCES} ${UI_SOURCES} ${GAME_SOURCES} ${QCOMMON_SOURCES}) +list(APPEND UI_C_HEADERS ${Q3_UI_HEADERS} ${UI_HEADERS} ${GAME_HEADERS} ${QCOMMON_HEADERS}) + +source_group("game\\Source Files" FILES ${GAME_SOURCES}) +source_group("game\\Header Files" FILES ${GAME_HEADERS}) +source_group("q3_ui\\Source Files" FILES ${Q3_UI_SOURCES}) +source_group("q3_ui\\Header Files" FILES ${Q3_UI_HEADERS}) +source_group("qcommon\\Source Files" FILES ${QCOMMON_SOURCES}) +source_group("qcommon\\Header Files" FILES ${QCOMMON_HEADERS}) +source_group("ui\\Source Files" FILES ${UI_SOURCES}) +source_group("ui\\Header Files" FILES ${UI_HEADERS}) + +add_library(${BASE_UI_VM_TARGET} MODULE ${UI_C_SOURCES} ${UI_C_HEADERS}) + +target_compile_definitions(${BASE_UI_VM_TARGET} PRIVATE ${UI_DEFINITIONS}) + +target_include_directories(${BASE_UI_VM_TARGET} PRIVATE ${UI_INCLUDE_DIRS}) + +compat_target_compile_options(${BASE_UI_VM_TARGET} PRIVATE ${UI_CFLAGS}) + +target_link_libraries(${BASE_UI_VM_TARGET} ${UI_LIBRARIES}) + +compat_target_link_options(${BASE_UI_VM_TARGET} PRIVATE ${UI_LDFLAGS}) + +set_target_properties(${BASE_UI_VM_TARGET} PROPERTIES PREFIX "") +set_target_properties(${BASE_UI_VM_TARGET} PROPERTIES LIBRARY_OUTPUT_NAME "ui${ARCH}") +set_target_properties(${BASE_UI_VM_TARGET} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/basegame/vm") + +STRIP_TARGET(${BASE_UI_VM_TARGET}) + +set(DESTIONATION_DIR) +if(BASEGAME_VM_INSTALL_DIR) + set(DESTIONATION_DIR "${BASEGAME_VM_INSTALL_DIR}") +endif(BASEGAME_VM_INSTALL_DIR) + +if(DESTIONATION_DIR) + install(TARGETS ${BASE_UI_VM_TARGET} + DESTINATION "${DESTIONATION_DIR}" + PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ + GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE + CONFIGURATIONS Release + COMPONENT missionpack_vm + ) +endif(DESTIONATION_DIR) + +include(CPack) diff --git a/misc/CMakeLists/vm/missionpack/CMakeLists.txt b/misc/CMakeLists/vm/missionpack/CMakeLists.txt new file mode 100644 index 0000000000..b6e522eee5 --- /dev/null +++ b/misc/CMakeLists/vm/missionpack/CMakeLists.txt @@ -0,0 +1,25 @@ +project("missionpack vm") + +add_subdirectory("cgame") +add_subdirectory("game") +add_subdirectory("ui") + +if(NOT ${CMAKE_VERSION} VERSION_LESS "3.3.0") + + set(MISSION_DIR "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/missionpack") + set(PK3_FILENAME "missionpack_vm.pk3") + set(PK3_FILE "${MISSION_DIR}/${PK3_FILENAME}") + + add_custom_target(dist_missionpack_vm + COMMAND ${CMAKE_COMMAND} -E chdir "${MISSION_DIR}" + tar "cfv" "${PK3_FILE}" --format=zip + "vm/$" + "vm/$" + "vm/$" + DEPENDS ${MISSION_CGAME_VM_TARGET} + ${MISSION_GAME_VM_TARGET} + ${MISSION_UI_VM_TARGET} + COMMENT ${PK3_FILE} + ) + +endif() diff --git a/misc/CMakeLists/vm/missionpack/cgame/CMakeLists.txt b/misc/CMakeLists/vm/missionpack/cgame/CMakeLists.txt new file mode 100644 index 0000000000..82063be7f6 --- /dev/null +++ b/misc/CMakeLists/vm/missionpack/cgame/CMakeLists.txt @@ -0,0 +1,157 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("missionpack cgame vm") + +set(MISSION_CGAME_VM_TARGET "missionpack_cgame_vm" CACHE INTERNAL "Target name") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/cflags.cmake") +include("${CMAKELIST_DIR}/include/compat.cmake") +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") +include("${CMAKELIST_DIR}/include/strip.cmake") +include("${CMAKELIST_DIR}/include/platform.cmake") + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + option(GENERATE_DEPENDENCIES "Preprocessing: Generate dependencies for make outputting" ${DEFAULT_GENERATE_DEPENDENCIES}) +endif() +option(NO_STRIP "No strip (keep all symbol table and relocation information)" ${DEFAULT_NO_STRIP}) +if(MSVC) + option(BUILD_STATIC_CRT "Build (static) multi-threaded C runtime library" ${DEFAULT_BUILD_STATIC_CRT}) +endif() + +set(MISSIONPACK_VM_INSTALL_DIR "${DEFAULT_MISSIONPACK_VM_INSTALL_DIR}" CACHE PATH "Missionpack VM Installation directory") + +set(CGAME_SOURCES + "${CGAME_DIR}/cg_consolecmds.c" + "${CGAME_DIR}/cg_draw.c" + "${CGAME_DIR}/cg_drawtools.c" + "${CGAME_DIR}/cg_effects.c" + "${CGAME_DIR}/cg_ents.c" + "${CGAME_DIR}/cg_event.c" + "${CGAME_DIR}/cg_info.c" + "${CGAME_DIR}/cg_localents.c" + "${CGAME_DIR}/cg_main.c" + "${CGAME_DIR}/cg_marks.c" + "${CGAME_DIR}/cg_newdraw.c" + "${CGAME_DIR}/cg_particles.c" + "${CGAME_DIR}/cg_players.c" + "${CGAME_DIR}/cg_playerstate.c" + "${CGAME_DIR}/cg_predict.c" + "${CGAME_DIR}/cg_scoreboard.c" + "${CGAME_DIR}/cg_servercmds.c" + "${CGAME_DIR}/cg_snapshot.c" + "${CGAME_DIR}/cg_view.c" + "${CGAME_DIR}/cg_weapons.c" + + "${CGAME_DIR}/cg_syscalls.c" +) +set(CGAME_HEADERS + "${CGAME_DIR}/cg_local.h" + "${CGAME_DIR}/cg_public.h" +) +set(GAME_SOURCES + "${GAME_DIR}/bg_misc.c" + "${GAME_DIR}/bg_pmove.c" + "${GAME_DIR}/bg_slidemove.c" + "${GAME_DIR}/bg_lib.c" +) +set(GAME_HEADERS + "${GAME_DIR}/bg_local.h" + "${GAME_DIR}/bg_public.h" + "${GAME_DIR}/bg_lib.h" +) +set(UI_SOURCES + "${UI_DIR}/ui_shared.c" +) +set(UI_HEADERS + "${UI_DIR}/ui_shared.h" +) +set(QCOMMON_SOURCES + "${QCOMMON_DIR}/q_math.c" + "${QCOMMON_DIR}/q_shared.c" +) +set(QCOMMON_HEADERS + "${QCOMMON_DIR}/q_shared.h" +) + +ADD_VM_DEFINITIONS(CGAME_DEFINITIONS) +ADD_VM_CFLAGS(CGAME_CFLAGS) +ADD_STRIP_LDFLAG(CGAME_LDFLAGS) + +list(APPEND CGAME_DEFINITIONS "-DCGAME") +list(APPEND CGAME_DEFINITIONS "-DMISSIONPACK") + +list(APPEND CGAME_C_SOURCES ${CGAME_SOURCES} ${GAME_SOURCES} ${UI_SOURCES} ${QCOMMON_SOURCES}) +list(APPEND CGAME_C_HEADERS ${CGAME_HEADERS} ${GAME_HEADERS} ${UI_HEADERS} ${QCOMMON_HEADERS}) + +source_group("cgame\\Source Files" FILES ${CGAME_SOURCES}) +source_group("cgame\\Header Files" FILES ${CGAME_HEADERS}) +source_group("game\\Source Files" FILES ${GAME_SOURCES}) +source_group("game\\Header Files" FILES ${GAME_HEADERS}) +source_group("ui\\Source Files" FILES ${UI_SOURCES}) +source_group("ui\\Header Files" FILES ${UI_HEADERS}) +source_group("qcommon\\Source Files" FILES ${QCOMMON_SOURCES}) +source_group("qcommon\\Header Files" FILES ${QCOMMON_HEADERS}) + +add_library(${MISSION_CGAME_VM_TARGET} MODULE ${CGAME_C_SOURCES} ${CGAME_C_HEADERS}) + +target_compile_definitions(${MISSION_CGAME_VM_TARGET} PRIVATE ${CGAME_DEFINITIONS}) + +target_include_directories(${MISSION_CGAME_VM_TARGET} PRIVATE ${CGAME_INCLUDE_DIRS}) + +compat_target_compile_options(${MISSION_CGAME_VM_TARGET} PRIVATE ${CGAME_CFLAGS}) + +target_link_libraries(${MISSION_CGAME_VM_TARGET} ${CGAME_LIBRARIES}) + +compat_target_link_options(${MISSION_CGAME_VM_TARGET} PRIVATE ${CGAME_LDFLAGS}) + +set_target_properties(${MISSION_CGAME_VM_TARGET} PROPERTIES PREFIX "") +set_target_properties(${MISSION_CGAME_VM_TARGET} PROPERTIES LIBRARY_OUTPUT_NAME "cgame${ARCH}") +set_target_properties(${MISSION_CGAME_VM_TARGET} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/missionpack/vm") + +STRIP_TARGET(${MISSION_CGAME_VM_TARGET}) + +set(DESTIONATION_DIR) +if(MISSIONPACK_VM_INSTALL_DIR) + set(DESTIONATION_DIR "${MISSIONPACK_VM_INSTALL_DIR}") +endif(MISSIONPACK_VM_INSTALL_DIR) + +if(DESTIONATION_DIR) + install(TARGETS ${MISSION_CGAME_VM_TARGET} + DESTINATION "${DESTIONATION_DIR}" + PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ + GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE + CONFIGURATIONS Release + COMPONENT missionpack_vm + ) +endif(DESTIONATION_DIR) + + +include(CPack) diff --git a/misc/CMakeLists/vm/missionpack/game/CMakeLists.txt b/misc/CMakeLists/vm/missionpack/game/CMakeLists.txt new file mode 100644 index 0000000000..b74c5bc541 --- /dev/null +++ b/misc/CMakeLists/vm/missionpack/game/CMakeLists.txt @@ -0,0 +1,213 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("missionpack game vm") + +set(MISSION_GAME_VM_TARGET "missionpack_game_vm" CACHE INTERNAL "Target name") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/cflags.cmake") +include("${CMAKELIST_DIR}/include/compat.cmake") +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") +include("${CMAKELIST_DIR}/include/strip.cmake") +include("${CMAKELIST_DIR}/include/platform.cmake") + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + option(GENERATE_DEPENDENCIES "Preprocessing: Generate dependencies for make outputting" ${DEFAULT_GENERATE_DEPENDENCIES}) +endif() +option(NO_STRIP "No strip (keep all symbol table and relocation information)" ${DEFAULT_NO_STRIP}) +if(MSVC) + option(BUILD_STATIC_CRT "Build (static) multi-threaded C runtime library" ${DEFAULT_BUILD_STATIC_CRT}) +endif() + +set(MISSIONPACK_VM_INSTALL_DIR "${DEFAULT_MISSIONPACK_VM_INSTALL_DIR}" CACHE PATH "Missionpack VM Installation directory") + +set(BOTLIB_HEADERS + "${BOTLIB_DIR}/aasfile.h" + "${BOTLIB_DIR}/be_aas.h" + "${BOTLIB_DIR}/be_aas_bsp.h" + "${BOTLIB_DIR}/be_aas_cluster.h" + "${BOTLIB_DIR}/be_aas_debug.h" + "${BOTLIB_DIR}/be_aas_def.h" + "${BOTLIB_DIR}/be_aas_entity.h" + "${BOTLIB_DIR}/be_aas_file.h" + "${BOTLIB_DIR}/be_aas_funcs.h" + "${BOTLIB_DIR}/be_aas_main.h" + "${BOTLIB_DIR}/be_aas_move.h" + "${BOTLIB_DIR}/be_aas_optimize.h" + "${BOTLIB_DIR}/be_aas_reach.h" + "${BOTLIB_DIR}/be_aas_route.h" + "${BOTLIB_DIR}/be_aas_routealt.h" + "${BOTLIB_DIR}/be_aas_sample.h" + "${BOTLIB_DIR}/be_ai_char.h" + "${BOTLIB_DIR}/be_ai_chat.h" + "${BOTLIB_DIR}/be_ai_gen.h" + "${BOTLIB_DIR}/be_ai_goal.h" + "${BOTLIB_DIR}/be_ai_move.h" + "${BOTLIB_DIR}/be_ai_weap.h" + "${BOTLIB_DIR}/be_ai_weight.h" + "${BOTLIB_DIR}/be_ea.h" + "${BOTLIB_DIR}/be_interface.h" + "${BOTLIB_DIR}/botlib.h" + "${BOTLIB_DIR}/l_crc.h" + "${BOTLIB_DIR}/l_libvar.h" + "${BOTLIB_DIR}/l_log.h" + "${BOTLIB_DIR}/l_memory.h" + "${BOTLIB_DIR}/l_precomp.h" + "${BOTLIB_DIR}/l_script.h" + "${BOTLIB_DIR}/l_struct.h" + "${BOTLIB_DIR}/l_utils.h" +) +set(GAME_SOURCES + "${GAME_DIR}/ai_chat.c" + "${GAME_DIR}/ai_cmd.c" + "${GAME_DIR}/ai_dmnet.c" + "${GAME_DIR}/ai_dmq3.c" + "${GAME_DIR}/ai_main.c" + "${GAME_DIR}/ai_team.c" + "${GAME_DIR}/ai_vcmd.c" + + "${GAME_DIR}/bg_misc.c" + "${GAME_DIR}/bg_pmove.c" + "${GAME_DIR}/bg_slidemove.c" + "${GAME_DIR}/bg_lib.c" + + "${GAME_DIR}/g_active.c" + "${GAME_DIR}/g_arenas.c" + "${GAME_DIR}/g_bot.c" + "${GAME_DIR}/g_client.c" + "${GAME_DIR}/g_cmds.c" + "${GAME_DIR}/g_combat.c" + "${GAME_DIR}/g_items.c" + "${GAME_DIR}/g_main.c" + "${GAME_DIR}/g_mem.c" + "${GAME_DIR}/g_misc.c" + "${GAME_DIR}/g_missile.c" + "${GAME_DIR}/g_mover.c" + "${GAME_DIR}/g_session.c" + "${GAME_DIR}/g_spawn.c" + "${GAME_DIR}/g_svcmds.c" + "${GAME_DIR}/g_target.c" + "${GAME_DIR}/g_team.c" + "${GAME_DIR}/g_trigger.c" + "${GAME_DIR}/g_utils.c" + "${GAME_DIR}/g_weapon.c" + + "${GAME_DIR}/g_syscalls.c" +) +set(GAME_HEADERS + "${GAME_DIR}/ai_chat.h" + "${GAME_DIR}/ai_cmd.h" + "${GAME_DIR}/ai_dmnet.h" + "${GAME_DIR}/ai_dmq3.h" + "${GAME_DIR}/ai_main.h" + "${GAME_DIR}/ai_team.h" + "${GAME_DIR}/ai_vcmd.h" + "${GAME_DIR}/chars.h" + "${GAME_DIR}/inv.h" + "${GAME_DIR}/match.h" + "${GAME_DIR}/syn.h" + + "${GAME_DIR}/bg_local.h" + "${GAME_DIR}/bg_public.h" + "${GAME_DIR}/bg_lib.h" + + "${GAME_DIR}/g_local.h" + "${GAME_DIR}/g_public.h" + + "${GAME_DIR}/g_team.h" + +) +set(QCOMMON_SOURCES + "${QCOMMON_DIR}/q_math.c" + "${QCOMMON_DIR}/q_shared.c" +) +set(QCOMMON_HEADERS + "${QCOMMON_DIR}/q_shared.h" +) + +ADD_VM_DEFINITIONS(GAME_DEFINITIONS) +ADD_VM_CFLAGS(GAME_CFLAGS) +ADD_STRIP_LDFLAG(GAME_LDFLAGS) + +list(APPEND GAME_DEFINITIONS "-DQAGAME") +list(APPEND GAME_DEFINITIONS "-DMISSIONPACK") + +if(DEFINED ENV{SOURCE_DATE_EPOCH}) + if(NOT ${CMAKE_VERSION} VERSION_LESS "3.8.0") + string(TIMESTAMP PRODUCT_DATE "%b %d %Y" UTC) #Nov 28 2021 + list(APPEND GAME_DEFINITIONS "-DPRODUCT_DATE=\"${PRODUCT_DATE}\"") + else() + message(WARNING "Update CMake to version 3.8 or later for SOURCE_DATE_EPOCH support!") + endif() +endif() + +list(APPEND GAME_C_SOURCES ${GAME_SOURCES} ${QCOMMON_SOURCES}) +list(APPEND GAME_C_HEADERS ${GAME_HEADERS} ${QCOMMON_HEADERS} ${BOTLIB_HEADERS}) + +source_group("botlib\\Header Files" FILES ${BOTLIB_HEADERS}) +source_group("game\\Source Files" FILES ${GAME_SOURCES}) +source_group("game\\Header Files" FILES ${GAME_HEADERS}) +source_group("qcommon\\Source Files" FILES ${QCOMMON_SOURCES}) +source_group("qcommon\\Header Files" FILES ${QCOMMON_HEADERS}) + +add_library(${MISSION_GAME_VM_TARGET} MODULE ${GAME_C_SOURCES} ${GAME_C_HEADERS}) + +target_compile_definitions(${MISSION_GAME_VM_TARGET} PRIVATE ${GAME_DEFINITIONS}) + +target_include_directories(${MISSION_GAME_VM_TARGET} PRIVATE ${GAME_INCLUDE_DIRS}) + +compat_target_compile_options(${MISSION_GAME_VM_TARGET} PRIVATE ${GAME_CFLAGS}) + +target_link_libraries(${MISSION_GAME_VM_TARGET} ${GAME_LIBRARIES}) + +compat_target_link_options(${MISSION_GAME_VM_TARGET} PRIVATE ${GAME_LDFLAGS}) + +set_target_properties(${MISSION_GAME_VM_TARGET} PROPERTIES PREFIX "") +set_target_properties(${MISSION_GAME_VM_TARGET} PROPERTIES LIBRARY_OUTPUT_NAME "qagame${ARCH}") +set_target_properties(${MISSION_GAME_VM_TARGET} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/missionpack/vm") + +STRIP_TARGET(${MISSION_GAME_VM_TARGET}) + +set(DESTIONATION_DIR) +if(MISSIONPACK_VM_INSTALL_DIR) + set(DESTIONATION_DIR "${MISSIONPACK_VM_INSTALL_DIR}") +endif(MISSIONPACK_VM_INSTALL_DIR) + +if(DESTIONATION_DIR) + install(TARGETS ${MISSION_GAME_VM_TARGET} + DESTINATION "${DESTIONATION_DIR}" + PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ + GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE + CONFIGURATIONS Release + COMPONENT missionpack_vm + ) +endif(DESTIONATION_DIR) + +include(CPack) diff --git a/misc/CMakeLists/vm/missionpack/ui/CMakeLists.txt b/misc/CMakeLists/vm/missionpack/ui/CMakeLists.txt new file mode 100644 index 0000000000..bd6a00a1c5 --- /dev/null +++ b/misc/CMakeLists/vm/missionpack/ui/CMakeLists.txt @@ -0,0 +1,134 @@ +# The MIT License (MIT) +# +# Copyright (c) 2022 github.com/Pan7 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +cmake_minimum_required(VERSION 2.8.12) + +project("missionpack ui vm") + +set(MISSION_UI_VM_TARGET "missionpack_ui_vm" CACHE INTERNAL "Target name") + +if(NOT DEFINED SOURCE_DIR) + set(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../../..") + set(CMAKELIST_DIR "${SOURCE_DIR}/misc/CMakeLists") +endif() + +include("${CMAKELIST_DIR}/include/cflags.cmake") +include("${CMAKELIST_DIR}/include/compat.cmake") +include("${CMAKELIST_DIR}/include/default_options.cmake") +include("${CMAKELIST_DIR}/include/directory_constants.cmake") +include("${CMAKELIST_DIR}/include/strip.cmake") +include("${CMAKELIST_DIR}/include/platform.cmake") + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + option(GENERATE_DEPENDENCIES "Preprocessing: Generate dependencies for make outputting" ${DEFAULT_GENERATE_DEPENDENCIES}) +endif() +option(NO_STRIP "No strip (keep all symbol table and relocation information)" ${DEFAULT_NO_STRIP}) +if(MSVC) + option(BUILD_STATIC_CRT "Build (static) multi-threaded C runtime library" ${DEFAULT_BUILD_STATIC_CRT}) +endif() + +set(MISSIONPACK_VM_INSTALL_DIR "${DEFAULT_MISSIONPACK_VM_INSTALL_DIR}" CACHE PATH "Missionpack VM Installation directory") + +set(GAME_SOURCES + "${GAME_DIR}/bg_misc.c" + "${GAME_DIR}/bg_lib.c" +) +set(GAME_HEADERS + "${GAME_DIR}/bg_local.h" + "${GAME_DIR}/bg_public.h" + "${GAME_DIR}/bg_lib.h" +) +set(UI_SOURCES + "${UI_DIR}/ui_atoms.c" + "${UI_DIR}/ui_main.c" + "${UI_DIR}/ui_gameinfo.c" + "${UI_DIR}/ui_players.c" + "${UI_DIR}/ui_shared.c" + + "${UI_DIR}/ui_syscalls.c" +) +set(UI_HEADERS + "${UI_DIR}/ui_local.h" + "${UI_DIR}/ui_public.h" + + "${UI_DIR}/ui_shared.h" + +) +set(QCOMMON_SOURCES + "${QCOMMON_DIR}/q_math.c" + "${QCOMMON_DIR}/q_shared.c" +) +set(QCOMMON_HEADERS + "${QCOMMON_DIR}/q_shared.h" +) + +ADD_VM_DEFINITIONS(UI_DEFINITIONS) +ADD_VM_CFLAGS(UI_CFLAGS) +ADD_STRIP_LDFLAG(UI_LDFLAGS) + +list(APPEND UI_DEFINITIONS "-DUI") +list(APPEND UI_DEFINITIONS "-DMISSIONPACK") + +list(APPEND UI_C_SOURCES ${UI_SOURCES} ${GAME_SOURCES} ${QCOMMON_SOURCES}) +list(APPEND UI_C_HEADERS ${UI_HEADERS} ${GAME_HEADERS} ${QCOMMON_HEADERS}) + +source_group("game\\Source Files" FILES ${GAME_SOURCES}) +source_group("game\\Header Files" FILES ${GAME_HEADERS}) +source_group("ui\\Source Files" FILES ${UI_SOURCES}) +source_group("ui\\Header Files" FILES ${UI_HEADERS}) +source_group("qcommon\\Source Files" FILES ${QCOMMON_SOURCES}) +source_group("qcommon\\Header Files" FILES ${QCOMMON_HEADERS}) + +add_library(${MISSION_UI_VM_TARGET} MODULE ${UI_C_SOURCES} ${UI_C_HEADERS}) + +target_compile_definitions(${MISSION_UI_VM_TARGET} PRIVATE ${UI_DEFINITIONS}) + +target_include_directories(${MISSION_UI_VM_TARGET} PRIVATE ${UI_INCLUDE_DIRS}) + +compat_target_compile_options(${MISSION_UI_VM_TARGET} PRIVATE ${UI_CFLAGS}) + +target_link_libraries(${MISSION_UI_VM_TARGET} ${UI_LIBRARIES}) + +compat_target_link_options(${MISSION_UI_VM_TARGET} PRIVATE ${UI_LDFLAGS}) + +set_target_properties(${MISSION_UI_VM_TARGET} PROPERTIES PREFIX "") +set_target_properties(${MISSION_UI_VM_TARGET} PROPERTIES LIBRARY_OUTPUT_NAME "ui${ARCH}") +set_target_properties(${MISSION_UI_VM_TARGET} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/missionpack/vm") + +STRIP_TARGET(${MISSION_UI_VM_TARGET}) + +set(DESTIONATION_DIR) +if(MISSIONPACK_VM_INSTALL_DIR) + set(DESTIONATION_DIR "${MISSIONPACK_VM_INSTALL_DIR}") +endif(MISSIONPACK_VM_INSTALL_DIR) + +if(DESTIONATION_DIR) + install(TARGETS ${MISSION_UI_VM_TARGET} + DESTINATION "${DESTIONATION_DIR}" + PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ + GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE + CONFIGURATIONS Release + COMPONENT missionpack_vm + ) +endif(DESTIONATION_DIR) + +include(CPack)