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

- - + + godbolt

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. -![](./images/board10_08.jpg) +![Hardware Setup](./images/board10_08.jpg) The PWM signal representing calculation progress is shown below. The PWM signal has a frequency of approximately $2~\text{kHz}$. -![](./images/scope10_08.jpg) +![View of PWM signal on oscilloscope](./images/scope10_08.jpg) 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. -![](./images/board10_08a_2MB.jpg) +![2MByte Hardware Setup](./images/board10_08a_2MB.jpg) ### 1MB Setup The hardware setup with the $1~\text{MByte}$ SRAM brick is pictured in the image below. -![](./images/board10_08a_1MB.jpg) +![1MByte Hardware Setup](./images/board10_08a_1MB.jpg) 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. -![](./images/board10_09.jpg) +![Hardware Setup with RpiZero](./images/board10_09.jpg) 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); -}