1# Copyright (c) 2021-2024 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 14cmake_minimum_required(VERSION 3.10) 15 16project(arkruntime) 17 18enable_language(ASM) 19 20include(core/Core.cmake) 21include(${PANDA_ROOT}/verification/Verification.cmake) 22 23set(SOURCES 24 assert_gc_scope.cpp 25 bridge/bridge.cpp 26 entrypoints/entrypoints.cpp 27 exceptions.cpp 28 class_linker.cpp 29 class_linker_extension.cpp 30 class_initializer.cpp 31 tooling/debugger.cpp 32 tooling/default_inspector_extension.cpp 33 tooling/pt_thread.cpp 34 tooling/debug_inf.cpp 35 tooling/tools.cpp 36 tooling/sampler/sampling_profiler.cpp 37 tooling/sampler/sample_writer.cpp 38 tooling/sampler/thread_communicator.cpp 39 tooling/sampler/stack_walker_base.cpp 40 tooling/sampler/lock_free_queue.cpp 41 field.cpp 42 gc_task.cpp 43 dprofiler/dprofiler.cpp 44 hotreload/hotreload.cpp 45 interpreter/interpreter.cpp 46 interpreter/runtime_interface.cpp 47 intrinsics.cpp 48 coretypes/string.cpp 49 coretypes/array.cpp 50 class.cpp 51 class_helper.cpp 52 locks.cpp 53 panda_vm.cpp 54 language_context.cpp 55 mem/gc/epsilon/epsilon.cpp 56 mem/gc/epsilon-g1/epsilon-g1.cpp 57 mem/gc/epsilon/epsilon_barrier.cpp 58 mem/gc/gc.cpp 59 mem/gc/gc_adaptive_stack.cpp 60 mem/gc/gc_settings.cpp 61 mem/gc/lang/gc_lang.cpp 62 mem/gc/gc_queue.cpp 63 mem/gc/gc_root.cpp 64 mem/gc/gc_root_type.cpp 65 mem/gc/gc_stats.cpp 66 mem/gc/gc_trigger.cpp 67 mem/gc/gc-hung/gc_hung.cpp 68 mem/gc/card_table.cpp 69 mem/gc/heap-space-misc/crossing_map.cpp 70 mem/gc/heap-space-misc/crossing_map_singleton.cpp 71 mem/gc/bitmap.cpp 72 mem/gc/gc_scope.cpp 73 mem/gc/gc_scoped_phase.cpp 74 mem/gc/workers/gc_worker.cpp 75 mem/gc/workers/gc_workers_task_pool.cpp 76 mem/gc/workers/gc_workers_task_queue.cpp 77 mem/gc/workers/gc_workers_thread_pool.cpp 78 mem/gc/stw-gc/stw-gc.cpp 79 mem/gc/gc_barrier_set.cpp 80 mem/gc/gen-gc/gen-gc.cpp 81 mem/refstorage/ref_block.cpp 82 mem/refstorage/reference_storage.cpp 83 mem/refstorage/global_object_storage.cpp 84 mem/allocator.cpp 85 mem/tlab.cpp 86 mem/heap_manager.cpp 87 mem/heap_verifier.cpp 88 mem/rendezvous.cpp 89 mem/runslots.cpp 90 mem/region_space.cpp 91 mem/object_helpers.cpp 92 mem/mem_stats_additional_info.cpp 93 mem/mem_stats_default.cpp 94 mem/mem_stats.cpp 95 mem/internal_allocator.cpp 96 mem/panda_string.cpp 97 mem/memory_manager.cpp 98 mem/heap_space.cpp 99 methodtrace/trace.cpp 100 mark_word.cpp 101 method.cpp 102 monitor.cpp 103 monitor_object_lock.cpp 104 monitor_pool.cpp 105 global_object_lock.cpp 106 object_header.cpp 107 regexp/ecmascript/regexp_parser.cpp 108 regexp/ecmascript/regexp_executor.cpp 109 regexp/ecmascript/regexp_opcode.cpp 110 regexp/ecmascript/mem/dyn_chunk.cpp 111 runtime.cpp 112 runtime_controller.cpp 113 string_table.cpp 114 thread.cpp 115 mt_thread_manager.cpp 116 lock_order_graph.cpp 117 time_utils.cpp 118 timing.cpp 119 compiler.cpp 120 vtable_builder_base.cpp 121 imtable_builder.cpp 122 cframe.cpp 123 stack_walker.cpp 124 deoptimization.cpp 125 object_accessor.cpp 126 osr.cpp 127 arch/asm_support.cpp 128 signal_handler.cpp 129 profilesaver/profile_saver.cpp 130 profilesaver/profile_dump_info.cpp 131 cha.cpp 132 runtime_helpers.cpp 133 handle_scope.cpp 134 file_manager.cpp 135 mem/gc/generational-gc-base.cpp 136 mem/gc/g1/g1-gc.cpp 137 mem/gc/g1/g1-helpers.cpp 138 mem/gc/g1/ref_updater.cpp 139 mem/gc/g1/g1-allocator.cpp 140 mem/gc/g1/g1_analytics.cpp 141 plugins.cpp 142 mem/gc/g1/update_remset_worker.cpp 143 mem/gc/g1/update_remset_thread.cpp 144 mem/gc/g1/update_remset_task_queue.cpp 145 mem/gc/g1/g1_pause_tracker.cpp 146 mem/gc/g1/hot_cards.cpp 147 relayout_profiler.cpp 148 loadable_agent.cpp 149 default_debugger_agent.cpp 150 coroutines/coroutine.cpp 151 coroutines/threaded_coroutine.cpp 152 coroutines/stackful_coroutine.cpp 153 coroutines/coroutine_manager.cpp 154 coroutines/threaded_coroutine_manager.cpp 155 coroutines/stackful_coroutine_manager.cpp 156 coroutines/stackful_coroutine_worker.cpp 157 coroutines/coroutine_events.cpp 158 coroutines/coroutine_stats.cpp 159 fibers/fiber_context.cpp 160 compiler_thread_pool_worker.cpp 161 compiler_task_manager_worker.cpp 162) 163 164if(PANDA_TARGET_ARM32_ABI_SOFT OR PANDA_TARGET_ARM32_ABI_SOFTFP) 165 list(APPEND SOURCES 166 fibers/arch/arm/get.S 167 fibers/arch/arm/update.S 168 fibers/arch/arm/switch.S 169 bridge/arch/arm/interpreter_to_compiled_code_bridge_arm.S 170 bridge/arch/arm/compiled_code_to_interpreter_bridge_arm.S 171 bridge/arch/arm/compiled_code_to_interpreter_bridge_dyn_arm.S 172 bridge/arch/arm/interpreter_to_compiled_code_bridge_dyn_arm.S 173 bridge/arch/arm/compiled_code_to_runtime_bridge_arm.S 174 bridge/arch/arm/expand_compiled_code_args_dyn_arm.S 175 bridge/arch/arm/deoptimization_arm.S 176 arch/arm/osr_arm.S 177 arch/arm/interpreter_support.S) 178elseif (PANDA_TARGET_ARM32_ABI_HARD) 179 list(APPEND SOURCES 180 fibers/arch/arm/get.S 181 fibers/arch/arm/update.S 182 fibers/arch/arm/switch.S 183 bridge/arch/arm/interpreter_to_compiled_code_bridge_armhf.S 184 bridge/arch/arm/compiled_code_to_interpreter_bridge_armhf.S 185 bridge/arch/arm/compiled_code_to_interpreter_bridge_dyn_arm.S 186 bridge/arch/arm/interpreter_to_compiled_code_bridge_dyn_arm.S 187 bridge/arch/arm/compiled_code_to_runtime_bridge_arm.S 188 bridge/arch/arm/expand_compiled_code_args_dyn_arm.S 189 bridge/arch/arm/deoptimization_arm.S 190 arch/arm/osr_arm.S 191 arch/arm/interpreter_support.S) 192elseif(PANDA_TARGET_ARM64) 193 list(APPEND SOURCES 194 fibers/arch/aarch64/get.S 195 fibers/arch/aarch64/update.S 196 fibers/arch/aarch64/switch.S 197 bridge/arch/aarch64/interpreter_to_compiled_code_bridge_aarch64.S 198 bridge/arch/aarch64/compiled_code_to_interpreter_bridge_aarch64.S 199 bridge/arch/aarch64/compiled_code_to_interpreter_bridge_dyn_aarch64.S 200 bridge/arch/aarch64/interpreter_to_compiled_code_bridge_dyn_aarch64.S 201 bridge/arch/aarch64/compiled_code_to_runtime_bridge_aarch64.S 202 bridge/arch/aarch64/expand_compiled_code_args_dyn_aarch64.S 203 bridge/arch/aarch64/deoptimization_aarch64.S 204 arch/aarch64/osr_aarch64.S 205 arch/aarch64/interpreter_support.S) 206elseif(PANDA_TARGET_X86) 207 list(APPEND SOURCES 208 bridge/arch/x86/interpreter_to_compiled_code_bridge_x86.S 209 bridge/arch/x86/compiled_code_to_interpreter_bridge_x86.S 210 bridge/arch/x86/deoptimization_x86.S 211 arch/x86/osr_x86.S 212 arch/x86/interpreter_support.S) 213elseif(PANDA_TARGET_AMD64) 214 list(APPEND SOURCES 215 fibers/arch/amd64/get.S 216 fibers/arch/amd64/update.S 217 fibers/arch/amd64/switch.S 218 bridge/arch/amd64/compiled_code_to_interpreter_bridge_amd64.S 219 bridge/arch/amd64/compiled_code_to_interpreter_bridge_dyn_amd64.S 220 bridge/arch/amd64/interpreter_to_compiled_code_bridge_amd64.S 221 bridge/arch/amd64/interpreter_to_compiled_code_bridge_dyn_amd64.S 222 bridge/arch/amd64/compiled_code_to_runtime_bridge_amd64.S 223 bridge/arch/amd64/expand_compiled_code_args_dyn_amd64.S 224 bridge/arch/amd64/deoptimization_amd64.S 225 arch/amd64/common_amd64.S 226 arch/amd64/osr_amd64.S 227 arch/amd64/interpreter_support.S) 228endif() 229 230if (PANDA_TARGET_MOBILE_WITH_NATIVE_LIBS) 231 list(APPEND SOURCES ${PANDA_ROOT}/platforms/mobile/runtime/thread.cpp) 232else() 233 list(APPEND SOURCES ${PANDA_ROOT}/platforms/common/runtime/thread.cpp) 234endif() 235 236if (PANDA_TARGET_MOBILE) 237 list(APPEND SOURCES ${PANDA_ROOT}/platforms/mobile/runtime/verify_app_install.cpp) 238else() 239 list(APPEND SOURCES ${PANDA_ROOT}/platforms/common/runtime/verify_app_install.cpp) 240endif() 241 242set(INTERPRETER_IMPL_SOURCES 243 interpreter/interpreter_impl.cpp 244) 245 246panda_add_library(arkruntime_interpreter_impl OBJECT ${INTERPRETER_IMPL_SOURCES}) 247panda_set_lib_32bit_property(arkruntime_interpreter_impl) 248 249set(ISA_TEMPLATES 250 interpreter-inl_gen.h.erb 251 isa_constants_gen.h.erb 252 irtoc_interpreter_utils.h.erb 253 debug_test_interpreter-inl_gen.cpp.erb 254) 255 256set(GEN_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/include") 257file(MAKE_DIRECTORY ${GEN_INCLUDE_DIR}) 258panda_isa_gen( 259 TEMPLATES ${ISA_TEMPLATES} 260 SOURCE ${CMAKE_CURRENT_LIST_DIR}/interpreter/templates 261 DESTINATION ${GEN_INCLUDE_DIR} 262) 263 264set(ISA "${CMAKE_BINARY_DIR}/isa/isa.yaml") 265set(ISA_API "${PANDA_ROOT}/isa/isapi.rb") 266set(BRIDGE_DISPATCH_TEMPLATE "${CMAKE_CURRENT_LIST_DIR}/templates/bridge_dispatch.S.erb") 267set(BRIDGE_DISPATCH_DYN_TEMPLATE "${CMAKE_CURRENT_LIST_DIR}/templates/bridge_dispatch_dyn.S.erb") 268set(BRIDGE_ARCHS aarch64 arm armhf amd64 x86) 269foreach(arch ${BRIDGE_ARCHS}) 270 panda_gen_file( 271 DATA ${ISA} 272 TEMPLATE ${BRIDGE_DISPATCH_TEMPLATE} 273 OUTPUTFILE ${GEN_INCLUDE_DIR}/bridge_dispatch_${arch}.S 274 API ${ISA_API} 275 REQUIRES 276 ${CMAKE_CURRENT_LIST_DIR}/templates/bridge_helpers_${arch}.rb 277 ${CMAKE_CURRENT_LIST_DIR}/templates/bridge_helpers_common.rb 278 ${CMAKE_CURRENT_LIST_DIR}/templates/bridge_helpers_static.rb 279 ) 280 add_custom_target(bridge_dispatch_${arch} DEPENDS ${GEN_INCLUDE_DIR}/bridge_dispatch_${arch}.S ${ISA}) 281 add_dependencies(bridge_dispatch_${arch} isa_assert) 282 283 panda_gen_file( 284 DATA ${ISA} 285 TEMPLATE ${BRIDGE_DISPATCH_DYN_TEMPLATE} 286 OUTPUTFILE ${GEN_INCLUDE_DIR}/bridge_dispatch_dyn_${arch}.S 287 API ${ISA_API} 288 REQUIRES 289 ${CMAKE_CURRENT_LIST_DIR}/templates/bridge_helpers_${arch}.rb 290 ${CMAKE_CURRENT_LIST_DIR}/templates/bridge_helpers_common.rb 291 ${CMAKE_CURRENT_LIST_DIR}/templates/bridge_helpers_dynamic.rb 292 ) 293 add_custom_target(bridge_dispatch_dyn_${arch} DEPENDS ${GEN_INCLUDE_DIR}/bridge_dispatch_dyn_${arch}.S ${ISA}) 294 add_dependencies(bridge_dispatch_dyn_${arch} isa_assert) 295 296endforeach() 297 298set(GENERATOR ${PANDA_ROOT}/libpandafile/types.rb) 299set(TEMPLATE ${CMAKE_CURRENT_LIST_DIR}/templates/shorty_values.h.erb) 300set(DATAFILE ${PANDA_ROOT}/libpandafile/types.yaml) 301set(DEPENDENCIES ${GENERATOR} ${TEMPLATE} ${DATAFILE}) 302set(OUTFILE "${CMAKE_CURRENT_BINARY_DIR}/include/shorty_values.h") 303add_custom_command(OUTPUT "${OUTFILE}" 304 COMMENT "Generate shorty_values.h" 305 COMMAND ${PANDA_ROOT}/isa/gen.rb -d ${DATAFILE} -t ${TEMPLATE} -o "${OUTFILE}" -q ${GENERATOR} 306 DEPENDS ${DEPENDENCIES}) 307add_custom_target(shorty_values_gen_${PROJECT_NAME} ALL DEPENDS "${OUTFILE}") 308add_dependencies(panda_gen_files shorty_values_gen_${PROJECT_NAME}) 309 310panda_target_compile_options(arkruntime_interpreter_impl PUBLIC -Wno-invalid-offsetof) 311 312set_property(TARGET arkruntime_interpreter_impl PROPERTY POSITION_INDEPENDENT_CODE ON) 313 314if (PANDA_ENABLE_GLOBAL_REGISTER_VARIABLES) 315 if (PANDA_TARGET_ARM64) 316 panda_target_compile_options(arkruntime_interpreter_impl PUBLIC -ffixed-x20 -ffixed-x21 -ffixed-x22 -ffixed-x23 -ffixed-x24 -ffixed-x25 -ffixed-x28) 317 panda_target_compile_definitions(arkruntime_interpreter_impl PUBLIC FFIXED_REGISTERS) 318 endif() 319 320 # Temporary disable clang tidy as it cannot recognize -ffixed-<reg> params that we used. Should be fixed in clang tidy 9 321 set_target_properties(arkruntime_interpreter_impl PROPERTIES CXX_CLANG_TIDY "") 322endif() 323 324panda_target_include_directories(arkruntime_interpreter_impl 325 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} 326 PUBLIC ${PANDA_ROOT} 327 PUBLIC ${GEN_INCLUDE_DIR} 328 PUBLIC ${PANDA_ROOT}/compiler 329 PUBLIC ${PANDA_ROOT}/libpandabase 330 PUBLIC ${PANDA_ROOT}/libpandafile 331 PUBLIC ${PANDA_BINARY_ROOT}/panda_gen_options 332 PUBLIC ${PANDA_BINARY_ROOT} 333 PUBLIC ${PANDA_BINARY_ROOT}/libpandafile/include 334 PUBLIC ${PANDA_BINARY_ROOT}/libpandabase/generated 335 PUBLIC ${VERIFIER_INCLUDE_DIR} 336 PUBLIC ${PANDA_BINARY_ROOT} 337) 338 339panda_target_include_directories(arkruntime_interpreter_impl 340 SYSTEM PRIVATE "$<TARGET_PROPERTY:c_secshared,INCLUDE_DIRECTORIES>" 341) 342 343add_dependencies(arkruntime_interpreter_impl 344 isa_gen_${PROJECT_NAME} 345 ${PROJECT_NAME}_obj_options 346 intrinsics_gen_${PROJECT_NAME} 347 shorty_values_gen_${PROJECT_NAME} 348 arkbase 349 arkfile 350 entrypoints_gen 351) 352 353add_dependencies(arkcompiler entrypoints_gen entrypoints_compiler_checksum_gen) 354 355if (HOST_TOOLS) 356 # Host tools should take bitcode compiled for target 357 SET_SOURCE_FILES_PROPERTIES(${IRTOC_INT_LLVM_INL_MODULE} PROPERTIES 358 EXTERNAL_OBJECT true 359 GENERATED true) 360 add_custom_target(irtoc_int_llvm_inl_module) 361elseif (PANDA_LLVM_INTERPRETER AND PANDA_LLVM_INTERPRETER_INLINING) 362 set(sources 363 $<TARGET_PROPERTY:arkruntime_obj,SOURCE_DIR>/entrypoints/entrypoints.cpp 364 $<TARGET_PROPERTY:arkruntime_obj,SOURCE_DIR>/interpreter/runtime_interface.cpp 365 $<TARGET_PROPERTY:arkruntime_obj,SOURCE_DIR>/object_header.cpp 366 $<TARGET_PROPERTY:arkruntime_obj,SOURCE_DIR>/mem/heap_manager.cpp 367 $<TARGET_PROPERTY:arkruntime_obj,SOURCE_DIR>/mem/tlab.cpp 368 $<TARGET_PROPERTY:arkruntime_obj,SOURCE_DIR>/runtime.cpp 369 $<TARGET_PROPERTY:arkruntime_obj,SOURCE_DIR>/class_linker.cpp 370 ) 371 set(outputs "") 372 panda_add_llvm_bc_lib(TARGET irtoc_int_llvm_inl_module 373 SOURCES ${sources} 374 INCLUDES $<TARGET_PROPERTY:arkruntime_obj,INCLUDE_DIRECTORIES> 375 DEPENDS arkruntime_obj_options 376 asm_defines 377 compiler_options 378 compiler_intrinsics 379 cpu_features_gen 380 cross_values 381 entrypoints_compiler_checksum_gen 382 intrinsics_gen_arkruntime 383 intrinsics_gen_compiler 384 instructions_gen_compiler 385 isa_gen_compiler 386 profiling_gen 387 runtime_intrinsics_inl 388 OUTPUT_VARIABLE outputs 389 ) 390 set(IRTOC_INT_LLVM_INL_MODULE "${outputs}") 391 # Create the file with a list of bitcode files 392 file(GENERATE OUTPUT ${IRTOC_INT_LLVM_INL_MODULE_FILES_LIST} CONTENT "${outputs}") 393else() 394 add_custom_target(irtoc_int_llvm_inl_module) 395endif() 396 397if(NOT (CMAKE_CROSSCOMPILING OR PANDA_TARGET_OHOS)) 398 set(skip_fastpath_validation FALSE) 399 if (IRTOC_TARGET STREQUAL "arm64" AND PANDA_LLVM_INTERPRETER) 400 set(skip_fastpath_validation TRUE) 401 endif() 402 irtoc_compile(TARGET_NAME irtoc_fastpath 403 INPUT_FILES ${IRTOC_SOURCE_DIR}/scripts/common.irt 404 ${IRTOC_SOURCE_DIR}/scripts/resolvers.irt 405 ${IRTOC_SOURCE_DIR}/scripts/allocation.irt 406 ${IRTOC_SOURCE_DIR}/scripts/monitors.irt 407 ${IRTOC_SOURCE_DIR}/scripts/check_cast.irt 408 ${IRTOC_SOURCE_DIR}/scripts/gc.irt 409 ${IRTOC_SOURCE_DIR}/scripts/strings.irt 410 ${IRTOC_SOURCE_DIR}/scripts/string_builder.irt 411 ${IRTOC_SOURCE_DIR}/scripts/string_helpers.irt 412 ${IRTOC_SOURCE_DIR}/scripts/memcopy.irt 413 ${IRTOC_SOURCE_DIR}/scripts/arrays.irt 414 TARGET_VARIABLE IRTOC_FASTPATH_OBJ 415 TARGET_VARIABLE_LLVM IRTOC_FASTPATH_LLVM_OBJ 416 SKIP_VALIDATION ${skip_fastpath_validation}) 417 418 irtoc_compile(TARGET_NAME irtoc_interpreter 419 INPUT_FILES ${IRTOC_SOURCE_DIR}/scripts/interpreter.irt 420 TARGET_VARIABLE IRTOC_INTERPRETER_OBJ 421 LLVM_BACKEND_INLINE_MODULE_FILES ${IRTOC_INT_LLVM_INL_MODULE} 422 TARGET_VARIABLE_LLVM IRTOC_INTERPRETER_LLVM_OBJ) 423 set(irtoc_fastpath_target irtoc_fastpath) 424 set(irtoc_interpreter_target irtoc_interpreter) 425else() 426 ExternalProject_Get_Property(panda_host_tools binary_dir) 427 set(IRTOC_FASTPATH_OBJ "${binary_dir}/irtoc/irtoc_fastpath/irtoc_fastpath.o") 428 set(IRTOC_FASTPATH_LLVM_OBJ "${binary_dir}/irtoc/irtoc_fastpath/irtoc_fastpath_llvm.o") 429 set(IRTOC_INTERPRETER_OBJ "${binary_dir}/irtoc/irtoc_interpreter/irtoc_interpreter.o") 430 set(IRTOC_INTERPRETER_LLVM_OBJ "${binary_dir}/irtoc/irtoc_interpreter/irtoc_interpreter_llvm.o") 431 432 SET_SOURCE_FILES_PROPERTIES(${IRTOC_FASTPATH_OBJ} PROPERTIES 433 EXTERNAL_OBJECT true 434 GENERATED true 435 ) 436 SET_SOURCE_FILES_PROPERTIES(${IRTOC_FASTPATH_LLVM_OBJ} PROPERTIES 437 EXTERNAL_OBJECT true 438 GENERATED true 439 ) 440 SET_SOURCE_FILES_PROPERTIES(${IRTOC_INTERPRETER_OBJ} PROPERTIES 441 EXTERNAL_OBJECT true 442 GENERATED true 443 ) 444 SET_SOURCE_FILES_PROPERTIES(${IRTOC_INTERPRETER_LLVM_OBJ} PROPERTIES 445 EXTERNAL_OBJECT true 446 GENERATED true 447 ) 448 add_dependencies(host_tools_depends irtoc_int_llvm_inl_module) 449 set(irtoc_fastpath_target panda_host_tools-build) 450 set(irtoc_interpreter_target panda_host_tools-build) 451endif() 452 453set(IRTOC_LLVM_OBJECTS "") 454 455if (PANDA_LLVM_FASTPATH) 456 list(APPEND IRTOC_LLVM_OBJECTS ${IRTOC_FASTPATH_LLVM_OBJ}) 457endif() 458 459if (PANDA_LLVM_INTERPRETER) 460 list(APPEND IRTOC_LLVM_OBJECTS ${IRTOC_INTERPRETER_LLVM_OBJ}) 461endif() 462 463set(ARKRUNTIME_SOURCES 464 ${SOURCES} 465 ${CORE_VM_SOURCES} 466 ${VERIFIER_SOURCES} 467) 468 469panda_add_library(arkruntime_obj OBJECT 470 ${ARKRUNTIME_SOURCES} 471) 472 473set_target_properties(arkruntime_obj PROPERTIES POSITION_INDEPENDENT_CODE ON) 474 475if (PANDA_WITH_HIDDEN_SYMBOLS) 476 set_target_properties(arkruntime_obj PROPERTIES 477 CXX_VISIBILITY_PRESET hidden 478 VISIBILITY_INLINES_HIDDEN ON 479 ) 480endif() 481 482panda_add_library(arkruntime_interpreter_static STATIC 483 $<TARGET_OBJECTS:arkruntime_interpreter_impl> 484 ${IRTOC_FASTPATH_OBJ} 485 ${IRTOC_INTERPRETER_OBJ} 486 ${IRTOC_LLVM_OBJECTS} 487) 488 489panda_add_library(arkruntime_static STATIC 490 $<TARGET_OBJECTS:arkruntime_obj> 491 $<TARGET_OBJECTS:arkruntime_interpreter_impl> 492 ${IRTOC_FASTPATH_OBJ} 493 ${IRTOC_INTERPRETER_OBJ} 494 ${IRTOC_LLVM_OBJECTS} 495) 496panda_target_link_libraries(arkruntime_static arkruntime_obj) 497 498add_dependencies(arkruntime_interpreter_static 499 intrinsics_gen_${PROJECT_NAME} 500 isa_gen_pandaverification 501 messages_gen_pandaverification 502 messages_data_pandaverification 503 arkstdlib 504 asm_defines_generator 505 entrypoints_gen 506 profiling_gen 507 ${irtoc_fastpath_target} 508 ${irtoc_interpreter_target} 509) 510 511set(STACK_WALKER_HOOK_BRIDGE_SOURCE "") 512 513if(PANDA_TARGET_ARM32_ABI_SOFT OR PANDA_TARGET_ARM32_ABI_SOFTFP) 514 list(APPEND STACK_WALKER_HOOK_BRIDGE_SOURCE tests/arch/arm/stack_walker_hook_bridge.S) 515elseif (PANDA_TARGET_ARM32_ABI_HARD) 516 list(APPEND STACK_WALKER_HOOK_BRIDGE_SOURCE tests/arch/arm/stack_walker_hook_bridge.S) 517elseif(PANDA_TARGET_ARM64) 518 list(APPEND STACK_WALKER_HOOK_BRIDGE_SOURCE tests/arch/aarch64/stack_walker_hook_bridge.S) 519elseif(PANDA_TARGET_AMD64) 520 list(APPEND STACK_WALKER_HOOK_BRIDGE_SOURCE tests/arch/amd64/stack_walker_hook_bridge.S) 521endif() 522 523panda_add_library(arkruntime_stack_walker_obj OBJECT ${STACK_WALKER_HOOK_BRIDGE_SOURCE}) 524add_dependencies(arkruntime_stack_walker_obj arkruntime_obj) 525panda_target_include_directories(arkruntime_stack_walker_obj 526 PUBLIC ${PANDA_BINARY_ROOT}/runtime/asm_defines 527 PUBLIC ${PANDA_BINARY_ROOT}/runtime/include 528 PUBLIC ${PANDA_ROOT}/runtime 529) 530 531panda_target_sources(arkruntime_static PRIVATE ${STACK_WALKER_HOOK_BRIDGE_SOURCE}) 532 533panda_add_library(arkruntime SHARED $<TARGET_OBJECTS:arkruntime_obj> $<TARGET_OBJECTS:arkruntime_interpreter_impl>) 534panda_target_link_libraries(arkruntime arkruntime_obj arkruntime_interpreter_static) 535if (NOT PANDA_USE_PREBUILT_TARGETS) 536 add_dependencies(arkruntime arkruntime_static) 537endif () 538 539add_subdirectory(scheduler) 540add_subdirectory(asm_defines) 541 542add_dependencies(arkruntime_obj 543 intrinsics_gen_${PROJECT_NAME} 544 isa_gen_pandaverification 545 messages_gen_pandaverification 546 messages_data_pandaverification 547 arkstdlib 548 asm_defines_generator 549 entrypoints_gen 550 profiling_gen 551 ${irtoc_fastpath_target} 552 ${irtoc_interpreter_target} 553) 554 555if(PANDA_TARGET_ARM32_ABI_SOFT OR PANDA_TARGET_ARM32_ABI_SOFTFP) 556 add_dependencies(arkruntime_obj bridge_dispatch_arm bridge_dispatch_dyn_arm) 557 add_dependencies(panda_gen_files bridge_dispatch_arm bridge_dispatch_dyn_arm) 558elseif (PANDA_TARGET_ARM32_ABI_HARD) 559 add_dependencies(arkruntime_obj bridge_dispatch_armhf bridge_dispatch_dyn_arm) 560 add_dependencies(panda_gen_files bridge_dispatch_armhf bridge_dispatch_dyn_arm) 561elseif(PANDA_TARGET_ARM64) 562 add_dependencies(arkruntime_obj bridge_dispatch_aarch64 bridge_dispatch_dyn_aarch64) 563 add_dependencies(panda_gen_files bridge_dispatch_aarch64 bridge_dispatch_dyn_aarch64) 564elseif(PANDA_TARGET_X86) 565 add_dependencies(arkruntime_obj bridge_dispatch_x86) 566 add_dependencies(panda_gen_files bridge_dispatch_x86) 567elseif(PANDA_TARGET_AMD64) 568 add_dependencies(arkruntime_obj bridge_dispatch_amd64 bridge_dispatch_dyn_amd64) 569 add_dependencies(panda_gen_files bridge_dispatch_amd64 bridge_dispatch_dyn_amd64) 570endif() 571 572panda_target_include_directories(arkruntime_obj 573 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} 574 PUBLIC ${PANDA_ROOT} 575 PUBLIC ${PANDA_BINARY_ROOT} 576 PUBLIC ${PANDA_BINARY_ROOT}/runtime/asm_defines 577 PUBLIC ${GEN_INCLUDE_DIR} 578 PUBLIC ${VERIFIER_INCLUDE_DIR} 579) 580 581panda_target_link_libraries(arkruntime_obj arkbase arkfile arkcompiler dprof arkaotmanager) 582if (NOT PANDA_TARGET_OHOS) 583 panda_target_link_libraries(arkruntime_obj atomic) 584endif() 585 586set(CSA_TESTS_ARKRUNTIME_PATH ${GEN_INCLUDE_DIR}/debug_test_interpreter-inl_gen.cpp) 587panda_add_library(csa_tests_arkruntime_interpreter_impl OBJECT EXCLUDE_FROM_ALL ${CSA_TESTS_ARKRUNTIME_PATH}) 588panda_target_include_directories(csa_tests_arkruntime_interpreter_impl 589 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} 590 PUBLIC ${PANDA_ROOT} 591 PUBLIC ${GEN_INCLUDE_DIR} 592 PUBLIC ${PANDA_ROOT}/compiler 593 PUBLIC ${PANDA_ROOT}/libpandabase 594 PUBLIC ${PANDA_ROOT}/libpandafile 595 PUBLIC ${PANDA_BINARY_ROOT}/panda_gen_options 596 PUBLIC ${PANDA_BINARY_ROOT} 597 PUBLIC ${PANDA_BINARY_ROOT}/compiler/generated 598 PUBLIC ${PANDA_BINARY_ROOT}/libpandafile/include 599 PUBLIC ${PANDA_BINARY_ROOT}/libpandabase/generated 600 PUBLIC ${VERIFIER_INCLUDE_DIR} 601 PUBLIC ${PANDA_BINARY_ROOT} 602) 603 604panda_target_include_directories(csa_tests_arkruntime_interpreter_impl 605 SYSTEM PRIVATE "$<TARGET_PROPERTY:c_secshared,INCLUDE_DIRECTORIES>" 606) 607 608add_dependencies(csa_tests_arkruntime_interpreter_impl arkruntime_static) 609 610# Runtime uses CodeInfo from the compiler. Maybe in the future CodeInfo 611# will be moved to another place, then this line should be removed. 612panda_target_include_directories(arkruntime_obj PUBLIC ${PANDA_ROOT}/compiler) 613 614# Disable warning about offsetof usage for non-standard layout types. 615# In C++17 offsetof is conditionally implemented for such types, so 616# compiler should issue error if it doesn't implemented offsetof for 617# them. Also we use static asserts to ensure that offsetof works correcly 618# for non-standard layout types. 619panda_target_compile_options(arkruntime_obj PUBLIC -Wno-invalid-offsetof) 620 621if(PANDA_WITH_TESTS) 622 set(TEST_INTERPRETER_IMPL_SOURCES 623 tests/interpreter/test_interpreter_impl.cpp 624 ) 625 626 panda_add_library(arkruntime_test_interpreter_impl OBJECT ${TEST_INTERPRETER_IMPL_SOURCES}) 627 628 panda_target_compile_options(arkruntime_test_interpreter_impl PUBLIC -Wno-invalid-offsetof) 629 panda_set_lib_32bit_property(arkruntime_test_interpreter_impl) 630 631 if (PANDA_ENABLE_GLOBAL_REGISTER_VARIABLES) 632 if (PANDA_TARGET_ARM64) 633 panda_target_compile_options(arkruntime_test_interpreter_impl PUBLIC -ffixed-x20 -ffixed-x21 -ffixed-x22 -ffixed-x23 -ffixed-x24 -ffixed-x25 -ffixed-x28) 634 panda_target_compile_definitions(arkruntime_test_interpreter_impl PUBLIC FFIXED_REGISTERS) 635 endif() 636 637 # Temporary disable clang tidy as it cannot recognize -ffixed-<reg> params that we used. Should be fixed in clang tidy 9 638 set_target_properties(arkruntime_test_interpreter_impl PROPERTIES CXX_CLANG_TIDY "") 639 endif() 640 641 panda_target_include_directories(arkruntime_test_interpreter_impl 642 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} 643 PUBLIC ${PANDA_ROOT} 644 PUBLIC ${GEN_INCLUDE_DIR} 645 PUBLIC ${PANDA_ROOT}/compiler 646 PUBLIC ${PANDA_ROOT}/libpandabase 647 PUBLIC ${PANDA_ROOT}/libpandafile 648 PUBLIC ${PANDA_BINARY_ROOT}/panda_gen_options 649 PUBLIC ${PANDA_BINARY_ROOT}/libpandafile/include 650 PUBLIC ${PANDA_BINARY_ROOT} 651 PUBLIC ${PANDA_BINARY_ROOT}/libpandabase/generated 652 PUBLIC ${VERIFIER_INCLUDE_DIR} 653 ) 654 655 panda_target_include_directories(arkruntime_test_interpreter_impl 656 SYSTEM PUBLIC "$<TARGET_PROPERTY:c_secshared,INCLUDE_DIRECTORIES>" 657 ) 658 659 660 if (PANDA_WITH_TESTS) 661 panda_target_include_directories(arkruntime_test_interpreter_impl 662 SYSTEM PUBLIC "$<TARGET_PROPERTY:gtest,INCLUDE_DIRECTORIES>") 663 endif() 664 665 666 add_dependencies(arkruntime_test_interpreter_impl 667 isa_gen_${PROJECT_NAME} 668 intrinsics_gen_${PROJECT_NAME} 669 ${PROJECT_NAME}_obj_options 670 arkbase 671 arkfile 672 entrypoints_gen 673 profiling_gen 674 runtime_language_context 675 runtime_intrinsics_inl 676 source_languages_h 677 ) 678endif() 679 680if(PANDA_TARGET_ARM32_ABI_SOFT OR PANDA_TARGET_ARM32_ABI_SOFTFP) 681SET(INVOKE_HELPER tests/arch/arm/invokation_helper.S) 682elseif (PANDA_TARGET_ARM32_ABI_HARD) 683SET(INVOKE_HELPER tests/arch/arm/invokation_helper_hf.S) 684elseif(PANDA_TARGET_ARM64) 685SET(INVOKE_HELPER tests/arch/aarch64/invokation_helper.S) 686elseif(PANDA_TARGET_X86) 687#SET(INVOKE_HELPER tests/arch/x86/invokation_helper.S) 688elseif(PANDA_TARGET_AMD64) 689SET(INVOKE_HELPER tests/arch/amd64/invokation_helper.S) 690endif() 691 692function(add_gtests test_name) 693 cmake_parse_arguments(ARG "NO_WARNING_FILTER" "TEST_GROUP;STASH_LIST" "" ${ARGN}) 694 set(FLAGS_LIST NO_CORES) 695 if (ARG_NO_WARNING_FILTER) 696 set(FLAGS_LIST "${FLAGS_LIST};NO_WARNING_FILTER") 697 endif() 698 panda_add_gtest( 699 ${FLAGS_LIST} 700 NAME ${test_name} 701 SOURCES 702 ${ARG_UNPARSED_ARGUMENTS} 703 LIBRARIES 704 arkruntime 705 arkassembler 706 arkdisassembler 707 SANITIZERS 708 ${PANDA_SANITIZERS_LIST} 709 DEPS_TARGETS 710 arkstdlib 711 TEST_GROUP 712 ${ARG_TEST_GROUP} 713 STASH_LIST 714 ${ARG_STASH_LIST} 715 ) 716 717 if(TARGET ${test_name}) 718 panda_target_include_directories(${test_name} 719 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} 720 PUBLIC ${PANDA_ROOT} 721 PRIVATE ${GEN_INCLUDE_DIR} 722 ) 723 panda_target_compile_options(${test_name} PUBLIC "-Wno-ignored-attributes") 724 endif() 725 726endfunction() 727 728if (INTRUSIVE_TESTING) 729 if (NOT PANDA_ENABLE_THREAD_SANITIZER) 730 message(FATAL_ERROR "Intrusive testing requires enabled thread sanitizer, please set -DPANDA_ENABLE_THREAD_SANITIZER=true.") 731 endif() 732 if(NOT (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 14)) 733 message(FATAL_ERROR "Intrusive testing requires compiler clang++-14 or higher.") 734 endif() 735 set(IS_RUNTIME_INTRUSIVE_BUILD false) 736 add_subdirectory(tests/intrusive-tests ${PANDA_BINARY_ROOT}/runtime/tests/intrusive_tests/tests) 737 738 set(IS_RUNTIME_INTRUSIVE_BUILD true) 739 add_subdirectory(${PANDA_ROOT}/runtime/tests/intrusive-tests ${CMAKE_BINARY_DIR}/runtime/tests/intrusive_tests) 740endif() 741 742function(add_multithread_gtests test_name) 743 panda_add_gtest( 744 NAME ${test_name} 745 SOURCES 746 ${ARGN} 747 LIBRARIES 748 arkruntime 749 arkassembler 750 SANITIZERS 751 ${PANDA_SANITIZERS_LIST} 752 ) 753 754 if(TARGET ${test_name}) 755 panda_target_include_directories(${test_name} 756 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} 757 PUBLIC ${PANDA_ROOT} 758 PRIVATE ${GEN_INCLUDE_DIR} 759 ) 760 panda_target_compile_options(${test_name} PUBLIC "-Wno-ignored-attributes") 761 endif() 762 763endfunction() 764 765add_multithread_gtests ( 766 arkruntime_multithreaded_test 767 tests/multithreaded_intern_string_table_test.cpp 768) 769 770add_gtests( 771 arkruntime_bitmap_ClearRange_test 772 tests/bitmap_clear_range_test.cpp 773) 774 775add_gtests( 776 arkruntime_bitmap_OrderObjectAlignment_test 777 tests/bitmap_order_object_alignment_test.cpp 778) 779 780add_gtests( 781 arkruntime_bitmap_VisitorObjectAlignment_test 782 tests/bitmap_visitor_object_alignment_test.cpp 783) 784 785add_gtests( 786 arkruntime_bitmap_PageAlignment_test 787 tests/bitmap_page_alignment_test.cpp 788) 789 790add_gtests( 791 arkruntime_fibers_test 792 tests/fibers_test.cpp 793 NO_WARNING_FILTER 794) 795 796add_gtests( 797 arkruntime_core_layout_test 798 tests/array_test.cpp 799 tests/mark_word_test.cpp 800 tests/method_test.cpp 801 tests/compiler_thread_pool.cpp 802 tests/mock_queue_thread_pool.cpp 803 tests/string_table_test.cpp 804 tests/string_test.cpp 805 tests/compilation_status_test.cpp 806 tests/osr_code_test.cpp 807) 808 809add_gtests( 810 arkruntime_get_method_test 811 tests/getmethod_test.cpp 812) 813 814add_gtests( 815 arkruntime_memory_mem_leak_test 816 tests/mem_leak_test.cpp 817) 818 819add_gtests( 820 arkruntime_memory_statistic_test 821 tests/histogram_test.cpp 822 tests/mem_stats_additional_info_test.cpp 823 tests/mem_stats_gc_test.cpp 824 tests/mem_stats_gen_gc_test.cpp 825 tests/mem_stats_test.cpp 826) 827 828add_gtests( 829 arkruntime_memory_management_bump_allocator_test 830 tests/bump_allocator_test.cpp 831) 832 833add_gtests( 834 arkruntime_memory_management_frame_allocators_test 835 tests/frame_allocator_test.cpp 836 tests/stack_like_allocator_test.cpp 837) 838 839add_gtests( 840 arkruntime_memory_management_freelist_allocator_test 841 tests/freelist_allocator_test.cpp 842) 843 844add_gtests( 845 arkruntime_memory_management_humongous_obj_allocator_test 846 tests/humongous_obj_allocator_test.cpp 847) 848 849add_gtests( 850 arkruntime_memory_management_internal_allocator_test 851 tests/internal_allocator_test.cpp 852) 853 854add_gtests( 855 arkruntime_memory_management_malloc-proxy-allocator-test 856 tests/malloc-proxy-allocator-test.cpp 857) 858 859add_gtests( 860 arkruntime_memory_management_pygote_space_allocator_gen_test 861 tests/pygote_space_allocator_test_base.cpp 862 tests/pygote_space_allocator_gen_test.cpp 863) 864 865add_gtests( 866 arkruntime_memory_management_pygote_space_allocator_stw_test 867 tests/pygote_space_allocator_test_base.cpp 868 tests/pygote_space_allocator_stw_test.cpp 869) 870 871add_gtests( 872 arkruntime_memory_management_region_allocator_test 873 tests/region_allocator_test.cpp 874) 875 876add_gtests( 877 arkruntime_memory_management_rem_set_test 878 tests/rem_set_test.cpp 879) 880 881add_gtests( 882 arkruntime_memory_management_runslots_allocator_test 883 tests/runslots_allocator_test.cpp 884) 885 886add_gtests( 887 arkruntime_memory_management_test_2 888 tests/card_table_test.cpp 889 tests/crossing_map_test.cpp 890 tests/panda_smart_pointers_test.cpp 891 tests/panda_tl_containers_test.cpp 892 tests/tlab_test.cpp 893 tests/gc_task_test.cpp 894 tests/epsilon_gcs_test.cpp 895 tests/g1gc_test.cpp 896 tests/collection_set_test.cpp 897 tests/g1gc_fullgc_test.cpp 898 tests/object_helpers_test.cpp 899 tests/gc_log_test.cpp 900 tests/explicit_gc_test.cpp 901 tests/intrusive_gc_test_api_test.cpp 902 tests/g1_pause_tracker_test.cpp 903 tests/g1_analytics_test.cpp 904) 905 906add_gtests( 907 arkruntime_sa_object_helpers_test 908 tests/static_analyzer_test.cpp 909) 910 911add_gtests( 912 arkruntime_gc_trigger_test 913 tests/gc_trigger_test.cpp 914) 915 916add_gtests( 917 arkruntime_memory_management_heap_space_test 918 tests/heap_space_test.cpp 919) 920 921add_gtests( 922 arkruntime_multithreading_test 923 tests/compiler_queue_test.cpp 924 tests/monitor_test.cpp 925 tests/thread_test.cpp 926) 927 928add_gtests( 929 arkruntime_options_test 930 tests/options_test.cpp 931) 932 933add_gtests( 934 arkruntime_signal_test 935 tests/signal_handler_test.cpp 936) 937 938add_gtests( 939 arkruntime_regexp_test 940 tests/regexp_test.cpp 941 tests/dyn_buffer_test.cpp 942) 943 944# We run irtoc tests only in host mode, because irtoc tests are intended for testing only Irtoc language capabilities. 945if (PANDA_WITH_TESTS OR HOST_TOOLS) 946 if (NOT CMAKE_CROSSCOMPILING) 947 irtoc_compile(TARGET_NAME irtoc_tests 948 INPUT_FILES ${IRTOC_SOURCE_DIR}/scripts/tests.irt 949 TARGET_VARIABLE IRTOC_TESTS_OBJ) 950 set(irtoc_tests_target irtoc_tests) 951 else() 952 ExternalProject_Get_Property(panda_host_tools binary_dir) 953 set(IRTOC_TESTS_OBJ "${binary_dir}/irtoc/irtoc_tests/irtoc_tests.o") 954 955 SET_SOURCE_FILES_PROPERTIES(${IRTOC_TESTS_OBJ} PROPERTIES 956 EXTERNAL_OBJECT true 957 GENERATED true 958 ) 959 # Due to cmake complain about absence of the irtoc file, we just fake it until it will be generated 960 file(MAKE_DIRECTORY ${binary_dir}/irtoc/irtoc_tests) 961 if (NOT EXISTS ${IRTOC_TESTS_OBJ}) 962 file(TOUCH ${IRTOC_TESTS_OBJ}) 963 endif() 964 set(irtoc_tests_target panda_host_tools-build) 965 endif() 966 # In Host tools mode we only generate Irtoc files for irtoc_tests, we shouldn't create irtoc_tests itself. 967 if (irtoc_tests_target AND NOT HOST_TOOLS) 968 add_gtests( 969 arkruntime_irtoc_tests 970 tests/irtoc_test.cpp 971 ${IRTOC_TESTS_OBJ} 972 ) 973 add_dependencies(arkruntime_irtoc_tests ${irtoc_tests_target}) 974 endif() 975endif() 976 977if (NOT PANDA_PRODUCT_BUILD) 978 add_gtests( 979 arkruntime_intrinsics_blacklist_test 980 tests/intrinsics_blacklist_test.cpp 981 ) 982endif() 983 984if (TARGET arkruntime_test_interpreter_impl) 985 add_gtests( 986 arkruntime_interpreter_test 987 tests/c2i_bridge_test.cpp 988 tests/class_linker_test.cpp 989 tests/class_linker_test_extension.cpp 990 tests/exception_test.cpp 991 tests/interpreter/test_interpreter.cpp 992 tests/interpreter/test_runtime_interface.cpp 993 tests/interpreter_test.cpp 994 tests/interpreter_test_switch.cpp 995 tests/invokation_helper.cpp 996 $<TARGET_OBJECTS:arkruntime_test_interpreter_impl> 997 ${INVOKE_HELPER} 998 ) 999endif() 1000 1001# In interpreter_test.cpp tests ResolveCtorClass and 1002# ResolveField are extremely slow (that lead to timeout in arm32 debug builds). 1003# To avoid timeout these tests were moved to special targets 1004# and code generation that needed in tests is made in build time 1005add_gtests( 1006 interpreter_test_resolve_field 1007 tests/interpreter_test_resolve_field.cpp 1008) 1009 1010add_gtests( 1011 interpreter_test_resolve_ctor_class 1012 tests/interpreter_test_resolve_ctor_class.cpp 1013) 1014 1015if (PANDA_WITH_TESTS) 1016 file(MAKE_DIRECTORY ${PANDA_BINARY_ROOT}/bin-gtests/pre-build) 1017 1018 function(generate_gtests_prebuild test_name) 1019 set(SOURCE_TEMPLATE "${CMAKE_CURRENT_LIST_DIR}/tests/templates/${test_name}.pa.erb") 1020 set(GENERATED_OUTPUT "${PANDA_BINARY_ROOT}/bin-gtests/pre-build/${test_name}") 1021 1022 if(CMAKE_CROSSCOMPILING) 1023 ExternalProject_Get_Property(panda_host_tools binary_dir) 1024 set(assembler_target panda_host_tools-build) 1025 set(assembler_bin "${binary_dir}/assembler/ark_asm") 1026 else() 1027 set(assembler_target ark_asm) 1028 set(assembler_bin $<TARGET_FILE:${assembler_target}>) 1029 endif() 1030 1031 add_custom_command(OUTPUT ${GENERATED_OUTPUT}.abc 1032 COMMENT "Generating ${test_name}.abc" 1033 COMMAND erb ${SOURCE_TEMPLATE} > ${GENERATED_OUTPUT}.pa 1034 COMMAND ${assembler_bin} ${GENERATED_OUTPUT}.pa ${GENERATED_OUTPUT}.abc 1035 DEPENDS ${assembler_target} 1036 ) 1037 1038 add_custom_target(${test_name}_abc 1039 DEPENDS ${GENERATED_OUTPUT}.abc 1040 ) 1041 1042 add_dependencies(${test_name}_gtests ${test_name}_abc) 1043 endfunction() 1044 1045 generate_gtests_prebuild(interpreter_test_resolve_field) 1046 generate_gtests_prebuild(interpreter_test_resolve_ctor_class) 1047endif() 1048 1049add_gtests( 1050 arkruntime_utils_test 1051 tests/class_size_test.cpp 1052 tests/debugger_test.cpp 1053 tests/frame_test.cpp 1054 tests/i2c_bridge_test.cpp 1055 tests/math_helpers_test.cpp 1056 tests/stack_walker_test.cpp 1057 tests/time_utils_test.cpp 1058 ${INVOKE_HELPER} 1059 ${PANDA_ROOT}/compiler/tests/panda_runner.cpp 1060 $<TARGET_OBJECTS:arkruntime_stack_walker_obj> 1061) 1062 1063include(intrinsics.cmake) 1064include(icu.cmake) 1065 1066add_subdirectory(tooling/inspector) 1067 1068if(PANDA_WITH_TESTS) 1069 add_subdirectory(tests/tooling) 1070endif() 1071 1072add_subdirectory(profiling) 1073 1074panda_add_sanitizers(TARGET arkruntime_obj SANITIZERS ${PANDA_SANITIZERS_LIST}) 1075panda_add_sanitizers(TARGET arkruntime_interpreter_impl SANITIZERS ${PANDA_SANITIZERS_LIST}) 1076if(PANDA_WITH_TESTS AND TARGET arkruntime_test_interpreter_impl) 1077 panda_add_sanitizers(TARGET arkruntime_test_interpreter_impl SANITIZERS ${PANDA_SANITIZERS_LIST}) 1078endif() 1079