diff --git a/.github/workflows/real-time-cpp-benchmarks.yml b/.github/workflows/real-time-cpp-benchmarks.yml
index 7b6608f5d..e51551115 100644
--- a/.github/workflows/real-time-cpp-benchmarks.yml
+++ b/.github/workflows/real-time-cpp-benchmarks.yml
@@ -1,5 +1,5 @@
##############################################################################
-# Copyright Christopher Kormanyos 2021 - 2025.
+# Copyright Christopher Kormanyos 2021 - 2026.
# Distributed under the Boost Software License,
# Version 1.0. (See accompanying file LICENSE_1_0.txt
# or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -243,7 +243,7 @@ jobs:
- name: benchmark_single-stm32f446
run: |
mkdir -p bin
- arm-none-eabi-g++ -std=c++20 -Wall -Wextra -Wpedantic -O2 -g -gdwarf-2 -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=32 -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=soft -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_CRC -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_crc.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_crc.map -T ./target/micros/stm32f446/make/stm32f446.ld -o ./bin/app_benchmark_crc.elf
+ arm-none-eabi-g++ -std=c++20 -Wall -Wextra -Wpedantic -O2 -g -gdwarf-2 -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=32 -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=soft -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_CRC -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_crc.cpp ./src/mcal/mcal_gcc_cxx_completion.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_crc.map -T ./target/micros/stm32f446/make/stm32f446.ld -o ./bin/app_benchmark_crc.elf
arm-none-eabi-objcopy ./bin/app_benchmark_crc.elf -O ihex ./bin/app_benchmark_crc.hex
ls -la ./bin/app_benchmark_crc.elf ./bin/app_benchmark_crc.hex ./bin/app_benchmark_crc.map
working-directory: ./ref_app/
@@ -286,20 +286,20 @@ jobs:
wget http://security.ubuntu.com/ubuntu/pool/universe/n/ncurses/libncursesw5_6.3-2ubuntu0.1_amd64.deb
sudo apt install ./libncursesw5_6.3-2ubuntu0.1_amd64.deb
mkdir -p emu_env && cd emu_env
- wget --no-check-certificate https://developer.arm.com/-/media/Files/downloads/gnu/13.3.rel1/binrel/arm-gnu-toolchain-13.3.rel1-x86_64-arm-none-eabi.tar.xz
- tar -xf arm-gnu-toolchain-13.3.rel1-x86_64-arm-none-eabi.tar.xz
+ wget --no-check-certificate https://developer.arm.com/-/media/Files/downloads/gnu/14.3.rel1/binrel/arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi.tar.xz
+ tar -xf arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi.tar.xz
wget --no-check-certificate https://github.com/xpack-dev-tools/qemu-arm-xpack/releases/download/v8.2.6-1/xpack-qemu-arm-8.2.6-1-linux-x64.tar.gz
tar -xzf xpack-qemu-arm-8.2.6-1-linux-x64.tar.gz
working-directory: ./ref_app/
- name: build benchmark_single-stm32f429
run: |
- PATH="${{ runner.workspace }}/real-time-cpp/ref_app/emu_env/arm-gnu-toolchain-13.3.rel1-x86_64-arm-none-eabi/bin:$PATH"
+ PATH="${{ runner.workspace }}/real-time-cpp/ref_app/emu_env/arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi/bin:$PATH"
echo 'Query arm-none-eabi-g++ version'
echo
arm-none-eabi-g++ -v
echo
mkdir -p bin
- arm-none-eabi-g++ -std=c++20 -Werror -Wall -Wextra -Wpedantic -Wconversion -Wsign-conversion -O2 -g -gdwarf-2 -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=32 -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=soft -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f429 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_CRC -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_crc.cpp ./target/micros/stm32f429/make/single/crt.cpp -nostartfiles -nostdlib -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_crc.map -T ./target/micros/stm32f429/make/stm32f429.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_crc.elf
+ arm-none-eabi-g++ -std=c++23 -Werror -Wall -Wextra -Wpedantic -Wconversion -Wsign-conversion -O2 -g -gdwarf-2 -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=32 -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=soft -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f429 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_CRC -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_crc.cpp ./src/mcal/mcal_gcc_cxx_completion.cpp ./target/micros/stm32f429/make/single/crt.cpp -nostartfiles -nostdlib -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_crc.map -T ./target/micros/stm32f429/make/stm32f429.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_crc.elf
arm-none-eabi-objcopy ./bin/app_benchmark_crc.elf -O ihex ./bin/app_benchmark_crc.hex
ls -la ./bin/app_benchmark_crc.elf ./bin/app_benchmark_crc.hex ./bin/app_benchmark_crc.map
working-directory: ./ref_app/
@@ -312,7 +312,7 @@ jobs:
- name: run-test-on-target
run: |
sleep 2
- PATH="${{ runner.workspace }}/real-time-cpp/ref_app/emu_env/arm-gnu-toolchain-13.3.rel1-x86_64-arm-none-eabi/bin:$PATH"
+ PATH="${{ runner.workspace }}/real-time-cpp/ref_app/emu_env/arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi/bin:$PATH"
echo 'Run test on target'
echo
arm-none-eabi-gdb ./bin/app_benchmark_crc.elf -x ./target/build/test_app_benchmarks_emulator.gdb > ./app_benchmark_crc.txt
@@ -321,3 +321,59 @@ jobs:
echo 'We will now grep for the right answer...'
grep 'value 0xF00DCAFE' ./app_benchmark_crc.txt
working-directory: ./ref_app/
+ benchmark_single-stm32f429-qemu-std-big-int:
+ runs-on: ubuntu-latest
+ defaults:
+ run:
+ shell: bash
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: '0'
+ - name: update-tools
+ run: |
+ sudo apt update
+ wget http://security.ubuntu.com/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ sudo apt install ./libtinfo5_6.3-2ubuntu0.1_amd64.deb
+ wget http://security.ubuntu.com/ubuntu/pool/universe/n/ncurses/libncursesw5_6.3-2ubuntu0.1_amd64.deb
+ sudo apt install ./libncursesw5_6.3-2ubuntu0.1_amd64.deb
+ mkdir -p emu_env && cd emu_env
+ wget --no-check-certificate https://developer.arm.com/-/media/Files/downloads/gnu/14.3.rel1/binrel/arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi.tar.xz
+ tar -xf arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi.tar.xz
+ wget --no-check-certificate https://github.com/xpack-dev-tools/qemu-arm-xpack/releases/download/v8.2.6-1/xpack-qemu-arm-8.2.6-1-linux-x64.tar.gz
+ tar -xzf xpack-qemu-arm-8.2.6-1-linux-x64.tar.gz
+ working-directory: ./ref_app/
+ - name: clone-eisenwave-std-big-int
+ run: |
+ git clone -b main --depth 1 https://github.com/eisenwave/std-big-int.git ../../std-big-int-root
+ working-directory: ./ref_app/
+ - name: build benchmark_single-stm32f429
+ run: |
+ PATH="${{ runner.workspace }}/real-time-cpp/ref_app/emu_env/arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi/bin:$PATH"
+ echo 'Query arm-none-eabi-g++ version'
+ echo
+ arm-none-eabi-g++ -v
+ echo
+ mkdir -p bin
+ arm-none-eabi-g++ -std=c++23 -Werror -Wall -Wextra -Wpedantic -Wconversion -Wsign-conversion -O2 -g -gdwarf-2 -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=32 -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=soft -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f429 -I./src -I../../std-big-int-root/include -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_STD_BIG_INT -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_std_big_int.cpp ./src/mcal/mcal_gcc_cxx_completion.cpp ../../std-big-int-root/src/karatsuba.cpp ../../std-big-int-root/src/toom_cook_3.cpp ../../std-big-int-root/src/toom_cook_4.cpp ../../std-big-int-root/src/toom_cook_6_5.cpp ./target/micros/stm32f429/make/single/crt.cpp -nostartfiles -nostdlib -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_std_big_int.map -T ./target/micros/stm32f429/make/stm32f429.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_std_big_int.elf
+ arm-none-eabi-objcopy ./bin/app_benchmark_std_big_int.elf -O ihex ./bin/app_benchmark_std_big_int.hex
+ ls -la ./bin/app_benchmark_std_big_int.elf ./bin/app_benchmark_std_big_int.hex ./bin/app_benchmark_std_big_int.map
+ working-directory: ./ref_app/
+ - name: emulate-target stm32f429
+ run: |
+ PATH="${{ runner.workspace }}/real-time-cpp/ref_app/emu_env/xpack-qemu-arm-8.2.6-1/bin:$PATH"
+ qemu-system-gnuarmeclipse --verbose --mcu STM32F429ZI --nographic --gdb tcp::9999 -d unimp,guest_errors &
+ sleep 2
+ working-directory: ./ref_app/
+ - name: run-test-on-target
+ run: |
+ sleep 2
+ PATH="${{ runner.workspace }}/real-time-cpp/ref_app/emu_env/arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi/bin:$PATH"
+ echo 'Run test on target'
+ echo
+ arm-none-eabi-gdb ./bin/app_benchmark_std_big_int.elf -x ./target/build/test_app_benchmarks_emulator.gdb > ./app_benchmark_std_big_int.txt
+ cat ./app_benchmark_std_big_int.txt
+ echo
+ echo 'We will now grep for the right answer...'
+ grep 'value 0xF00DCAFE' ./app_benchmark_std_big_int.txt
+ working-directory: ./ref_app/
diff --git a/.github/workflows/real-time-cpp.yml b/.github/workflows/real-time-cpp.yml
index d4bcbb186..491cf5c89 100644
--- a/.github/workflows/real-time-cpp.yml
+++ b/.github/workflows/real-time-cpp.yml
@@ -318,7 +318,7 @@ jobs:
fetch-depth: '0'
- uses: ilammy/msvc-dev-cmd@v1
with:
- toolset: 14.2
+ toolset: 14.4
- name: msvc-msbuild-${{ matrix.suite }}
run: |
MSBuild -m ref_app.sln -p:Configuration=${{ matrix.suite }} -p:Platform=x64 /t:Rebuild
diff --git a/examples/chapter10_08/readme.md b/examples/chapter10_08/readme.md
index 1947327e6..561157a86 100644
--- a/examples/chapter10_08/readme.md
+++ b/examples/chapter10_08/readme.md
@@ -1,9 +1,10 @@
# Example Chapter10_08 (advanced level)
+
## External SPI RAM and Computing 10,001 Digits of Pi
-
-
+
+
This advanced example extends available RAM via SPI SRAM chips.
@@ -134,7 +135,7 @@ These 8-pin SRAM chips are straightforward to use.
They are controlled with easy-to-understand commands
that execute read/write operations in either single byte sequences
or small page bursts. A lightweight communication class
-called `mcal::memroy::sram::memory_sram_microchip_23lc1024`
+called `mcal::memory::sram::memory_sram_microchip_23lc1024`
that is used to control the SRAM chips can be found
in the file
[mcal_memory_sram_microchip_23lc1024.h](./src/mcal/avr/mcal_memory_sram_microchip_23lc1024.h)
@@ -165,9 +166,9 @@ Pinning in this example is summarized in the table below.
The hardware setup is pictured in the image below with an oscilloscope measurement
in action.
-
+
The PWM signal representing calculation progress is shown below.
The PWM signal has a frequency of approximately $2~\text{kHz}$.
-
+
diff --git a/examples/chapter10_08a/readme.md b/examples/chapter10_08a/readme.md
index 39401eb14..982669506 100644
--- a/examples/chapter10_08a/readme.md
+++ b/examples/chapter10_08a/readme.md
@@ -1,4 +1,5 @@
# Example Chapter10_08a (advanced level)
+
## Parallel SRAM and Computing 100,001 Digits of Pi
This advanced example picks up on the idea of the previous Example Chapter10_08
@@ -30,12 +31,12 @@ Care needs to be taken to wire the parallel SRAM brick properly
(as shown below). When the hardware setup is correct,
however, it is actually relatively straightforward
(although definitely requires careful attention to detail)
-to write a prallel SRAM driver for the 8-bit MCU.
+to write a parallel SRAM driver for the 8-bit MCU.
The results of these activities
are expressed in the template classes
-`mcal::memroy::sram::memory_sram_parallel_cypress_cy62158e`
+`mcal::memory::sram::memory_sram_parallel_cypress_cy62158e`
and
-`mcal::memroy::sram::memory_sram_parallel_cypress_cy62167gn`
+`mcal::memory::sram::memory_sram_parallel_cypress_cy62167gn`
found in the files
[mcal_memory_sram_parallel_cypress_cy62158e.h](./src/mcal/avr/mcal_memory_sram_parallel_cypress_cy62158e.h)
and
@@ -89,7 +90,7 @@ This increases quadratically with increasing number
of decimal digits targeted in a given calculation.
Although we're not intending to break any super-computing
-performace or speed records with the 8-bit MCU hooked up
+performance or speed records with the 8-bit MCU hooked up
to external parallel SRAM, the advantage of parallel port access
can be noticed.
Indeed, in this setup, the $1,001$
@@ -130,7 +131,7 @@ or the $2~\text{MByte}$ brick.
The pin connections of the $2~\text{MByte}$ memory brick
of type Cypress(R) MoBL(R) CY62167GN in 48-pin TSOP
-are shown in the table below. The pinnning has
+are shown in the table below. The pinning has
been selected with certain considerations in mind that
make the software driver for the memory brick
more straightforward and less complicated to write.
@@ -194,11 +195,11 @@ read/write operations on the driver level.
The hardware setup with the $2~\text{MByte}$ SRAM brick
is pictured in the image below.
-
+
### 1MB Setup
The hardware setup with the $1~\text{MByte}$ SRAM brick
is pictured in the image below.
-
+
diff --git a/examples/chapter10_09/readme.md b/examples/chapter10_09/readme.md
index 7590996b3..4cfa31c5b 100644
--- a/examples/chapter10_09/readme.md
+++ b/examples/chapter10_09/readme.md
@@ -1,4 +1,5 @@
# Example Chapter10_09 (advanced level)
+
## 100,001 Digits of Pi on Raspberry Pi(R)
This advanced example ports the Pi Spigot
@@ -21,7 +22,7 @@ in this example. It can be found in identically the same form
as that which has been used in Examples Chapter10_08 and 10_08a.
The single-board computer is operated
OS-less in _bare-metal_ mode with no input or output device.
-Real-time afficionados will relish the eloquent, efficient, terse,
+Real-time aficionados will relish the eloquent, efficient, terse,
manually-written startup sequence and memory-access optimization code.
A skinny MCAL layer provides the needed peripheral abstractions
for timer, port I/O driver, etc.
@@ -220,7 +221,7 @@ are used to connect the single-board computer to power, ground
and the necessary logic peripherals. Power and ground lines have
double and quadruple strands of skinny wire
in order to reduce parasitic dissipation
-in the currrent-carrying lines.
+in the current-carrying lines.
The logic gate sharpens port output signal edges
and performs the conversion from $3.3~\text{V}$ CMOS to $5~\text{V}$ TTL.
@@ -256,8 +257,7 @@ Pinning in this example is summarized in the table below.
| 27 | GPA_6 | LCD R/W |
| 28 | GPA_7 | LCD E |
-
The hardware setup with the RpiZero in action calculating
-$100,001$ decimal digits of $\pi$ is pictured in the image below.
+$100,001$ decimal digits of $\pi$ is pictured in the image below.
-
+
diff --git a/ref_app/ref_app.vcxproj b/ref_app/ref_app.vcxproj
index e5d74e585..beca71fcc 100644
--- a/ref_app/ref_app.vcxproj
+++ b/ref_app/ref_app.vcxproj
@@ -79,7 +79,7 @@
Level3
ProgramDatabase
4351;4646;4996
- stdcpplatest
+ stdcpp23
@@ -104,7 +104,7 @@
Level3
ProgramDatabase
4351;4646;4996
- stdcpplatest
+ stdcpp23
@@ -208,6 +208,7 @@
+
diff --git a/ref_app/ref_app.vcxproj.filters b/ref_app/ref_app.vcxproj.filters
index 4b0018f4e..2578913a7 100644
--- a/ref_app/ref_app.vcxproj.filters
+++ b/ref_app/ref_app.vcxproj.filters
@@ -1402,6 +1402,9 @@
src\mcal\esp32p4_riscv_soc
+
+ src\app\benchmark
+
diff --git a/ref_app/src/app/benchmark/app_benchmark.cpp b/ref_app/src/app/benchmark/app_benchmark.cpp
index 5ccc73435..e8eb34d3c 100644
--- a/ref_app/src/app/benchmark/app_benchmark.cpp
+++ b/ref_app/src/app/benchmark/app_benchmark.cpp
@@ -124,6 +124,10 @@ auto app::benchmark::task_func() -> void
const bool result_is_ok = app::benchmark::run_boost_crypt_hasher();
+ #elif (defined(APP_BENCHMARK_TYPE) && (APP_BENCHMARK_TYPE == APP_BENCHMARK_TYPE_STD_BIG_INT))
+
+ const bool result_is_ok = app::benchmark::run_std_big_int();
+
#endif
// Set the benchmark port pin level to low.
diff --git a/ref_app/src/app/benchmark/app_benchmark.h b/ref_app/src/app/benchmark/app_benchmark.h
index 5876ffbc0..cd2b3d64d 100644
--- a/ref_app/src/app/benchmark/app_benchmark.h
+++ b/ref_app/src/app/benchmark/app_benchmark.h
@@ -34,6 +34,7 @@
#define APP_BENCHMARK_TYPE_NON_STD_DECIMAL 21
#define APP_BENCHMARK_TYPE_PI_AGM_100 22
#define APP_BENCHMARK_TYPE_BOOST_CRYPT_HASHER 23
+ #define APP_BENCHMARK_TYPE_STD_BIG_INT 24
//#define APP_BENCHMARK_TYPE APP_BENCHMARK_TYPE_NONE
//#define APP_BENCHMARK_TYPE APP_BENCHMARK_TYPE_COMPLEX
@@ -59,6 +60,7 @@
//#define APP_BENCHMARK_TYPE APP_BENCHMARK_TYPE_NON_STD_DECIMAL
//#define APP_BENCHMARK_TYPE APP_BENCHMARK_TYPE_PI_AGM_100
//#define APP_BENCHMARK_TYPE APP_BENCHMARK_TYPE_BOOST_CRYPT_HASHER
+ //#define APP_BENCHMARK_TYPE APP_BENCHMARK_TYPE_STD_BIG_INT
#if !defined(APP_BENCHMARK_TYPE)
#define APP_BENCHMARK_TYPE APP_BENCHMARK_TYPE_NONE
@@ -112,6 +114,8 @@
auto run_non_std_decimal() -> bool;
#elif (APP_BENCHMARK_TYPE == APP_BENCHMARK_TYPE_BOOST_CRYPT_HASHER)
auto run_boost_crypt_hasher() -> bool;
+ #elif (APP_BENCHMARK_TYPE == APP_BENCHMARK_TYPE_STD_BIG_INT)
+ auto run_std_big_int() -> bool;
#else
#error APP_BENCHMARK_TYPE is undefined.
#endif
diff --git a/ref_app/src/app/benchmark/app_benchmark_crc.cpp b/ref_app/src/app/benchmark/app_benchmark_crc.cpp
index 7cb92a8db..4ee64a8f0 100644
--- a/ref_app/src/app/benchmark/app_benchmark_crc.cpp
+++ b/ref_app/src/app/benchmark/app_benchmark_crc.cpp
@@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////////
-// Copyright Christopher Kormanyos 2007 - 2019.
+// Copyright Christopher Kormanyos 2007 - 2026.
// Distributed under the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt
// or copy at http://www.boost.org/LICENSE_1_0.txt)
diff --git a/ref_app/src/app/benchmark/app_benchmark_std_big_int.cpp b/ref_app/src/app/benchmark/app_benchmark_std_big_int.cpp
new file mode 100644
index 000000000..1acca7c6c
--- /dev/null
+++ b/ref_app/src/app/benchmark/app_benchmark_std_big_int.cpp
@@ -0,0 +1,115 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2026.
+// Distributed under the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#include
+
+#if (defined(APP_BENCHMARK_TYPE) && (APP_BENCHMARK_TYPE == APP_BENCHMARK_TYPE_STD_BIG_INT))
+
+#include
+
+#include // This includes the entire std-big-int library
+
+#include
+#include
+#include
+
+static auto do_one_test() -> bool;
+
+static auto do_one_test() -> bool
+{
+ using allocator_type = util::ring_allocator;
+
+ using wi_type = beman::big_int::basic_big_int::digits, allocator_type>;
+
+ using wi_result_type = wi_type;
+
+ wi_type wi_val_a {};
+ wi_type wi_val_b {};
+ wi_result_type wi_val_ctrl {};
+
+ constexpr const char str_a[] = "fee6f3060ed3f90fdd79fe414418f8d9dc08bbe4470b658ca8f167fc3ce48821a79f8f9df51d795cbb88cb6e3a5e5f46b56f06991d6a929784b414c0bff17ca7eef9ab0e4d469093c548018d66a349beda36a4afdeb9d329d4119e93fa436a2b8417c3b2af701dde827e01e608c3ddfedfdc7fd7052fda87efb34d8321f3941482bc74e109ebdff9aebc9585de04ab47afb41ccbda18d806eb3d87ed7b1c0f03954ef98f08432db8f86e4ebceb292c53ac83f9738f8cd88da17384cdfb31d25bf6e030571d52ac43a7c646dee1fc0a8d827d73917b3c5f84dc7d1515a0c9a1bef3dc7f9d8caed3b3db7c869e262860a4e008c12d5f3da2c733c0f55168a30be2";
+ constexpr const char str_b[] = "d7f1c5ebfe9108ab8900f3d1af36367cce3e92121acb9b60e352e5d622525715d0203ddd77d9ab308709777b225948c3e61542010fe75974ddb38cc38a11fa65bee2a6f171fe7ee4e52d81569bfcb886f972bd4655b6388bc7c8982f6e6a31efc21f8579394b5e629c15c367ee6eda6091dcb0f8aea6daa69f9c7059e585fc92a28c16d16183b8b0edf460b9741b712a9aaaf9d557ae4a7ef5cead986e9c414988b5fc43d78d8f7fbbc7f6cfd7e08bf8f87ce6f865b9ad1fcf4b00f42939349398c4a2928c21959ff6105665de3d95be8afc9fe9fb33d6afb95948e9778328fdd7172c70431479229cae5a47463f832b9ca2a39f36963f3ec1dc39fe6a3bffbc";
+ constexpr const char str_ctrl[] = "d704b29793a64a44339b92e4f202801cae2ca252f899cf36ae3735c98505f4c16a7a6a159e54e8927d4ec95defd8ec04afcc0043bdab50dfc763b376549ab90df60d476bd5b26c3f5b2378656fe307f7da459b62924efa9f6d408484a44a88265515b04f1d75351ba7e6436cdf6d67a87c82dbacb02f782f1601feb974d10367e275561904466d31daf817f350752636455bf7f6f86f21268bf173182e430fdeb80fbc96daf032ec381f761476b8bf2cc33d6ec7d67d96eb69fef2bce4c715e4d676b8c2066afa83f10243273f5c65b427e71eaee89d285f39692e757cb6b86a085e7869ef85c05155328130e37163b8addb3410ccd9fde92fcc5e8a9b3336113440f34e3ace928c98de63d02c0caa1c160cfb8ccf46d48bdf9ebd24f5611582d92cf787e02198e7bebc83bd9eae8bd63c5b74573a2923146d05e92211baecb7fb4d7408d31cdccdfdeca05c0c4085775a510f4bed924ebd69e6c4e34c3c6ecb3de0ff2187affe6bffaa1d73df44d730668318922a3077232dab4575a64e8a7958301ce2e341a146f758fc51d7e25298545a6b277b1a9cd9ea72def76d7c05ea5a17ba501050106ff8042f0ffea4c97193b0b8ad138e315d7cd09179d55782534c96b32f21d808e0764b3a341ccc1c20543da2ef9620a5c877fa330bfc43556ddf8069c3fa04e3081b699b8673346f82d112c49bf17fa7c52cc9fbbe91a8d7f8";
+
+ const auto fc_result_a{ from_chars(str_a, str_a + std::strlen(str_a), wi_val_a, 16) };
+ const auto fc_result_b{ from_chars(str_b, str_b + std::strlen(str_b), wi_val_b, 16) };
+ const auto fc_result_ctrl{ from_chars(str_ctrl, str_ctrl + std::strlen(str_ctrl), wi_val_ctrl, 16) };
+
+ static_cast(fc_result_a);
+ static_cast(fc_result_b);
+ static_cast(fc_result_ctrl);
+
+ const wi_result_type wi_val_c { wi_val_a * wi_val_b };
+
+ const bool result_is_ok { (wi_val_ctrl == wi_val_c) };
+
+ return result_is_ok;
+}
+
+auto app::benchmark::run_std_big_int() -> bool
+{
+ const bool result_is_ok { ::do_one_test() };
+
+ return result_is_ok;
+}
+
+#if defined(APP_BENCHMARK_STANDALONE_MAIN)
+constexpr auto app_benchmark_standalone_foodcafe = static_cast(UINT32_C(0xF00DCAFE));
+
+extern "C"
+{
+ extern volatile std::uint32_t app_benchmark_standalone_result;
+
+ auto app_benchmark_run_standalone () -> bool;
+ auto app_benchmark_get_standalone_result() -> bool;
+
+ auto app_benchmark_run_standalone() -> bool
+ {
+ auto result_is_ok = true;
+
+ for(unsigned i = 0U; i < 64U; ++i)
+ {
+ result_is_ok &= app::benchmark::run_std_big_int();
+ }
+
+ app_benchmark_standalone_result =
+ static_cast
+ (
+ result_is_ok ? app_benchmark_standalone_foodcafe : static_cast(UINT32_C(0xFFFFFFFF))
+ );
+
+ return result_is_ok;
+ }
+
+ auto app_benchmark_get_standalone_result() -> bool
+ {
+ volatile auto result_is_ok =
+ (app_benchmark_standalone_result == static_cast(UINT32_C(0xF00DCAFE)));
+
+ return result_is_ok;
+ }
+}
+
+ATTRIBUTE(used) auto main() -> int;
+
+auto main() -> int
+{
+ auto result_is_ok = true;
+
+ result_is_ok = (::app_benchmark_run_standalone () && result_is_ok);
+ result_is_ok = (::app_benchmark_get_standalone_result() && result_is_ok);
+
+ return (result_is_ok ? 0 : -1);
+}
+
+extern "C"
+{
+ volatile std::uint32_t app_benchmark_standalone_result;
+}
+#endif
+
+#endif // APP_BENCHMARK_TYPE_STD_BIG_INT
diff --git a/ref_app/src/app/benchmark/app_benchmark_std_big_int_.cpp b/ref_app/src/app/benchmark/app_benchmark_std_big_int_.cpp
new file mode 100644
index 000000000..3319e30ba
--- /dev/null
+++ b/ref_app/src/app/benchmark/app_benchmark_std_big_int_.cpp
@@ -0,0 +1,75 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2026.
+// Distributed under the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#include
+
+#if (defined(APP_BENCHMARK_TYPE) && (APP_BENCHMARK_TYPE == APP_BENCHMARK_TYPE_STD_BIG_INT))
+
+//#include
+
+//#include // This includes the entire std-big-int library
+
+auto app::benchmark::run_std_big_int() -> bool
+{
+ #if 0
+ constexpr const char str_a[] = "fee6f3060ed3f90fdd79fe414418f8d9dc08bbe4470b658ca8f167fc3ce48821a79f8f9df51d795cbb88cb6e3a5e5f46b56f06991d6a929784b414c0bff17ca7eef9ab0e4d469093c548018d66a349beda36a4afdeb9d329d4119e93fa436a2b8417c3b2af701dde827e01e608c3ddfedfdc7fd7052fda87efb34d8321f3941482bc74e109ebdff9aebc9585de04ab47afb41ccbda18d806eb3d87ed7b1c0f03954ef98f08432db8f86e4ebceb292c53ac83f9738f8cd88da17384cdfb31d25bf6e030571d52ac43a7c646dee1fc0a8d827d73917b3c5f84dc7d1515a0c9a1bef3dc7f9d8caed3b3db7c869e262860a4e008c12d5f3da2c733c0f55168a30be2";
+ constexpr const char str_b[] = "d7f1c5ebfe9108ab8900f3d1af36367cce3e92121acb9b60e352e5d622525715d0203ddd77d9ab308709777b225948c3e61542010fe75974ddb38cc38a11fa65bee2a6f171fe7ee4e52d81569bfcb886f972bd4655b6388bc7c8982f6e6a31efc21f8579394b5e629c15c367ee6eda6091dcb0f8aea6daa69f9c7059e585fc92a28c16d16183b8b0edf460b9741b712a9aaaf9d557ae4a7ef5cead986e9c414988b5fc43d78d8f7fbbc7f6cfd7e08bf8f87ce6f865b9ad1fcf4b00f42939349398c4a2928c21959ff6105665de3d95be8afc9fe9fb33d6afb95948e9778328fdd7172c70431479229cae5a47463f832b9ca2a39f36963f3ec1dc39fe6a3bffbc";
+ constexpr const char str_ctrl[] = "d704b29793a64a44339b92e4f202801cae2ca252f899cf36ae3735c98505f4c16a7a6a159e54e8927d4ec95defd8ec04afcc0043bdab50dfc763b376549ab90df60d476bd5b26c3f5b2378656fe307f7da459b62924efa9f6d408484a44a88265515b04f1d75351ba7e6436cdf6d67a87c82dbacb02f782f1601feb974d10367e275561904466d31daf817f350752636455bf7f6f86f21268bf173182e430fdeb80fbc96daf032ec381f761476b8bf2cc33d6ec7d67d96eb69fef2bce4c715e4d676b8c2066afa83f10243273f5c65b427e71eaee89d285f39692e757cb6b86a085e7869ef85c05155328130e37163b8addb3410ccd9fde92fcc5e8a9b3336113440f34e3ace928c98de63d02c0caa1c160cfb8ccf46d48bdf9ebd24f5611582d92cf787e02198e7bebc83bd9eae8bd63c5b74573a2923146d05e92211baecb7fb4d7408d31cdccdfdeca05c0c4085775a510f4bed924ebd69e6c4e34c3c6ecb3de0ff2187affe6bffaa1d73df44d730668318922a3077232dab4575a64e8a7958301ce2e341a146f758fc51d7e25298545a6b277b1a9cd9ea72def76d7c05ea5a17ba501050106ff8042f0ffea4c97193b0b8ad138e315d7cd09179d55782534c96b32f21d808e0764b3a341ccc1c20543da2ef9620a5c877fa330bfc43556ddf8069c3fa04e3081b699b8673346f82d112c49bf17fa7c52cc9fbbe91a8d7f8";
+ #else
+ //constexpr const char str_a [] = "fee6f306";
+ //constexpr const char str_b [] = "d7f1c5eb";
+ //constexpr const char str_ctrl[] = "d704b297";
+ #endif
+
+ #if 0
+ using allocator_type = util::ring_allocator;
+
+ using wi_type = beman::big_int::basic_big_int::digits, allocator_type>;
+
+ using wi_result_type = wi_type;
+
+ wi_type wi_val_a {};
+ wi_type wi_val_b {};
+ wi_result_type wi_val_ctrl {};
+
+ const auto fc_result_a = from_chars(str_a, str_a + std::strlen(str_a), wi_val_a, 16);
+ const auto fc_result_b = from_chars(str_b, str_b + std::strlen(str_b), wi_val_b, 16);
+ const auto fc_result_ctrl = from_chars(str_ctrl, str_ctrl + std::strlen(str_ctrl), wi_val_ctrl, 16);
+
+ static_cast(fc_result_a);
+ static_cast(fc_result_b);
+ static_cast(fc_result_ctrl);
+
+ const wi_result_type wi_val_c{wi_result_type{wi_val_a} * wi_result_type{wi_val_b}};
+
+ const bool result_is_ok { (wi_val_ctrl == wi_val_c) };
+
+ return result_is_ok;
+ #else
+ return true;
+ #endif
+}
+
+#if defined(APP_BENCHMARK_STANDALONE_MAIN)
+ATTRIBUTE(used) auto main() -> int;
+
+auto main() -> int
+{
+ // g++ -Wall -O3 -march=native -I./ref_app/src/mcal/host -I./ref_app/src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_FILTER -DAPP_BENCHMARK_STANDALONE_MAIN ./ref_app/src/app/benchmark/app_benchmark_filter.cpp -o ./ref_app/bin/app_benchmark_filter.exe
+
+ bool result_is_ok = true;
+
+ for(unsigned i = 0U; i < 64U; ++i)
+ {
+ result_is_ok &= app::benchmark::run_std_big_int();
+ }
+
+ return result_is_ok ? 0 : -1;
+}
+#endif
+
+#endif // APP_BENCHMARK_TYPE_FILTER
diff --git a/ref_app/src/math/functions/math_functions_hypergeometric.h b/ref_app/src/math/functions/math_functions_hypergeometric.h
index 02cf779f1..f5a057515 100644
--- a/ref_app/src/math/functions/math_functions_hypergeometric.h
+++ b/ref_app/src/math/functions/math_functions_hypergeometric.h
@@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////////
-// Copyright Christopher Kormanyos 2014 - 2025.
+// Copyright Christopher Kormanyos 2014 - 2026.
// Distributed under the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt
// or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -161,7 +161,7 @@
T x_pow_n_div_n_fact(x);
// Define an allocator type for use in the containers below.
- using allocator_type = util::ring_allocator;
+ using allocator_type = util::ring_allocator;
// Define a container type for the upcoming calculation.
using container_type = util::dynamic_array;
diff --git a/ref_app/src/mcal/mcal_gcc_cxx_completion.cpp b/ref_app/src/mcal/mcal_gcc_cxx_completion.cpp
index d323dd4fa..414c8e279 100644
--- a/ref_app/src/mcal/mcal_gcc_cxx_completion.cpp
+++ b/ref_app/src/mcal/mcal_gcc_cxx_completion.cpp
@@ -54,12 +54,19 @@ void operator delete(void*, std::size_t) noexcept { }
extern "C"
{
+ typedef struct file_tag
+ {
+ void* file_dummy;
+ }
+ FILE;
+
// Declarations of patched functions.
// Provide stubbed copies of certain functions declared in and .
// Also provide stubbed copies of certain empirically found library functions
// and objects.
+ int fprintf (FILE*, const char*, ... );
void abort () __attribute__((noreturn));
int atexit (void (*)());
int at_quick_exit (void (*)());
@@ -82,6 +89,7 @@ extern "C"
// Implementations of patched functions.
+ int fprintf (FILE*, const char*, ... ) { return -1; }
void abort () { for(;;) { mcal::cpu::nop(); } }
int atexit (void (*)()) { return 0; }
int at_quick_exit (void (*)()) { return 0; }
@@ -133,6 +141,10 @@ namespace std
{
[[noreturn]]
void __throw_out_of_range_fmt(char const*, ...) { for(;;) { ; } }
+
+ using ::fprintf;
+
+ using ::atexit;
}
#if defined(__GNUC__)
diff --git a/ref_app/src/util/memory/util_ring_allocator.h b/ref_app/src/util/memory/util_ring_allocator.h
index 1c3539a22..b44dab8ea 100644
--- a/ref_app/src/util/memory/util_ring_allocator.h
+++ b/ref_app/src/util/memory/util_ring_allocator.h
@@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////////
-// Copyright Christopher Kormanyos 2007 - 2024.
+// Copyright Christopher Kormanyos 2007 - 2026.
// Distributed under the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt
// or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -8,16 +8,29 @@
#ifndef UTIL_RING_ALLOCATOR_2010_02_23_H
#define UTIL_RING_ALLOCATOR_2010_02_23_H
- #include
-
#include
#include
#include
namespace util
{
+ // Forward declaration of ring_allocator_base.
+ template
+ class ring_allocator_base;
+
+ // Global comparison operators (required by the standard).
+ template
+ auto operator==(const ring_allocator_base&, const ring_allocator_base&) noexcept -> bool;
+
+ template
+ auto operator!=(const ring_allocator_base&, const ring_allocator_base&) noexcept -> bool;
+
+ template
class ring_allocator_base
{
+ private:
+ static constexpr std::uint_fast8_t buffer_alignment { UINT8_C(16) };
+
public:
using size_type = std::size_t;
using difference_type = std::ptrdiff_t;
@@ -25,30 +38,36 @@
virtual ~ring_allocator_base() = default;
protected:
+ static constexpr std::uint_fast8_t bufffer_alignment { UINT8_C(16) };
+
ring_allocator_base() noexcept = default;
ring_allocator_base(const ring_allocator_base&) noexcept = default;
+ ring_allocator_base(ring_allocator_base&&) noexcept = default;
+
+ auto operator=(const ring_allocator_base&) noexcept -> ring_allocator_base& = default;
+ auto operator=(ring_allocator_base&&) noexcept -> ring_allocator_base& = default;
+
// The ring allocator's buffer type.
struct buffer_type
{
- static constexpr size_type size = 64U;
+ static constexpr size_type local_buf_size { static_cast(buffer_size) };
- std::uint8_t data[size];
+ std::uint8_t data[local_buf_size];
- buffer_type() noexcept : data() { }
+ buffer_type() noexcept : data { } { }
};
// The ring allocator's memory allocation.
- template
static auto do_allocate(size_type chunk_size) -> void*
{
- ALIGNAS(16) static buffer_type buffer;
+ alignas(bufffer_alignment) static buffer_type buffer { };
- static std::uint8_t* get_ptr = buffer.data;
+ static std::uint8_t* get_ptr { buffer.data };
// Get the newly allocated pointer.
- std::uint8_t* p = get_ptr;
+ std::uint8_t* p { get_ptr };
// Increment the get-pointer for the next allocation.
// Be sure to handle the buffer alignment.
@@ -63,7 +82,7 @@
get_ptr += chunk_size;
// Does this attempted allocation overflow the capacity of the buffer?
- const bool is_overflow = (get_ptr >= (buffer.data + buffer_type::size));
+ const bool is_overflow { (get_ptr >= (buffer.data + buffer_type::local_buf_size)) };
if(is_overflow)
{
@@ -71,33 +90,24 @@
// Reset the allocated pointer to the bottom of the buffer
// and increment the next get-pointer.
- p = &buffer.data[0U];
+ p = &buffer.data[std::size_t { UINT8_C(0) }];
get_ptr = &buffer.data[chunk_size];
}
return static_cast(p);
}
- };
-
- // Global comparison operators (required by the standard).
- inline auto operator==(const ring_allocator_base&,
- const ring_allocator_base&) noexcept -> bool
- {
- return true;
- }
- inline auto operator!=(const ring_allocator_base&,
- const ring_allocator_base&) noexcept -> bool
- {
- return false;
- }
+ // Global comparison operators (required by the standard).
+ friend auto operator==(const ring_allocator_base&, const ring_allocator_base&) noexcept -> bool { return true; }
+ friend auto operator!=(const ring_allocator_base&, const ring_allocator_base&) noexcept -> bool { return false; }
+ };
template
+ const std::uint_fast32_t buffer_size>
class ring_allocator;
- template
- class ring_allocator : public ring_allocator_base
+ template
+ class ring_allocator : public ring_allocator_base
{
public:
using value_type = void;
@@ -107,16 +117,16 @@
template
struct rebind
{
- using other = ring_allocator;
+ using other = ring_allocator;
};
};
template
- class ring_allocator : public ring_allocator_base
+ const std::uint_fast32_t buffer_size>
+ class ring_allocator : public ring_allocator_base
{
public:
- static_assert(sizeof(T) <= buffer_type::size,
+ static_assert(sizeof(T) <= ring_allocator_base::buffer_type::local_buf_size,
"The size of the allocation object can not exceed the buffer size.");
using value_type = T;
@@ -127,31 +137,37 @@
ring_allocator() noexcept = default;
- ring_allocator(const ring_allocator&) noexcept : ring_allocator_base(ring_allocator()) { }
+ ring_allocator(const ring_allocator&) noexcept : ring_allocator_base(ring_allocator()) { }
+ ring_allocator(ring_allocator&&) noexcept : ring_allocator_base(std::move(ring_allocator())) { }
+
+ auto operator=(const ring_allocator&) noexcept -> ring_allocator& = default;
+ auto operator=(ring_allocator&&) noexcept -> ring_allocator& = default;
template
- ring_allocator(const ring_allocator&) noexcept { }
+ ring_allocator(const ring_allocator&) noexcept { }
+
+ ~ring_allocator() override = default;
template
struct rebind
{
- using other = ring_allocator;
+ using other = ring_allocator;
};
- auto max_size() const noexcept -> size_type
+ auto max_size() const noexcept -> typename ring_allocator::size_type
{
- return buffer_type::size / sizeof(value_type);
+ return ring_allocator_base::buffer_type::size / sizeof(value_type);
}
auto address( reference x) const -> pointer { return &x; }
auto address(const_reference x) const -> const_pointer { return &x; }
- auto allocate(size_type count,
- typename ring_allocator::const_pointer = nullptr) -> pointer
+ auto allocate(typename ring_allocator::size_type count,
+ typename ring_allocator::const_pointer = nullptr) -> pointer
{
- const size_type chunk_size = count * sizeof(value_type);
+ const typename ring_allocator::size_type chunk_size = count * sizeof(value_type);
- void* p = do_allocate(chunk_size);
+ void* p = ring_allocator::do_allocate(chunk_size);
return static_cast(p);
}
@@ -163,7 +179,7 @@
auto destroy(pointer p) noexcept -> void { p->~value_type(); }
- auto deallocate(pointer, size_type) noexcept -> void { }
+ auto deallocate(pointer, typename ring_allocator::size_type) noexcept -> void { }
};
}
diff --git a/ref_app/target.vcxproj b/ref_app/target.vcxproj
index 51911160c..5cbf25417 100644
--- a/ref_app/target.vcxproj
+++ b/ref_app/target.vcxproj
@@ -1115,11 +1115,9 @@
-
-
diff --git a/ref_app/target.vcxproj.filters b/ref_app/target.vcxproj.filters
index 8c3bc2cf0..278077985 100644
--- a/ref_app/target.vcxproj.filters
+++ b/ref_app/target.vcxproj.filters
@@ -594,9 +594,6 @@
build
-
- micros\stm32f446\make
-
micros\bcm2835_raspi_b\make
@@ -639,9 +636,6 @@
micros\stm32h7a3\make
-
- micros\stm32f429\make
-
micros\nxp_imxrt1062\make
diff --git a/ref_app/target/app/make/app_files.gmk b/ref_app/target/app/make/app_files.gmk
index b127b5ebb..96fe2ee31 100644
--- a/ref_app/target/app/make/app_files.gmk
+++ b/ref_app/target/app/make/app_files.gmk
@@ -1,5 +1,5 @@
#
-# Copyright Christopher Kormanyos 2007 - 2025.
+# Copyright Christopher Kormanyos 2007 - 2026.
# Distributed under the Boost Software License,
# Version 1.0. (See accompanying file LICENSE_1_0.txt
# or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -29,6 +29,7 @@ FILES_CPP = $(PATH_APP)/app/benchmark/app_benchmark
$(PATH_APP)/app/benchmark/app_benchmark_pi_spigot \
$(PATH_APP)/app/benchmark/app_benchmark_pi_spigot_single \
$(PATH_APP)/app/benchmark/app_benchmark_soft_double_h2f1 \
+ $(PATH_APP)/app/benchmark/app_benchmark_std_big_int \
$(PATH_APP)/app/benchmark/app_benchmark_trapezoid_integral \
$(PATH_APP)/app/benchmark/app_benchmark_wide_decimal \
$(PATH_APP)/app/benchmark/app_benchmark_wide_integer \
diff --git a/ref_app/target/build/test_app_benchmarks_stm32f446.sh b/ref_app/target/build/test_app_benchmarks_stm32f446.sh
index 9b4312032..02ed56b78 100755
--- a/ref_app/target/build/test_app_benchmarks_stm32f446.sh
+++ b/ref_app/target/build/test_app_benchmarks_stm32f446.sh
@@ -23,28 +23,28 @@ rm -f ./bin/*.*
echo run benchmarks with $GCC and language standard $STD
echo
-$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_COMPLEX -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_complex.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_complex.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_complex.elf
-$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_CRC -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_crc.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_crc.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_crc.elf
-$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_FAST_MATH -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_fast_math.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_fast_math.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_fast_math.elf
-$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_FILTER -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_filter.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_filter.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_filter.elf
-$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_FIXED_POINT -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_fixed_point.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_fixed_point.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_fixed_point.elf
-$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_FLOAT -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_float.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_float.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_float.elf
-$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_HASH -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_hash.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_hash.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_hash.elf
-$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_NONE -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_none.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_none.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_none.elf
-$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_PI_AGM -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_pi_agm.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_pi_agm.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_pi_agm.elf
-$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_PI_SPIGOT -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_pi_spigot.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_pi_spigot.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_pi_spigot.elf
-$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_PI_SPIGOT_SINGLE -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_pi_spigot_single.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_pi_spigot_single.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_pi_spigot_single.elf
-$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_SOFT_DOUBLE_H2F1 -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_soft_double_h2f1.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_soft_double_h2f1.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_soft_double_h2f1.elf
-$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_TRAPEZOID_INTEGRAL -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_trapezoid_integral.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_trapezoid_integral.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_trapezoid_integral.elf
-$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_WIDE_DECIMAL -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_wide_decimal.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_wide_decimal.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_wide_decimal.elf
-$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_WIDE_INTEGER -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_wide_integer.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_wide_integer.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_wide_integer.elf
-$GCC -std=$STD -Werror -Wall -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -I../../boost-root -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_BOOST_MATH_CBRT_TGAMMA -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_boost_math_cbrt_tgamma.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_boost_math_cbrt_tgamma.map -T ./target/micros/stm32f446/make/stm32f446_with_stdlib.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_boost_math_cbrt_tgamma.elf
-$GCC -std=$STD -Werror -Wall -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -I../../boost-root -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_BOOST_MATH_CYL_BESSEL_J -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_boost_math_cyl_bessel_j.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_boost_math_cyl_bessel_j.map -T ./target/micros/stm32f446/make/stm32f446_with_stdlib.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_boost_math_cyl_bessel_j.elf
-$GCC -std=$STD -Werror -Wall -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -I../../boost-root -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_BOOST_MULTIPRECISION_CBRT -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_boost_multiprecision_cbrt.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_boost_multiprecision_cbrt.map -T ./target/micros/stm32f446/make/stm32f446_with_stdlib.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_boost_multiprecision_cbrt.elf
-$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_HASH_SHA256 -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_hash_sha256.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_hash_sha256.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_hash_sha256.elf
-$GCC -std=$STD -Werror -Wall $wflags -Os -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_ECC_GENERIC_ECC -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_ecc_generic_ecc.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_ecc_generic_ecc.map -T ./target/micros/stm32f446/make/stm32f446_with_stdlib.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_ecc_generic_ecc.elf
-$GCC -std=$STD -Werror -Wall -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -I../../cppalliance-decimal-root/include -I../../boost-root -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_NON_STD_DECIMAL -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_non_std_decimal.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_non_std_decimal.map -T ./target/micros/stm32f446/make/stm32f446_with_stdlib.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_non_std_decimal.elf
-$GCC -std=$STD -Werror -Wall -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -I../../cppalliance-crypt-root/include -I../../boost-root -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_BOOST_CRYPT_HASHER -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_boost_crypt_hasher.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_boost_crypt_hasher.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_boost_crypt_hasher.elf
+$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_COMPLEX -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_complex.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_complex.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_complex.elf
+$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_CRC -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_crc.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_crc.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_crc.elf
+$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_FAST_MATH -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_fast_math.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_fast_math.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_fast_math.elf
+$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_FILTER -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_filter.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_filter.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_filter.elf
+$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_FIXED_POINT -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_fixed_point.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_fixed_point.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_fixed_point.elf
+$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_FLOAT -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_float.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_float.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_float.elf
+$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_HASH -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_hash.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_hash.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_hash.elf
+$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_NONE -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_none.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_none.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_none.elf
+$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_PI_AGM -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_pi_agm.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_pi_agm.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_pi_agm.elf
+$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_PI_SPIGOT -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_pi_spigot.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_pi_spigot.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_pi_spigot.elf
+$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_PI_SPIGOT_SINGLE -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_pi_spigot_single.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_pi_spigot_single.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_pi_spigot_single.elf
+$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_SOFT_DOUBLE_H2F1 -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_soft_double_h2f1.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_soft_double_h2f1.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_soft_double_h2f1.elf
+$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_TRAPEZOID_INTEGRAL -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_trapezoid_integral.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_trapezoid_integral.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_trapezoid_integral.elf
+$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_WIDE_DECIMAL -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_wide_decimal.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_wide_decimal.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_wide_decimal.elf
+$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_WIDE_INTEGER -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_wide_integer.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_wide_integer.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_wide_integer.elf
+$GCC -std=$STD -Werror -Wall -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -I../../boost-root -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_BOOST_MATH_CBRT_TGAMMA -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_boost_math_cbrt_tgamma.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_boost_math_cbrt_tgamma.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_boost_math_cbrt_tgamma.elf
+$GCC -std=$STD -Werror -Wall -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -I../../boost-root -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_BOOST_MATH_CYL_BESSEL_J -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_boost_math_cyl_bessel_j.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_boost_math_cyl_bessel_j.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_boost_math_cyl_bessel_j.elf
+$GCC -std=$STD -Werror -Wall -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -I../../boost-root -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_BOOST_MULTIPRECISION_CBRT -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_boost_multiprecision_cbrt.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_boost_multiprecision_cbrt.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_boost_multiprecision_cbrt.elf
+$GCC -std=$STD -Werror -Wall $wflags -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_HASH_SHA256 -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_hash_sha256.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_hash_sha256.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_hash_sha256.elf
+$GCC -std=$STD -Werror -Wall $wflags -Os -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_ECC_GENERIC_ECC -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_ecc_generic_ecc.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_ecc_generic_ecc.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_ecc_generic_ecc.elf
+$GCC -std=$STD -Werror -Wall -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -I../../cppalliance-decimal-root/include -I../../boost-root -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_NON_STD_DECIMAL -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_non_std_decimal.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_non_std_decimal.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_non_std_decimal.elf
+$GCC -std=$STD -Werror -Wall -O2 -g -gdwarf-2 -fno-exceptions -ffunction-sections -fdata-sections -x c++ -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-nonansi-builtins -fno-threadsafe-statics -fno-enforce-eh-specs -ftemplate-depth=128 -Wzero-as-null-pointer-constant -mcpu=cortex-m4 -mtune=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -mno-unaligned-access -mno-long-calls -I./src/mcal/stm32f446 -I./src -I../../cppalliance-crypt-root/include -I../../boost-root -DAPP_BENCHMARK_TYPE=APP_BENCHMARK_TYPE_BOOST_CRYPT_HASHER -DAPP_BENCHMARK_STANDALONE_MAIN ./src/app/benchmark/app_benchmark_boost_crypt_hasher.cpp ./target/micros/stm32f446/make/single/crt.cpp -nostartfiles -Wl,--gc-sections -Wl,-Map,./bin/app_benchmark_boost_crypt_hasher.map -T ./target/micros/stm32f446/make/stm32f446.ld --specs=nano.specs --specs=nosys.specs -o ./bin/app_benchmark_boost_crypt_hasher.elf
echo check existences of ELF-files and map-files
echo
diff --git a/ref_app/target/micros/stm32f429/make/single/crt.cpp b/ref_app/target/micros/stm32f429/make/single/crt.cpp
index 7393b12ec..318bf8506 100644
--- a/ref_app/target/micros/stm32f429/make/single/crt.cpp
+++ b/ref_app/target/micros/stm32f429/make/single/crt.cpp
@@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////////
-// Copyright Christopher Kormanyos 2018 - 2025.
+// Copyright Christopher Kormanyos 2018 - 2026.
// Distributed under the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt
// or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -60,10 +60,6 @@ void __my_startup()
// Do nothing on return from main.
}
-extern "C" void _exit (int);
-
-extern "C" void _exit (int) { }
-
extern "C"
{
extern std::uintptr_t _rom_data_begin; // Start address for the initialization values of the rom-to-ram section.
diff --git a/ref_app/target/micros/stm32f429/make/stm32f429.ld b/ref_app/target/micros/stm32f429/make/stm32f429.ld
index 8980388d2..e18d85aa6 100644
--- a/ref_app/target/micros/stm32f429/make/stm32f429.ld
+++ b/ref_app/target/micros/stm32f429/make/stm32f429.ld
@@ -1,12 +1,11 @@
-
/*
- Copyright Christopher Kormanyos 2007 - 2024.
+ Copyright Christopher Kormanyos 2007 - 2026.
Distributed under the Boost Software License,
Version 1.0. (See accompanying file LICENSE_1_0.txt
or copy at http://www.boost.org/LICENSE_1_0.txt)
*/
-/* Linker script for STM32F4x ARM(R) Cortex(TM)-M4 MCU */
+/* Linker script for STM32F4xx ARM(R) Cortex(TM)-M4 MCU */
ENTRY(__my_startup)
@@ -23,8 +22,8 @@ _rom_end = _rom_begin + _rom_size;
/* The beginning and end (i.e., the top) of the stack */
/* Set up a stack with a size of 16K */
-_stack_begin = 0x2000C000;
-_stack_end = 0x20010000;
+_stack_begin = 0x2001C000;
+_stack_end = 0x20020000;
__initial_stack_pointer = _stack_end - 4;
@@ -32,7 +31,7 @@ MEMORY
{
VEC(rx) : ORIGIN = 0x08000000, LENGTH = 0x300
ROM(rx) : ORIGIN = 0x08000300, LENGTH = _rom_size - 0x300
- RAM(rwx) : ORIGIN = 0x20000000, LENGTH = 0x0C000
+ RAM(rwx) : ORIGIN = 0x20000000, LENGTH = 0x1C000
}
SECTIONS
diff --git a/ref_app/target/micros/stm32f429/make/stm32f429_with_stdlib.ld b/ref_app/target/micros/stm32f429/make/stm32f429_with_stdlib.ld
deleted file mode 100644
index 4a39af96f..000000000
--- a/ref_app/target/micros/stm32f429/make/stm32f429_with_stdlib.ld
+++ /dev/null
@@ -1,138 +0,0 @@
-
-/*
- Copyright Christopher Kormanyos 2007 - 2024.
- Distributed under the Boost Software License,
- Version 1.0. (See accompanying file LICENSE_1_0.txt
- or copy at http://www.boost.org/LICENSE_1_0.txt)
-*/
-
-/* Linker script for STM32F4x ARM(R) Cortex(TM)-M4 MCU */
-
-ENTRY(__my_startup)
-
-INPUT(libc.a libm.a libgcc.a)
-
-OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
-OUTPUT_ARCH(arm)
-
-/* The beginning and end of the program ROM area */
-/* Set up a ROM area with a size of 512K */
-_rom_size = 0x00080000;
-_rom_begin = 0x08000000;
-_rom_end = _rom_begin + _rom_size;
-
-/* The beginning and end (i.e., the top) of the stack */
-/* Set up a stack with a size of 16K */
-_stack_begin = 0x2000C000;
-_stack_end = 0x20010000;
-
-__initial_stack_pointer = _stack_end - 4;
-
-MEMORY
-{
- VEC(rx) : ORIGIN = 0x08000000, LENGTH = 0x300
- ROM(rx) : ORIGIN = 0x08000300, LENGTH = _rom_size - 0x300
- RAM(rwx) : ORIGIN = 0x20000000, LENGTH = 0x0C000
-}
-
-SECTIONS
-{
- . = 0x08000000;
- . = ALIGN(4);
-
- /* ISR vectors */
- .isr_vector :
- {
- *(.isr_vector)
- . = ALIGN(0x100);
- KEEP(*(.isr_vector))
- } > VEC = 0xAAAA
-
- /* startup */
- .startup :
- {
- *(.startup)
- . = ALIGN(0x10);
- KEEP(*(.startup))
- } > ROM = 0x5555
-
- /* Program code (text), read-only data and static ctors */
- .text :
- {
- _ctors_begin = .;
- KEEP(*(SORT(.init_array.*)))
- KEEP(*(.init_array*))
- _ctors_end = .;
- *(.progmem*)
- . = ALIGN(4);
- *(.text)
- . = ALIGN(4);
- *(.text*)
- . = ALIGN(4);
- *(.rodata)
- . = ALIGN(4);
- *(.rodata*)
- . = ALIGN(4);
- *(.glue_7)
- . = ALIGN(4);
- *(.glue_7t)
- . = ALIGN(4);
- } > ROM
-
- .ARM.extab :
- {
- . = ALIGN(4);
- *(.ARM.extab)
- *(.ARM.extab*)
- *(.gnu.linkonce.armextab.*)
- . = ALIGN(4);
- } > ROM
-
- .exidx :
- {
- . = ALIGN(4);
- PROVIDE(__exidx_start = .);
- *(.ARM.exidx*)
- . = ALIGN(4);
- PROVIDE(__exidx_end = .);
- } > ROM
-
- .ARM.attributes :
- {
- *(.ARM.attributes)
- } > ROM
-
- . = 0x20000000;
- . = ALIGN(4);
-
- /* The ROM-to-RAM initialized data section */
- .data :
- {
- _data_begin = .;
- *(.data)
- . = ALIGN(4);
- KEEP (*(.data))
- *(.data*)
- . = ALIGN(4);
- KEEP (*(.data*))
- _data_end = .;
- } > RAM AT > ROM
-
- /* The uninitialized (zero-cleared) data section */
- .bss :
- {
- _bss_begin = .;
- *(.bss)
- . = ALIGN(4);
- KEEP (*(.bss))
- *(.bss*)
- . = ALIGN(4);
- KEEP (*(.bss*))
- _bss_end = .;
- } > RAM
-
- PROVIDE(end = .);
- PROVIDE(_fini = .);
-
- _rom_data_begin = LOADADDR(.data);
-}
diff --git a/ref_app/target/micros/stm32f446/make/single/crt.cpp b/ref_app/target/micros/stm32f446/make/single/crt.cpp
index ffd822323..f26655c55 100644
--- a/ref_app/target/micros/stm32f446/make/single/crt.cpp
+++ b/ref_app/target/micros/stm32f446/make/single/crt.cpp
@@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////////
-// Copyright Christopher Kormanyos 2018 - 2025.
+// Copyright Christopher Kormanyos 2018 - 2026.
// Distributed under the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt
// or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -61,10 +61,6 @@ void __my_startup()
// TBD: Nothing on return from main.
}
-extern "C" void _exit (int);
-
-extern "C" void _exit (int) { }
-
extern "C"
{
extern std::uintptr_t _rom_data_begin; // Start address for the initialization values of the rom-to-ram section.
diff --git a/ref_app/target/micros/stm32f446/make/stm32f446.ld b/ref_app/target/micros/stm32f446/make/stm32f446.ld
index 501002012..973533347 100644
--- a/ref_app/target/micros/stm32f446/make/stm32f446.ld
+++ b/ref_app/target/micros/stm32f446/make/stm32f446.ld
@@ -14,16 +14,24 @@ INPUT(libc.a libm.a libgcc.a)
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
+/* The beginning and end of the program ROM area */
+/* Set up a ROM area with a size of 512K */
+_rom_size = 0x00080000;
+_rom_begin = 0x08000000;
+_rom_end = _rom_begin + _rom_size;
+
/* The beginning and end (i.e., the top) of the stack */
-/* Set up a stack with a size of 4K */
+/* Set up a stack with a size of 16K */
+_stack_begin = 0x2001C000;
+_stack_end = 0x20020000;
-__initial_stack_pointer = 0x20002000 - 4;
+__initial_stack_pointer = _stack_end - 4;
MEMORY
{
VEC(rx) : ORIGIN = 0x08000000, LENGTH = 0x300
- ROM(rx) : ORIGIN = 0x08000300, LENGTH = 64K - 0x300
- RAM(rwx) : ORIGIN = 0x20000000, LENGTH = 0x7000
+ ROM(rx) : ORIGIN = 0x08000300, LENGTH = _rom_size - 0x300
+ RAM(rwx) : ORIGIN = 0x20000000, LENGTH = 0x1C000
}
SECTIONS
diff --git a/ref_app/target/micros/stm32f446/make/stm32f446_files.gmk b/ref_app/target/micros/stm32f446/make/stm32f446_files.gmk
index fa3be41a9..6394380fe 100644
--- a/ref_app/target/micros/stm32f446/make/stm32f446_files.gmk
+++ b/ref_app/target/micros/stm32f446/make/stm32f446_files.gmk
@@ -1,5 +1,5 @@
#
-# Copyright Christopher Kormanyos 2007 - 2025.
+# Copyright Christopher Kormanyos 2007 - 2026.
# Distributed under the Boost Software License,
# Version 1.0. (See accompanying file LICENSE_1_0.txt
# or copy at http://www.boost.org/LICENSE_1_0.txt)
diff --git a/ref_app/target/micros/stm32f446/make/stm32f446_flags.gmk b/ref_app/target/micros/stm32f446/make/stm32f446_flags.gmk
index 3a905f3e3..1a2dd2ae5 100644
--- a/ref_app/target/micros/stm32f446/make/stm32f446_flags.gmk
+++ b/ref_app/target/micros/stm32f446/make/stm32f446_flags.gmk
@@ -25,7 +25,7 @@ TGT_ALLFLAGS = -O2
-mno-unaligned-access \
-mno-long-calls
-TGT_CFLAGS = -std=c99 \
+TGT_CFLAGS = -std=c11 \
-Wunsuffixed-float-constants \
$(TGT_ALLFLAGS)
diff --git a/ref_app/target/micros/stm32f446/make/stm32f446_with_stdlib.ld b/ref_app/target/micros/stm32f446/make/stm32f446_with_stdlib.ld
deleted file mode 100644
index d6ba72c07..000000000
--- a/ref_app/target/micros/stm32f446/make/stm32f446_with_stdlib.ld
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- Copyright Christopher Kormanyos 2007 - 2024.
- Distributed under the Boost Software License,
- Version 1.0. (See accompanying file LICENSE_1_0.txt
- or copy at http://www.boost.org/LICENSE_1_0.txt)
-*/
-
-/* Linker script for STM32F4xx ARM(R) Cortex(TM)-M4 MCU */
-
-ENTRY(__my_startup)
-
-INPUT(libc.a libm.a libgcc.a)
-
-OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
-OUTPUT_ARCH(arm)
-
-/* The beginning and end of the program ROM area */
-/* Set up a ROM area with a size of 512K */
-_rom_size = 0x00080000;
-_rom_begin = 0x08000000;
-_rom_end = _rom_begin + _rom_size;
-
-/* The beginning and end (i.e., the top) of the stack */
-/* Set up a stack with a size of 16K */
-_stack_begin = 0x2000C000;
-_stack_end = 0x20010000;
-
-__initial_stack_pointer = _stack_end - 4;
-
-MEMORY
-{
- VEC(rx) : ORIGIN = 0x08000000, LENGTH = 0x300
- ROM(rx) : ORIGIN = 0x08000300, LENGTH = _rom_size - 0x300
- RAM(rwx) : ORIGIN = 0x20000000, LENGTH = 0x0C000
-}
-
-SECTIONS
-{
- . = 0x08000000;
- . = ALIGN(4);
-
- /* ISR vectors */
- .isr_vector :
- {
- *(.isr_vector)
- . = ALIGN(0x100);
- KEEP(*(.isr_vector))
- } > VEC = 0xAAAA
-
- /* startup */
- .startup :
- {
- *(.startup)
- . = ALIGN(0x10);
- KEEP(*(.startup))
- } > ROM = 0x5555
-
- /* Program code (text), read-only data and static ctors */
- .text :
- {
- _ctors_begin = .;
- KEEP(*(SORT(.init_array.*)))
- KEEP(*(.init_array*))
- _ctors_end = .;
- *(.progmem*)
- . = ALIGN(4);
- *(.text)
- . = ALIGN(4);
- *(.text*)
- . = ALIGN(4);
- *(.rodata)
- . = ALIGN(4);
- *(.rodata*)
- . = ALIGN(4);
- *(.glue_7)
- . = ALIGN(4);
- *(.glue_7t)
- . = ALIGN(4);
- } > ROM
-
- .ARM.extab :
- {
- . = ALIGN(4);
- *(.ARM.extab)
- *(.ARM.extab*)
- *(.gnu.linkonce.armextab.*)
- . = ALIGN(4);
- } > ROM
-
- .exidx :
- {
- . = ALIGN(4);
- PROVIDE(__exidx_start = .);
- *(.ARM.exidx*)
- . = ALIGN(4);
- PROVIDE(__exidx_end = .);
- } > ROM
-
- .ARM.attributes :
- {
- *(.ARM.attributes)
- } > ROM
-
- . = 0x20000000;
- . = ALIGN(4);
-
- /* The ROM-to-RAM initialized data section */
- .data :
- {
- _data_begin = .;
- *(.data)
- . = ALIGN(4);
- KEEP (*(.data))
- *(.data*)
- . = ALIGN(4);
- KEEP (*(.data*))
- _data_end = .;
- } > RAM AT > ROM
-
- /* The uninitialized (zero-cleared) data section */
- .bss :
- {
- _bss_begin = .;
- *(.bss)
- . = ALIGN(4);
- KEEP (*(.bss))
- *(.bss*)
- . = ALIGN(4);
- KEEP (*(.bss*))
- _bss_end = .;
- } > RAM
-
- PROVIDE(end = .);
- PROVIDE(_fini = .);
-
- _rom_data_begin = LOADADDR(.data);
-}