13d0407baSopenharmony_ci#!/usr/bin/env python3
23d0407baSopenharmony_ci
33d0407baSopenharmony_ci#encoding=utf-8
43d0407baSopenharmony_ci__author__ = 'addy.ke@rock-chips.com'
53d0407baSopenharmony_ci
63d0407baSopenharmony_ciimport traceback
73d0407baSopenharmony_ciimport os
83d0407baSopenharmony_ciimport sys
93d0407baSopenharmony_ciimport threading
103d0407baSopenharmony_ciimport time
113d0407baSopenharmony_ciimport math
123d0407baSopenharmony_ciimport getopt
133d0407baSopenharmony_ciimport fnmatch
143d0407baSopenharmony_ci
153d0407baSopenharmony_cimodule = "hardware"
163d0407baSopenharmony_cichips = ['Pisces', 'Koala', 'koala', 'Swallow', 'swallow', 'pisces', 'rv1126', 'rv1108', 'rk2108', 'rk2106', 'rk2206', 'rk3568', "rk1808"]
173d0407baSopenharmony_ci
183d0407baSopenharmony_ciclass BuildGn:
193d0407baSopenharmony_ci    def __init__(self, chip, board):
203d0407baSopenharmony_ci        self.chip = chip
213d0407baSopenharmony_ci        self.board = board
223d0407baSopenharmony_ci        self.fp = open("BUILD.gn", 'w+', encoding='utf-8')
233d0407baSopenharmony_ci
243d0407baSopenharmony_ci    def head(self):
253d0407baSopenharmony_ci        head = "# Copyright (c) 2020-2021 Lockzhiner Electronics Co., Ltd.\n"
263d0407baSopenharmony_ci        head +="# limitations under the License.\n"
273d0407baSopenharmony_ci        head +="# Licensed under the Apache License, Version 2.0 (the \"License\");\n"
283d0407baSopenharmony_ci        head +="# you may not use this file except in compliance with the License.\n"
293d0407baSopenharmony_ci        head +="# You may obtain a copy of the License at\n"
303d0407baSopenharmony_ci        head +="#\n"
313d0407baSopenharmony_ci        head +="#     http://www.apache.org/licenses/LICENSE-2.0\n"
323d0407baSopenharmony_ci        head +="#\n"
333d0407baSopenharmony_ci        head +="# Unless required by applicable law or agreed to in writing, software\n"
343d0407baSopenharmony_ci        head +="# distributed under the License is distributed on an \"AS IS\" BASIS,\n"
353d0407baSopenharmony_ci        head +="# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n"
363d0407baSopenharmony_ci        head +="# See the License for the specific language governing permissions and\n"
373d0407baSopenharmony_ci        head +="#\n\n"
383d0407baSopenharmony_ci        head += "import(\"//drivers/adapter/khdf/liteos_m/hdf.gni\")\n"
393d0407baSopenharmony_ci        head += "import(\"//device/rockchip/%s/sdk_liteos/board.gni\")\n" % self.chip
403d0407baSopenharmony_ci        head += "\n"
413d0407baSopenharmony_ci        head += "static_library(\"%s\") {\n" % module
423d0407baSopenharmony_ci        self.fp.write(head)
433d0407baSopenharmony_ci
443d0407baSopenharmony_ci    def include(self):
453d0407baSopenharmony_ci        inc =  "  include_dirs = [\n"
463d0407baSopenharmony_ci        inc += "    \"./include\",\n"
473d0407baSopenharmony_ci        inc += "    \"./lib/hal/inc\",\n"
483d0407baSopenharmony_ci        inc += "    \"./lib/CMSIS/Device/%s/Include\",\n" % self.chip.upper()
493d0407baSopenharmony_ci        inc += "    \"./lib/CMSIS/Core/Include\",\n"
503d0407baSopenharmony_ci        inc += "    \"./lib/bsp/%s\",\n" % self.chip.upper()
513d0407baSopenharmony_ci        inc += "    \"./project/%s/src\",\n" % self.chip
523d0407baSopenharmony_ci        inc += "    \"$adapter_path/include\",\n"
533d0407baSopenharmony_ci        inc += "    \"$sdk_path/include\",\n"
543d0407baSopenharmony_ci        inc += "    \"$kernel_path/kernel/arch/include\",\n"
553d0407baSopenharmony_ci        inc += "    \"$hal_path/include\",\n"
563d0407baSopenharmony_ci        inc += "    \"./lz_hardware/wifi/include\",\n"
573d0407baSopenharmony_ci        inc += "    \"//third_party/musl/porting/liteos_m/kernel/include\",\n"
583d0407baSopenharmony_ci        inc += "  ]\n"
593d0407baSopenharmony_ci        self.fp.write(inc)
603d0407baSopenharmony_ci
613d0407baSopenharmony_ci    def tail(self):
623d0407baSopenharmony_ci        tail = "}\n"
633d0407baSopenharmony_ci        self.fp.write(tail)
643d0407baSopenharmony_ci
653d0407baSopenharmony_ci    def source(self, path, init):
663d0407baSopenharmony_ci        search = ['*.c']
673d0407baSopenharmony_ci        if init == 0:
683d0407baSopenharmony_ci            source = "  sources = [\n"
693d0407baSopenharmony_ci        else:
703d0407baSopenharmony_ci            source = "  sources += [\n"
713d0407baSopenharmony_ci        for root, dirnames, filenames in os.walk(path):
723d0407baSopenharmony_ci            for extension in search:
733d0407baSopenharmony_ci                for filename in fnmatch.filter(filenames, extension):
743d0407baSopenharmony_ci                    src = os.path.join(root, filename)
753d0407baSopenharmony_ci                    found = 1
763d0407baSopenharmony_ci                    for chip in chips:
773d0407baSopenharmony_ci                        if src.find(chip) >= 0 and chip != self.chip:
783d0407baSopenharmony_ci                            found = 0
793d0407baSopenharmony_ci                        if src.find(chip.upper()) >= 0 and chip != self.chip:
803d0407baSopenharmony_ci                            found = 0
813d0407baSopenharmony_ci                    if found == 1:
823d0407baSopenharmony_ci                        source += "    \"%s\",\n" % src
833d0407baSopenharmony_ci
843d0407baSopenharmony_ci        source += "  ]\n"
853d0407baSopenharmony_ci        self.fp.write(source)
863d0407baSopenharmony_cign = BuildGn("rk2206", "TB-RK2206H0-A")
873d0407baSopenharmony_ci
883d0407baSopenharmony_cign.head()
893d0407baSopenharmony_cign.source('./lib/hal', 0)
903d0407baSopenharmony_cign.source('./lib/bsp', 1)
913d0407baSopenharmony_cign.source('./lib/CMSIS/Device', 1)
923d0407baSopenharmony_cign.source('./driver', 1)
933d0407baSopenharmony_cign.source('./lz_hardware', 1)
943d0407baSopenharmony_cign.include()
953d0407baSopenharmony_cign.tail()
96