[core] Use external FreeRTOS library

This commit is contained in:
Kuba Szczodrzyński
2023-03-13 22:18:02 +01:00
parent f69b4bea4f
commit b050662a5c
10 changed files with 74 additions and 43 deletions

View File

@@ -269,6 +269,16 @@ queue.AddLibrary(
) )
# Sources - FreeRTOS # 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( queue.AddLibrary(
name="bdk_freertos_thumb", name="bdk_freertos_thumb",
base_dir=ROOT_DIR, base_dir=ROOT_DIR,
@@ -279,24 +289,6 @@ queue.AddLibrary(
"+<os/*>", "+<os/*>",
], ],
) )
queue.AddLibrary(
name="bdk_freertos_arm",
base_dir="$SDK_DIR",
srcs=[
"+<FreeRTOSv9.0.0/FreeRTOS/Source/**/*.c>",
],
includes=[
"+<FreeRTOSv9.0.0/FreeRTOS/Source/include>",
"+<FreeRTOSv9.0.0/FreeRTOS/Source/portable/Keil/ARM968es>",
],
options=dict(
CCFLAGS=[
# build FreeRTOS port in ARM mode
"+<-marm>",
"-<-mthumb>",
],
),
)
# Sources - lwIP # Sources - lwIP
queue.AddExternalLibrary("lwip", port="bdk") queue.AddExternalLibrary("lwip", port="bdk")

View File

@@ -96,17 +96,8 @@ queue.AddLibrary(
"+<component/common/drivers/wlan/realtek/src/osdep/lwip_intf.c>", "+<component/common/drivers/wlan/realtek/src/osdep/lwip_intf.c>",
"+<component/common/network/dhcp/dhcps.c>", "+<component/common/network/dhcp/dhcps.c>",
"+<component/common/network/ssl/ssl_ram_map/ssl_ram_map.c>", "+<component/common/network/ssl/ssl_ram_map/ssl_ram_map.c>",
"+<component/os/freertos/freertos_v8.1.2/Source/portable/MemMang/heap_5.c>",
"+<component/os/freertos/freertos_v8.1.2/Source/portable/GCC/ARM_CM4F/port.c>",
# "+<component/os/freertos/freertos_v8.1.2/Source/portable/IAR/ARM_CM4F/portasm.s>",
"+<component/os/freertos/cmsis_os.c>", "+<component/os/freertos/cmsis_os.c>",
"+<component/os/freertos/freertos_v8.1.2/Source/croutine.c>",
"+<component/os/freertos/freertos_v8.1.2/Source/event_groups.c>",
"+<component/os/freertos/freertos_service.c>", "+<component/os/freertos/freertos_service.c>",
"+<component/os/freertos/freertos_v8.1.2/Source/list.c>",
"+<component/os/freertos/freertos_v8.1.2/Source/queue.c>",
"+<component/os/freertos/freertos_v8.1.2/Source/tasks.c>",
"+<component/os/freertos/freertos_v8.1.2/Source/timers.c>",
"+<component/os/os_dep/device_lock.c>", "+<component/os/os_dep/device_lock.c>",
"+<component/os/os_dep/osdep_service.c>", "+<component/os/os_dep/osdep_service.c>",
"+<component/common/mbed/targets/hal/rtl8711b/analogin_api.c>", "+<component/common/mbed/targets/hal/rtl8711b/analogin_api.c>",
@@ -144,8 +135,6 @@ queue.AddLibrary(
includes=[ includes=[
"+<project/realtek_amebaz_va0_example/inc>", "+<project/realtek_amebaz_va0_example/inc>",
"+<component/os/freertos>", "+<component/os/freertos>",
"+<component/os/freertos/freertos_v8.1.2/Source/include>",
"+<component/os/freertos/freertos_v8.1.2/Source/portable/GCC/ARM_CM4F>",
"+<component/os/os_dep/include>", "+<component/os/os_dep/include>",
"+<component/common/api/network/include>", "+<component/common/api/network/include>",
"+<component/common/api>", "+<component/common/api>",
@@ -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 # Sources - lwIP
queue.AddExternalLibrary("lwip", port="amb1") queue.AddExternalLibrary("lwip", port="amb1")

View File

@@ -52,7 +52,7 @@ if not found:
exit(1) exit(1)
# Sources - ArduinoCore-API # Sources - ArduinoCore-API
queue.AddExternalLibrary("arduino_api") queue.AddExternalLibrary("arduino-api")
# Sources - board variant # Sources - board variant
queue.AddLibrary( queue.AddLibrary(

View File

@@ -97,7 +97,7 @@ queue.AppendPublic(
CXXFLAGS=[ CXXFLAGS=[
"-Wno-literal-suffix", "-Wno-literal-suffix",
"-Wno-write-strings", "-Wno-write-strings",
"-Wno-psabi", "-Wno-psabi", # parameter passing for argument of type ... changed in GCC 7.1
], ],
CPPDEFINES=[ CPPDEFINES=[
("LIBRETUYA", 1), ("LIBRETUYA", 1),

View File

@@ -3,6 +3,7 @@
from dataclasses import dataclass from dataclasses import dataclass
from typing import Dict, List, Optional, Union from typing import Dict, List, Optional, Union
from ltchiptool.util.dict import merge_dicts
from platformio.package.meta import PackageItem from platformio.package.meta import PackageItem
from platformio.platform.base import PlatformBase from platformio.platform.base import PlatformBase
from SCons.Script import DefaultEnvironment, Environment from SCons.Script import DefaultEnvironment, Environment
@@ -31,6 +32,7 @@ def env_add_external_library(
queue, queue,
name: str, name: str,
port: Optional[str] = None, port: Optional[str] = None,
options: Dict[str, List[str]] = {},
): ):
if port: if port:
name += f"-{port}" name += f"-{port}"
@@ -46,16 +48,19 @@ def env_add_external_library(
f"Version '{version}' of library '{name}' ({lib.package}) is not installed" 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( queue.AddLibrary(
name=name.replace("-", "_"), name=name.replace("-", "_"),
base_dir=package.path, base_dir=package.path,
srcs=lib.sources, srcs=lib.sources,
includes=lib.includes, includes=lib.includes,
options=dict( options=options,
CFLAGS=lib.flags,
CPPDEFINES=[(k, v) for k, v in lib.defines.items()],
LINKFLAGS=lib.linkflags,
),
) )

View File

@@ -4,7 +4,7 @@ import fnmatch
from dataclasses import InitVar, dataclass, field from dataclasses import InitVar, dataclass, field
from glob import glob from glob import glob
from os.path import isdir, join 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 ltchiptool.util.dict import merge_dicts
from SCons.Script import DefaultEnvironment, Environment from SCons.Script import DefaultEnvironment, Environment
@@ -127,8 +127,8 @@ class LibraryQueue:
self.options_public = merge_dicts(self.options_public, {key: option}) self.options_public = merge_dicts(self.options_public, {key: option})
self.queue.append(lib) self.queue.append(lib)
def AddExternalLibrary(self, name: str, port: Optional[str] = None): def AddExternalLibrary(self, *args, **kwargs):
return self.env.AddExternalLibrary(self, name, port) return self.env.AddExternalLibrary(self, *args, **kwargs)
def AppendPublic(self, **kwargs): def AppendPublic(self, **kwargs):
if "CPPPATH" in kwargs: if "CPPPATH" in kwargs:

View File

@@ -45,7 +45,7 @@
"+<.>" "+<.>"
] ]
}, },
"arduino_api": { "arduino-api": {
"package": "framework-arduino-api", "package": "framework-arduino-api",
"sources": [ "sources": [
"+<api/Common.cpp>", "+<api/Common.cpp>",
@@ -60,6 +60,27 @@
"+<api/deprecated>" "+<api/deprecated>"
] ]
}, },
"freertos": {
"package": "library-freertos",
"sources": [
"+<FreeRTOS/Source/*.c>"
],
"includes": [
"+<FreeRTOS/Source/include>"
]
},
"freertos-port": {
"package": "library-freertos-port",
"sources": [
"+<./$FREERTOS_PORT/*.c>"
],
"includes": [
"+<./$FREERTOS_PORT>"
],
"defines": {
"FREERTOS_PORT_${FREERTOS_PORT_DEFINE}": "1"
}
},
"lwip-amb1": { "lwip-amb1": {
"package": "library-lwip", "package": "library-lwip",
"sources": [ "sources": [

View File

@@ -17,14 +17,14 @@
"type": "array", "type": "array",
"items": { "items": {
"type": "string", "type": "string",
"pattern": "^[!+-]<[\\w/*.]+>$" "pattern": "^[!+-]<[$\\w/*.]+>$"
} }
}, },
"includes": { "includes": {
"type": "array", "type": "array",
"items": { "items": {
"type": "string", "type": "string",
"pattern": "^[!+-]<[\\w/*.]+>$" "pattern": "^[!+-]<[$\\w/*.]+>$"
} }
}, },
"flags": { "flags": {

View File

@@ -27,6 +27,7 @@
"any": "gccarmnoneeabi@~1.100301.0" "any": "gccarmnoneeabi@~1.100301.0"
}, },
"libraries": { "libraries": {
"freertos": "8.1.2",
"lwip": { "lwip": {
"1.4.1": "1.4.1-amb1", "1.4.1": "1.4.1-amb1",
"2.0.0": "2.0.0-amb1", "2.0.0": "2.0.0-amb1",
@@ -53,6 +54,7 @@
"any":"gccarmnoneeabi@~1.100301.0" "any":"gccarmnoneeabi@~1.100301.0"
}, },
"libraries": { "libraries": {
"freertos": "9.0.0",
"lwip": { "lwip": {
"2.0.2": "2.0.2-bdk", "2.0.2": "2.0.2-bdk",
"2.1.0": "2.1.0-bdk", "2.1.0": "2.1.0-bdk",
@@ -72,6 +74,15 @@
"base_url": "https://github.com/libretuya/lwip", "base_url": "https://github.com/libretuya/lwip",
"version_prefix": true "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": { "library-flashdb": {
"type": "framework", "type": "framework",
"version": "https://github.com/libretuya/library-flashdb#1.2.0" "version": "https://github.com/libretuya/library-flashdb#1.2.0"

View File

@@ -188,13 +188,21 @@ class LibretuyaPlatform(PlatformBase):
continue continue
for name, lib_versions in package["libraries"].items(): for name, lib_versions in package["libraries"].items():
package = f"library-{name}" 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: if name in versions and versions[name] in lib_versions:
pkg_versions[package] = lib_versions[versions[name]] pkg_versions[package] = lib_versions[versions[name]]
continue continue
if "default" in lib_versions: if "default" in lib_versions:
pkg_versions[package] = lib_versions["default"] 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(): for name, version in versions.items():
if name == "toolchain": if name == "toolchain":
continue continue