diff --git a/.gitignore b/.gitignore index a0f745c087a083d535774b42868170077bcb622f..09d0afd9b7521aa8a9189fe9f92e27f419152a61 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,12 @@ +android +tools/android* tools/clang* -tools/ninja* +tools/gcc* tools/gn* +tools/icu* +tools/ninja* +tools/r8* +tools/release* build/logs* libjava-core output - diff --git a/Makefile b/Makefile index a96264b03d4324bbfb03597881ade7c7f659154f..d6176b4bca56edad3bf83bf1e3b1b1c0723b6f0f 100644 --- a/Makefile +++ b/Makefile @@ -27,7 +27,7 @@ endif HOST_ARCH := 64 MIR_JAVA := 1 GN := $(MAPLE_ROOT)/tools/gn/gn -NINJA := $(MAPLE_ROOT)/tools/ninja_1.10.0/ninja +NINJA := $(MAPLE_ROOT)/tools/ninja/ninja GN_OPTIONS := \ GN_INSTALL_PREFIX="$(MAPLE_ROOT)" \ @@ -84,7 +84,7 @@ java-core-def: install $(MAKE) gen-def OPT=$(OPT) DEBUG=$(DEBUG) OPS_ANDROID=$(OPS_ANDROID) .PHONY: install -install: maple dex2mpl_install +install: maple dex2mpl_install irbuild $(shell mkdir -p $(INSTALL_DIR)/ops/linker/; \ rsync -a -L $(MRT_ROOT)/maplert/linker/maplelld.so.lds $(INSTALL_DIR)/ops/linker/; \ rsync -a -L $(MAPLE_ROOT)/build/java2d8 $(INSTALL_DIR)/bin; \ diff --git a/build/core/libcore.mk b/build/core/libcore.mk index 58d99da3a165cbd8065ea94d47adbb1814c5cf0c..35c41a177818e906d280886cb778de533bbddbd9 100644 --- a/build/core/libcore.mk +++ b/build/core/libcore.mk @@ -65,8 +65,8 @@ include $(MAPLE_BUILD_CORE)/extra.mk include $(MAPLE_BUILD_CORE)/mplcomb_dex.mk include $(MAPLE_BUILD_CORE)/dex2mpl.mk -$(APP_DEX): %.dex : $(D8) $(LIB_CORE_JAR) - $(D8) --min-api 39 --output . $(LIB_CORE_JAR) +$(APP_DEX): %.dex : $(D8) libart.jar oj.jar + $(D8) --min-api 39 --output . libart.jar oj.jar mv classes.dex $(APP_DEX) .PHONY: gen-def diff --git a/doc/cn/DevelopmentPreparation.md b/doc/cn/DevelopmentPreparation.md index d2caa762b6a20c180412385ac12b9c950c87dc50..801e9074a5f056fe644bb0af8725c74fac054a0b 100644 --- a/doc/cn/DevelopmentPreparation.md +++ b/doc/cn/DevelopmentPreparation.md @@ -18,6 +18,12 @@ sudo apt-get -y install openjdk-8-jdk git-core build-essential zlib1g-dev libc6- sudo apt-get -y install gcc-5-aarch64-linux-gnu g++-5-aarch64-linux-gnu ``` +## 安装 +``` +cd tools +./setup_tools.sh +``` + ## 安装Clang编译器并完成配置(用于编译方舟编译器代码) @@ -33,7 +39,7 @@ LLVM下载地址:http://releases.llvm.org/download.html#8.0.0 CLANG_PATH = "${MAPLE_ROOT}/tools/clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04" ``` -* 修改`openarkcompiler/buile/core/maple_variables.mk`文件,将`CLANG_PATH`配置为clang编译器所在路径,例如: +* 修改`openarkcompiler/build/core/maple_variables.mk`文件,将`CLANG_PATH`配置为clang编译器所在路径,例如: ``` CLANG_PATH := ${MAPLE_ROOT}/tools/clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04 @@ -61,7 +67,7 @@ chmod 775 ninja ``` GN := ${MAPLE_ROOT}/tools/gn/gn -NINJA := ${MAPLE_ROOT}/tools/ninja_1.10.0/ninja +NINJA := ${MAPLE_ROOT}/tools/ninja/ninja ``` ## 安装gcc-linaro并完成配置(用于交叉编译方舟编译器代码) @@ -78,7 +84,7 @@ gcc-linaro-7.5.0下载地址:https://releases.linaro.org/components/toolchain/ GCC_LINARO_PATH = "${MAPLE_ROOT}/tools/gcc-linaro-7.5.0" ``` -* 修改`openarkcompiler/buile/core/maple_variables.mk`文件,将`GCC_LINARO_PATH`配置为gcc-linaro-7.5.0所在路径,例如: +* 修改`openarkcompiler/build/core/maple_variables.mk`文件,将`GCC_LINARO_PATH`配置为gcc-linaro-7.5.0所在路径,例如: ``` GCC_LINARO_PATH := ${MAPLE_ROOT}/tools/gcc-linaro-7.5.0 @@ -98,7 +104,7 @@ android-ndk-r21下载地址:https://developer.android.google.cn/ndk/downloads/ NDK_PATH = "${MAPLE_ROOT}/tools/android-ndk-r21" ``` -* 修改`openarkcompiler/buile/core/maple_variables.mk`文件,将`NDK_PATH`配置为android-ndk-r21所在路径,例如: +* 修改`openarkcompiler/build/core/maple_variables.mk`文件,将`NDK_PATH`配置为android-ndk-r21所在路径,例如: ``` NDK_PATH := ${MAPLE_ROOT}/tools/android-ndk-r21 @@ -113,10 +119,11 @@ AOSP下载地址:https://source.android.com/source/downloading/ 下载AOSP并编译完成。 * 在openarkcompiler目录下新建链接`android/`,并链接到AOSP的根目录; -* 将`openarkcompiler/android/out/target/product/generic_arm64/obj/JAVA_LIBRARIES/core-all_intermediates/javalib.jar`拷贝到`openarkcompiler/libjava-core`目录,并命名为`java-core.jar`,同时码云上也提供了编译好的libcore的jar文件,你可以下载直接使用,下载链接`https://gitee.com/mirrors/java-core/`; +* 将`openarkcompiler/android/out/target/product/generic_arm64/obj/JAVA_LIBRARIES/core-libart_intermediates/javalib.jar`拷贝到`openarkcompiler/libjava-core/libart.jar` +* 将`openarkcompiler/android/out/target/product/generic_arm64/obj/JAVA_LIBRARIES/core-oj_intermediates/javalib.jar`拷贝到`openarkcompiler/libjava-core/oj.jar` * 在openarkcompiler/tools下新建链接gcc,并链接到AOSP的`openarkcompiler/android/prebuilts/gcc`; * 在openarkcompiler/tools下新建链接clang-r353983c,并链接到AOSP的`openarkcompiler/android/prebuilts/clang/host/linux-x86/clang-r353983c`; -* 修改`openarkcompiler/build/config.gni`和`openarkcompiler/buile/core/maple_variables.mk`中`ANDROID_GCC_PATH`和`ANDROID_CLANG_PATH`两个变量,配置为上述gcc和clang-r353982c的所在路径,例如: +* 修改`openarkcompiler/build/config.gni`和`openarkcompiler/build/core/maple_variables.mk`中`ANDROID_GCC_PATH`和`ANDROID_CLANG_PATH`两个变量,配置为上述gcc和clang-r353982c的所在路径,例如: config.gni @@ -140,7 +147,7 @@ ANDROID_GLANG_PATH := ${MAPLE_ROOT}/tools/clang-r353983c icu下载地址:http://site.icu-project.org/home -下载56.1版本的icu4c并编译完成,生成`libicuuc.so`和`libiucdata.so`,将两者放置到`openarkcompiler/third_party/icu/lib/aarch64-linux-gnu`路径下,并重命名为`libicuuc.so.56`和`libiucdata.so.56`。 +下载56.1版本的icu4c并编译完成,生成`libicuuc.so`和`libicudata.so`,将两者放置到`openarkcompiler/third_party/icu/lib/aarch64-linux-gnu`路径下,并重命名为`libicuuc.so.56`和`libicudata.so.56`。 ### libz下载并编译 diff --git a/doc/en/DevelopmentPreparation.md b/doc/en/DevelopmentPreparation.md index f328c11a0148a76ac41d6ffa1b62ae897748a0d5..eef8c7d6cf9498662334451815378ba07b3fa413 100644 --- a/doc/en/DevelopmentPreparation.md +++ b/doc/en/DevelopmentPreparation.md @@ -52,6 +52,6 @@ Open the openarkcompiler/Makefile file, and set the two variables GN and NINJA t ``` GN := ${MAPLE_ROOT}/tools/gn/gn -NINJA := ${MAPLE_ROOT}/tools/ninja_1.9.0/ninja +NINJA := ${MAPLE_ROOT}/tools/ninja/ninja ``` diff --git a/test/README.md b/test/README.md index 0cfe5f1040f84b0fd5b63927c7cf37fa70802506..7393a79763311fa1dccdba4370204a1f569b9312 100644 --- a/test/README.md +++ b/test/README.md @@ -61,13 +61,13 @@ level = INFO #### irbuild_test ``` -python3 test/main.py test/testsuite/irbuild_test --test_cfg=test/testsuit/irbuild_test/ -j20 -pFAIL +python3 test/main.py test/testsuite/irbuild_test --test_cfg=test/testsuite/irbuild_test/ -j20 -pFAIL ``` #### ouroboros ``` -python3 test/main.py test/testsuite/ouroboros --test_cfg=test/testsuit/ouroboros/ -j20 -pFAIL +python3 test/main.py test/testsuite/ouroboros --test_cfg=test/testsuite/ouroboros/ -j20 -pFAIL ``` 参数说明:指定参数会覆盖框架配置文件中的设置 diff --git a/tools/setup_tools.sh b/tools/setup_tools.sh new file mode 100755 index 0000000000000000000000000000000000000000..0a0f3e537e571ca2c1e71fa115d3a02c69eea60c --- /dev/null +++ b/tools/setup_tools.sh @@ -0,0 +1,153 @@ +#!/bin/bash +# +# Copyright (C) [2020] Futurewei Technologies, Inc. All rights reverved. +# +# Licensed under the Mulan Permissive Software License v2. +# You can use this software according to the terms and conditions of the MulanPSL - 2.0. +# You may obtain a copy of MulanPSL - 2.0 at: +# +# https://opensource.org/licenses/MulanPSL-2.0 +# +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR +# FIT FOR A PARTICULAR PURPOSE. +# See the MulanPSL - 2.0 for more details. +# + +set -e + +TOOLS=$(pwd) +MAPLE_ROOT=$TOOLS/.. +ANDROID_ROOT=$MAPLE_ROOT/../android/android-10.0.0_r35 +echo MAPLE_ROOT: $MAPLE_ROOT + +if [ ! -f $TOOLS/ninja/ninja ]; then + cd $TOOLS + mkdir -p ./ninja + cd ./ninja || exit 3 + wget https://github.com/ninja-build/ninja/releases/download/v1.10.0/ninja-linux.zip + unzip ninja-linux.zip + echo Downloaded ninja. +fi + +if [ ! -f $TOOLS/gn/gn ]; then + cd $TOOLS + git clone https://gitee.com/xlnb/gn_binary.git gn + chmod +x gn/gn + echo Downloaded gn. +fi + +if [ ! -f $TOOLS/clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/bin/clang ]; then + cd $TOOLS + wget https://releases.llvm.org/8.0.0/clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz + echo unpacking clang+llvm ... + tar xf clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz + echo Downloaded clang+llvm. +fi + +if [ ! -f $TOOLS/gcc-linaro-7.5.0/bin/aarch64-linux-gnu-gcc ]; then + cd $TOOLS + wget https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-i686_aarch64-linux-gnu.tar.xz + echo unpacking gcc ... + tar xf gcc-linaro-7.5.0-2019.12-i686_aarch64-linux-gnu.tar.xz + mv gcc-linaro-7.5.0-2019.12-i686_aarch64-linux-gnu gcc-linaro-7.5.0 + echo Downloaded gcc aarch64 compiler. +fi + +if [ ! -f $TOOLS/android-ndk-r21/ndk-build ]; then + cd $TOOLS + wget https://dl.google.com/android/repository/android-ndk-r21d-linux-x86_64.zip + echo unpacking android ndk ... + unzip android-ndk-r21d-linux-x86_64.zip > /dev/null + mv android-ndk-r21d android-ndk-r21 + echo Downloaded android ndk. +fi + +# download andriod source +if [ ! -f $ANDROID_ROOT/Makefile ]; then + mkdir -p $ANDROID_ROOT + cd $ANDROID_ROOT + repo init -u https://android.googlesource.com/platform/manifest -b android-10.0.0_r35 + repo sync + echo Downloaded AOSP. +fi +# build android +if [ ! -d $ANDROID_ROOT/out/target/product/generic_arm64/obj ]; then + cd $ANDROID_ROOT + . ./build/envsetup.sh + lunch 2 + make -j32 + echo Built AOSP. +fi +# create java-core.jar +if [ ! -f $MAPLE_ROOT/libjava-core/libart.jar ]; then + mkdir -p $MAPLE_ROOT/libjava-core + JLIBDIR=$ANDROID_ROOT/out/target/product/generic_arm64/obj/JAVA_LIBRARIES + cp -f $JLIBDIR/core-libart_intermediates/javalib.jar $MAPLE_ROOT/libjava-core/libart.jar + cp -f $JLIBDIR/core-oj_intermediates/javalib.jar $MAPLE_ROOT/libjava-core/oj.jar + cd $MAPLE_ROOT/libjava-core + $MAPLE_ROOT/build/d8 --min-api 39 --output . libart.jar oj.jar + mv classes.dex libcore-all.dex + echo Copied jar files. +fi +if [ ! -d $MAPLE_ROOT/android ]; then + ln -s $ANDROID_ROOT $MAPLE_ROOT/android +fi + +if [ ! -L $TOOLS/gcc ]; then + cd $TOOLS + ln -s ../android/prebuilts/gcc . + echo Linked gcc. +fi + +if [ ! -L $TOOLS/clang-r353983c ]; then + cd $TOOLS + ln -s ../android/prebuilts/clang/host/linux-x86/clang-r353983c . + echo Linked clang. +fi + +if [ ! -f $MAPLE_ROOT/third_party/icu/lib/aarch64-linux-gnu/libicuuc.so ]; then + cd $TOOLS + wget https://github.com/unicode-org/icu/archive/release-56-1.tar.gz + tar zxf release-56-1.tar.gz + DIR=$TOOLS/icu-release-56-1/icu4c + export CROSS_BUILD_DIR=$DIR/linux + export ANDROID_NDK=$MAPLE_ROOT/tools/android-ndk-r21 + export ANDROID_TOOLCHAIN=$DIR/toolchain + export PATH=$ANDROID_TOOLCHAIN/bin:$PATH + mkdir -p $DIR/linux $DIR/aarch64 + (cd $DIR/linux; ../source/runConfigureICU Linux --prefix=$DIR/prebuilts; make -j16) + (cd $DIR; $ANDROID_NDK/build/tools/make-standalone-toolchain.sh --platform=android-21 \ + --install-dir=$ANDROID_TOOLCHAIN --toolchain=aarch64-linux-android-clang3.6) + (cd $DIR/aarch64; ../source/configure --prefix=$DIR/prebuilt --host=aarch64-linux-android \ + CFLAGS='-Os' CXXFLAGS='--std=c++11' --enable-shared=yes -with-cross-build=$CROSS_BUILD_DIR \ + CC=aarch64-linux-android-clang CXX=aarch64-linux-android-clang++ AR=aarch64-linux-android-ar \ + RINLIB=aarch64-linux-android-ranlib --with-data-packaging=archive; make -j16) + AARCH64DIR=$MAPLE_ROOT/third_party/icu/lib/aarch64-linux-gnu + mkdir -p $AARCH64DIR + cd $AARCH64DIR + cp -f $DIR/aarch64/lib/libicuuc.so libicuuc.so.56 + cp -f $DIR/aarch64/stubdata/libicudata.so libicudata.so.56 + ln -s libicuuc.so.56 libicuuc.so + ln -s libicudata.so.56 libicudata.so + echo Downloaded icu. +fi + +if [ ! -f $MAPLE_ROOT/third_party/libdex/prebuilts/aarch64-linux-gnu/libz.so.1.2.8 ]; then + cd $TOOLS + wget http://ports.ubuntu.com/pool/main/z/zlib/zlib1g_1.2.8.dfsg-2ubuntu4_arm64.deb + mkdir -p libz_extract + dpkg --extract zlib1g_1.2.8.dfsg-2ubuntu4_arm64.deb libz_extract + ZLIBDIR=$MAPLE_ROOT/third_party/libdex/prebuilts/aarch64-linux-gnu + mkdir -p $ZLIBDIR + cp -f libz_extract/lib/aarch64-linux-gnu/libz.so.1.2.8 $ZLIBDIR + echo Downloaded libz. +fi + +if [ ! -f $MAPLE_ROOT/third_party/d8/lib/d8.jar ]; then + cd $TOOLS + git clone https://gitee.com/xlnb/r8-d81513.git + mkdir -p $MAPLE_ROOT/third_party/d8/lib + cp -f r8-d81513/d8/lib/d8.jar $MAPLE_ROOT/third_party/d8/lib + echo Downloaded AOSP. +fi