From b050662a5c5b9a274773cff07f5fd80eca654d2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Szczodrzy=C5=84ski?= Date: Mon, 13 Mar 2023 22:18:02 +0100 Subject: [PATCH] [core] Use external FreeRTOS library --- builder/family/beken-72xx.py | 28 ++++++++++------------------ builder/family/realtek-ambz.py | 16 +++++----------- builder/frameworks/arduino.py | 2 +- builder/frameworks/base.py | 2 +- builder/utils/libs-external.py | 15 ++++++++++----- builder/utils/libs-queue.py | 6 +++--- external-libs.json | 23 ++++++++++++++++++++++- external-libs.schema.json | 4 ++-- platform.json | 11 +++++++++++ platform.py | 10 +++++++++- 10 files changed, 74 insertions(+), 43 deletions(-) diff --git a/builder/family/beken-72xx.py b/builder/family/beken-72xx.py index 5709352..cba5208 100644 --- a/builder/family/beken-72xx.py +++ b/builder/family/beken-72xx.py @@ -269,6 +269,16 @@ queue.AddLibrary( ) # Sources - FreeRTOS +freertos_opts = dict( + CCFLAGS=[ + # build FreeRTOS port in ARM mode + "+<-marm>", + "-<-mthumb>", + ], +) +env.Replace(FREERTOS_PORT="beken-bdk", FREERTOS_PORT_DEFINE="BEKEN_BDK") +queue.AddExternalLibrary("freertos", options=freertos_opts) +queue.AddExternalLibrary("freertos-port", options=freertos_opts) queue.AddLibrary( name="bdk_freertos_thumb", base_dir=ROOT_DIR, @@ -279,24 +289,6 @@ queue.AddLibrary( "+", ], ) -queue.AddLibrary( - name="bdk_freertos_arm", - base_dir="$SDK_DIR", - srcs=[ - "+", - ], - includes=[ - "+", - "+", - ], - options=dict( - CCFLAGS=[ - # build FreeRTOS port in ARM mode - "+<-marm>", - "-<-mthumb>", - ], - ), -) # Sources - lwIP queue.AddExternalLibrary("lwip", port="bdk") diff --git a/builder/family/realtek-ambz.py b/builder/family/realtek-ambz.py index 8d67204..30ca3da 100644 --- a/builder/family/realtek-ambz.py +++ b/builder/family/realtek-ambz.py @@ -96,17 +96,8 @@ queue.AddLibrary( "+", "+", "+", - "+", - "+", - # "+", "+", - "+", - "+", "+", - "+", - "+", - "+", - "+", "+", "+", "+", @@ -144,8 +135,6 @@ queue.AddLibrary( includes=[ "+", "+", - "+", - "+", "+", "+", "+", @@ -191,6 +180,11 @@ queue.AddLibrary( ), ) +# Sources - FreeRTOS +env.Replace(FREERTOS_PORT=env["FAMILY_NAME"], FREERTOS_PORT_DEFINE="REALTEK_AMB1") +queue.AddExternalLibrary("freertos") +queue.AddExternalLibrary("freertos-port") + # Sources - lwIP queue.AddExternalLibrary("lwip", port="amb1") diff --git a/builder/frameworks/arduino.py b/builder/frameworks/arduino.py index b8c3077..9d9517d 100644 --- a/builder/frameworks/arduino.py +++ b/builder/frameworks/arduino.py @@ -52,7 +52,7 @@ if not found: exit(1) # Sources - ArduinoCore-API -queue.AddExternalLibrary("arduino_api") +queue.AddExternalLibrary("arduino-api") # Sources - board variant queue.AddLibrary( diff --git a/builder/frameworks/base.py b/builder/frameworks/base.py index 1c82721..0abb63c 100644 --- a/builder/frameworks/base.py +++ b/builder/frameworks/base.py @@ -97,7 +97,7 @@ queue.AppendPublic( CXXFLAGS=[ "-Wno-literal-suffix", "-Wno-write-strings", - "-Wno-psabi", + "-Wno-psabi", # parameter passing for argument of type ... changed in GCC 7.1 ], CPPDEFINES=[ ("LIBRETUYA", 1), diff --git a/builder/utils/libs-external.py b/builder/utils/libs-external.py index e91f951..14dd477 100644 --- a/builder/utils/libs-external.py +++ b/builder/utils/libs-external.py @@ -3,6 +3,7 @@ from dataclasses import dataclass from typing import Dict, List, Optional, Union +from ltchiptool.util.dict import merge_dicts from platformio.package.meta import PackageItem from platformio.platform.base import PlatformBase from SCons.Script import DefaultEnvironment, Environment @@ -31,6 +32,7 @@ def env_add_external_library( queue, name: str, port: Optional[str] = None, + options: Dict[str, List[str]] = {}, ): if port: name += f"-{port}" @@ -46,16 +48,19 @@ def env_add_external_library( f"Version '{version}' of library '{name}' ({lib.package}) is not installed" ) + opts_default = dict( + CFLAGS=lib.flags, + CPPDEFINES=[(k, v) for k, v in lib.defines.items()], + LINKFLAGS=lib.linkflags, + ) + options = merge_dicts(opts_default, options) + queue.AddLibrary( name=name.replace("-", "_"), base_dir=package.path, srcs=lib.sources, includes=lib.includes, - options=dict( - CFLAGS=lib.flags, - CPPDEFINES=[(k, v) for k, v in lib.defines.items()], - LINKFLAGS=lib.linkflags, - ), + options=options, ) diff --git a/builder/utils/libs-queue.py b/builder/utils/libs-queue.py index 3d554b9..0e611d8 100644 --- a/builder/utils/libs-queue.py +++ b/builder/utils/libs-queue.py @@ -4,7 +4,7 @@ import fnmatch from dataclasses import InitVar, dataclass, field from glob import glob from os.path import isdir, join -from typing import Dict, Generator, List, Optional, Tuple +from typing import Dict, Generator, List, Tuple from ltchiptool.util.dict import merge_dicts from SCons.Script import DefaultEnvironment, Environment @@ -127,8 +127,8 @@ class LibraryQueue: self.options_public = merge_dicts(self.options_public, {key: option}) self.queue.append(lib) - def AddExternalLibrary(self, name: str, port: Optional[str] = None): - return self.env.AddExternalLibrary(self, name, port) + def AddExternalLibrary(self, *args, **kwargs): + return self.env.AddExternalLibrary(self, *args, **kwargs) def AppendPublic(self, **kwargs): if "CPPPATH" in kwargs: diff --git a/external-libs.json b/external-libs.json index 118f0b1..5d5c4f3 100644 --- a/external-libs.json +++ b/external-libs.json @@ -45,7 +45,7 @@ "+<.>" ] }, - "arduino_api": { + "arduino-api": { "package": "framework-arduino-api", "sources": [ "+", @@ -60,6 +60,27 @@ "+" ] }, + "freertos": { + "package": "library-freertos", + "sources": [ + "+" + ], + "includes": [ + "+" + ] + }, + "freertos-port": { + "package": "library-freertos-port", + "sources": [ + "+<./$FREERTOS_PORT/*.c>" + ], + "includes": [ + "+<./$FREERTOS_PORT>" + ], + "defines": { + "FREERTOS_PORT_${FREERTOS_PORT_DEFINE}": "1" + } + }, "lwip-amb1": { "package": "library-lwip", "sources": [ diff --git a/external-libs.schema.json b/external-libs.schema.json index 21e31d9..87fb8a3 100644 --- a/external-libs.schema.json +++ b/external-libs.schema.json @@ -17,14 +17,14 @@ "type": "array", "items": { "type": "string", - "pattern": "^[!+-]<[\\w/*.]+>$" + "pattern": "^[!+-]<[$\\w/*.]+>$" } }, "includes": { "type": "array", "items": { "type": "string", - "pattern": "^[!+-]<[\\w/*.]+>$" + "pattern": "^[!+-]<[$\\w/*.]+>$" } }, "flags": { diff --git a/platform.json b/platform.json index 4e06322..53bc9e4 100644 --- a/platform.json +++ b/platform.json @@ -27,6 +27,7 @@ "any": "gccarmnoneeabi@~1.100301.0" }, "libraries": { + "freertos": "8.1.2", "lwip": { "1.4.1": "1.4.1-amb1", "2.0.0": "2.0.0-amb1", @@ -53,6 +54,7 @@ "any":"gccarmnoneeabi@~1.100301.0" }, "libraries": { + "freertos": "9.0.0", "lwip": { "2.0.2": "2.0.2-bdk", "2.1.0": "2.1.0-bdk", @@ -72,6 +74,15 @@ "base_url": "https://github.com/libretuya/lwip", "version_prefix": true }, + "library-freertos": { + "type": "framework", + "optional": true, + "base_url": "https://github.com/libretuya/library-freertos" + }, + "library-freertos-port": { + "type": "framework", + "version": "https://github.com/libretuya/library-freertos-port#2023.03.13" + }, "library-flashdb": { "type": "framework", "version": "https://github.com/libretuya/library-flashdb#1.2.0" diff --git a/platform.py b/platform.py index 7b3ba4f..5d7d543 100644 --- a/platform.py +++ b/platform.py @@ -188,13 +188,21 @@ class LibretuyaPlatform(PlatformBase): continue for name, lib_versions in package["libraries"].items(): package = f"library-{name}" + if isinstance(lib_versions, str): + # single version specified as string + if name in versions: + pkg_versions[package] = versions[name] + else: + pkg_versions[package] = lib_versions + continue + # mapping of versions to repo branches if name in versions and versions[name] in lib_versions: pkg_versions[package] = lib_versions[versions[name]] continue if "default" in lib_versions: pkg_versions[package] = lib_versions["default"] - # gather custom versions of other libraries + # gather custom (user-set) versions of other libraries for name, version in versions.items(): if name == "toolchain": continue