1# Copyright (c) 2021-2022 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/pt_thread.cpp 33 tooling/debug_inf.cpp 34 field.cpp 35 gc_task.cpp 36 dprofiler/dprofiler.cpp 37 interpreter/interpreter.cpp 38 interpreter/runtime_interface.cpp 39 intrinsics.cpp 40 coretypes/string.cpp 41 coretypes/array.cpp 42 class.cpp 43 class_helper.cpp 44 locks.cpp 45 panda_vm.cpp 46 language_context.cpp 47 mem/gc/epsilon/epsilon.cpp 48 mem/gc/epsilon/epsilon_barrier.cpp 49 mem/gc/gc.cpp 50 mem/gc/gc_adaptive_stack.cpp 51 mem/gc/gc_settings.cpp 52 mem/gc/lang/gc_lang.cpp 53 mem/gc/gc_queue.cpp 54 mem/gc/gc_root.cpp 55 mem/gc/gc_root_type.cpp 56 mem/gc/gc_stats.cpp 57 mem/gc/gc_trigger.cpp 58 mem/gc/gc-hung/gc_hung.cpp 59 mem/gc/card_table.cpp 60 mem/gc/heap-space-misc/crossing_map.cpp 61 mem/gc/heap-space-misc/crossing_map_singleton.cpp 62 mem/gc/bitmap.cpp 63 mem/gc/gc_scope.cpp 64 mem/gc/gc_scoped_phase.cpp 65 mem/gc/gc_workers_thread_pool.cpp 66 mem/gc/stw-gc/stw-gc.cpp 67 mem/gc/gc_barrier_set.cpp 68 mem/gc/gen-gc/gen-gc.cpp 69 mem/gc/hybrid-gc/hybrid_object_allocator.cpp 70 mem/refstorage/ref_block.cpp 71 mem/refstorage/reference_storage.cpp 72 mem/refstorage/global_object_storage.cpp 73 mem/allocator.cpp 74 mem/tlab.cpp 75 mem/heap_manager.cpp 76 mem/heap_verifier.cpp 77 mem/rendezvous.cpp 78 mem/runslots.cpp 79 mem/region_space.cpp 80 mem/object_helpers.cpp 81 mem/mem_stats_additional_info.cpp 82 mem/mem_stats_default.cpp 83 mem/mem_stats.cpp 84 mem/internal_allocator.cpp 85 mem/panda_string.cpp 86 mem/memory_manager.cpp 87 mem/heap_space.cpp 88 methodtrace/trace.cpp 89 mark_word.cpp 90 method.cpp 91 monitor.cpp 92 monitor_object_lock.cpp 93 monitor_pool.cpp 94 global_object_lock.cpp 95 object_header.cpp 96 runtime.cpp 97 runtime_controller.cpp 98 string_table.cpp 99 thread.cpp 100 thread_manager.cpp 101 lock_order_graph.cpp 102 time_utils.cpp 103 timing.cpp 104 compiler.cpp 105 vtable_builder.cpp 106 imtable_builder.cpp 107 cframe.cpp 108 stack_walker.cpp 109 deoptimization.cpp 110 object_accessor.cpp 111 osr.cpp 112 arch/asm_support.cpp 113 cha.cpp 114 runtime_helpers.cpp 115 handle_scope.cpp 116 file_manager.cpp 117 mem/gc/generational-gc-base.cpp 118 mem/gc/g1/g1-gc.cpp 119 mem/gc/g1/g1-allocator.cpp 120 plugins.cpp 121 mem/gc/g1/update_remset_thread.cpp 122 relayout_profiler.cpp 123 loadable_agent.cpp 124) 125 126if(PANDA_TARGET_ARM32_ABI_SOFT OR PANDA_TARGET_ARM32_ABI_SOFTFP) 127 list(APPEND SOURCES 128 bridge/arch/arm/interpreter_to_compiled_code_bridge_arm.S 129 bridge/arch/arm/compiled_code_to_interpreter_bridge_arm.S 130 bridge/arch/arm/compiled_code_to_interpreter_bridge_dyn_arm.S 131 bridge/arch/arm/interpreter_to_compiled_code_bridge_dyn_arm.S 132 bridge/arch/arm/compiled_code_to_runtime_bridge_arm.S 133 bridge/arch/arm/deoptimization_arm.S 134 arch/arm/osr_arm.S 135 arch/arm/interpreter_support.S) 136elseif (PANDA_TARGET_ARM32_ABI_HARD) 137 list(APPEND SOURCES 138 bridge/arch/arm/interpreter_to_compiled_code_bridge_armhf.S 139 bridge/arch/arm/compiled_code_to_interpreter_bridge_armhf.S 140 bridge/arch/arm/compiled_code_to_interpreter_bridge_dyn_arm.S 141 bridge/arch/arm/interpreter_to_compiled_code_bridge_dyn_arm.S 142 bridge/arch/arm/compiled_code_to_runtime_bridge_arm.S 143 bridge/arch/arm/deoptimization_arm.S 144 arch/arm/osr_arm.S 145 arch/arm/interpreter_support.S) 146elseif(PANDA_TARGET_ARM64) 147 list(APPEND SOURCES 148 bridge/arch/aarch64/interpreter_to_compiled_code_bridge_aarch64.S 149 bridge/arch/aarch64/compiled_code_to_interpreter_bridge_aarch64.S 150 bridge/arch/aarch64/compiled_code_to_interpreter_bridge_dyn_aarch64.S 151 bridge/arch/aarch64/interpreter_to_compiled_code_bridge_dyn_aarch64.S 152 bridge/arch/aarch64/compiled_code_to_runtime_bridge_aarch64.S 153 bridge/arch/aarch64/deoptimization_aarch64.S 154 arch/aarch64/osr_aarch64.S 155 arch/aarch64/interpreter_support.S 156 tests/arch/aarch64/stack_walker_test_bridge_aarch64.S) 157elseif(PANDA_TARGET_X86) 158 list(APPEND SOURCES 159 bridge/arch/x86/interpreter_to_compiled_code_bridge_x86.S 160 bridge/arch/x86/compiled_code_to_interpreter_bridge_x86.S 161 bridge/arch/x86/deoptimization_x86.S 162 arch/x86/osr_x86.S 163 arch/x86/interpreter_support.S) 164elseif(PANDA_TARGET_AMD64) 165 list(APPEND SOURCES 166 bridge/arch/amd64/compiled_code_to_interpreter_bridge_amd64.S 167 bridge/arch/amd64/compiled_code_to_interpreter_bridge_dyn_amd64.S 168 bridge/arch/amd64/interpreter_to_compiled_code_bridge_amd64.S 169 bridge/arch/amd64/interpreter_to_compiled_code_bridge_dyn_amd64.S 170 bridge/arch/amd64/compiled_code_to_runtime_bridge_amd64.S 171 bridge/arch/amd64/deoptimization_amd64.S 172 arch/amd64/common_amd64.S 173 arch/amd64/osr_amd64.S 174 arch/amd64/interpreter_support.S) 175endif() 176 177if (NOT PANDA_TARGET_MOBILE_WITH_NATIVE_LIBS) 178 list(APPEND SOURCES ${PANDA_ROOT}/platforms/common/runtime/thread.cpp) 179endif() 180 181if (NOT PANDA_TARGET_MOBILE) 182 list(APPEND SOURCES ${PANDA_ROOT}/platforms/common/runtime/verify_app_install.cpp) 183endif() 184 185set(INTERPRETER_IMPL_SOURCES 186 interpreter/interpreter_impl.cpp 187) 188 189add_library(arkruntime_interpreter_impl OBJECT ${INTERPRETER_IMPL_SOURCES}) 190panda_set_lib_32bit_property(arkruntime_interpreter_impl) 191 192if (PANDA_WITH_ECMASCRIPT) 193 set_source_files_properties(${PANDA_ECMASCRIPT_PLUGIN_SOURCE}/runtime/js_locale.cpp PROPERTIES COMPILE_FLAGS -Wno-shadow) 194 set_source_files_properties(${PANDA_ECMASCRIPT_PLUGIN_SOURCE}/runtime/js_date_time_format.cpp PROPERTIES COMPILE_FLAGS -Wno-shadow) 195 set_source_files_properties(${PANDA_ECMASCRIPT_PLUGIN_SOURCE}/runtime/js_relative_time_format.cpp PROPERTIES COMPILE_FLAGS -Wno-shadow) 196 set_source_files_properties(${PANDA_ECMASCRIPT_PLUGIN_SOURCE}/runtime/js_number_format.cpp PROPERTIES COMPILE_FLAGS -Wno-shadow) 197 set_source_files_properties(${PANDA_ECMASCRIPT_PLUGIN_SOURCE}/runtime/global_env.cpp PROPERTIES COMPILE_FLAGS -Wno-shadow) 198 set_source_files_properties(${PANDA_ECMASCRIPT_PLUGIN_SOURCE}/runtime/ecma_vm.cpp PROPERTIES COMPILE_FLAGS -Wno-shadow) 199 200 set_source_files_properties(${PANDA_ECMASCRIPT_PLUGIN_SOURCE}/runtime/mem/verification.cpp PROPERTIES COMPILE_FLAGS -Wno-shadow) 201 set_source_files_properties(${PANDA_ECMASCRIPT_PLUGIN_SOURCE}/runtime/mem/semi_space_collector.cpp PROPERTIES COMPILE_FLAGS -Wno-shadow) 202 203 set_source_files_properties(${PANDA_ECMASCRIPT_PLUGIN_SOURCE}/runtime/snapshot/mem/snapshot_serialize.cpp PROPERTIES COMPILE_FLAGS -Wno-shadow) 204 205 set_source_files_properties(${PANDA_ECMASCRIPT_PLUGIN_SOURCE}/runtime/builtins.cpp PROPERTIES COMPILE_FLAGS -Wno-shadow) 206 set_source_files_properties(${PANDA_ECMASCRIPT_PLUGIN_SOURCE}/runtime/builtins/builtins_string.cpp PROPERTIES COMPILE_FLAGS -Wno-shadow) 207 set_source_files_properties(${PANDA_ECMASCRIPT_PLUGIN_SOURCE}/runtime/builtins/builtins_locale.cpp PROPERTIES COMPILE_FLAGS -Wno-shadow) 208 set_source_files_properties(${PANDA_ECMASCRIPT_PLUGIN_SOURCE}/runtime/builtins/builtins_intl.cpp PROPERTIES COMPILE_FLAGS -Wno-shadow) 209 set_source_files_properties(${PANDA_ECMASCRIPT_PLUGIN_SOURCE}/runtime/builtins/builtins_number_format.cpp PROPERTIES COMPILE_FLAGS -Wno-shadow) 210 set_source_files_properties(${PANDA_ECMASCRIPT_PLUGIN_SOURCE}/runtime/builtins/builtins_number.cpp PROPERTIES COMPILE_FLAGS -Wno-shadow) 211 set_source_files_properties(${PANDA_ECMASCRIPT_PLUGIN_SOURCE}/runtime/builtins/builtins_relative_time_format.cpp PROPERTIES COMPILE_FLAGS -Wno-shadow) 212 set_source_files_properties(${PANDA_ECMASCRIPT_PLUGIN_SOURCE}/runtime/builtins/builtins_date.cpp PROPERTIES COMPILE_FLAGS -Wno-shadow) 213 set_source_files_properties(${PANDA_ECMASCRIPT_PLUGIN_SOURCE}/runtime/builtins/builtins_date_time_format.cpp PROPERTIES COMPILE_FLAGS -Wno-shadow) 214endif() 215 216set(ISA_TEMPLATES 217 interpreter-inl_gen.h.erb 218 isa_constants_gen.h.erb 219 unimplemented_handlers-inl.h.erb 220 irtoc_interpreter_utils.h.erb 221 debug_test_interpreter-inl_gen.cpp.erb 222) 223 224set(GEN_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/include") 225file(MAKE_DIRECTORY ${GEN_INCLUDE_DIR}) 226panda_isa_gen( 227 TEMPLATES ${ISA_TEMPLATES} 228 SOURCE ${CMAKE_CURRENT_LIST_DIR}/interpreter/templates 229 DESTINATION ${GEN_INCLUDE_DIR} 230) 231 232set(ISA "${CMAKE_BINARY_DIR}/isa/isa.yaml") 233set(ISA_API "${PANDA_ROOT}/isa/isapi.rb") 234set(BRIDGE_DISPATCH_TEMPLATE "${CMAKE_CURRENT_LIST_DIR}/templates/bridge_dispatch.S.erb") 235set(BRIDGE_DISPATCH_DYN_TEMPLATE "${CMAKE_CURRENT_LIST_DIR}/templates/bridge_dispatch_dyn.S.erb") 236set(BRIDGE_ARCHS aarch64 arm armhf amd64 x86) 237foreach(arch ${BRIDGE_ARCHS}) 238 panda_gen_file( 239 DATAFILE ${ISA} 240 TEMPLATE ${BRIDGE_DISPATCH_TEMPLATE} 241 OUTPUTFILE ${GEN_INCLUDE_DIR}/bridge_dispatch_${arch}.S 242 REQUIRES ${ISA_API} ${CMAKE_CURRENT_LIST_DIR}/templates/bridge_helpers_${arch}.rb 243 ${CMAKE_CURRENT_LIST_DIR}/templates/bridge_helpers_common.rb 244 ${CMAKE_CURRENT_LIST_DIR}/templates/bridge_helpers_static.rb 245 ) 246 add_custom_target(bridge_dispatch_${arch} DEPENDS ${GEN_INCLUDE_DIR}/bridge_dispatch_${arch}.S ${ISA}) 247 add_dependencies(bridge_dispatch_${arch} isa_assert) 248 249 panda_gen_file( 250 DATAFILE ${ISA} 251 TEMPLATE ${BRIDGE_DISPATCH_DYN_TEMPLATE} 252 OUTPUTFILE ${GEN_INCLUDE_DIR}/bridge_dispatch_dyn_${arch}.S 253 REQUIRES ${ISA_API} ${CMAKE_CURRENT_LIST_DIR}/templates/bridge_helpers_${arch}.rb 254 ${CMAKE_CURRENT_LIST_DIR}/templates/bridge_helpers_common.rb 255 ${CMAKE_CURRENT_LIST_DIR}/templates/bridge_helpers_dynamic.rb 256 ) 257 add_custom_target(bridge_dispatch_dyn_${arch} DEPENDS ${GEN_INCLUDE_DIR}/bridge_dispatch_dyn_${arch}.S ${ISA}) 258 add_dependencies(bridge_dispatch_${arch} isa_assert) 259 260endforeach() 261 262set(GENERATOR ${PANDA_ROOT}/libpandafile/types.rb) 263set(TEMPLATE ${CMAKE_CURRENT_LIST_DIR}/templates/shorty_values.h.erb) 264set(DATAFILE ${PANDA_ROOT}/libpandafile/types.yaml) 265set(DEPENDENCIES ${GENERATOR} ${TEMPLATE} ${DATAFILE}) 266set(OUTFILE "${CMAKE_CURRENT_BINARY_DIR}/include/shorty_values.h") 267add_custom_command(OUTPUT "${OUTFILE}" 268 COMMENT "Generate shorty_values.h" 269 COMMAND ${PANDA_ROOT}/isa/gen.rb -d ${DATAFILE} -t ${TEMPLATE} -o "${OUTFILE}" -r ${GENERATOR} 270 DEPENDS ${DEPENDENCIES}) 271add_custom_target(shorty_values_gen_${PROJECT_NAME} ALL DEPENDS "${OUTFILE}") 272 273target_compile_options(arkruntime_interpreter_impl PUBLIC -Wno-invalid-offsetof) 274 275set_property(TARGET arkruntime_interpreter_impl PROPERTY POSITION_INDEPENDENT_CODE ON) 276 277if (PANDA_ENABLE_GLOBAL_REGISTER_VARIABLES) 278 if (PANDA_TARGET_ARM64) 279 target_compile_options(arkruntime_interpreter_impl PUBLIC -ffixed-x20 -ffixed-x21 -ffixed-x22 -ffixed-x23 -ffixed-x24 -ffixed-x25 -ffixed-x28) 280 target_compile_definitions(arkruntime_interpreter_impl PUBLIC FFIXED_REGISTERS) 281 endif() 282 283 # Temporary disable clang tidy as it cannot recognize -ffixed-<reg> params that we used. Should be fixed in clang tidy 9 284 set_target_properties(arkruntime_interpreter_impl PROPERTIES CXX_CLANG_TIDY "") 285endif() 286 287target_include_directories(arkruntime_interpreter_impl 288 PRIVATE "$<TARGET_PROPERTY:c_secshared,INCLUDE_DIRECTORIES>" 289 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} 290 PUBLIC ${PANDA_ROOT} 291 PUBLIC ${GEN_INCLUDE_DIR} 292 PUBLIC ${PANDA_ROOT}/compiler 293 PUBLIC ${PANDA_ROOT}/libpandabase 294 PUBLIC ${PANDA_ROOT}/libpandafile 295 PUBLIC ${PANDA_BINARY_ROOT}/panda_gen_options 296 PUBLIC ${PANDA_BINARY_ROOT} 297 PUBLIC ${PANDA_BINARY_ROOT}/libpandafile/include 298 PUBLIC ${PANDA_BINARY_ROOT}/libpandabase/generated 299 PUBLIC ${VERIFIER_INCLUDE_DIR} 300 PUBLIC ${PANDA_BINARY_ROOT} 301) 302 303add_dependencies(arkruntime_interpreter_impl 304 isa_gen_${PROJECT_NAME} 305 ${PROJECT_NAME}_static_options 306 intrinsics_gen_${PROJECT_NAME} 307 shorty_values_gen_${PROJECT_NAME} 308 arkbase 309 arkfile 310 entrypoints_gen 311) 312 313add_dependencies(arkcompiler entrypoints_gen entrypoints_compiler_checksum_gen) 314 315if(NOT (CMAKE_CROSSCOMPILING OR PANDA_TARGET_OHOS)) 316 irtoc_compile(TARGET_NAME irtoc_fastpath 317 INPUT_FILES ${IRTOC_SOURCE_DIR}/scripts/resolvers.irt 318 ${IRTOC_SOURCE_DIR}/scripts/allocation.irt 319 ${IRTOC_SOURCE_DIR}/scripts/monitors.irt 320 ${IRTOC_SOURCE_DIR}/scripts/check_cast.irt 321 TARGET_VARIABLE IRTOC_FASTPATH_OBJ) 322 323 irtoc_compile(TARGET_NAME irtoc_interpreter 324 INPUT_FILES ${IRTOC_SOURCE_DIR}/scripts/interpreter.irt 325 TARGET_VARIABLE IRTOC_INTERPRETER_OBJ) 326 set(irtoc_fastpath_target irtoc_fastpath) 327 set(irtoc_interpreter_target irtoc_interpreter) 328else() 329 ExternalProject_Get_Property(panda_host_tools binary_dir) 330 set(IRTOC_FASTPATH_OBJ "${binary_dir}/irtoc/irtoc_fastpath/irtoc_fastpath.o") 331 set(IRTOC_INTERPRETER_OBJ "${binary_dir}/irtoc/irtoc_interpreter/irtoc_interpreter.o") 332 333 SET_SOURCE_FILES_PROPERTIES(${IRTOC_FASTPATH_OBJ} PROPERTIES 334 EXTERNAL_OBJECT true 335 GENERATED true 336 ) 337 SET_SOURCE_FILES_PROPERTIES(${IRTOC_INTERPRETER_OBJ} PROPERTIES 338 EXTERNAL_OBJECT true 339 GENERATED true 340 ) 341 # Due to cmake complain about absence of the irtoc file, we just fake it until it will be generated 342 execute_process(COMMAND mkdir -p ${binary_dir}/irtoc/irtoc_fastpath) 343 execute_process(COMMAND touch ${IRTOC_FASTPATH_OBJ}) 344 execute_process(COMMAND mkdir -p ${binary_dir}/irtoc/irtoc_interpreter) 345 execute_process(COMMAND touch ${IRTOC_INTERPRETER_OBJ}) 346 set(irtoc_fastpath_target build_host_tools) 347 set(irtoc_interpreter_target build_host_tools) 348endif() 349 350set(ARKRUNTIME_SOURCES 351 ${IRTOC_FASTPATH_OBJ} 352 ${IRTOC_INTERPRETER_OBJ} 353 ${SOURCES} 354 ${CORE_VM_SOURCES} 355 ${VERIFIER_SOURCES} 356) 357 358add_library(arkruntime_static STATIC 359 ${ARKRUNTIME_SOURCES} 360 $<TARGET_OBJECTS:arkruntime_interpreter_impl> 361) 362set_property(TARGET arkruntime_static PROPERTY POSITION_INDEPENDENT_CODE ON) 363 364add_library(arkruntime SHARED $<TARGET_OBJECTS:arkruntime_interpreter_impl> runtime_helpers.cpp) 365target_link_libraries(arkruntime arkruntime_static) 366 367add_subdirectory(scheduler) 368 369 370panda_add_to_clang_tidy(TARGET arkruntime_static) 371panda_add_to_clang_tidy(TARGET arkruntime) 372 373add_subdirectory(asm_defines) 374 375add_dependencies(arkruntime_static 376 intrinsics_gen_${PROJECT_NAME} 377 isa_gen_pandaverification 378 messages_gen_pandaverification 379 arkstdlib 380 asm_defines_generator 381 entrypoints_gen 382 ${irtoc_fastpath_target} 383 ${irtoc_interpreter_target} 384) 385 386if(PANDA_TARGET_ARM32_ABI_SOFT OR PANDA_TARGET_ARM32_ABI_SOFTFP) 387 add_dependencies(arkruntime_static bridge_dispatch_arm bridge_dispatch_dyn_arm) 388elseif (PANDA_TARGET_ARM32_ABI_HARD) 389 add_dependencies(arkruntime_static bridge_dispatch_armhf bridge_dispatch_dyn_arm) 390elseif(PANDA_TARGET_ARM64) 391 add_dependencies(arkruntime_static bridge_dispatch_aarch64 bridge_dispatch_dyn_aarch64) 392elseif(PANDA_TARGET_X86) 393 add_dependencies(arkruntime_static bridge_dispatch_x86) 394elseif(PANDA_TARGET_AMD64) 395 add_dependencies(arkruntime_static bridge_dispatch_amd64 bridge_dispatch_dyn_amd64) 396endif() 397 398target_include_directories(arkruntime_static 399 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} 400 PUBLIC ${PANDA_ROOT} 401 PUBLIC ${PANDA_BINARY_ROOT} 402 PUBLIC ${PANDA_BINARY_ROOT}/runtime/asm_defines 403 PUBLIC ${GEN_INCLUDE_DIR} 404 PUBLIC ${VERIFIER_INCLUDE_DIR} 405) 406 407target_link_libraries(arkruntime_static arkbase arkfile arkcompiler dprof arkaotmanager) 408if (NOT PANDA_TARGET_OHOS) 409 target_link_libraries(arkruntime_static atomic) 410endif() 411 412set(CSA_TESTS_ARKRUNTIME_PATH ${GEN_INCLUDE_DIR}/debug_test_interpreter-inl_gen.cpp) 413add_library(csa_tests_arkruntime_interpreter_impl OBJECT EXCLUDE_FROM_ALL ${CSA_TESTS_ARKRUNTIME_PATH}) 414target_include_directories(csa_tests_arkruntime_interpreter_impl 415 PRIVATE "$<TARGET_PROPERTY:c_secshared,INCLUDE_DIRECTORIES>" 416 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} 417 PUBLIC ${PANDA_ROOT} 418 PUBLIC ${GEN_INCLUDE_DIR} 419 PUBLIC ${PANDA_ROOT}/compiler 420 PUBLIC ${PANDA_ROOT}/libpandabase 421 PUBLIC ${PANDA_ROOT}/libpandafile 422 PUBLIC ${PANDA_BINARY_ROOT}/panda_gen_options 423 PUBLIC ${PANDA_BINARY_ROOT} 424 PUBLIC ${PANDA_BINARY_ROOT}/compiler/generated 425 PUBLIC ${PANDA_BINARY_ROOT}/libpandafile/include 426 PUBLIC ${PANDA_BINARY_ROOT}/libpandabase/generated 427 PUBLIC ${VERIFIER_INCLUDE_DIR} 428 PUBLIC ${PANDA_BINARY_ROOT} 429) 430add_dependencies(csa_tests_arkruntime_interpreter_impl arkruntime_static) 431 432# Runtime uses CodeInfo from the compiler. Maybe in the future CodeInfo 433# will be moved to another place, then this line should be removed. 434target_include_directories(arkruntime_static PUBLIC ${PANDA_ROOT}/compiler) 435 436# Disable warning about offsetof usage for non-standard layout types. 437# In C++17 offsetof is conditionally implemented for such types, so 438# compiler should issue error if it doesn't implemented offsetof for 439# them. Also we use static asserts to ensure that offsetof works correcly 440# for non-standard layout types. 441target_compile_options(arkruntime_static PUBLIC -Wno-invalid-offsetof) 442 443#Build PANDA_QEMU_AARCH64_GCC_8 hangs for target arkruntime_test_interpreter_impl. It is compiler issue. 444if(PANDA_WITH_TESTS AND NOT PANDA_QEMU_AARCH64_GCC_8) 445 set(TEST_INTERPRETER_IMPL_SOURCES 446 tests/interpreter/test_interpreter_impl.cpp 447 ) 448 449 add_library(arkruntime_test_interpreter_impl OBJECT ${TEST_INTERPRETER_IMPL_SOURCES}) 450 451 target_compile_options(arkruntime_test_interpreter_impl PUBLIC -Wno-invalid-offsetof) 452 panda_set_lib_32bit_property(arkruntime_test_interpreter_impl) 453 454 if (PANDA_ENABLE_GLOBAL_REGISTER_VARIABLES) 455 if (PANDA_TARGET_ARM64) 456 target_compile_options(arkruntime_test_interpreter_impl PUBLIC -ffixed-x20 -ffixed-x21 -ffixed-x22 -ffixed-x23 -ffixed-x24 -ffixed-x25 -ffixed-x28) 457 target_compile_definitions(arkruntime_test_interpreter_impl PUBLIC FFIXED_REGISTERS) 458 endif() 459 460 # Temporary disable clang tidy as it cannot recognize -ffixed-<reg> params that we used. Should be fixed in clang tidy 9 461 set_target_properties(arkruntime_test_interpreter_impl PROPERTIES CXX_CLANG_TIDY "") 462 endif() 463 464 target_include_directories(arkruntime_test_interpreter_impl 465 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} 466 PUBLIC ${PANDA_ROOT} 467 PUBLIC ${GEN_INCLUDE_DIR} 468 PUBLIC ${PANDA_ROOT}/compiler 469 PUBLIC ${PANDA_ROOT}/libpandabase 470 PUBLIC ${PANDA_ROOT}/libpandafile 471 PUBLIC ${PANDA_BINARY_ROOT}/panda_gen_options 472 PUBLIC ${PANDA_BINARY_ROOT}/libpandafile/include 473 PUBLIC ${PANDA_BINARY_ROOT} 474 PUBLIC "$<TARGET_PROPERTY:c_secshared,INCLUDE_DIRECTORIES>" 475 PUBLIC ${PANDA_BINARY_ROOT}/libpandabase/generated 476 PUBLIC ${VERIFIER_INCLUDE_DIR} 477 ) 478 if (PANDA_WITH_TESTS) 479 target_include_directories(arkruntime_test_interpreter_impl 480 PUBLIC "$<TARGET_PROPERTY:gtest,INCLUDE_DIRECTORIES>") 481 endif() 482 483 484 add_dependencies(arkruntime_test_interpreter_impl 485 isa_gen_${PROJECT_NAME} 486 intrinsics_gen_${PROJECT_NAME} 487 ${PROJECT_NAME}_static_options 488 arkbase 489 arkfile 490 entrypoints_gen 491 ) 492 493 if(PANDA_TARGET_ARM32_ABI_SOFT OR PANDA_TARGET_ARM32_ABI_SOFTFP) 494 SET(INVOKE_HELPER tests/arch/arm/invokation_helper.S) 495 elseif (PANDA_TARGET_ARM32_ABI_HARD) 496 SET(INVOKE_HELPER tests/arch/arm/invokation_helper_hf.S) 497 elseif(PANDA_TARGET_ARM64) 498 SET(INVOKE_HELPER tests/arch/aarch64/invokation_helper.S) 499 elseif(PANDA_TARGET_X86) 500 #SET(INVOKE_HELPER tests/arch/x86/invokation_helper.S) 501 elseif(PANDA_TARGET_AMD64) 502 SET(INVOKE_HELPER tests/arch/amd64/invokation_helper.S) 503 endif() 504endif() 505 506function(add_gtests test_name) 507 panda_add_gtest( 508 NO_CORES 509 NAME ${test_name} 510 SOURCES 511 ${ARGN} 512 LIBRARIES 513 arkruntime 514 arkassembler 515 SANITIZERS 516 ${PANDA_SANITIZERS_LIST} 517 ) 518 519 if(TARGET ${test_name}) 520 target_include_directories(${test_name} 521 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} 522 PUBLIC ${PANDA_ROOT} 523 PRIVATE ${GEN_INCLUDE_DIR} 524 ) 525 target_compile_options(${test_name} PUBLIC "-Wno-ignored-attributes") 526 endif() 527 528endfunction() 529 530function(add_multithread_gtests test_name) 531 panda_add_gtest( 532 NAME ${test_name} 533 SOURCES 534 ${ARGN} 535 LIBRARIES 536 arkruntime 537 arkassembler 538 SANITIZERS 539 ${PANDA_SANITIZERS_LIST} 540 ) 541 542 if(TARGET ${test_name}) 543 target_include_directories(${test_name} 544 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} 545 PUBLIC ${PANDA_ROOT} 546 PRIVATE ${GEN_INCLUDE_DIR} 547 ) 548 target_compile_options(${test_name} PUBLIC "-Wno-ignored-attributes") 549 endif() 550 551endfunction() 552 553add_multithread_gtests ( 554 arkruntime_multithreaded_test 555 tests/multithreaded_intern_string_table_test.cpp 556) 557 558add_gtests( 559 arkruntime_bitmap_ClearRange_test 560 tests/bitmap_clear_range_test.cpp 561) 562 563add_gtests( 564 arkruntime_bitmap_OrderObjectAlignment_test 565 tests/bitmap_order_object_alignment_test.cpp 566) 567 568add_gtests( 569 arkruntime_bitmap_VisitorObjectAlignment_test 570 tests/bitmap_visitor_object_alignment_test.cpp 571) 572 573add_gtests( 574 arkruntime_bitmap_PageAlignment_test 575 tests/bitmap_page_alignment_test.cpp 576) 577 578add_gtests( 579 arkruntime_core_layout_test 580 tests/array_test.cpp 581 tests/mark_word_test.cpp 582 tests/method_test.cpp 583 tests/compiler_thread_pool.cpp 584 tests/mock_queue_thread_pool.cpp 585 tests/string_table_base_test.h 586 tests/string_table_gc_test.cpp 587 tests/string_test.cpp 588 tests/compilation_status_test.cpp 589 tests/osr_code_test.cpp 590) 591 592add_gtests( 593 arkruntime_get_method_test 594 tests/getmethod_test.cpp 595) 596 597add_gtests( 598 arkruntime_memory_mem_leak_test 599 tests/mem_leak_test.cpp 600) 601 602add_gtests( 603 arkruntime_memory_statistic_test 604 tests/histogram_test.cpp 605 tests/mem_stats_additional_info_test.cpp 606 tests/mem_stats_gc_test.cpp 607 tests/mem_stats_gen_gc_test.cpp 608 tests/mem_stats_test.cpp 609) 610 611add_gtests( 612 arkruntime_memory_management_bump_allocator_test 613 tests/bump_allocator_test.cpp 614) 615 616add_gtests( 617 arkruntime_memory_management_frame_allocator_test 618 tests/frame_allocator_test.cpp 619) 620 621add_gtests( 622 arkruntime_memory_management_freelist_allocator_test 623 tests/freelist_allocator_test.cpp 624) 625 626add_gtests( 627 arkruntime_memory_management_humongous_obj_allocator_test 628 tests/humongous_obj_allocator_test.cpp 629) 630 631add_gtests( 632 arkruntime_memory_management_internal_allocator_test 633 tests/internal_allocator_test.cpp 634) 635 636add_gtests( 637 arkruntime_memory_management_malloc-proxy-allocator-test 638 tests/malloc-proxy-allocator-test.cpp 639) 640 641add_gtests( 642 arkruntime_memory_management_pygote_space_allocator_gen_test 643 tests/pygote_space_allocator_gen_test.cpp 644) 645 646add_gtests( 647 arkruntime_memory_management_pygote_space_allocator_stw_test 648 tests/pygote_space_allocator_stw_test.cpp 649) 650 651# TODO(agrebenkin) Enable the tests as soon as full gc doesn't require to maintain free young-space-size 652#add_gtests( 653# arkruntime_memory_management_region_allocator_test 654# tests/region_allocator_test.cpp 655#) 656 657add_gtests( 658 arkruntime_memory_management_rem_set_test 659 tests/rem_set_test.cpp 660) 661 662add_gtests( 663 arkruntime_memory_management_runslots_allocator_test 664 tests/runslots_allocator_test.cpp 665) 666 667add_gtests( 668 arkruntime_memory_management_test_2 669 tests/card_table_test.cpp 670 tests/crossing_map_test.cpp 671 tests/panda_smart_pointers_test.cpp 672 tests/panda_tl_containers_test.cpp 673 tests/tlab_test.cpp 674 tests/gc_task_test.cpp 675 tests/g1gc_test.cpp 676 tests/collection_set_test.cpp 677 tests/g1gc_fullgc_test.cpp 678 tests/object_helpers_test.cpp 679 tests/gc_log_test.cpp 680) 681 682add_gtests( 683 arkruntime_sa_object_helpers_test 684 tests/static_analyzer_test.cpp 685) 686 687add_gtests( 688 arkruntime_gc_trigger_test 689 tests/gc_trigger_test.cpp 690) 691 692add_gtests( 693 arkruntime_memory_management_heap_space_test 694 tests/heap_space_test.cpp 695) 696 697add_gtests( 698 arkruntime_multithreading_test 699 tests/compiler_queue_test.cpp 700 tests/monitor_test.cpp 701 tests/thread_test.cpp 702) 703 704add_gtests( 705 arkruntime_options_test 706 tests/options_test.cpp 707) 708 709# We run irtoc tests only in host mode, because irtoc tests are intended for testing only Irtoc language capabilities. 710if (PANDA_WITH_TESTS OR HOST_TOOLS) 711 if (NOT CMAKE_CROSSCOMPILING) 712 irtoc_compile(TARGET_NAME irtoc_tests 713 INPUT_FILES ${IRTOC_SOURCE_DIR}/scripts/tests.irt 714 TARGET_VARIABLE IRTOC_TESTS_OBJ) 715 set(irtoc_tests_target irtoc_tests) 716 else() 717 ExternalProject_Get_Property(panda_host_tools binary_dir) 718 set(IRTOC_TESTS_OBJ "${binary_dir}/irtoc/irtoc_tests/irtoc_tests.o") 719 720 SET_SOURCE_FILES_PROPERTIES(${IRTOC_TESTS_OBJ} PROPERTIES 721 EXTERNAL_OBJECT true 722 GENERATED true 723 ) 724 # Due to cmake complain about absence of the irtoc file, we just fake it until it will be generated 725 execute_process(COMMAND mkdir -p ${binary_dir}/irtoc/irtoc_tests) 726 execute_process(COMMAND touch ${IRTOC_TESTS_OBJ}) 727 set(irtoc_tests_target build_host_tools) 728 endif() 729 # In Host tools mode we only generate Irtoc files for irtoc_tests, we shouldn't create irtoc_tests itself. 730 if (irtoc_tests_target AND NOT HOST_TOOLS) 731 add_gtests( 732 arkruntime_irtoc_tests 733 tests/irtoc_test.cpp 734 ${IRTOC_TESTS_OBJ} 735 ) 736 add_dependencies(arkruntime_irtoc_tests ${irtoc_tests_target}) 737 endif() 738endif() 739 740if (NOT PANDA_PRODUCT_BUILD) 741 add_gtests( 742 arkruntime_intrinsics_blacklist_test 743 tests/intrinsics_blacklist_test.cpp 744 ) 745endif() 746 747if (TARGET arkruntime_test_interpreter_impl) 748 add_gtests( 749 arkruntime_interpreter_test 750 tests/c2i_bridge_test.cpp 751 tests/class_linker_test.cpp 752 tests/class_linker_test_extension.cpp 753 tests/exception_test.cpp 754 tests/hybrid_object_allocator_test.cpp 755 tests/interpreter/test_interpreter.cpp 756 tests/interpreter/test_runtime_interface.cpp 757 tests/interpreter_test.cpp 758 tests/invokation_helper.cpp 759 $<TARGET_OBJECTS:arkruntime_test_interpreter_impl> 760 ${INVOKE_HELPER} 761 ) 762endif() 763 764# In interpreter_test.cpp tests ResolveCtorClass and 765# ResolveField are extremely slow (that lead to timeout in arm32 debug builds). 766# To avoid timeout these tests were moved to special targets 767# and code generation that needed in tests is made in build time 768add_gtests( 769 interpreter_test_resolve_field 770 tests/interpreter_test_resolve_field.cpp 771) 772 773add_gtests( 774 interpreter_test_resolve_ctor_class 775 tests/interpreter_test_resolve_ctor_class.cpp 776) 777 778if (PANDA_WITH_TESTS) 779 file(MAKE_DIRECTORY ${PANDA_BINARY_ROOT}/bin-gtests/pre-build) 780 781 function(generate_gtests_prebuild test_name) 782 set(SOURCE_TEMPLATE "${CMAKE_CURRENT_LIST_DIR}/tests/templates/${test_name}.pa.erb") 783 set(GENERATED_OUTPUT "${PANDA_BINARY_ROOT}/bin-gtests/pre-build/${test_name}") 784 785 if(CMAKE_CROSSCOMPILING) 786 ExternalProject_Get_Property(panda_host_tools binary_dir) 787 set(assembler_target panda_host_tools) 788 set(assembler_bin "${binary_dir}/assembler/ark_asm") 789 else() 790 set(assembler_target ark_asm) 791 set(assembler_bin $<TARGET_FILE:${assembler_target}>) 792 endif() 793 794 add_custom_command(OUTPUT ${GENERATED_OUTPUT}.abc 795 COMMENT "Generating ${test_name}.abc" 796 COMMAND erb ${SOURCE_TEMPLATE} > ${GENERATED_OUTPUT}.pa 797 COMMAND ${assembler_bin} ${GENERATED_OUTPUT}.pa ${GENERATED_OUTPUT}.abc 798 DEPENDS ${assembler_target} 799 ) 800 801 add_custom_target(${test_name}_abc 802 DEPENDS ${GENERATED_OUTPUT}.abc 803 ) 804 805 add_dependencies(${test_name}_gtests ${test_name}_abc) 806 endfunction() 807 808 generate_gtests_prebuild(interpreter_test_resolve_field) 809 generate_gtests_prebuild(interpreter_test_resolve_ctor_class) 810endif() 811 812add_gtests( 813 arkruntime_utils_test 814 tests/class_size_test.cpp 815 tests/debugger_test.cpp 816 tests/frame_test.cpp 817 tests/i2c_bridge_test.cpp 818 tests/math_helpers_test.cpp 819 tests/stack_walker_test.cpp 820 tests/time_utils_test.cpp 821) 822 823include(intrinsics.cmake) 824 825add_subdirectory(tooling/inspector) 826 827if(PANDA_WITH_TESTS) 828 add_subdirectory(tests/tooling) 829endif() 830 831panda_add_sanitizers(TARGET arkruntime SANITIZERS ${PANDA_SANITIZERS_LIST}) 832panda_add_sanitizers(TARGET arkruntime_static SANITIZERS ${PANDA_SANITIZERS_LIST}) 833panda_add_sanitizers(TARGET arkruntime_interpreter_impl SANITIZERS ${PANDA_SANITIZERS_LIST}) 834if(PANDA_WITH_TESTS AND TARGET arkruntime_test_interpreter_impl) 835 panda_add_sanitizers(TARGET arkruntime_test_interpreter_impl SANITIZERS ${PANDA_SANITIZERS_LIST}) 836endif() 837add_check_style(".") 838