-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
152 lines (133 loc) · 5.59 KB
/
Copy pathCMakeLists.txt
File metadata and controls
152 lines (133 loc) · 5.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
project(cr2xt)
# cr2xt version
set(CR2XT_VERSION_MAJOR 0)
set(CR2XT_VERSION_MINOR 9)
set(CR2XT_VERSION_PATCH 3)
set(CR2XT_VERSION "${CR2XT_VERSION_MAJOR}.${CR2XT_VERSION_MINOR}.${CR2XT_VERSION_PATCH}")
# Get git version information (short commit hashes for parent and submodules)
find_package(Git QUIET)
if(GIT_FOUND)
# Parent project hash
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE CR2XT_GIT_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
RESULT_VARIABLE GIT_HASH_RESULT
)
if(NOT GIT_HASH_RESULT EQUAL 0)
set(CR2XT_GIT_VERSION "")
endif()
# crqt-ng submodule hash
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/crqt-ng
OUTPUT_VARIABLE CRQT_GIT_HASH
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
RESULT_VARIABLE CRQT_HASH_RESULT
)
if(NOT CRQT_HASH_RESULT EQUAL 0)
set(CRQT_GIT_HASH "")
endif()
# crengine-ng submodule hash
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/crengine-ng
OUTPUT_VARIABLE CRENGINE_GIT_HASH
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
RESULT_VARIABLE CRENGINE_HASH_RESULT
)
if(NOT CRENGINE_HASH_RESULT EQUAL 0)
set(CRENGINE_GIT_HASH "")
endif()
else()
set(CR2XT_GIT_VERSION "")
set(CRQT_GIT_HASH "")
set(CRENGINE_GIT_HASH "")
endif()
# Build full version string
if(CR2XT_GIT_VERSION)
set(CR2XT_VERSION_FULL "${CR2XT_VERSION} (${CR2XT_GIT_VERSION})")
else()
set(CR2XT_VERSION_FULL "${CR2XT_VERSION}")
endif()
message(STATUS "cr2xt version: ${CR2XT_VERSION_FULL}")
# Shared options - these propagate to subdirectories
set(USE_QT QT6 CACHE STRING "Qt version to use")
set_property(CACHE USE_QT PROPERTY STRINGS QT5 QT6)
option(STATIC_CRENGINE_NG "Link with the static version of crengine-ng" OFF)
# crengine-ng specific options for cr2xt converter
set(USE_COLOR_BACKBUFFER OFF CACHE BOOL "Use color backbuffer")
set(GRAY_BACKBUFFER_BITS 2 CACHE STRING "Gray depth for gray backbuffer")
# Platform detection - set MACOS for Apple platforms
if(APPLE)
set(MACOS TRUE)
# Universal Binary support for macOS
# Set CMAKE_OSX_ARCHITECTURES to "arm64;x86_64" for Universal builds
# Note: This must be set BEFORE add_subdirectory() calls
# If not set, defaults to native architecture
if(NOT DEFINED CMAKE_OSX_ARCHITECTURES OR CMAKE_OSX_ARCHITECTURES STREQUAL "")
# Default to native architecture if not specified
execute_process(
COMMAND uname -m
OUTPUT_VARIABLE NATIVE_ARCH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
set(CMAKE_OSX_ARCHITECTURES "${NATIVE_ARCH}" CACHE STRING "Target macOS architectures")
endif()
# Log the target architectures
list(LENGTH CMAKE_OSX_ARCHITECTURES ARCH_COUNT)
if(ARCH_COUNT GREATER 1)
message(STATUS "Building Universal Binary for architectures: ${CMAKE_OSX_ARCHITECTURES}")
else()
message(STATUS "Building for architecture: ${CMAKE_OSX_ARCHITECTURES}")
endif()
endif()
# Build crengine-ng first (the dependency)
add_subdirectory(crengine-ng)
# Create namespaced aliases that crqt-ng expects (matching find_package exports)
# These need PUBLIC include directories for the umbrella build to work
if(TARGET crengine-ng)
# Get the source and binary include directories
set(CRENGINE_NG_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/crengine-ng/crengine/include")
set(CRENGINE_NG_BINARY_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/crengine-ng/crengine")
# Add PUBLIC include directories to the existing targets
# Include both source dir (headers) and binary dir (generated crengine-ng-config.h)
target_include_directories(crengine-ng PUBLIC
$<BUILD_INTERFACE:${CRENGINE_NG_INCLUDE_DIR}>
$<BUILD_INTERFACE:${CRENGINE_NG_BINARY_INCLUDE_DIR}>
)
# Create namespaced alias
add_library(crengine-ng::crengine-ng ALIAS crengine-ng)
endif()
if(TARGET crengine-ng_static)
target_include_directories(crengine-ng_static PUBLIC
$<BUILD_INTERFACE:${CRENGINE_NG_INCLUDE_DIR}>
$<BUILD_INTERFACE:${CRENGINE_NG_BINARY_INCLUDE_DIR}>
)
add_library(crengine-ng::crengine-ng_static ALIAS crengine-ng_static)
endif()
# Set data directory for umbrella build
set(CRENGINE_NG_DATA_DIR "${CMAKE_CURRENT_SOURCE_DIR}/crengine-ng/crengine/data")
# Pass cr2xt version and submodule hashes to crqt-ng (will be empty if built standalone)
set(CR2XT_VERSION_FULL "${CR2XT_VERSION_FULL}" CACHE STRING "cr2xt umbrella project version" FORCE)
set(CR2XT_VERSION "${CR2XT_VERSION}" CACHE STRING "cr2xt version (without git hash)" FORCE)
set(CRQT_GIT_HASH "${CRQT_GIT_HASH}" CACHE STRING "crqt-ng submodule git hash" FORCE)
set(CRENGINE_GIT_HASH "${CRENGINE_GIT_HASH}" CACHE STRING "crengine-ng submodule git hash" FORCE)
# Build crqt-ng (depends on crengine-ng)
add_subdirectory(crqt-ng)
# Install cr2xt distribution defaults file
# On Windows: exe directory (portable)
# On macOS: Resources bundle
# On Linux: engine data directory (matches CRE_NG_DATADIR for system installs)
if(WIN32)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/scripts/crui-defaults.ini DESTINATION .)
elseif(MACOS)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/scripts/crui-defaults.ini DESTINATION Contents/Resources)
else()
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/scripts/crui-defaults.ini DESTINATION share/crengine-ng)
endif()