[realtek-ambz] Selectively update GCC to v10.3.1

This commit is contained in:
Kuba Szczodrzyński
2023-03-12 22:27:26 +01:00
parent ff8ac6036c
commit 5de98ed56c
5 changed files with 117 additions and 15 deletions

View File

@@ -35,6 +35,7 @@ env.Append(
"-MMD", "-MMD",
"-fno-exceptions", "-fno-exceptions",
"-fno-rtti", "-fno-rtti",
"-Wno-psabi",
], ],
CPPDEFINES=[ CPPDEFINES=[
# LibreTuya configuration # LibreTuya configuration
@@ -49,6 +50,7 @@ env.Append(
("ERRNO", "1"), # for LwIP ("ERRNO", "1"), # for LwIP
"MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED", # enable PSK in mbedTLS "MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED", # enable PSK in mbedTLS
# "MBEDTLS_DEBUG_C", # "MBEDTLS_DEBUG_C",
"MBED_PERIPHERALNAMES_H", # see fixups/cmsis.h
], ],
LINKFLAGS=[ LINKFLAGS=[
"-mcpu=cortex-m4", "-mcpu=cortex-m4",

View File

@@ -44,9 +44,9 @@
"optional": true, "optional": true,
"version": "https://github.com/libretuya/framework-realtek-amb1#v2022.06.21", "version": "https://github.com/libretuya/framework-realtek-amb1#v2022.06.21",
"toolchains": { "toolchains": {
"x86_64": "gccarmnoneeabi@~1.50401.0", "any": "gccarmnoneeabi@~1.50201.0",
"arm": "gccarmnoneeabi@~1.50401.0", "arm": "gccarmnoneeabi@~1.100301.0",
"arm64": "gccarmnoneeabi@~1.50401.0" "linux_x86_64": "gccarmnoneeabi@~1.100301.0"
}, },
"libraries": { "libraries": {
"lwip": [ "lwip": [
@@ -59,9 +59,7 @@
"optional": true, "optional": true,
"version": "https://github.com/libretuya/framework-realtek-ambz2#v2022.11.17", "version": "https://github.com/libretuya/framework-realtek-ambz2#v2022.11.17",
"toolchains": { "toolchains": {
"x86_64": "gccarmnoneeabi@~1.100301.0", "any": "gccarmnoneeabi@~1.100301.0"
"arm": "gccarmnoneeabi@~1.100301.0",
"arm64": "gccarmnoneeabi@~1.100301.0"
} }
}, },
"framework-beken-bdk": { "framework-beken-bdk": {
@@ -69,9 +67,8 @@
"optional": true, "optional": true,
"version": "https://github.com/libretuya/framework-beken-bdk#v2021.06.07", "version": "https://github.com/libretuya/framework-beken-bdk#v2021.06.07",
"toolchains": { "toolchains": {
"x86_64":"gccarmnoneeabi@~1.40804.0", "any":"gccarmnoneeabi@~1.40804.0",
"arm": "gccarmnoneeabi@~1.40803.0", "arm": "gccarmnoneeabi@~1.40803.0"
"arm64": "gccarmnoneeabi@~1.40803.0"
}, },
"libraries": { "libraries": {
"lwip": [ "lwip": [

View File

@@ -137,6 +137,33 @@ def find_pkg_root(self, path: str, spec: PackageSpec):
return path return path
def get_os_specifiers():
system = platform.system().lower()
arch = platform.machine().lower()
if not arch: # issue #4353
arch = "x86"
bits = platform.architecture()[0]
if "aarch64" in arch:
arch = "arm"
bits = 64
elif "arm" in arch:
arch = "arm"
bits = 32
elif "64" not in arch:
arch = "x86"
bits = 32
else:
arch = "x86"
bits = 64
return [
f"{system}_{arch}_{bits}", # linux_x86_64
f"{system}_{bits}", # linux_64
system, # windows
arch, # arm
"any",
]
class LibretuyaPlatform(PlatformBase): class LibretuyaPlatform(PlatformBase):
boards_base: Dict[str, dict] = {} boards_base: Dict[str, dict] = {}
custom_opts: Dict[str, object] = {} custom_opts: Dict[str, object] = {}
@@ -176,12 +203,17 @@ class LibretuyaPlatform(PlatformBase):
# set specific compiler versions # set specific compiler versions
if "toolchains" in package_obj: if "toolchains" in package_obj:
toolchains = package_obj["toolchains"] toolchains = package_obj["toolchains"]
if "arm" in platform.machine(): toolchain_version = None
(toolchain, version) = toolchains["arm"].split("@") specifiers = get_os_specifiers()
elif "aarch64" in platform.machine(): for spec in specifiers:
(toolchain, version) = toolchains["arm64"].split("@") toolchain_version = toolchains.get(spec)
else: if toolchain_version:
(toolchain, version) = toolchains["x86_64"].split("@") break
if not toolchain_version:
raise RuntimeError(
f"Toolchain not found for the current platform: {specifiers}"
)
(toolchain, version) = toolchain_version.split("@")
self.packages[f"toolchain-{toolchain}"]["version"] = version self.packages[f"toolchain-{toolchain}"]["version"] = version
# mark framework SDK as required # mark framework SDK as required

View File

@@ -0,0 +1,50 @@
/* Copyright (c) Kuba Szczodrzyński 2023-03-12. */
// Fix for PeripheralNames.h producing errors on GCC newer than 5.x.x.
// The struct pointer casts are replaced with register addresses, which fixes compilation.
// On older versions, this change doesn't make any difference.
// MBED_PERIPHERALNAMES_H is defined in the SDK builder, to eliminate PeripheralNames.h completely.
#include_next "cmsis.h"
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
typedef enum {
UART_0 = (int)UART0_REG_BASE,
UART_1 = (int)UART1_REG_BASE,
UART_2 = (int)UART2_REG_BASE,
} UARTName;
typedef enum {
ADC0_0 = 0,
ADC0_1,
ADC0_2,
ADC0_3
} ADCName;
typedef enum {
SPI_0 = (int)SPI0_REG_BASE,
SPI_1 = (int)SPI1_REG_BASE,
} SPIName;
typedef enum {
I2C_0 = (int)I2C0_REG_BASE,
I2C_1 = (int)I2C1_REG_BASE,
} I2CName;
typedef enum {
PWM_0 = 1,
PWM_1,
PWM_2,
PWM_3,
PWM_4,
PWM_5
} PWMName;
#ifdef __cplusplus
}
#endif

View File

@@ -0,0 +1,21 @@
/* Copyright (c) Kuba Szczodrzyński 2023-03-12. */
#include_next <machine/endian.h>
#pragma once
// GCC versions newer than 5.x.x specify the LITTLE_ENDIAN macro
// as an alias to _LITTLE_ENDIAN (which in turn holds the actual numeric value).
// Realtek's rtl8711b_crypto.h redefines _LITTLE_ENDIAN as a macro without
// any value, which makes comparisons like '#if BYTE_ORDER == LITTLE_ENDIAN' impossible.
#if __GNUC__ > 5
#undef _LITTLE_ENDIAN
#undef _BIG_ENDIAN
#undef LITTLE_ENDIAN
#undef BIG_ENDIAN
#undef BYTE_ORDER
#define LITTLE_ENDIAN 1234
#define BIG_ENDIAN 4321
#define BYTE_ORDER LITTLE_ENDIAN
#endif