mirror of
https://github.com/Q3Rally-Team/rallyunlimited-engine.git
synced 2024-11-27 22:43:50 +00:00
211 lines
5.9 KiB
Text
211 lines
5.9 KiB
Text
|
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()
|