A Tutorial for Building Maple for ARM and Compiling C Codes
last updated: 2020-10-13
A General Guidance of Building Maple for ARM and Running C Examples
Here is a step by step tutorial for building the Maple for the ARM release and running real C examples, which will print some ASCII texts. We did this demo in the environment below:
Operating System: Ubuntu 18.04.5 LTS
Kernel: 4.15.0
GCC: 7.5.0
-
Clone the repository from the gitee to your local environment.
git clone https://gitee.com/openarkcompiler-incubator/mapleall.git cd mapleall
-
Set up tools for testing.
cd tools/ ./setup_tools.sh
-
Initialize the environment for building the Maple for ARM with the release version.
cd .. source envsetup.sh arm release
-
Now, can we make and install the Maple, and all maple excutables can be found in the $MAPLE_ROOT/bin directory. Let MAPLE_ROOT be the top directory of the mapleall repository
make make install
-
Run the two examples for fun.
First, we will use ast2mpl as C Frontend to print the ASCII text.
cd examples/C ./maple_with_ast2mpl.sh
The output is as below:
cd /home/lin/mapleall/examples/C/use_ast2mp ======================================================================== ================== Use ast2mpl as C Frontend =========================== ======================================================================== INC=/usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0 /home/lin/mapleall/bin/ast2mpl printHuawei.c -I /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/include /home/lin/mapleall/bin/arm64-clang-release/maple -exe=me,mplcg -option="-O2 --quiet:-quiet" printHuawei.mpl /usr/bin/aarch64-linux-gnu-gcc -o printHuawei.out printHuawei.s -lm qemu-aarch64 -L /usr/aarch64-linux-gnu/ printHuawei.out HHHHHH HHHHHH HHHHHH HHHHHH HHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHHH HHHHHH HHHHHHHH HHHHHH HHHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHH HHHHHH HHHHHHHH HHHHHH HHHHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHH HHHHHH HHHHHHHHH HHHHHH HHHHHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHH HHHHH HHHHHHHHHH HHHHH HHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHH HHHHHH HHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHH HHHHH HHHHHH HHHHH HHHHHHHHHHHHHHHHHHH HHHHHH HHHHHHHHHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHH HHHHH HHHHHH HHHHHHHHHHHHHHHHHHH HHHHHH HHHHHHHHHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHH HHHHHHHHHHHHHHHHHHH HHHHHH HHHHHHHHHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHH HHHHHH HHHHH HHHHHHHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHHHHHHHH HHHHH HHHHH HHHHH HHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHHHHHHHHHH HHHHHHHHHHH HHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHHHHHHHHHH HHHHHHHHHH HHHHHHHHHH HHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHHHHHHHHHHHH HHHHHHHHH HHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHH HHHHHHHHH HHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHHHH HHHHHHHH HHHHHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHHHH HHHHHHHH HHHHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHHH HHHHHHH HHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHHH HHHHHH
Then, we can use opencc/whirl2mpl as C Frontend to print the same text.
./maple_with_whirl2mpl.sh
Here is the output:
cd /home/lin/mapleall/examples/C/use_whirl2mpl ======================================================================== ============= Use opencc/whirl2mpl as C Frontend ======================= ======================================================================== /home/lin/mapleall/tools/open64ark/bin/opencc -O0 -fe -keep -show -std=gnu99 printHuawei.c /home/lin/mapleall/tools/open64ark/bin/whirl2mpl printHuawei.B /home/lin/mapleall/bin/arm64-clang-release/maple -exe=me,mplcg -option="-O2 --quiet:-quiet" printHuawei.mpl /usr/bin/aarch64-linux-gnu-gcc -o printHuawei.out printHuawei.s -lm qemu-aarch64 -L /usr/aarch64-linux-gnu/ printHuawei.out HHHHHH HHHHHH HHHHHH HHHHHH HHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHHH HHHHHH HHHHHHHH HHHHHH HHHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHH HHHHHH HHHHHHHH HHHHHH HHHHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHH HHHHHH HHHHHHHHH HHHHHH HHHHHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHH HHHHH HHHHHHHHHH HHHHH HHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHH HHHHHH HHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHH HHHHH HHHHHH HHHHH HHHHHHHHHHHHHHHHHHH HHHHHH HHHHHHHHHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHH HHHHH HHHHHH HHHHHHHHHHHHHHHHHHH HHHHHH HHHHHHHHHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHH HHHHHHHHHHHHHHHHHHH HHHHHH HHHHHHHHHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHH HHHHHH HHHHH HHHHHHHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHHHHHHHH HHHHH HHHHH HHHHH HHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHHHHHHHHHH HHHHHHHHHHH HHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHHHHHHHHHH HHHHHHHHHH HHHHHHHHHH HHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHHHHHHHHHHHH HHHHHHHHH HHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHH HHHHHHHHH HHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHHHH HHHHHHHH HHHHHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHHHH HHHHHHHH HHHHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHHH HHHHHHH HHHHHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHH HHHHHH HHHHHH HHHHHH HHHHHH HHHHHHHHHHHH HHHHHH
FAQ and Errors
-
The make complains the clang package as below:
/bin/sh: 1: clang: not found ninja: build stopped: subcommand failed
[Solution]
sudo apt install -y clang
-
if the system misses the elf library, you will get error below:
/usr/bin/ld: cannot find -lelf clang: error: linker command failed with exit code 1 (use -v to see invocation)
[Solution]
sudo apt install -y libelf-dev libssl-dev
-
The build lools for aarch64-linux-gnu-gcc which requires the ARM cross compiling toolchain.
./maple_with_ast2mpl.sh: line 44: /usr/bin/aarch64-linux-gnu-gcc: No such file or directory
[Solution]
sudo apt install -y gcc-7-aarch64-linux-gnu sudo ln -s /usr/bin/aarch64-linux-gnu-gcc-7 /usr/bin/aarch64-linux-gnu-gcc
-
If the execution of example complains the missing command qemu-aarch64 as below, we need install the QEMU for ARM.
./maple_with_ast2mpl.sh: line 48: qemu-aarch64: command not found
[Solution]
sudo apt install -y qemu-system-arm qemu-efi-aarch64 qemu-utils qemu-user
-
If the execution complains any one of the following errors, please check the content of the file printHuawei.out:
Error while loading printHuawei.out: Exec format error Error while loading printHuawei.out: Permission denied
[Suggested Diagnosis]
less printHuawei.out ls /usr/bin/aarch64-linux-gnu-gcc -l
[Possible Cause]
The /usr/bin/aarch64-linux-gnu-gcc could be linked to a wrong compiler, such as /usr/bin/aarch64-linux-gnu-cpp-7. The correct compiler could be any of gcc compiler in your system, such as /usr/bin/aarch64-linux-gnu-gcc-7
[Solution]
sudo ln -s /usr/bin/aarch64-linux-gnu-gcc-7 /usr/bin/aarch64-linux-gnu-gcc
Repository
- https://gitee.com/openarkcompiler-incubator/mapleall