arkcompiler_runtime_core/static_core
openharmony_ci 9cb92b097c
!2709 Move functions from build_sdk script to separate file
Merge pull request !2709 from Rokashevich Svetlana/split_build_sdk_script
2024-10-26 18:29:18 +00:00
..
abc2program Remove declgen _$trigger_cctor$_ references 2024-10-16 20:05:49 +03:00
assembler Fixes for standalone win build 2024-10-22 16:35:29 +03:00
bytecode_optimizer Fixes for standalone win build 2024-10-22 16:35:29 +03:00
cmake Static abc2program 2024-09-27 17:53:10 +03:00
compiler !2671 Upgrade VIXL version from 6.3.0 to 7.0.0 2024-10-25 21:04:53 +00:00
cross_values Fix call native code from Irtoc Fastpath 2024-08-31 22:22:11 +08:00
disassembler Fixes for standalone win build 2024-10-22 16:35:29 +03:00
docs [PT] Prepare expression evaluation for merge 2024-09-29 15:45:20 +03:00
dprof !2371 [GN] Fix gn files for standalone build 2024-09-16 12:12:16 +03:00
extras Update all copyrights 2024-07-20 18:52:46 +03:00
gn Suppress/fix codecheck warnings 2024-10-11 10:22:40 +03:00
irtoc !2593 [Compiler] Fix preheaders pointers 2024-10-18 16:04:26 +00:00
isa Use standard /usr/bin/env sha-bang in scripts 2024-08-17 09:14:46 +03:00
ldscripts Add arkplatform and static_core 2023-09-29 17:50:24 +03:00
libllvmbackend [ArkTS][Compiler] Implement getBytes() with IrToc 2024-09-27 21:46:14 +08:00
libpandabase Fixes for standalone win build 2024-10-22 16:35:29 +03:00
libpandafile Fixes for standalone win build 2024-10-22 16:35:29 +03:00
libziparchive Fixes for standalone win build 2024-10-22 16:35:29 +03:00
models Update all copyrights 2024-07-20 18:52:46 +03:00
panda Suppress/fix codecheck warnings 2024-10-15 15:59:46 +03:00
pandastdlib Update all copyrights 2024-07-20 18:52:46 +03:00
patches !2371 [GN] Fix gn files for standalone build 2024-09-16 12:12:16 +03:00
platforms Fixes for standalone win build 2024-10-22 16:35:29 +03:00
plugins !2425 Standalone win build 2024-10-25 14:32:18 +00:00
quickener Fix codecheck warnings 2024-08-11 00:17:05 +03:00
runtime !2425 Standalone win build 2024-10-25 14:32:18 +00:00
scripts !2709 Move functions from build_sdk script to separate file 2024-10-26 18:29:18 +00:00
static_linker Suppress/fix codecheck warnings 2024-10-17 15:45:57 +03:00
templates Use standard /usr/bin/env sha-bang in scripts 2024-08-17 09:14:46 +03:00
tests !2648 [RUNTIME] Need to merge 10.14 PR shuttle dev to master 2024-10-25 06:00:46 +00:00
tools !2498 Fix codecheck issues in static_core/tools 2024-10-14 16:06:13 +00:00
verification Suppress/fix codecheck warnings 2024-10-17 15:45:57 +03:00
.clang-format Add arkplatform and static_core 2023-09-29 17:50:24 +03:00
.clang-tidy Update all copyrights 2024-07-20 18:52:46 +03:00
.gn Update all copyrights 2024-07-20 18:52:46 +03:00
ark_config.gni Abckit support in compiler 2024-09-27 13:19:21 +03:00
ark_root.gni !2371 [GN] Fix gn files for standalone build 2024-09-16 12:12:16 +03:00
AUTHORS Add arkplatform and static_core 2023-09-29 17:50:24 +03:00
BUILD.gn !2371 [GN] Fix gn files for standalone build 2024-09-16 12:12:16 +03:00
CMakeLists.txt Static abc2program 2024-09-27 17:53:10 +03:00
codecheck_ignore.json Resolve codecheck for MM components 2024-10-22 17:30:36 +03:00
LICENSE Add arkplatform and static_core 2023-09-29 17:50:24 +03:00
OAT.xml Fix OAT.xml for static_core 2024-09-23 07:54:05 +03:00
README.md [GN] Fix gn standalone build and add tests 2024-09-02 22:31:51 +03:00
REVIEWERS Resolve codecheck for MM components 2024-10-22 17:30:36 +03:00

Bootstrapping

Currently an officially supported host OS for development, building and testing is Ubuntu 18.04 and Ubuntu 20.04. The full list of packages required for building and testing the project is specified in scripts/deps-lists files. These packages can be installed either manually or by running a bootstrap script:

$ sudo ./scripts/install-deps-ubuntu

For more bootstrapping options, run:

$ sudo ./scripts/install-deps-ubuntu --help

E.g. for development purposes you should run:

$ sudo ./scripts/install-deps-ubuntu -i=dev

If you want additionally to install Python dependencies for running tests add a parameter -i=test:

$ sudo ./scripts/install-deps-ubuntu -i=dev -i=test

It creates a virtual environment .venv-panda in your home directory with all required dependencies. Later, tests Python scripts can activate this environment. If you already have run with the parameter -i=test the second time it might be skipped.

Third party

Panda uses third party libraries. To install the libraries and apply patches, run:

$ ./scripts/install-third-party --force-clone

Building

Assuming your system is bootstrapped, please run the following commands in the root of the project:

$ mkdir panda-build
$ cd panda-build
$ cmake /path/to/panda/repository -GNinja
$ ninja

This will build Panda in debug mode with your default C++ compiler. All supported compilers can be found in cmake/toolchain. E.g., to build with Clang 14, pass a path to the corresponding toolchain file during configuration:

$ cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/panda/repository/cmake/toolchain/host_clang_14.cmake /path/to/panda/repository

Explicitly setting build types

Recommended way to build Panda is to set CMAKE_BUILD_TYPE variable explicitly during configurations. Supported values are:

Mode Assertions Optimizations Debug info
Debug Yes None (CMake default) -g (CMake default)
Release No -O3 (CMake default) None (CMake default)
FastVerify Yes -O2 -ggdb3

Notes:

  • Other common modes (RelWithDebInfo, MinSizeRel, DebugDetailed) should work but they are not tested in CI.
  • Unlike RelWithDebInfo, FastVerify preserves assertions (and provides more verbose debug information). Use this build type for running heavy test suites when you want both fast-running code and debuggability.
  • DebugDetailed gives more debug information than Debug, it can be usefull for debugging unit tests for example.

Example:

$ cmake -DCMAKE_BUILD_TYPE=Release ...

Building with LLVM Backend

If you want to build Ark with LLVM Backend you need to build first special modified LLVM 15 binaries.

If modified LLVM available in /opt, the following two options are necessary to build Ark with LLVM Backend functions.

cmake -DPANDA_LLVM_BACKEND=true -DLLVM_TARGET_PATH=/opt/llvm-15-{type}-{arch} ...

The PANDA_LLVM_BACKEND enables:

  1. LLVM Irtoc Interpreter. Use -DPANDA_LLVM_INTERPRETER=OFF to disable.
  2. LLVM Fastpaths compilation. Use -DPANDA_LLVM_FASTPATH=OFF to disable.
  3. LLVM Interpreter inlining. Use -DPANDA_LLVM_INTERPRETER_INLINING=OFF to disable.
  4. LLVM AOT compiler. Use -DPANDA_LLVM_AOT=OFF to disable.

PANDA_LLVM_INTERPRETER, PANDA_LLVM_FASTPATH, and PANDA_LLVM_AOT are ON if PANDA_LLVM_BACKEND is turned on.

It is recommended to choose clang compiler using toolchain files: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain/host_clang_14.cmake. By default GNU compiler c++ is used, but some features are not available in such gcc builds.

Cross ARM64 build with LLVM Backend

For cross-build, when e.g. -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain/cross-clang-14-qemu-aarch64.cmake is used, two LLVM-paths options are required when all LLVM Backend functions are enabled.

  • First one is target LLVM, like -DLLVM_TARGET_PATH=/opt/llvm-15-debug-aarch64
    • It is required for AOT, so, alternatively, you can use -DPANDA_LLVM_AOT=OFF.
  • Second one is host LLVM, like -DLLVM_HOST_PATH=/opt/llvm-15-debug-x86_64
    • It is required for Irtoc compilation, so, alternatively, you can disable appropriate Interpreter and FastPath options (see above).

Running tests with QEMU for cross-compiled aarch64/arm builds

Recommended QEMU version for running tests is 6.2.0 (but 5.1+ should be ok, too). By default, it is downloaded and installed during environment bootstrap. Any system-installed package is left intact. If recommended QEMU version is not accessible via $PATH it can be specified during configuration time:

# If QEMU is available as /opt/qemu-6.2.0/bin/qemu-aarch64
$ cmake -DQEMU_PREFIX=/opt/qemu-6.2.0 ...

Building with GN

Using bootstrap

Build arkts_bin, ark_aot, es2panda, verifier_bin and ets_interop_js_napi targets.

./scripts/build-panda-with-gn

Mannually

  1. Getting GN binary
$ git clone https://gn.googlesource.com/gn
$ cd gn
$ python build/gen.py
$ ninja -C out
  1. Build panda using gn (arkts_asm, arkts_disasm, ark_aot, ark_aotdump, arkts_bin, es2panda, and verifier_bin targets are supported)
$ cd /path/to/panda/repository
$ /path/to/gn/repository/out/gn gen out
$ ninja -C out arkts_bin

When standard system, use

$ cd /path/to/panda/repository
$ /path/to/gn/repository/out/gn --args=is_standard_system=true gen out
$ ninja -C out <target name>

To use LLVM Backend add the following arguments:

$ /path/to/gn/repository/out/gn out is_llvmbackend=true llvm_target_dir="/opt/llvm-15-{type}-{arch}" ...

Setting is_llvmbackend=true option enables the same scenarios as -DPANDA_LLVM_BACKEND=true option in cmake builds

Further reading

Testing

For testing, the following umbrella targets that guarantee building prior to running may be used:

  • tests, for running all testing suites.
  • tests_full, for running all testing suites and various code linters.

Clang tools

clang-format and clang-tidy checks are integrated into build system and can be called by target of build system:

$ ninja code-style-check # clang-format
$ ninja clang-tidy-check # clang-tidy

Test coverage

In order to measure bytecode optimizer coverage, configure your build with -DENABLE_BYTECODE_OPTIMIZER_COVERAGE=true. Then run:

$ ninja bytecode_optimizer_coverage

Benchmarking

To build and run benchmarks, please use the umbrella target benchmarks or any of its dependencies. Please see the root CMakeLists.txt for more details.

NB! Make sure that you configure your build with -DCMAKE_BUILD_TYPE=Release, otherwise your run will most likely be dead slow.

Running

Running assembler

Assuming that you are in panda-build directory, please run:

$ ./bin/ark_asm /path/to/panda-assembly.pa /path/to/binary/output.abc

Running interpreter

Assuming that your main function is defined as .function main(...) in the assembly listing, and /path/to/binary/output.abc is the result of the assembler, please run:

$ ./bin/ark /path/to/binary/output.abc _GLOBAL::main