forked from WebKit/WebKit
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
166 lines (148 loc) · 7.1 KB
/
Copy pathCMakeLists.txt
File metadata and controls
166 lines (148 loc) · 7.1 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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
# -----------------------------------------------------------------------------
# Determine CMake version and build type.
# -----------------------------------------------------------------------------
# NOTE: cmake_minimum_required() and project() *MUST* be the two first commands
# used, see https://cmake.org/cmake/help/v3.3/command/project.html -- the
# latter in particular handles loading a bunch of shared CMake definitions
# and loading the cross-compilation settings from CMAKE_TOOLCHAIN_FILE.
cmake_minimum_required(VERSION 3.20)
if (PORT STREQUAL "IOS")
set(CMAKE_SYSTEM_NAME iOS)
if (CMAKE_IOS_SIMULATOR)
set(_sdk_name "iphonesimulator.internal")
set(_sdk_name_fallback "iphonesimulator")
else ()
set(_sdk_name "iphoneos.internal")
set(_sdk_name_fallback "iphoneos")
endif ()
execute_process(COMMAND xcrun --sdk ${_sdk_name} --show-sdk-path
OUTPUT_VARIABLE _ios_sysroot
OUTPUT_STRIP_TRAILING_WHITESPACE
RESULT_VARIABLE _internal_sdk_result
ERROR_QUIET)
if (NOT _internal_sdk_result EQUAL 0 OR NOT _ios_sysroot)
set(_ios_sysroot "")
if (CMAKE_OSX_SYSROOT AND EXISTS "${CMAKE_OSX_SYSROOT}")
set(_ios_sysroot "${CMAKE_OSX_SYSROOT}")
elseif (DEFINED ENV{SDKROOT} AND EXISTS "$ENV{SDKROOT}" AND "$ENV{SDKROOT}" MATCHES "iPhone")
set(_ios_sysroot "$ENV{SDKROOT}")
else ()
execute_process(COMMAND xcrun --sdk ${_sdk_name_fallback} --show-sdk-path
OUTPUT_VARIABLE _ios_sysroot
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET)
endif ()
endif ()
if (_ios_sysroot)
set(CMAKE_OSX_SYSROOT "${_ios_sysroot}" CACHE PATH "iOS SDK path" FORCE)
endif ()
unset(_sdk_name)
unset(_sdk_name_fallback)
unset(_internal_sdk_result)
unset(_ios_sysroot)
if (NOT CMAKE_OSX_ARCHITECTURES)
if (CMAKE_OSX_SYSROOT MATCHES "\\.Internal\\.sdk$" AND NOT CMAKE_OSX_SYSROOT MATCHES "[Ss]imulator")
execute_process(COMMAND uname -m
OUTPUT_VARIABLE _host_arch
OUTPUT_STRIP_TRAILING_WHITESPACE)
if (_host_arch STREQUAL "arm64")
set(CMAKE_OSX_ARCHITECTURES "arm64e" CACHE STRING "Target architecture" FORCE)
message(STATUS "iOS: arm64e enabled (internal device SDK detected)")
endif ()
else ()
set(CMAKE_OSX_ARCHITECTURES "arm64" CACHE STRING "Target architecture" FORCE)
endif ()
endif ()
if (NOT CMAKE_OSX_DEPLOYMENT_TARGET)
set(CMAKE_OSX_DEPLOYMENT_TARGET "18.0" CACHE STRING "Minimum iOS version" FORCE)
endif ()
if (NOT CMAKE_SYSTEM_PROCESSOR)
set(CMAKE_SYSTEM_PROCESSOR "aarch64" CACHE STRING "Target processor" FORCE)
endif ()
endif ()
if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin" AND NOT CMAKE_SYSTEM_NAME STREQUAL "iOS" AND NOT CMAKE_OSX_SYSROOT)
# Set CMAKE_OSX_SYSROOT before the project() call below. project() runs ABI
# detection tests whose results are cached; having the wrong sysroot there
# would cause those cached results to refer to a different SDK than actual
# builds use. OptionsMac.cmake (which sets this via WEBKIT_XCRUN) is loaded
# only after project() via include(WebKitCommon), so it is too late.
# WEBKIT_XCRUN is also unavailable here because WebKitXcrun.cmake is
# included by OptionsMac.cmake.
execute_process(COMMAND xcrun --sdk macosx --show-sdk-path
OUTPUT_VARIABLE _macos_sysroot
OUTPUT_STRIP_TRAILING_WHITESPACE
RESULT_VARIABLE _xcrun_result
ERROR_QUIET)
if (_xcrun_result EQUAL 0 AND _macos_sysroot)
set(CMAKE_OSX_SYSROOT "${_macos_sysroot}" CACHE PATH "macOS SDK path" FORCE)
endif ()
unset(_macos_sysroot)
unset(_xcrun_result)
endif ()
project(WebKit LANGUAGES C CXX)
# -----------------------------------------------------------------------------
# Common configuration
#------------------------------------------------------------------------------
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/Source/cmake")
include(WebKitCommon)
# -----------------------------------------------------------------------------
# Enable Swift - we can't do this until we've checked our configuration,
# which in turn depends on clang-related variables set by the initial
# "project()" line
#------------------------------------------------------------------------------
if (SWIFT_REQUIRED)
if (POLICY CMP0157)
cmake_policy(SET CMP0157 NEW)
endif ()
# CMake omits -target for swiftc during iOS cross-compilation.
if (PORT STREQUAL "IOS")
if (CMAKE_IOS_SIMULATOR OR CMAKE_OSX_SYSROOT MATCHES "[Ss]imulator")
set(CMAKE_Swift_COMPILER_TARGET "${CMAKE_OSX_ARCHITECTURES}-apple-ios${CMAKE_OSX_DEPLOYMENT_TARGET}-simulator" CACHE STRING "Swift target triple" FORCE)
else ()
set(CMAKE_Swift_COMPILER_TARGET "${CMAKE_OSX_ARCHITECTURES}-apple-ios${CMAKE_OSX_DEPLOYMENT_TARGET}" CACHE STRING "Swift target triple" FORCE)
endif ()
endif ()
enable_language(Swift)
# -F causes Swift to find C++23 framework headers in implicit module builds.
if (PORT STREQUAL "IOS")
set(CMAKE_Swift_FRAMEWORK_SEARCH_FLAG "-Xcc -iquote")
endif ()
if (APPLE)
WEBKIT_XCRUN(ORIGINAL_Swift_COMPILER --find swiftc)
else ()
set(ORIGINAL_Swift_COMPILER "${CMAKE_Swift_COMPILER}")
endif ()
set(CMAKE_Swift_COMPILER "${CMAKE_SOURCE_DIR}/Tools/Scripts/swift/swiftc-wrapper.sh")
add_compile_options($<$<COMPILE_LANGUAGE:Swift>:--original-swift-compiler=${ORIGINAL_Swift_COMPILER}>)
add_link_options($<$<LINK_LANGUAGE:Swift>:--original-swift-compiler=${ORIGINAL_Swift_COMPILER}>)
# The static archive rule (<CMAKE_Swift_CREATE_STATIC_LIBRARY>) uses neither
# <FLAGS> nor link options, so inject the flag directly into the template.
string(REPLACE "<CMAKE_Swift_COMPILER>"
"<CMAKE_Swift_COMPILER> --original-swift-compiler=${ORIGINAL_Swift_COMPILER}"
CMAKE_Swift_CREATE_STATIC_LIBRARY "${CMAKE_Swift_CREATE_STATIC_LIBRARY}")
endif ()
# -----------------------------------------------------------------------------
# Enable API unit tests and create a target for the test runner
# -----------------------------------------------------------------------------
if (ENABLE_API_TESTS)
enable_testing()
endif ()
# -----------------------------------------------------------------------------
# Add module directories
# -----------------------------------------------------------------------------
add_subdirectory(Source)
# -----------------------------------------------------------------------------
# Add tools
# -----------------------------------------------------------------------------
if (ENABLE_TOOLS)
add_subdirectory(Tools)
endif ()
if (DEVELOPER_MODE)
if (EXISTS "${CMAKE_SOURCE_DIR}/PerformanceTests")
add_subdirectory(PerformanceTests)
endif ()
endif ()
# -----------------------------------------------------------------------------
# Print the features list last, for maximum visibility.
# -----------------------------------------------------------------------------
PRINT_WEBKIT_OPTIONS()