Przeglądaj źródła

[bsp/d1-allwinner-nezha] add compile tools script

张世争 3 lat temu
rodzic
commit
8cdbfdfe5c

+ 9 - 0
bsp/d1-allwinner-nezha/smart-env.bat

@@ -0,0 +1,9 @@
+set RTT_CC=gcc
+set RTT_EXEC_PATH=%cd%\tools\gnu_gcc\riscv64-linux-musleabi_for_i686-w64-mingw32\bin
+set RTT_CC_PREFIX=riscv64-unknown-linux-musl-
+@set PATH=%RTT_EXEC_PATH%;%ENV_ROOT%\tools\gnu_gcc\arm_gcc\mingw\bin;%PATH%
+
+@echo "Arch      : riscv64"
+@echo "CC        : %RTT_CC%"
+@echo "PREFIX    : %RTT_CC_PREFIX%"
+@echo "EXEC_PATH : %RTT_EXEC_PATH%"

+ 60 - 0
bsp/d1-allwinner-nezha/smart-env.sh

@@ -0,0 +1,60 @@
+#!/bin/bash
+
+# usage:
+# source smart-env.sh [arch]
+# example: source smart-env.sh          # arm
+# example: source smart-env.sh aarch64  # aarch64
+
+# supported arch list
+supported_arch="arm aarch64 riscv64 i386"
+
+def_arch="unknown" 
+
+# find arch in arch list
+if [ -z $1 ]
+then
+    def_arch="arm" # default arch is arm
+else
+    for arch in $supported_arch
+    do
+        if [ $arch = $1 ]
+        then
+            def_arch=$arch
+            break
+        fi
+    done
+fi
+
+# set env
+case $def_arch in 
+    "arm")
+        export RTT_CC=gcc
+        export RTT_EXEC_PATH=$(pwd)/tools/gnu_gcc/arm-linux-musleabi_for_x86_64-pc-linux-gnu/bin
+        export RTT_CC_PREFIX=arm-linux-musleabi-
+        ;;
+    "aarch64")
+        export RTT_CC=gcc
+        export RTT_EXEC_PATH=$(pwd)/tools/gnu_gcc/aarch64-linux-musleabi_for_x86_64-pc-linux-gnu/bin
+        export RTT_CC_PREFIX=aarch64-linux-musleabi-
+        ;;
+    "riscv64")
+        export RTT_CC=gcc
+        export RTT_EXEC_PATH=$(pwd)/tools/gnu_gcc/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu/bin
+        export RTT_CC_PREFIX=riscv64-unknown-linux-musl-
+        ;;
+    "i386")
+        export RTT_CC=gcc
+        export RTT_EXEC_PATH=$(pwd)/tools/gnu_gcc/i386-linux-musleabi_for_x86_64-pc-linux-gnu/bin
+        export RTT_CC_PREFIX=i386-unknown-linux-musl-
+        ;;
+    *)  echo "unknown arch!"
+        return 1
+esac
+
+# export RTT_EXEC_PATH
+export PATH=$PATH:$RTT_EXEC_PATH
+
+echo "Arch      => ${def_arch}"
+echo "CC        => ${RTT_CC}"
+echo "PREFIX    => ${RTT_CC_PREFIX}"
+echo "EXEC_PATH => ${RTT_EXEC_PATH}"

+ 181 - 0
bsp/d1-allwinner-nezha/tools/ci.py

@@ -0,0 +1,181 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+#
+# Copyright (c) 2022, RT-Thread Development Team
+#
+# SPDX-License-Identifier: GPL-2.0
+#
+# Change Logs:
+# Date           Author       Notes
+# 2022-02-1      Bernard      The first version
+#
+
+import os
+import sys
+import shutil
+import platform
+import requests
+import time
+import zipfile
+
+class CI:
+    def downloadFile(self, name, url):
+        headers = {'Proxy-Connection':'keep-alive'}
+        r = requests.get(url, stream=True, headers=headers)
+        length = float(r.headers['content-length'])
+        f = open(name, 'wb')
+        count = 0
+        count_tmp = 0
+        time1 = time.time()
+        for chunk in r.iter_content(chunk_size = 512):
+            if chunk:
+                f.write(chunk)
+                count += len(chunk)
+                if time.time() - time1 > 2:
+                    p = count / length * 100
+                    speed = (count - count_tmp) / 1024 / 1024 / 2
+                    count_tmp = count
+                    print(name + ': ' + '{:.2f}'.format(p) + '%')
+                    time1 = time.time()
+        print(name + ': 100%')
+        f.close()
+
+    def extractZipFile(self, zfile, folder):
+        # self.delTree(folder)
+        if not os.path.exists(folder):
+            os.makedirs(folder)
+        if platform.system() == 'Windows':
+            zip_file = zipfile.ZipFile(zfile)
+            zip_list = zip_file.namelist()
+            for item in zip_list:
+                print(item)
+                zip_file.extract(item, folder)
+            zip_file.close()
+        elif platform.system() == 'Linux':
+
+            if zfile.endswith('tar.gz'):
+                os.system('tar zxvf %s -C %s' % (zfile, folder))
+            elif zfile.endswith('tar.bz2'):
+                os.system('tar jxvf %s -C %s' % (zfile, folder))
+            elif zfile.endswith('.zip'):
+                os.system('unzip %s -d %s' % (zfile, folder))
+
+        return
+
+    def zipFolder(self, folder, zfile):
+        zip_filename = os.path.join(folder)
+        zip = zipfile.ZipFile(zfile, 'w', compression=zipfile.ZIP_BZIP2)
+        pre_len = len(os.path.dirname(folder))
+
+        for parent, dirnames, filenames in os.walk(folder):
+            for filename in filenames:
+                pathfile = os.path.join(parent, filename)
+                arcname = pathfile[pre_len:].strip(os.path.sep)
+                zip.write(pathfile, arcname)
+
+        zip.close()
+        return
+
+    def touchDir(self, d):
+        if not os.path.exists(d):
+            os.makedirs(d)
+
+    def gitUpdate(self, url, folder, branch = 'master'):
+        cwd = os.getcwd()
+
+        if os.path.exists(folder):
+            os.chdir(folder)
+            os.system('git pull origin')
+            if branch != 'master':
+                os.system('git checkout -b %s origin/%s' % (branch, branch))
+            os.system('git submodule init')
+            os.system('git submodule update')
+        else:
+            os.system('git clone %s %s' % (url, folder))
+            os.chdir(folder)
+            os.system('git submodule init')
+            os.system('git submodule update')
+
+        os.chdir(cwd)
+
+    def installEnv(self, folder):
+        env_path = folder
+
+        cwd = os.getcwd()
+        os.chdir(env_path)
+
+        self.touchDir(os.path.join(env_path, 'local_pkgs'))
+        self.touchDir(os.path.join(env_path, 'packages'))
+        self.touchDir(os.path.join(env_path, 'tools'))
+
+        self.gitUpdate('https://gitee.com/RT-Thread-Mirror/env.git', 'tools/script')
+        self.gitUpdate('https://gitee.com/RT-Thread-Mirror/packages.git', 'packages/packages')
+
+        kconfig = open(os.path.join(env_path, 'packages', 'Kconfig'), 'w')
+        kconfig.write('source "$PKGS_DIR/packages/Kconfig"')
+        kconfig.close()
+
+        os.chdir(cwd)
+
+        return
+
+    def pkgsUpdate(self, env_folder):
+        self.touchDir(env_folder)
+        self.installEnv(env_folder)
+
+        os.environ['PKGS_DIR'] = env_folder
+        os.system('python %s package --update' % (os.path.join(env_folder, 'tools', 'script', 'env.py')))
+
+        return
+
+    def delTree(self, folder):
+        if os.path.exists(folder):
+            shutil.rmtree(folder)
+
+    def delFile(self, file):
+        if os.path.exists(file):
+            os.remove(file)
+
+    def appendFile(self, srcFile, otherFile):
+        f = open(otherFile, 'r')
+        s = f.read()
+        f.close()
+
+        f = open(srcFile, 'a')
+        f.write(s)
+        f.close()
+
+    def copyTree(self, srcTree, dstTree):
+        if os.path.exists(dstTree):
+            shutil.rmtree(dstTree)
+        shutil.copytree(srcTree, dstTree)
+
+    def run(self, cmds):
+        cwd = os.getcwd()
+
+        cmds = cmds.split('\n')
+        for item in cmds:
+            item = item.lstrip()
+            if item == '':
+                continue
+
+            if item[0] == '-':
+                os.system(item[1:].lstrip())
+
+        # keep current directory
+        os.chdir(cwd)
+        return
+
+if __name__ == '__main__':
+    ci = CI()
+    env_folder = os.path.abspath(os.path.join('.', 'env_test'))
+
+    # ci.pkgsUpdate(env_folder)
+    cmds = '''
+        # test
+        - dir
+        - dir tools
+    '''
+
+    ci.run(cmds)

+ 59 - 0
bsp/d1-allwinner-nezha/tools/get_toolchain.py

@@ -0,0 +1,59 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+#
+# Copyright (c) 2022, RT-Thread Development Team
+#
+# SPDX-License-Identifier: GPL-2.0
+#
+# Change Logs:
+# Date           Author       Notes
+# 2022-02-1      Bernard      The first version
+#
+
+import os
+import sys
+import platform
+
+from ci import CI
+
+toolchains_config = {
+    'arm':
+    {
+        'Linux': 'arm-linux-musleabi_for_x86_64-pc-linux-gnu_latest.tar.bz2',
+        'Windows': 'arm-linux-musleabi_for_i686-w64-mingw32_latest.zip'
+    },
+    'aarch64':
+    {
+        'Linux' : 'aarch64-linux-musleabi_for_x86_64-pc-linux-gnu_latest.tar.bz2',
+        'Windows' : 'aarch64-linux-musleabi_for_i686-w64-mingw32_latest.zip'
+    },
+    'riscv64': 
+    {
+        'Linux': 'riscv64-linux-musleabi_for_x86_64-pc-linux-gnu_latest.tar.bz2',
+        'Windows': 'riscv64-linux-musleabi_for_i686-w64-mingw32_latest.zip'
+    }
+}
+
+if __name__ == '__main__':
+    # download toolchain
+    if len(sys.argv) > 1:
+        target = sys.argv[1]
+    else:
+        target = 'arm'
+
+    ci = CI()
+    toolchain_path = os.path.join(os.path.abspath('.'), 'gnu_gcc')
+
+    platform = platform.system()
+
+    try:
+        zfile = toolchains_config[target][platform]
+        URL = 'http://117.143.63.254:9012/www/rt-smart/' + zfile
+    except:
+        print('not found target')
+        exit(0)
+
+    ci.downloadFile(zfile, URL)
+    ci.extractZipFile(zfile, toolchain_path)
+    ci.delFile(zfile)