1# Copyright (c) 2021-2025 Huawei Device Co., Ltd. 2# Licensed under the Apache License, Version 2.0 (the "License"); 3# you may not use this file except in compliance with the License. 4# You may obtain a copy of the License at 5# 6# http://www.apache.org/licenses/LICENSE-2.0 7# 8# Unless required by applicable law or agreed to in writing, software 9# distributed under the License is distributed on an "AS IS" BASIS, 10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11# See the License for the specific language governing permissions and 12# limitations under the License. 13 14function(panda_set_flag flag) 15 set(${flag} 1 PARENT_SCOPE) 16 add_definitions("-D${flag}") 17endfunction() 18 19# For each CMake variable name, add a corresponding preprocessor definition 20# if variable evaluates to True. 21function(panda_promote_to_definitions) 22 foreach(var_name ${ARGV}) 23 if(${var_name}) 24 add_definitions("-D${var_name}") 25 endif() 26 endforeach() 27endfunction() 28 29set(CMAKE_BUILD_RPATH_USE_ORIGIN TRUE) 30add_compile_definitions(PANDA_CMAKE_SDK) 31 32if(CMAKE_SYSTEM_NAME STREQUAL "Linux") 33 panda_set_flag(PANDA_TARGET_LINUX) 34 panda_set_flag(PANDA_TARGET_UNIX) 35 if (NOT PANDA_ENABLE_ADDRESS_SANITIZER) 36 panda_set_flag(PANDA_USE_FUTEX) 37 endif() 38elseif(CMAKE_SYSTEM_NAME STREQUAL "OHOS") 39 panda_set_flag(PANDA_TARGET_OHOS) 40 panda_set_flag(PANDA_TARGET_UNIX) 41elseif(CMAKE_SYSTEM_NAME STREQUAL "Android") 42 panda_set_flag(PANDA_TARGET_MOBILE) 43 panda_set_flag(PANDA_TARGET_UNIX) 44 if (NOT PANDA_ENABLE_ADDRESS_SANITIZER) 45 panda_set_flag(PANDA_USE_FUTEX) 46 endif() 47elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") 48 panda_set_flag(PANDA_TARGET_WINDOWS) 49elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") 50 panda_set_flag(PANDA_TARGET_MACOS) 51 panda_set_flag(PANDA_TARGET_UNIX) 52else() 53 message(FATAL_ERROR "Platform ${CMAKE_SYSTEM_NAME} is not supported") 54endif() 55 56if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64") 57 if(NOT PANDA_CROSS_AMD64_X86) 58 panda_set_flag(PANDA_TARGET_AMD64) 59 else() 60 panda_set_flag(PANDA_TARGET_X86) 61 endif() 62elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i[356]86") 63 panda_set_flag(PANDA_TARGET_X86) 64elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64") 65 panda_set_flag(PANDA_TARGET_ARM64) 66elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm") 67 panda_set_flag(PANDA_TARGET_ARM32) 68 panda_promote_to_definitions( 69 PANDA_TARGET_ARM32_ABI_SOFT 70 PANDA_TARGET_ARM32_ABI_SOFTFP 71 PANDA_TARGET_ARM32_ABI_HARD 72 ) 73 if((PANDA_TARGET_ARM32_ABI_SOFT AND (PANDA_TARGET_ARM32_ABI_SOFTFP OR PANDA_TARGET_ARM32_ABI_HARD)) OR 74 (PANDA_TARGET_ARM32_ABI_SOFTFP AND (PANDA_TARGET_ARM32_ABI_SOFT OR PANDA_TARGET_ARM32_ABI_HARD)) OR 75 (PANDA_TARGET_ARM32_ABI_HARD AND (PANDA_TARGET_ARM32_ABI_SOFT OR PANDA_TARGET_ARM32_ABI_SOFTFP))) 76 message(FATAL_ERROR "Only one PANDA_TARGET_ARM32_ABI_* should be set. 77 PANDA_TARGET_ARM32_ABI_SOFT = ${PANDA_TARGET_ARM32_ABI_SOFT} 78 PANDA_TARGET_ARM32_ABI_SOFTFP = ${PANDA_TARGET_ARM32_ABI_SOFTFP} 79 PANDA_TARGET_ARM32_ABI_HARD = ${PANDA_TARGET_ARM32_ABI_HARD}") 80 elseif(NOT (PANDA_TARGET_ARM32_ABI_SOFT OR PANDA_TARGET_ARM32_ABI_SOFTFP OR PANDA_TARGET_ARM32_ABI_HARD)) 81 message(FATAL_ERROR "PANDA_TARGET_ARM32_ABI_* is not set") 82 endif() 83else() 84 message(FATAL_ERROR "Processor ${CMAKE_SYSTEM_PROCESSOR} is not supported") 85endif() 86 87if(PANDA_TARGET_AMD64 OR PANDA_TARGET_ARM64) 88 panda_set_flag(PANDA_TARGET_64) 89elseif(PANDA_TARGET_X86 OR PANDA_TARGET_ARM32) 90 panda_set_flag(PANDA_TARGET_32) 91else() 92 message(FATAL_ERROR "Unknown bitness of the target platform") 93endif() 94 95if (PANDA_TRACK_INTERNAL_ALLOCATIONS) 96 message(STATUS "Track internal allocations") 97 add_definitions(-DTRACK_INTERNAL_ALLOCATIONS=${PANDA_TRACK_INTERNAL_ALLOCATIONS}) 98endif() 99 100if (PANDA_TARGET_ARM64 AND NOT PANDA_CI_TESTING_MODE STREQUAL "Nightly") 101 if (PANDA_ENABLE_ADDRESS_SANITIZER OR PANDA_ENABLE_THREAD_SANITIZER) 102 panda_set_flag(PANDA_ARM64_TESTS_WITH_SANITIZER) 103 endif() 104endif() 105 106 107# Enable global register variables usage only for clang >= 9.0.0 and gcc >= 8.0.0. 108# Clang 8.0.0 doesn't support all necessary options -ffixed-<reg>. Gcc 7.5.0 freezes 109# when compiling release interpreter. 110# 111# Also calling conventions of functions that use global register variables are different: 112# clang stores and restores registers that are used for global variables in the prolog 113# and epilog of such functions and gcc doesn't do it. So it's necessary to inline all 114# function that refers to global register variables to interpreter loop. 115 116# For this reason we disable global register variables usage for clang debug builds as 117# ALWAYS_INLINE macro expands to nothing in this mode and we cannot guarantee that all 118# necessary function will be inlined. 119# 120if(PANDA_TARGET_ARM64 AND ((CMAKE_CXX_COMPILER_ID STREQUAL "Clang" 121 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.0.0 122 AND CMAKE_BUILD_TYPE MATCHES Release) 123 OR 124 (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" 125 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0.0))) 126 panda_set_flag(PANDA_ENABLE_GLOBAL_REGISTER_VARIABLES) 127endif() 128 129if(CMAKE_BUILD_TYPE MATCHES Debug) 130 # Additional debug information about fp in each frame 131 add_compile_options(-fno-omit-frame-pointer) 132endif() 133 134# for correct work with gdb-9 135# See https://discourse.llvm.org/t/gdb-10-1-cant-read-clangs-dwarf-v5/6035 136if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 14) 137 if ("${CMAKE_BUILD_TYPE}" MATCHES "^(RelWithDebInfo|FastVerify|Debug|DebugDetailed)$") 138 add_compile_options(-gdwarf-4) 139 endif() 140endif() 141 142# Enable LTO only for Android aarch64 due to bug for Android armv7: 143# https://github.com/android/ndk/issues/721 144if (PANDA_TARGET_MOBILE AND PANDA_TARGET_ARM64) 145 set(PANDA_ENABLE_LTO true) 146 set(PANDA_LLVM_REGALLOC pbqp) 147endif() 148 149if (PANDA_PGO_INSTRUMENT OR PANDA_PGO_OPTIMIZE) 150 if (NOT PANDA_TARGET_MOBILE OR NOT PANDA_TARGET_ARM64) 151 message(FATAL_ERROR "PGO supported only for Android aarch64") 152 endif() 153 154 set(PANDA_ENABLE_LTO true) 155endif() 156 157# TODO(v.cherkashi): Remove PANDA_TARGET_MOBILE_WITH_MANAGED_LIBS when the managed libs are separated form the Panda 158if(PANDA_TARGET_MOBILE_WITH_MANAGED_LIBS) 159 add_definitions(-DPANDA_TARGET_MOBILE_WITH_MANAGED_LIBS=1) 160 if(PANDA_TARGET_MOBILE) 161 panda_set_flag(PANDA_TARGET_MOBILE_WITH_NATIVE_LIBS) 162 endif() 163else() 164 add_definitions(-DPANDA_TARGET_MOBILE_WITH_MANAGED_LIBS=0) 165endif() 166 167if(PANDA_TARGET_MOBILE_WITH_NATIVE_LIBS) 168 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-gnu-statement-expression") 169 if(MOBILE_NATIVE_LIBS_SOURCE_PATH) 170 include_directories(${MOBILE_NATIVE_LIBS_SOURCE_PATH}/libc) 171 else() 172 message(FATAL_ERROR "MOBILE_NATIVE_LIBS_SOURCE_PATH is not set") 173 endif() 174endif() 175 176if(PANDA_TARGET_64) 177 panda_set_flag(PANDA_USE_32_BIT_POINTER) 178endif() 179 180if(PANDA_TARGET_LINUX) 181 execute_process(COMMAND grep PRETTY_NAME= /etc/os-release 182 OUTPUT_VARIABLE PANDA_TARGET_LINUX_DISTRO 183 OUTPUT_STRIP_TRAILING_WHITESPACE 184 ) 185 if(PANDA_TARGET_LINUX_DISTRO MATCHES "Ubuntu") 186 panda_set_flag(PANDA_TARGET_LINUX_UBUNTU) 187 endif() 188 189 if(PANDA_TARGET_LINUX_DISTRO MATCHES "Ubuntu 18\\.04") 190 panda_set_flag(PANDA_TARGET_LINUX_UBUNTU_18_04) 191 elseif(PANDA_TARGET_LINUX_DISTRO MATCHES "Ubuntu 20\\.04") 192 panda_set_flag(PANDA_TARGET_LINUX_UBUNTU_20_04) 193 elseif(PANDA_TARGET_LINUX_DISTRO MATCHES "Ubuntu 22\\.04") 194 panda_set_flag(PANDA_TARGET_LINUX_UBUNTU_22_04) 195 endif() 196 execute_process(COMMAND uname -a 197 OUTPUT_VARIABLE PANDA_TARGET_WSL_DISTRO 198 OUTPUT_STRIP_TRAILING_WHITESPACE 199 ) 200 if(PANDA_TARGET_WSL_DISTRO MATCHES "Microsoft") 201 panda_set_flag(PANDA_TARGET_WSL) 202 endif() 203 if(PANDA_TARGET_WSL_DISTRO MATCHES "WSL") 204 panda_set_flag(PANDA_TARGET_GENERAL_WSL) 205 endif() 206endif() 207 208set(PANDA_WITH_RUNTIME true) 209set(PANDA_WITH_COMPILER true) 210set(PANDA_WITH_TOOLCHAIN true) 211if (NOT DEFINED PANDA_WITH_BENCHMARKS) 212 set(PANDA_WITH_BENCHMARKS true) 213endif() 214set(PANDA_DEFAULT_LIB_TYPE "SHARED") 215 216option(PANDA_WITH_TESTS "Enable test targets" true) 217option(PANDA_WITH_BYTECODE_OPTIMIZER "Enable bytecode optimizer" true) 218option(PANDA_COMPILER_DEBUG_INFO "Support DWARF debug information in Compiler (JIT/AOT/IRtoC)" OFF) 219option(PANDA_ENABLE_CCACHE "Enable ccache" true) 220if (NOT DEFINED ES2PANDA_PATH) 221 set(ES2PANDA_PATH ${PANDA_ROOT}/tools/es2panda) 222endif() 223 224if(PANDA_TARGET_WINDOWS) 225 set(PANDA_WITH_BENCHMARKS false) 226 set(PANDA_DEFAULT_LIB_TYPE "STATIC") 227 # introduced for GetDynamicTimeZoneInformation 228 add_definitions(-D_WIN32_WINNT=0x600) 229endif() 230 231if(PANDA_TARGET_MACOS) 232 set(PANDA_DEFAULT_LIB_TYPE "STATIC") 233 #introduced for "std::filesystem::create_directories" 234 add_compile_options(-mmacosx-version-min=10.15) 235endif() 236 237if(PANDA_TARGET_OHOS) 238 set(PANDA_WITH_BENCHMARKS false) 239 add_definitions(-D__MUSL__) 240 241 if(PANDA_TARGET_ARM64 OR PANDA_TARGET_ARM32) 242 # WORKAROUND: 243 # Disable '-Wunused-command-line-argument' error to avoid compilation error: 244 # clang++: error: argument unused during compilation: '--gcc-toolchain=<path/to/toolchain>/llvm' [-Werror,-Wunused-command-line-argument] 245 add_compile_options(-Wno-unused-command-line-argument) 246 247 # -Wno-deprecated-declarations needs for third_parties and ecmascript plugin 248 add_compile_options(-Wno-deprecated-declarations) 249 endif() 250endif() 251 252if(CMAKE_BUILD_TYPE STREQUAL Debug) 253 add_definitions(-DPANDA_ENABLE_SLOW_DEBUG) 254 add_definitions(-D_GLIBCXX_ASSERTIONS) 255endif() 256 257if(CMAKE_BUILD_TYPE STREQUAL FastVerify) 258 add_definitions(-DPANDA_FAST_VERIFY) 259 add_definitions(-D_GLIBCXX_ASSERTIONS) 260endif() 261 262# The define is set for the build which will be delivered to customers. 263# Currently this build doesn't contain dependencies to debug libraries 264# (like libdwarf.so) 265option(PANDA_PRODUCT_BUILD "Build which will be delivered to customers" false) 266 267if(PANDA_PRODUCT_BUILD AND NOT (CMAKE_BUILD_TYPE STREQUAL "Release")) 268 message(FATAL_ERROR "PANDA_PRODUCT_BUILD must be run with the Release build type only!") 269endif() 270 271if(NOT PANDA_PRODUCT_BUILD AND PANDA_WITH_HIDDEN_SYMBOLS) 272 message(FATAL_ERROR "PANDA_WITH_HIDDEN_SYMBOLS must be run with PANDA_PRODUCT_BUILD only!") 273endif() 274 275option(PANDA_WITH_HIDDEN_SYMBOLS "Build with -fvisibility=hidden options for some libraries" ${PANDA_PRODUCT_BUILD}) 276 277if (("${CMAKE_BUILD_TYPE}" STREQUAL "Debug" OR 278 "${CMAKE_BUILD_TYPE}" STREQUAL "DebugDetailed" OR 279 "${CMAKE_BUILD_TYPE}" STREQUAL "FastVerify" OR 280 "${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo") AND 281 (NOT PANDA_TARGET_WINDOWS) AND 282 (NOT PANDA_ENABLE_ADDRESS_SANITIZER) AND 283 (NOT PANDA_ENABLE_UNDEFINED_BEHAVIOR_SANITIZER) AND 284 (NOT PANDA_ENABLE_THREAD_SANITIZER)) 285 # Windows do not have elf and dwarf libraries 286 # Sanitizers do not work properly with gdb 287 set(PANDA_COMPILER_DEBUG_INFO ON) 288endif() 289 290# libdwarf-dev lib (version: 20180129-1) in Ubuntu 18.04 has memory leaks 291# TODO(asidorov): delete the workaround when the problem is fixed 292if (PANDA_ENABLE_ADDRESS_SANITIZER AND PANDA_TARGET_LINUX_UBUNTU_18_04) 293 set(PANDA_COMPILER_DEBUG_INFO OFF) 294endif() 295 296# TODO: Ensure libdwarf is available when building with OHOS toolchain 297if (PANDA_TARGET_OHOS) 298 set(PANDA_COMPILER_DEBUG_INFO OFF) 299endif() 300 301if (PANDA_PRODUCT_BUILD) 302 set(PANDA_COMPILER_DEBUG_INFO OFF) 303endif() 304 305if ((NOT DEFINED PANDA_MINIMAL_VIXL) AND PANDA_PRODUCT_BUILD) 306 # VIXL aarch64 with Encoder only (with no Decoder or Simulator provided) 307 set(PANDA_MINIMAL_VIXL true) 308endif() 309 310panda_promote_to_definitions( 311 PANDA_PRODUCT_BUILD 312 PANDA_WITH_HIDDEN_SYMBOLS 313 PANDA_WITH_COMPILER 314 PANDA_WITH_BYTECODE_OPTIMIZER 315 PANDA_COMPILER_DEBUG_INFO 316 PANDA_MINIMAL_VIXL 317 INTRUSIVE_TESTING 318) 319 320option(PANDA_CROSS_COMPILER "Enable compiler cross-compilation support" ON) 321option(PANDA_COMPILER_TARGET_X86 "Build x86-backend") 322option(PANDA_COMPILER_TARGET_X86_64 "Build x86_64-backend" ON) 323option(PANDA_COMPILER_TARGET_AARCH32 "Build aarch32-backend" ON) 324option(PANDA_COMPILER_TARGET_AARCH64 "Build aarch64-backend" ON) 325# User-specified cross-toolchains: 326option(PANDA_CROSS_X86_64_TOOLCHAIN_FILE "Absolute path to X86_64 target toolchain" OFF) 327option(PANDA_CROSS_AARCH64_TOOLCHAIN_FILE "Absolute path to AARCH64 target toolchain" OFF) 328option(PANDA_CROSS_AARCH32_TOOLCHAIN_FILE "Absolute path to AARCH32 target toolchain" OFF) 329 330# true if current target supports JIT/AOT native compilation 331# TODO (asidorov, runtime): replace all uses of this option by PANDA_WITH_COMPILER 332set(PANDA_COMPILER_ENABLE TRUE) 333 334if (PANDA_TARGET_AMD64) 335 if (PANDA_CROSS_COMPILER) 336 if (HOST_TOOLS) 337 # For host-tools build support only single-target backend (with the same toolchain): 338 message(STATUS "set ${PANDA_HOST_TOOLS_TARGET_ARCH}") 339 set(PANDA_COMPILER_TARGET_${PANDA_HOST_TOOLS_TARGET_ARCH} ON) 340 else() 341 set(PANDA_COMPILER_TARGET_X86_64 ON) 342 # If `PANDA_CROSS_${arch}_TOOLCHAIN_FILE` wasn't specified, gcc-toolchain is used: 343 find_program(GCC_AARCH64_CXX "aarch64-linux-gnu-g++") 344 find_program(GCC_ARM_CXX "arm-linux-gnueabi-g++") 345 346 # The option is ON by default; this 'if' allows to check if the target wasn't turned off explicitly: 347 if (PANDA_COMPILER_TARGET_AARCH64) 348 if (PANDA_CROSS_AARCH64_TOOLCHAIN_FILE) 349 message(STATUS "Specified AARCH64 toolchain: ${PANDA_CROSS_AARCH64_TOOLCHAIN_FILE}") 350 elseif (GCC_AARCH64_CXX) 351 message(STATUS "Detected default AARCH64 toolchain") 352 else() 353 set(PANDA_COMPILER_TARGET_AARCH64 OFF) 354 message(STATUS "No AARCH64 toolchain found") 355 endif() 356 endif() 357 358 # The option is ON by default; this 'if' allows to check if the target wasn't turned off explicitly: 359 if (PANDA_COMPILER_TARGET_AARCH32) 360 if (PANDA_CROSS_AARCH32_TOOLCHAIN_FILE) 361 message(STATUS "Specified AARCH32 toolchain: ${PANDA_CROSS_AARCH32_TOOLCHAIN_FILE}") 362 elseif (GCC_ARM_CXX) 363 message(STATUS "Detected default AARCH32 toolchain") 364 else() 365 set(PANDA_COMPILER_TARGET_AARCH32 OFF) 366 message(STATUS "No AARCH32 toolchain found") 367 endif() 368 endif() 369 # TODO(dkofanov): cross-values do not support x86 370 set(PANDA_COMPILER_TARGET_X86 OFF) 371 endif() 372 else() 373 set(PANDA_COMPILER_TARGET_X86 OFF) 374 set(PANDA_COMPILER_TARGET_X86_64 ON) 375 set(PANDA_COMPILER_TARGET_AARCH32 OFF) 376 set(PANDA_COMPILER_TARGET_AARCH64 OFF) 377 endif() 378endif() 379 380if (PANDA_TARGET_X86) 381 set(PANDA_COMPILER_TARGET_X86 ON) 382 set(PANDA_COMPILER_TARGET_X86_64 OFF) 383 set(PANDA_COMPILER_TARGET_AARCH32 OFF) 384 set(PANDA_COMPILER_TARGET_AARCH64 OFF) 385endif() 386 387if (PANDA_TARGET_ARM32) 388 if(PANDA_TARGET_ARM32_ABI_SOFT) 389 set(PANDA_COMPILER_ENABLE FALSE) 390 set(PANDA_COMPILER_TARGET_X86 OFF) 391 set(PANDA_COMPILER_TARGET_X86_64 OFF) 392 set(PANDA_COMPILER_TARGET_AARCH32 OFF) 393 set(PANDA_COMPILER_TARGET_AARCH64 OFF) 394 else() 395 set(PANDA_COMPILER_TARGET_X86 OFF) 396 set(PANDA_COMPILER_TARGET_X86_64 OFF) 397 set(PANDA_COMPILER_TARGET_AARCH32 ON) 398 set(PANDA_COMPILER_TARGET_AARCH64 OFF) 399 endif() 400endif() 401 402if (PANDA_TARGET_ARM64) 403 set(PANDA_COMPILER_TARGET_X86 OFF) 404 set(PANDA_COMPILER_TARGET_X86_64 OFF) 405 set(PANDA_COMPILER_TARGET_AARCH32 OFF) 406 set(PANDA_COMPILER_TARGET_AARCH64 ON) 407endif() 408 409if ((NOT PANDA_TARGET_WINDOWS) AND (NOT PANDA_ENABLE_ADDRESS_SANITIZER) AND (NOT PANDA_ENABLE_THREAD_SANITIZER)) 410 panda_set_flag(PANDA_USE_CUSTOM_SIGNAL_STACK) 411endif() 412 413option(PANDA_LLVM_BACKEND "Enable LLVM backend for Ark compiler" OFF) 414 415if (NOT PANDA_LLVM_BACKEND) 416 if (PANDA_LLVM_INTERPRETER) 417 message(FATAL_ERROR "PANDA_LLVM_INTERPRETER can't be enabled without PANDA_LLVM_BACKEND") 418 endif() 419 420 if (PANDA_LLVM_FASTPATH) 421 message(FATAL_ERROR "PANDA_LLVM_FASTPATH can't be enabled without PANDA_LLVM_BACKEND") 422 endif() 423 424 if (PANDA_LLVM_AOT) 425 message(FATAL_ERROR "PANDA_LLVM_AOT can't be enabled without PANDA_LLVM_BACKEND") 426 endif() 427endif() 428 429if (NOT (PANDA_TARGET_AMD64 OR PANDA_TARGET_ARM64)) 430 set(PANDA_LLVM_BACKEND OFF) 431endif() 432 433if (PANDA_LLVM_BACKEND) 434 # PANDA_LLVM_BACKEND auto-enables LLVM_INTERPRETER, LLVM_AOT and LLVM_FASTPATH unless user 435 # disabled some of them explicitly. Example: 436 # -DPANDA_LLVM_BACKEND=ON -DPANDA_LLVM_FASTPATH=OFF => FASTPATH is OFF, INTERPRETER and AOT are ON 437 if (NOT DEFINED PANDA_LLVM_INTERPRETER) 438 set(PANDA_LLVM_INTERPRETER ON) 439 endif() 440 if (PANDA_TARGET_AMD64 AND NOT CMAKE_CROSSCOMPILING AND NOT HOST_TOOLS) 441 # LLVM_FASTPATH is not supported for x86_64 target build 442 if (NOT DEFINED PANDA_LLVM_FASTPATH) 443 set(PANDA_LLVM_FASTPATH OFF) 444 elseif(PANDA_LLVM_FASTPATH) 445 message(FATAL_ERROR "PANDA_LLVM_FASTPATH is not supported for x86_64") 446 endif() 447 else() # otherwise, it is processed similar to INTERPRETER above and AOT below 448 if (NOT DEFINED PANDA_LLVM_FASTPATH) 449 set(PANDA_LLVM_FASTPATH ON) 450 endif() 451 endif() 452 if (NOT DEFINED PANDA_LLVM_AOT) 453 set(PANDA_LLVM_AOT ON) 454 endif() 455 456 # LLVM_IRTOC is an internal flag telling if Irtoc compilation is necessary: 457 # al least one of LLVM_FASTPATH or LLVM_INTERPRETER should be on 458 if (PANDA_LLVM_FASTPATH OR PANDA_LLVM_INTERPRETER) 459 panda_set_flag(PANDA_LLVM_IRTOC) 460 endif() 461 462 # PANDA_BUILD_LLVM_BACKEND is an internal flag telling if it is necessary to compile backend 463 # in this particular circumstances. 464 # LLVM_AOT means we need the backend. LLVM_AOT is always disabled in host_tools part. 465 # LLVM_IRTOC means we need the backend unless we are in cross compilation. 466 # For cross compilation case Irtoc would be processed in host_tools part. 467 # For host_tools BUILD_LLVM_BACKEND is effectively equal to LLVM_IRTOC. 468 if (PANDA_LLVM_AOT OR (PANDA_LLVM_IRTOC AND NOT CMAKE_CROSSCOMPILING)) 469 panda_set_flag(PANDA_BUILD_LLVM_BACKEND) 470 endif() 471endif() 472 473panda_promote_to_definitions( 474 PANDA_COMPILER_TARGET_X86 475 PANDA_COMPILER_TARGET_X86_64 476 PANDA_COMPILER_TARGET_AARCH32 477 PANDA_COMPILER_TARGET_AARCH64 478 PANDA_COMPILER_ENABLE 479 PANDA_QEMU_BUILD 480 PANDA_LLVM_BACKEND 481 PANDA_LLVM_FASTPATH 482 PANDA_LLVM_INTERPRETER 483 PANDA_LLVM_AOT 484) 485 486if (PANDA_USE_PREBUILT_TARGETS) 487 set(CMAKE_NO_SYSTEM_FROM_IMPORTED ON) 488endif() 489 490if (PANDA_ETS_INTEROP_JS) 491 panda_set_flag(PANDA_ETS_INTEROP_JS) 492endif() 493 494message(STATUS "PANDA_TARGET_MOBILE_WITH_MANAGED_LIBS = ${PANDA_TARGET_MOBILE_WITH_MANAGED_LIBS}") 495message(STATUS "PANDA_TARGET_UNIX = ${PANDA_TARGET_UNIX}") 496message(STATUS "PANDA_TARGET_LINUX = ${PANDA_TARGET_LINUX}") 497message(STATUS "PANDA_TARGET_MOBILE = ${PANDA_TARGET_MOBILE}") 498message(STATUS "PANDA_USE_FUTEX = ${PANDA_USE_FUTEX}") 499message(STATUS "PANDA_TARGET_WINDOWS = ${PANDA_TARGET_WINDOWS}") 500message(STATUS "PANDA_TARGET_OHOS = ${PANDA_TARGET_OHOS}") 501message(STATUS "PANDA_TARGET_MACOS = ${PANDA_TARGET_MACOS}") 502message(STATUS "PANDA_CROSS_COMPILER = ${PANDA_CROSS_COMPILER}") 503message(STATUS "PANDA_CROSS_AMD64_X86 = ${PANDA_CROSS_AMD64_X86}") 504message(STATUS "PANDA_TARGET_AMD64 = ${PANDA_TARGET_AMD64}") 505message(STATUS "PANDA_TARGET_X86 = ${PANDA_TARGET_X86}") 506message(STATUS "PANDA_TARGET_ARM64 = ${PANDA_TARGET_ARM64}") 507message(STATUS "PANDA_TARGET_ARM32 = ${PANDA_TARGET_ARM32}") 508if(PANDA_TARGET_ARM32) 509message(STATUS "PANDA_TARGET_ARM32_ABI_SOFT = ${PANDA_TARGET_ARM32_ABI_SOFT}") 510message(STATUS "PANDA_TARGET_ARM32_ABI_SOFTFP = ${PANDA_TARGET_ARM32_ABI_SOFTFP}") 511message(STATUS "PANDA_TARGET_ARM32_ABI_HARD = ${PANDA_TARGET_ARM32_ABI_HARD}") 512endif() 513message(STATUS "PANDA_TARGET_64 = ${PANDA_TARGET_64}") 514message(STATUS "PANDA_TARGET_32 = ${PANDA_TARGET_32}") 515message(STATUS "PANDA_TARGET_CPU_FEATURES = ${PANDA_TARGET_CPU_FEATURES}") 516message(STATUS "PANDA_ENABLE_GLOBAL_REGISTER_VARIABLES = ${PANDA_ENABLE_GLOBAL_REGISTER_VARIABLES}") 517message(STATUS "PANDA_ENABLE_LTO = ${PANDA_ENABLE_LTO}") 518if(PANDA_TARGET_MOBILE) 519message(STATUS "PANDA_LLVM_REGALLOC = ${PANDA_LLVM_REGALLOC}") 520endif() 521if(PANDA_TARGET_MOBILE_WITH_NATIVE_LIBS) 522message(STATUS "PANDA_TARGET_MOBILE_WITH_NATIVE_LIBS = ${PANDA_TARGET_MOBILE_WITH_NATIVE_LIBS}") 523endif() 524message(STATUS "PANDA_WITH_RUNTIME = ${PANDA_WITH_RUNTIME}") 525message(STATUS "PANDA_WITH_COMPILER = ${PANDA_WITH_COMPILER}") 526message(STATUS "PANDA_COMPILER_ENABLE = ${PANDA_COMPILER_ENABLE}") 527message(STATUS "PANDA_WITH_TOOLCHAIN = ${PANDA_WITH_TOOLCHAIN}") 528message(STATUS "PANDA_WITH_TESTS = ${PANDA_WITH_TESTS}") 529message(STATUS "PANDA_WITH_BENCHMARKS = ${PANDA_WITH_BENCHMARKS}") 530message(STATUS "PANDA_WITH_BYTECODE_OPTIMIZER = ${PANDA_WITH_BYTECODE_OPTIMIZER}") 531message(STATUS "PANDA_PGO_INSTRUMENT = ${PANDA_PGO_INSTRUMENT}") 532message(STATUS "PANDA_PGO_OPTIMIZE = ${PANDA_PGO_OPTIMIZE}") 533message(STATUS "PANDA_PRODUCT_BUILD = ${PANDA_PRODUCT_BUILD}") 534message(STATUS "PANDA_QEMU_BUILD = ${PANDA_QEMU_BUILD}") 535message(STATUS "PANDA_LLVM_BACKEND = ${PANDA_LLVM_BACKEND}") 536message(STATUS "PANDA_LLVM_INTERPRETER = ${PANDA_LLVM_INTERPRETER}") 537message(STATUS "PANDA_LLVM_FASTPATH = ${PANDA_LLVM_FASTPATH}") 538message(STATUS "PANDA_LLVM_AOT = ${PANDA_LLVM_AOT}") 539message(STATUS "PANDA_ENABLE_CCACHE = ${PANDA_ENABLE_CCACHE}") 540message(STATUS "PANDA_USE_CUSTOM_SIGNAL_STACK = ${PANDA_USE_CUSTOM_SIGNAL_STACK}") 541message(STATUS "PANDA_USE_PREBUILT_TARGETS = ${PANDA_USE_PREBUILT_TARGETS}") 542message(STATUS "CMAKE_NO_SYSTEM_FROM_IMPORTED = ${CMAKE_NO_SYSTEM_FROM_IMPORTED}") 543message(STATUS "ES2PANDA_PATH = ${ES2PANDA_PATH}") 544