rallyunlimited-engine/CMakeLists.txt
2024-02-02 19:46:17 +03:00

210 lines
5.9 KiB
CMake

CMAKE_MINIMUM_REQUIRED(VERSION 3.12)
PROJECT(quake3e)
SET(CNAME "quake3e")
SET(DNAME "quake3e.ded")
SET(RENDERER_PREFIX ${CNAME})
SET(RENDERER_DEFAULT opengl) # valid options: opengl, vulkan, opengl2
OPTION(USE_SDL "" ON)
OPTION(USE_CURL "" ON)
OPTION(USE_LOCAL_HEADERS "" ON)
OPTION(USE_VULKAN "" ON)
OPTION(USE_SYSTEM_JPEG "" OFF)
OPTION(USE_RENDERER_DLOPEN "" ON)
SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules)
AUX_SOURCE_DIRECTORY(code/qcommon QCOMMON_SRCS)
# exclude platform-dependent QVM bytecode compilers
list(FILTER QCOMMON_SRCS EXCLUDE REGEX ".*vm_[alx].*.c")
# add platform-dependent QVM bytecode compilers
IF(CMAKE_SYSTEM_PROCESSOR MATCHES AMD64|x86|i*86)
IF(CMAKE_SYSTEM_PROCESSOR MATCHES AMD64)
IF(WIN32)
SET(BINEXT .x64)
ELSE()
SET(BINEXT .x86_64)
ENDIF()
SET(RENDEXT _x86_64)
ELSE()
#SET(BINEXT .x86)
SET(RENDEXT _x86)
ENDIF()
list(APPEND QCOMMON_SRCS code/qcommon/vm_x86.c)
ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES aarch64|arm64)
SET(BINEXT .aarch64)
SET(RENDEXT _aarch64)
list(APPEND QCOMMON_SRCS code/qcommon/vm_aarch64.c)
ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES arm*)
SET(BINEXT .arm)
SET(RENDEXT _arm)
list(APPEND QCOMMON_SRCS code/qcommon/vm_armv7l.c)
ELSE()
TARGET_COMPILE_DEFINITIONS(qcommon PRIVATE -DNO_VM_COMPILED)
TARGET_COMPILE_DEFINITIONS(qcommon_ded PRIVATE -DNO_VM_COMPILED)
ENDIF()
# botlib
AUX_SOURCE_DIRECTORY(code/botlib BOTLIB_SRCS)
ADD_LIBRARY(botlib OBJECT ${BOTLIB_SRCS})
TARGET_COMPILE_DEFINITIONS(botlib PRIVATE BOTLIB)
AUX_SOURCE_DIRECTORY(code/server SERVER_SRCS)
list(REMOVE_ITEM SERVER_SRCS code/server/sv_rankings.c)
# universal binary
ADD_LIBRARY(qcommon OBJECT ${QCOMMON_SRCS} ${SERVER_SRCS})
# dedicated server
ADD_LIBRARY(qcommon_ded OBJECT ${QCOMMON_SRCS} ${SERVER_SRCS})
TARGET_COMPILE_DEFINITIONS(qcommon_ded PUBLIC DEDICATED)
# client + cURL
AUX_SOURCE_DIRECTORY(code/client CLIENT_SRCS)
IF(NOT USE_CURL)
list(REMOVE_ITEM CLIENT_SRCS code/client/cl_curl.c)
ENDIF()
#ADD_LIBRARY(client OBJECT ${CLIENT_SRCS})
# jpeg
IF(USE_SYSTEM_JPEG)
ADD_LIBRARY(client OBJECT ${CLIENT_SRCS})
find_package(JPEG REQUIRED)
TARGET_COMPILE_DEFINITIONS(client PRIVATE -DUSE_SYSTEM_JPEG)
TARGET_LINK_LIBRARIES(client ${JPEG_LIBRARIES})
ELSE()
AUX_SOURCE_DIRECTORY(code/libjpeg JPEG_SRCS)
#ADD_LIBRARY(jpeg ${JPEG_SRCS})
#TARGET_LINK_LIBRARIES(client jpeg)
ADD_LIBRARY(client OBJECT ${CLIENT_SRCS} ${JPEG_SRCS})
ENDIF()
# renderers
AUX_SOURCE_DIRECTORY(code/renderercommon RENDERER_COMMON_SRCS)
AUX_SOURCE_DIRECTORY(code/renderer RENDERER_GL_SRCS)
AUX_SOURCE_DIRECTORY(code/renderervk RENDERER_VK_SRCS)
IF(USE_RENDERER_DLOPEN)
SET(AUX_SRCS
code/qcommon/q_shared.c
code/qcommon/puff.c
code/qcommon/q_math.c
)
TARGET_COMPILE_DEFINITIONS(client PRIVATE USE_RENDERER_DLOPEN RENDERER_PREFIX="${RENDERER_PREFIX}" RENDERER_DEFAULT="${RENDERER_DEFAULT}")
ADD_LIBRARY(${RENDERER_PREFIX}_opengl${RENDEXT} SHARED ${RENDERER_GL_SRCS} ${RENDERER_COMMON_SRCS} ${AUX_SRCS})
TARGET_COMPILE_DEFINITIONS(${RENDERER_PREFIX}_opengl${RENDEXT} PRIVATE USE_RENDERER_DLOPEN)
ADD_LIBRARY(${RENDERER_PREFIX}_vulkan${RENDEXT} SHARED ${RENDERER_VK_SRCS} ${RENDERER_COMMON_SRCS} ${AUX_SRCS})
TARGET_COMPILE_DEFINITIONS(${RENDERER_PREFIX}_vulkan${RENDEXT} PRIVATE USE_RENDERER_DLOPEN)
ELSE()
IF(USE_VULKAN)
ADD_LIBRARY(${RENDERER_PREFIX}_vulkan OBJECT ${RENDERER_VK_SRCS} ${RENDERER_COMMON_SRCS})
ELSE()
ADD_LIBRARY(${RENDERER_PREFIX}_opengl OBJECT ${RENDERER_GL_SRCS} ${RENDERER_COMMON_SRCS})
ENDIF()
ENDIF()
# common function, window system
IF(UNIX)
SET (Q3_SRCS
code/unix/unix_main.c
code/unix/unix_shared.c
code/unix/linux_signals.c)
IF(USE_SDL)
AUX_SOURCE_DIRECTORY(code/sdl Q3_UI_SRCS)
ELSE()
SET(Q3_UI_SRCS
code/unix/linux_glimp.c
code/unix/linux_qgl.c
code/unix/linux_snd.c
code/unix/x11_dga.c
code/unix/x11_randr.c
code/unix/x11_vidmode.c)
IF(USE_VULKAN)
list(APPEND Q3_UI_SRCS code/unix/linux_qvk.c)
ENDIF()
ENDIF()
IF(APPLE)
SET(EXE_TYPE MACOSX_BUNDLE)
list(APPEND Q3_SRCS code/unix/quake3_flat.icns)
set_source_files_properties(code/unix/quake3_flat.icns PROPERTIES
MACOSX_PACKAGE_LOCATION Resources)
SET(MACOSX_BUNDLE_ICON_FILE quake3_flat.icns)
ENDIF()
ELSEIF(WIN32)
SET(EXE_TYPE WIN32)
IF(MSVC)
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MANIFEST:NO")
ADD_COMPILE_DEFINITIONS(_CRT_SECURE_NO_WARNINGS) # v3.12+
ENDIF()
SET(Q3_SRCS
code/win32/win_main.c
code/win32/win_shared.c
code/win32/win_syscon.c
code/win32/win_resource.rc)
SET(Q3_UI_SRCS
code/win32/win_gamma.c
code/win32/win_glimp.c
code/win32/win_input.c
code/win32/win_minimize.c
code/win32/win_qgl.c
code/win32/win_snd.c
code/win32/win_wndproc.c)
IF(USE_VULKAN)
list(APPEND Q3_UI_SRCS code/win32/win_qvk.c)
ENDIF()
ENDIF(UNIX)
ADD_LIBRARY(q3ui OBJECT ${Q3_UI_SRCS})
IF(NOT MSVC)
IF(USE_SDL)
find_package(SDL2 REQUIRED)
TARGET_LINK_LIBRARIES(q3ui SDL2::Main)
ELSEIF(UNIX)
find_package (X11 REQUIRED)
TARGET_LINK_LIBRARIES(q3ui ${X11_LIBRARIES})
ENDIF()
ENDIF()
IF(USE_VULKAN)
TARGET_COMPILE_DEFINITIONS(q3ui PRIVATE USE_VULKAN_API)
TARGET_COMPILE_DEFINITIONS(client PRIVATE USE_VULKAN_API)
ENDIF()
# client executable
ADD_EXECUTABLE(${CNAME}${BINEXT} ${EXE_TYPE} ${Q3_SRCS})
TARGET_LINK_LIBRARIES(${CNAME}${BINEXT} qcommon botlib client q3ui)
#TARGET_LINK_OPTIONS(${CNAME} PRIVATE -fno-pie) # v3.13+
IF(NOT USE_RENDERER_DLOPEN)
IF(USE_VULKAN)
TARGET_LINK_LIBRARIES(${CNAME}${BINEXT} ${RENDERER_PREFIX}_vulkan)
ELSE()
TARGET_LINK_LIBRARIES(${CNAME}${BINEXT} ${RENDERER_PREFIX}_opengl)
ENDIF()
ENDIF()
# dedicated server executable
ADD_EXECUTABLE(${DNAME}${BINEXT} ${EXE_TYPE} ${Q3_SRCS})
TARGET_LINK_LIBRARIES(${DNAME}${BINEXT} qcommon_ded botlib)
#TARGET_LINK_OPTIONS(${DNAME} PRIVATE -fno-pie) # v3.13+
IF(WIN32)
TARGET_LINK_LIBRARIES(${CNAME}${BINEXT} winmm comctl32 ws2_32)
TARGET_LINK_LIBRARIES(${DNAME}${BINEXT} winmm comctl32 ws2_32)
ELSE()
TARGET_LINK_LIBRARIES(${CNAME}${BINEXT} m ${CMAKE_DL_LIBS})
TARGET_LINK_LIBRARIES(${DNAME}${BINEXT} m ${CMAKE_DL_LIBS})
ENDIF()