arkcompiler_ets_runtime/ecmascript/compiler/BUILD.gn
jiangmengyang 3e146639be RegExp getFlags IR 优化
Issue: https://gitee.com/openharmony/arkcompiler_ets_runtime/issues/IARK97
Signed-off-by: jiangmengyang <jiangmengyang3@huawei.com>
Change-Id: Iae8bcfcda15d28446a4189e6c3eca2cb6871dcd6
2024-09-26 23:15:38 +08:00

693 lines
19 KiB
Plaintext

# Copyright (c) 2021 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import("//arkcompiler/ets_runtime/js_runtime_config.gni")
if (defined(timeout)) {
_timeout_ = timeout
} else {
_timeout_ = 1200
}
config("include_llvm") {
if (compile_llvm_online) {
include_dirs = [
"//third_party/third_party_llvm-project/build/include",
"//third_party/third_party_llvm-project/llvm/include/",
]
} else {
if (is_mingw) {
include_dirs = [
"//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts_windows/llvm/include",
"//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts_windows/build/include",
]
} else if (is_mac) {
if (host_cpu == "arm64") {
include_dirs = [
"//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts_darwin_arm64/llvm/include",
"//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts_darwin_arm64/build/include",
]
} else {
include_dirs = [
"//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts_darwin_x64/llvm/include",
"//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts_darwin_x64/build/include",
]
}
} else {
if (host_cpu == "arm64" && host_os == "linux") {
include_dirs = [
"//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts_linux_aarch64/llvm/include",
"//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts_linux_aarch64/build/include",
]
} else {
if (current_cpu == "arm64") {
include_dirs = [
"//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts_aarch64/llvm/include",
"//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts_aarch64/build/include",
]
} else {
include_dirs = [
"//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts/llvm/include",
"//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts/build/include",
]
}
}
}
}
cflags_cc = [ "-DARK_GC_SUPPORT" ]
}
config("include_maple") {
include_dirs = [
"${MAPLEALL_ROOT}/maple_be/include/cg",
"${MAPLEALL_ROOT}/maple_be/include/litecg",
"${MAPLEALL_ROOT}/maple_be/cg/aarch64",
"${MAPLEALL_ROOT}/maple_be/include/ad",
"${MAPLEALL_ROOT}/maple_be/include/ad/target",
"${MAPLEALL_ROOT}/maple_be/include/be/aarch64",
"${MAPLEALL_ROOT}/maple_be/include/be",
"${MAPLEALL_ROOT}/maple_driver/include",
"${MAPLEALL_ROOT}/maple_driver/defs",
"${MAPLEALL_ROOT}/maple_driver/defs/default",
"${MAPLEALL_ROOT}/maple_util/include",
"${MAPLEALL_ROOT}/mpl2mpl/include",
"${MAPLEALL_ROOT}/mempool/include",
"${MAPLEALL_ROOT}/maple_phase/include",
"${MAPLEALL_ROOT}/maple_ir/include",
"${MAPLEALL_ROOT}/maple_me/include",
]
cflags_cc = [ "-Wno-gnu-zero-variadic-macro-arguments" ]
}
libark_jsoptimizer_sources = [
"access_object_stub_builder.cpp",
"aot_compilation_env.cpp",
"aot_compiler_preprocessor.cpp",
"aot_compiler_stats.cpp",
"argument_accessor.cpp",
"array_bounds_check_elimination.cpp",
"assembler/aarch64/assembler_aarch64.cpp",
"assembler/aarch64/extend_assembler.cpp",
"assembler/aarch64/macro_assembler_aarch64.cpp",
"assembler/x64/assembler_x64.cpp",
"assembler/x64/extended_assembler_x64.cpp",
"assembler/x64/macro_assembler_x64.cpp",
"assembler_module.cpp",
"async_function_lowering.cpp",
"base/depend_chain_helper.cpp",
"baseline/baseline_assembler.cpp",
"baseline/baseline_call_signature.cpp",
"baseline/baseline_compiler.cpp",
"baseline/baseline_stubs.cpp",
"bc_call_signature.cpp",
"builtins/builtins_array_stub_builder.cpp",
"builtins/builtins_call_signature.cpp",
"builtins/builtins_collator_stub_builder.cpp",
"builtins/builtins_collection_stub_builder.cpp",
"builtins/builtins_dataview_stub_builder.cpp",
"builtins/builtins_function_stub_builder.cpp",
"builtins/builtins_number_stub_builder.cpp",
"builtins/builtins_object_stub_builder.cpp",
"builtins/builtins_proxy_stub_builder.cpp",
"builtins/builtins_reflect_stub_builder.cpp",
"builtins/builtins_regexp_stub_builder.cpp",
"builtins/builtins_string_stub_builder.cpp",
"builtins/builtins_stubs.cpp",
"builtins/builtins_typedarray_stub_builder.cpp",
"builtins/containers_stub_builder.cpp",
"builtins/linked_hashtable_stub_builder.cpp",
"builtins_lowering.cpp",
"bytecode_circuit_builder.cpp",
"bytecode_info_collector.cpp",
"bytecodes.cpp",
"call_signature.cpp",
"call_stub_builder.cpp",
"circuit.cpp",
"circuit_builder.cpp",
"circuit_builder_helper.cpp",
"codegen/llvm/aarch64/aarch64_builder.cpp",
"codegen/llvm/llvm_codegen.cpp",
"codegen/llvm/llvm_ir_builder.cpp",
"codegen/llvm/x64/x64_builder.cpp",
"combined_pass_visitor.cpp",
"common_stubs.cpp",
"compilation_driver.cpp",
"compilation_env.cpp",
"compiler_log.cpp",
"constant_folding.cpp",
"dead_code_elimination.cpp",
"debug_info.cpp",
"early_elimination.cpp",
"escape_analysis.cpp",
"escape_analysis_editor.cpp",
"file_generators.cpp",
"frame_states.cpp",
"gate.cpp",
"gate_accessor.cpp",
"graph_editor.cpp",
"graph_linearizer.cpp",
"hash_stub_builder.cpp",
"hcr_circuit_builder.cpp",
"hcr_gate_meta_data.cpp",
"ic_stub_builder.cpp",
"induction_variable_analysis.cpp",
"instruction_combine.cpp",
"interpreter_stub.cpp",
"ir_builder.cpp",
"ir_module.cpp",
"jit_compilation_env.cpp",
"jit_compiler.cpp",
"later_elimination.cpp",
"lcr_circuit_builder.cpp",
"lcr_gate_meta_data.cpp",
"lexical_env_specialization_pass.cpp",
"loop_analysis.cpp",
"loop_peeling.cpp",
"mcr_circuit_builder.cpp",
"mcr_gate_meta_data.cpp",
"mcr_lowering.cpp",
"native_inline_lowering.cpp",
"new_object_stub_builder.cpp",
"ntype_bytecode_lowering.cpp",
"ntype_hcr_lowering.cpp",
"number_speculative_lowering.cpp",
"number_speculative_retype.cpp",
"number_speculative_runner.cpp",
"operations_stub_builder.cpp",
"pass_manager.cpp",
"post_schedule.cpp",
"precompile_checker.cpp",
"profiler_stub_builder.cpp",
"range_analysis.cpp",
"range_guard.cpp",
"rt_call_signature.cpp",
"scheduler.cpp",
"share_gate_meta_data.cpp",
"slowpath_lowering.cpp",
"state_split_linearizer.cpp",
"string_builder_optimizer.cpp",
"stub.cpp",
"stub_builder.cpp",
"trampoline/aarch64/asm_interpreter_call.cpp",
"trampoline/aarch64/baseline_call.cpp",
"trampoline/aarch64/common_call.cpp",
"trampoline/aarch64/optimized_call.cpp",
"trampoline/aarch64/optimized_fast_call.cpp",
"trampoline/x64/asm_interpreter_call.cpp",
"trampoline/x64/baseline_call.cpp",
"trampoline/x64/common_call.cpp",
"trampoline/x64/optimized_call.cpp",
"trampoline/x64/optimized_fast_call.cpp",
"ts_hcr_opt_pass.cpp",
"ts_inline_lowering.cpp",
"type.cpp",
"type_inference/pgo_type_infer.cpp",
"type_info_accessors.cpp",
"typed_bytecode_lowering.cpp",
"typed_hcr_lowering.cpp",
"typed_native_inline_lowering.cpp",
"useless_gate_elimination.cpp",
"value_numbering.cpp",
"verifier.cpp",
]
config("libark_jsoptimizer_set_config") {
# Setting up IS_RELEASE_VERSION if compiling as release version
if (build_variant == "user") {
cflags_c = [ "-DIS_RELEASE_VERSION" ]
cflags_cc = [ "-DIS_RELEASE_VERSION" ]
}
if (compile_llvm_online) {
lib_dirs = [ "//third_party/third_party_llvm-project/build/lib" ]
} else {
if (is_mingw) {
lib_dirs = [
"//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts_windows/build/lib",
"//prebuilts/mingw-w64/ohos/linux-x86_64/clang-mingw/x86_64-w64-mingw32",
]
} else if (is_mac) {
if (host_cpu == "arm64") {
lib_dirs = [ "//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts_darwin_arm64/build/lib" ]
} else {
lib_dirs = [ "//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts_darwin_x64/build/lib" ]
}
} else {
if (host_cpu == "arm64" && host_os == "linux") {
lib_dirs = [ "//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts_linux_aarch64/build/lib" ]
} else {
if (current_cpu == "arm64") {
lib_dirs = [ "//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts_aarch64/build/lib" ]
} else {
lib_dirs = [
"//prebuilts/ark_tools/ark_js_prebuilts/llvm_prebuilts/build/lib",
]
}
}
}
}
libs = [
"LLVMTarget",
"LLVMObject",
"LLVMMC",
"LLVMSupport",
"LLVMCore",
"LLVMExecutionEngine",
"LLVMInterpreter",
"LLVMMCJIT",
"LLVMExegesis",
"LLVMRuntimeDyld",
"LLVMInstCombine",
"LLVMAnalysis",
"LLVMScalarOpts",
"LLVMBinaryFormat",
"LLVMDebugInfoDWARF",
"LLVMRemarks",
"LLVMTextAPI",
"LLVMScalarOpts",
"LLVMTransformUtils",
"LLVMBitReader",
"LLVMAsmPrinter",
"LLVMProfileData",
"LLVMBitstreamReader",
"LLVMSelectionDAG",
"LLVMGlobalISel",
"LLVMLTO",
"LLVMCFGuard",
"LLVMVectorize",
"LLVMDemangle",
"LLVMipo",
"LLVMInstrumentation",
"LLVMDebugInfoCodeView",
"LLVMAggressiveInstCombine",
"LLVMAsmParser",
"LLVMMCParser",
"LLVMMIRParser",
"LLVMMCDisassembler",
"LLVMCodeGen",
"LLVMTransformUtils",
"LLVMIRReader",
"LLVMAArch64Utils",
"LLVMAArch64CodeGen",
"LLVMAArch64Info",
"LLVMAArch64Desc",
"LLVMAArch64Disassembler",
"LLVMAArch64AsmParser",
"LLVMFrontendOpenMP",
"LLVMBitWriter",
]
if (!is_mac && !is_ios) {
libs += [ "LLVMParts" ]
}
# Only support compiling aarch64 target at device-side(arm64 platform).
# So these os-related libs of x86 are not needed on arm64 platform.
if (is_mac || current_cpu != "arm64") {
libs += [
"LLVMX86AsmParser",
"LLVMX86CodeGen",
"LLVMX86Desc",
"LLVMX86Disassembler",
"LLVMX86Info",
]
}
if (is_mingw) {
libs += [
"kernel32",
"shell32",
"uuid",
"advapi32",
"msvcrt",
"msvcrt-os",
"windowsapp",
]
}
}
ohos_source_set("libark_jsoptimizer_set") {
stack_protector_ret = false
sources = libark_jsoptimizer_sources
if (enable_local_code_sign) {
sources += [ "$js_root/ecmascript/platform/unix/ohos/code_sign.cpp" ]
} else if (is_mingw) {
sources += [ "$js_root/ecmascript/platform/windows/code_sign.cpp" ]
} else {
sources += [ "$js_root/ecmascript/platform/unix/code_sign.cpp" ]
}
public_configs = [
":include_llvm",
"$js_root:ark_jsruntime_compiler_config",
"$js_root:ark_jsruntime_public_config",
":libark_jsoptimizer_set_config",
]
external_deps = [ "zlib:libz" ]
deps = []
if (!is_arkui_x) {
external_deps += [ "runtime_core:arkfile_header_deps" ]
} else {
deps += [ "$ark_root/libpandafile:arkfile_header_deps" ]
}
# hiviewdfx libraries
external_deps += hiviewdfx_ext_deps
deps += hiviewdfx_deps
part_name = "ets_runtime"
subsystem_name = "arkcompiler"
}
config("enable_maple_config") {
cflags_cc = [ "-DCOMPILE_MAPLE" ]
cflags_c = [ "-DCOMPILE_MAPLE" ]
}
ohos_source_set("libark_jsoptimizer_set_with_maple") {
stack_protector_ret = false
sources = libark_jsoptimizer_sources
if (enable_local_code_sign) {
sources += [ "$js_root/ecmascript/platform/unix/ohos/code_sign.cpp" ]
} else if (is_mingw) {
sources += [ "$js_root/ecmascript/platform/windows/code_sign.cpp" ]
} else {
sources += [ "$js_root/ecmascript/platform/unix/code_sign.cpp" ]
}
if (enable_jit_code_sign) {
sources += [ "$js_root/ecmascript/compiler/jit_signcode.cpp" ]
}
sources += [
"codegen/maple/litecg_codegen.cpp",
"codegen/maple/litecg_ir_builder.cpp",
]
public_configs = [
":include_llvm",
":include_maple",
"$js_root:ark_jsruntime_compiler_config",
"$js_root:ark_jsruntime_public_config",
":libark_jsoptimizer_set_config",
":enable_maple_config",
]
defines = []
external_deps = [ "zlib:libz" ]
if (enable_jit_code_sign) {
defines += [ "JIT_ENABLE_CODE_SIGN" ]
external_deps += [ "code_signature:libjit_code_sign" ]
if (disable_fort_switch) {
defines += [ "JIT_FORT_DISABLE" ]
}
}
if (enable_litecg_emit) {
defines += [ "ARK_LITECG_DEBUG" ]
}
deps = []
if (!is_arkui_x) {
external_deps += [ "runtime_core:arkfile_header_deps" ]
} else {
deps += [ "$ark_root/libpandafile:arkfile_header_deps" ]
}
# hiviewdfx libraries
external_deps += hiviewdfx_ext_deps
part_name = "ets_runtime"
subsystem_name = "arkcompiler"
}
ohos_source_set("libark_stub_set") {
stack_protector_ret = false
if (is_ohos && is_standard_system && current_toolchain != host_toolchain &&
!ark_standalone_build) {
sanitize = {
ubsan = true
}
}
deps = [ ":build_stub_to_cpp" ]
sources = [ "$root_gen_dir/arkcompiler/ets_runtime/stub_an.cpp" ]
public_configs = [
"$js_root:ark_jsruntime_common_config",
"$js_root:ark_jsruntime_public_config",
]
part_name = "ets_runtime"
subsystem_name = "arkcompiler"
}
ohos_source_set("libark_mock_stub_set") {
stack_protector_ret = false
sources = [ "mock/mock_stub_an.cpp" ]
public_configs = [
"$js_root:ark_jsruntime_common_config",
"$js_root:ark_jsruntime_public_config",
]
}
ohos_shared_library("libark_jsoptimizer") {
stack_protector_ret = false
if (is_ohos && is_standard_system && current_toolchain != host_toolchain &&
!ark_standalone_build) {
sanitize = {
ubsan = true
}
}
deps = [
":libark_jsoptimizer_set_with_maple",
"$js_root:libark_jsruntime",
"${MAPLEALL_ROOT}/maple_be:libcg",
]
external_deps = [ "bounds_checking_function:libsec_shared" ]
if (!is_arkui_x) {
external_deps += [ "runtime_core:libarkfile_static" ]
} else {
deps += [ "$ark_root/libpandafile:libarkfile_static" ]
}
defines = []
if (run_with_asan) {
defines = [ "RUN_WITH_ASAN" ]
}
if (enable_jit_code_sign) {
defines += [ "JIT_ENABLE_CODE_SIGN" ]
}
if (enable_hilog) {
external_deps += [ "hilog:libhilog" ]
}
install_enable = true
if (!is_mingw && !is_mac) {
output_extension = "so"
}
part_name = "ets_runtime"
subsystem_name = "arkcompiler"
}
ohos_executable("ark_stub_compiler") {
sources = [ "stub_compiler.cpp" ]
include_dirs = [ "$target_gen_dir" ]
configs = [
":include_llvm",
"$js_root:ark_jsruntime_compiler_config",
"$js_root:ark_jsruntime_public_config",
]
deps = [
":libark_jsoptimizer_set",
":libark_mock_stub_set",
"$js_root:libark_js_intl_set",
"$js_root:libark_jsruntime_set",
]
external_deps = [ "zlib:libz" ]
if (!is_arkui_x) {
external_deps += [ "runtime_core:libarkfile_static" ]
} else {
deps += [ "$ark_root/libpandafile:libarkfile_static" ]
}
if (!ark_standalone_build && host_os != "mac") {
ldflags = [ "-Wl,--lto-O0" ]
}
if (run_with_asan) {
defines = [ "RUN_WITH_ASAN" ]
}
if (defined(is_arkui_x) && is_arkui_x) {
deps += [
"$ark_third_party_root/icu/icu4c:static_icui18n",
"$ark_third_party_root/icu/icu4c:static_icuuc",
]
} else {
external_deps += [
"icu:shared_icui18n",
"icu:shared_icuuc",
]
}
install_enable = false
part_name = "ets_runtime"
subsystem_name = "arkcompiler"
}
ohos_executable("ark_aot_compiler") {
if (is_ohos && is_standard_system && current_toolchain != host_toolchain &&
!ark_standalone_build) {
sanitize = {
ubsan = true
}
}
sources = [ "aot_compiler.cpp" ]
configs = [
":include_llvm",
":include_maple",
"$js_root:ark_jsruntime_compiler_config",
"$js_root:ark_jsruntime_public_config",
]
deps = [ ":libark_mock_stub_set" ]
if (is_ohos) {
deps += [
":libark_jsoptimizer",
"$js_root:libark_jsruntime",
]
} else {
deps += [
":libark_jsoptimizer_set_with_maple",
"$js_root:libark_js_intl_set",
"$js_root:libark_jsruntime_set",
"${MAPLEALL_ROOT}/maple_be:libcg",
]
}
external_deps = [ "zlib:libz" ]
if (!is_arkui_x) {
external_deps += [
"runtime_core:arkfile_header_deps",
"runtime_core:libarkbase_static",
"runtime_core:libarkfile_static",
]
} else {
deps += [
"$ark_root/libpandabase:libarkbase_static",
"$ark_root/libpandafile:arkfile_header_deps",
"$ark_root/libpandafile:libarkfile_static",
]
}
if (defined(is_arkui_x) && is_arkui_x) {
deps += [
"$ark_third_party_root/icu/icu4c:static_icui18n",
"$ark_third_party_root/icu/icu4c:static_icuuc",
]
} else {
external_deps += [
"icu:shared_icui18n",
"icu:shared_icuuc",
]
}
# hiviewdfx libraries
external_deps += hiviewdfx_ext_deps
deps += hiviewdfx_deps
install_enable = true
part_name = "ets_runtime"
subsystem_name = "arkcompiler"
}
action("gen_stub_file") {
script = "$js_root/script/run_ark_executable.py"
deps = [ "$js_root/ecmascript/compiler:ark_stub_compiler(${host_toolchain})" ]
stub_file_gen_dir = "$root_gen_dir/arkcompiler/ets_runtime"
root_out_dir_with_host_toolchain =
get_label_info(":ark_stub_compiler(${host_toolchain})", "root_out_dir")
if (current_toolchain == host_toolchain) {
stub_option = " --stub-file=" + rebase_path(stub_file_gen_dir) + "/stub.an"
} else if (current_cpu == "x86_64") {
stub_option =
" --stub-file=" + rebase_path(stub_file_gen_dir) + "/stub.an" +
" --compiler-target-triple=x86_64-unknown-linux-gnu"
} else {
stub_option =
" --stub-file=" + rebase_path(stub_file_gen_dir) + "/stub.an" +
" --compiler-target-triple=aarch64-unknown-linux-gnu"
}
args = [
"--script-file",
rebase_path(root_out_dir_with_host_toolchain) +
"/arkcompiler/ets_runtime/ark_stub_compiler",
"--script-options",
stub_option,
"--expect-output",
"0",
"--timeout-limit",
"${_timeout_}",
"--env-path",
rebase_path(root_out_dir_with_host_toolchain) +
"/arkcompiler/ets_runtime:" +
rebase_path(root_out_dir_with_host_toolchain) +
"/${icu_subsystem_name}/${icu_part_name}:" +
rebase_path(root_out_dir_with_host_toolchain) + "/thirdparty/zlib:" +
rebase_path(root_out_dir_with_host_toolchain) +
"/resourceschedule/frame_aware_sched:" +
rebase_path(root_out_dir_with_host_toolchain) + "/hiviewdfx/hilog:" +
rebase_path(root_out_dir_with_host_toolchain) +
"/thirdparty/bounds_checking_function:" +
rebase_path("//prebuilts/clang/ohos/linux-x86_64/llvm/lib/"),
]
outputs = [ "$stub_file_gen_dir/stub.an" ]
}
ohos_prebuilt_shared_library("stub.an") {
deps = [ ":gen_stub_file" ]
source = "$root_gen_dir/arkcompiler/ets_runtime/stub.an"
relative_install_dir = arkcompiler_relative_lib_path
part_name = "ets_runtime"
subsystem_name = "arkcompiler"
}
action("build_stub_to_cpp") {
sources = [ "$root_gen_dir/arkcompiler/ets_runtime/stub.an" ]
script = "$js_root/script/build_resource_to_cpp.py"
deps = [ ":gen_stub_file" ]
args = [
"--input",
rebase_path("$root_gen_dir/arkcompiler/ets_runtime/stub.an"),
"--output",
rebase_path("$root_gen_dir/arkcompiler/ets_runtime/stub_an.cpp"),
]
outputs = [ "$root_gen_dir/arkcompiler/ets_runtime/stub_an.cpp" ]
}