This document contains the compiler version and flags used to build a static library for use with fingerprint. The flags and versions correspond to the version of LLVM and flags in use on Sept 19, 2023.
Fingerprint currently uses clang version 17.0.0 and newlib version 4.1.0.
Please use toolchain available within the ChromiumOS SDK chroot. See the ChromiumOS Developer Guide for instructions on how to set it up.
cros_sdk from within ~/chromiumos. The compiler armv7m-cros-eabi-clang is available within this chroot.armv7m-cros-eabi-clang -mcpu=cortex-m4
armv7m-cros-eabi-clang -mcpu=cortex-m7
-mthumb -mfloat-abi=hard -mno-unaligned-access -std=gnu11 # Reduce code size. # https://crrev.com/c/3199737 -Oz -g # Decrease code size by reducing inlining. # https://crrev.com/c/4545442 -Wl,-mllvm -Wl,-inline-threshold=-10 # Add ability to remove unused code at link time. # https://stackoverflow.com/q/6687630 # https://crrev.com/c/189224 -ffunction-sections # Generate traps for signed overflow on addition, subtraction, multiplication # operations. # https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#index-ftrapv # https://crrev.com/c/4007158 -ftrapv -fno-PIC -fno-asynchronous-unwind-tables -fno-common -fno-delete-null-pointer-checks -fno-exceptions -fno-strict-aliasing -fno-strict-overflow -fno-unwind-tables -Wall -Werror -Werror-implicit-function-declaration -Werror=uninitialized -Wimplicit-fallthrough -Wno-address-of-packed-member -Wno-format-security -Wno-ignored-attributes -Wno-pointer-sign -Wno-trigraphs -Wno-unused-function -Wstrict-prototypes -Wundef
If we compile with CONFIG_LTO enabled. the following flag is added to compiler and linker here:
# https://crrev.com/c/271291 -flto
# The above arguments are from the following build command on Sep 19, 2023: make BOARD=dartmonkey V=1 build/dartmonkey/RW/core/cortex-m/mpu.o # Output removed, since it is similar to bloonchipper. make BOARD=bloonchipper V=1 build/bloonchipper/RW/core/cortex-m/mpu.o # Output (with private paths stripped): /usr/bin/ccache armv7m-cros-eabi-clang -std=gnu11 -Wstrict-prototypes -Wno-pointer-sign -Werror-implicit-function-declaration -Wno-ignored-attributes -DOUTDIR=build/bloonchipper/RW -DCHIP=stm32 -DBOARD_TASKFILE=ec.tasklist -DBOARD=bloonchipper -DCORE=cortex-m -DPROJECT=ec -DCHIP_VARIANT=stm32f412 -DCHIP_FAMILY=STM32F4 -DBOARD_BLOONCHIPPER= -DCHIP_STM32= -DCORE_CORTEX_M= -DCHIP_VARIANT_STM32F412= -DCHIP_FAMILY_STM32F4= -DFINAL_OUTDIR=build/bloonchipper -DPROTOBUF_MIN_PROTOC_VERSION=0 -Iinclude -Icore/cortex-m/include -Iinclude/driver -Icore/cortex-m -Ichip/stm32 -Iboard/bloonchipper -Iboard/bloonchipper -Icommon -Ifuzz -Ipower -Itest -Icts/common -Icts/ -Ibuild/bloonchipper/gen -Iprivate -Icommon -Icommon/fpsensor -Icommon/vboot -Icommon/spi -Icommon/spi/flash_reg -Icommon/spi/flash_reg/private -Icommon/spi/flash_reg/src -Icommon/spi/flash_reg/public -Icommon/usbc -Icommon/mock -Idriver -Idriver/ioexpander -Idriver/retimer -Idriver/temp_sensor -Idriver/sha256 -Idriver/cec -Idriver/bc12 -Idriver/nfc -Idriver/led -Idriver/usb_mux -Idriver/fingerprint -Idriver/fingerprint/elan -Idriver/fingerprint/fpc -Idriver/fingerprint/fpc/libfp -Idriver/fingerprint/fpc/bep -Idriver/ppc -Idriver/charger -Idriver/battery -Idriver/tcpm -Idriver/wpc -Ilibc -Ithird_party/boringssl/common -Icrypto -Ibuild/bloonchipper -Ifuzz -Itest -Ithird_party -Ispi/flash_regpublic -I. -DTEST_ec= -DTEST_EC= -Iinclude/driver -DSECTION_IS_RW= -DSECTION=RW -DHAS_TASK_FPSENSOR= -DHAS_TASK_RWSIG_RO= -fno-PIC -DCHROMIUM_EC= -DHAVE_PRIVATE -DHAS_TASK_HOOKS= -DHAS_TASK_HOSTCMD= -DHAS_TASK_CONSOLE= -I../../third_party/boringssl -I../../third_party/boringssl/include -I/mnt/host/source/src/platform/ec/third_party/boringssl/include -D__TRUSTY__ -mcpu=cortex-m4 -mcpu=cortex-m4 -mthumb -Oz -Wl,-mllvm -Wl,-inline-threshold=-10 -mno-unaligned-access -mfloat-abi=hard -g -ftrapv -Wall -Wundef -Wno-trigraphs -Wno-format-security -Wno-address-of-packed-member -fno-common -fno-strict-aliasing -fno-strict-overflow -Wimplicit-fallthrough -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables -Werror -Werror=uninitialized -Wno-unused-function -ffunction-sections -fno-delete-null-pointer-checks -fno-PIC -MMD -MP -MF build/bloonchipper/RW/core/cortex-m/mpu.o.d -c core/cortex-m/mpu.c -MT build/bloonchipper/RW/core/cortex-m/mpu.o -o build/bloonchipper/RW/core/cortex-m/mpu.o
The linking step to create RO/ec.RO.elf and RW/ec.RW.elf:
# Output (with private paths stripped): armv7m-cros-eabi-clang++ build/bloonchipper/RO/board/bloonchipper/board.o build/bloonchipper/RO/board/bloonchipper/fpsensor_detect.o build/bloonchipper/RO/chip/stm32/bkpdata.o build/bloonchipper/RO/chip/stm32/clock-f.o build/bloonchipper/RO/chip/stm32/clock-stm32f4.o build/bloonchipper/RO/chip/stm32/dma-stm32f4.o build/bloonchipper/RO/chip/stm32/flash-f.o build/bloonchipper/RO/chip/stm32/flash-stm32f4.o build/bloonchipper/RO/chip/stm32/fpu.o build/bloonchipper/RO/chip/stm32/gpio-stm32f4.o build/bloonchipper/RO/chip/stm32/gpio.o build/bloonchipper/RO/chip/stm32/host_command_common.o build/bloonchipper/RO/chip/stm32/hwtimer32.o build/bloonchipper/RO/chip/stm32/otp-stm32f4.o build/bloonchipper/RO/chip/stm32/spi.o build/bloonchipper/RO/chip/stm32/spi_controller.o build/bloonchipper/RO/chip/stm32/system.o build/bloonchipper/RO/chip/stm32/trng.o build/bloonchipper/RO/chip/stm32/uart.o build/bloonchipper/RO/chip/stm32/usart-stm32f4.o build/bloonchipper/RO/chip/stm32/usart.o build/bloonchipper/RO/chip/stm32/usart_host_command.o build/bloonchipper/RO/chip/stm32/usart_rx_dma.o build/bloonchipper/RO/chip/stm32/usart_rx_interrupt-stm32f4.o build/bloonchipper/RO/chip/stm32/usart_tx_dma.o build/bloonchipper/RO/chip/stm32/usart_tx_interrupt.o build/bloonchipper/RO/chip/stm32/watchdog.o build/bloonchipper/RO/common/console.o build/bloonchipper/RO/common/console_output.o build/bloonchipper/RO/common/ec_features.o build/bloonchipper/RO/common/extpower_common.o build/bloonchipper/RO/common/flash.o build/bloonchipper/RO/common/fmap.o build/bloonchipper/RO/common/fpsensor/fpsensor_detect_strings.o build/bloonchipper/RO/common/gettimeofday.o build/bloonchipper/RO/common/gpio.o build/bloonchipper/RO/common/gpio_commands.o build/bloonchipper/RO/common/hooks.o build/bloonchipper/RO/common/host_command.o build/bloonchipper/RO/common/host_command_task.o build/bloonchipper/RO/common/host_event_commands.o build/bloonchipper/RO/common/irq_locking.o build/bloonchipper/RO/common/main.o build/bloonchipper/RO/common/memory_commands.o build/bloonchipper/RO/common/mkbp_event.o build/bloonchipper/RO/common/mkbp_fifo.o build/bloonchipper/RO/common/panic_output.o build/bloonchipper/RO/common/peripheral.o build/bloonchipper/RO/common/printf.o build/bloonchipper/RO/common/queue.o build/bloonchipper/RO/common/queue_policies.o build/bloonchipper/RO/common/rollback.o build/bloonchipper/RO/common/rsa.o build/bloonchipper/RO/common/rwsig.o build/bloonchipper/RO/common/sha256.o build/bloonchipper/RO/common/shared_mem_libc.o build/bloonchipper/RO/common/system.o build/bloonchipper/RO/common/system_boot_time.o build/bloonchipper/RO/common/timer.o build/bloonchipper/RO/common/trng.o build/bloonchipper/RO/common/uart_buffering.o build/bloonchipper/RO/common/uart_hostcmd.o build/bloonchipper/RO/common/uart_printf.o build/bloonchipper/RO/common/uptime.o build/bloonchipper/RO/common/usb_pd_flags.o build/bloonchipper/RO/common/util.o build/bloonchipper/RO/common/vboot/common.o build/bloonchipper/RO/common/vboot/vb21_lib.o build/bloonchipper/RO/common/version.o build/bloonchipper/RO/core/cortex-m/cpu.o build/bloonchipper/RO/core/cortex-m/debug.o build/bloonchipper/RO/core/cortex-m/fpu.o build/bloonchipper/RO/core/cortex-m/init.o build/bloonchipper/RO/core/cortex-m/mpu.o build/bloonchipper/RO/core/cortex-m/panic.o build/bloonchipper/RO/core/cortex-m/switch.o build/bloonchipper/RO/core/cortex-m/task.o build/bloonchipper/RO/core/cortex-m/vecttable.o build/bloonchipper/RO/core/cortex-m/watchdog.o build/bloonchipper/RO/crypto/elliptic_curve_key.o build/bloonchipper/RO/libc/syscalls.o build/bloonchipper/RO/third_party/boringssl/common/sysrand.o -g -no-pie -Wl,-X -Wl,--gc-sections -Wl,--build-id=none -lclang_rt.builtins-armv7m -Lbuild/bloonchipper/third_party/boringssl/crypto -lcrypto -mcpu=cortex-m4 -mcpu=cortex-m4 -mthumb -Oz -Wl,-mllvm -Wl,-inline-threshold=-10 -mno-unaligned-access -mfloat-abi=hard -lnosys -o build/bloonchipper/RO/ec.RO.elf -Wl,-T,build/bloonchipper/RO/ec.RO.lds -Wl,-Map,build/bloonchipper/RO/ec.RO.map
# Output (with private paths stripped): armv7m-cros-eabi-clang++ build/bloonchipper/RW/board/bloonchipper/board.o build/bloonchipper/RW/board/bloonchipper/board_rw.o build/bloonchipper/RW/board/bloonchipper/fpsensor_detect.o build/bloonchipper/RW/board/bloonchipper/fpsensor_detect_rw.o build/bloonchipper/RW/chip/stm32/bkpdata.o build/bloonchipper/RW/chip/stm32/clock-f.o build/bloonchipper/RW/chip/stm32/clock-stm32f4.o build/bloonchipper/RW/chip/stm32/dma-stm32f4.o build/bloonchipper/RW/chip/stm32/flash-f.o build/bloonchipper/RW/chip/stm32/flash-stm32f4.o build/bloonchipper/RW/chip/stm32/fpu.o build/bloonchipper/RW/chip/stm32/gpio-stm32f4.o build/bloonchipper/RW/chip/stm32/gpio.o build/bloonchipper/RW/chip/stm32/host_command_common.o build/bloonchipper/RW/chip/stm32/hwtimer32.o build/bloonchipper/RW/chip/stm32/otp-stm32f4.o build/bloonchipper/RW/chip/stm32/spi.o build/bloonchipper/RW/chip/stm32/spi_controller.o build/bloonchipper/RW/chip/stm32/system.o build/bloonchipper/RW/chip/stm32/trng.o build/bloonchipper/RW/chip/stm32/uart.o build/bloonchipper/RW/chip/stm32/usart-stm32f4.o build/bloonchipper/RW/chip/stm32/usart.o build/bloonchipper/RW/chip/stm32/usart_host_command.o build/bloonchipper/RW/chip/stm32/usart_rx_dma.o build/bloonchipper/RW/chip/stm32/usart_rx_interrupt-stm32f4.o build/bloonchipper/RW/chip/stm32/usart_tx_dma.o build/bloonchipper/RW/chip/stm32/usart_tx_interrupt.o build/bloonchipper/RW/chip/stm32/watchdog.o build/bloonchipper/RW/common/console.o build/bloonchipper/RW/common/console_output.o build/bloonchipper/RW/common/ec_features.o build/bloonchipper/RW/common/extpower_common.o build/bloonchipper/RW/common/flash.o build/bloonchipper/RW/common/fmap.o build/bloonchipper/RW/common/fpsensor/fpsensor.o build/bloonchipper/RW/common/fpsensor/fpsensor_auth_commands.o build/bloonchipper/RW/common/fpsensor/fpsensor_auth_crypto_stateful.o build/bloonchipper/RW/common/fpsensor/fpsensor_auth_crypto_stateless.o build/bloonchipper/RW/common/fpsensor/fpsensor_crypto.o build/bloonchipper/RW/common/fpsensor/fpsensor_debug.o build/bloonchipper/RW/common/fpsensor/fpsensor_detect_strings.o build/bloonchipper/RW/common/fpsensor/fpsensor_state.o build/bloonchipper/RW/common/fpsensor/fpsensor_state_without_driver_info.o build/bloonchipper/RW/common/gettimeofday.o build/bloonchipper/RW/common/gpio.o build/bloonchipper/RW/common/gpio_commands.o build/bloonchipper/RW/common/hooks.o build/bloonchipper/RW/common/host_command.o build/bloonchipper/RW/common/host_command_task.o build/bloonchipper/RW/common/host_event_commands.o build/bloonchipper/RW/common/irq_locking.o build/bloonchipper/RW/common/main.o build/bloonchipper/RW/common/memory_commands.o build/bloonchipper/RW/common/mkbp_event.o build/bloonchipper/RW/common/mkbp_fifo.o build/bloonchipper/RW/common/panic_output.o build/bloonchipper/RW/common/peripheral.o build/bloonchipper/RW/common/printf.o build/bloonchipper/RW/common/queue.o build/bloonchipper/RW/common/queue_policies.o build/bloonchipper/RW/common/rollback.o build/bloonchipper/RW/common/sha256.o build/bloonchipper/RW/common/shared_mem_libc.o build/bloonchipper/RW/common/spi_commands.o build/bloonchipper/RW/common/system.o build/bloonchipper/RW/common/system_boot_time.o build/bloonchipper/RW/common/timer.o build/bloonchipper/RW/common/trng.o build/bloonchipper/RW/common/uart_buffering.o build/bloonchipper/RW/common/uart_hostcmd.o build/bloonchipper/RW/common/uart_printf.o build/bloonchipper/RW/common/uptime.o build/bloonchipper/RW/common/usb_pd_flags.o build/bloonchipper/RW/common/util.o build/bloonchipper/RW/common/vboot/vb21_lib.o build/bloonchipper/RW/common/version.o build/bloonchipper/RW/core/cortex-m/cpu.o build/bloonchipper/RW/core/cortex-m/debug.o build/bloonchipper/RW/core/cortex-m/fpu.o build/bloonchipper/RW/core/cortex-m/init.o build/bloonchipper/RW/core/cortex-m/mpu.o build/bloonchipper/RW/core/cortex-m/panic.o build/bloonchipper/RW/core/cortex-m/switch.o build/bloonchipper/RW/core/cortex-m/task.o build/bloonchipper/RW/core/cortex-m/vecttable.o build/bloonchipper/RW/core/cortex-m/watchdog.o build/bloonchipper/RW/crypto/elliptic_curve_key.o build/bloonchipper/RW/driver/fingerprint/fpc/bep/fpc_misc.o build/bloonchipper/RW/driver/fingerprint/fpc/bep/fpc_private.o build/bloonchipper/RW/driver/fingerprint/fpc/bep/fpc_sensor_spi.o build/bloonchipper/RW/driver/fingerprint/fpc/bep/fpc_timebase.o build/bloonchipper/RW/driver/fingerprint/fpc/fpc_sensor.o build/bloonchipper/RW/libc/syscalls.o build/bloonchipper/RW/third_party/boringssl/common/sysrand.o -g -no-pie -Wl,-X -Wl,--gc-sections -Wl,--build-id=none -lclang_rt.builtins-armv7m -Lbuild/bloonchipper/libsharedobjs/private -lfpbep -Lbuild/bloonchipper/third_party/boringssl/crypto -lcrypto -mcpu=cortex-m4 -mcpu=cortex-m4 -mthumb -Oz -Wl,-mllvm -Wl,-inline-threshold=-10 -mno-unaligned-access -mfloat-abi=hard -lnosys -o build/bloonchipper/RW/ec.RW.elf -Wl,-T,build/bloonchipper/RW/ec.RW.lds -Wl,-Map,build/bloonchipper/RW/ec.RW.map
Final linking to combine RO/ec.RO.elf and RW/ec.RW.elf into ec.obj:
# Output (with private paths stripped): /usr/bin/ccache armv7m-cros-eabi-clang -Wl,-T build/bloonchipper/firmware_image.lds -nostdlib -DOUTDIR=build/bloonchipper/ -DCHIP=stm32 -DBOARD_TASKFILE=ec.tasklist -DBOARD=bloonchipper -DCORE=cortex-m -DPROJECT=ec -DCHIP_VARIANT=stm32f412 -DCHIP_FAMILY=STM32F4 -DBOARD_BLOONCHIPPER= -DCHIP_STM32= -DCORE_CORTEX_M= -DCHIP_VARIANT_STM32F412= -DCHIP_FAMILY_STM32F4= -DFINAL_OUTDIR=build/bloonchipper -DPROTOBUF_MIN_PROTOC_VERSION=0 -Iinclude -Icore/cortex-m/include -Iinclude/driver -Icore/cortex-m -Ichip/stm32 -Iboard/bloonchipper -Iboard/bloonchipper -Icommon -Ifuzz -Ipower -Itest -Icts/common -Icts/ -Ibuild/bloonchipper/gen -Iprivate -Icommon -Icommon/fpsensor -Icommon/vboot -Icommon/spi -Icommon/spi/flash_reg -Icommon/spi/flash_reg/private -Icommon/spi/flash_reg/src -Icommon/spi/flash_reg/public -Icommon/usbc -Icommon/mock -Idriver -Idriver/ioexpander -Idriver/retimer -Idriver/temp_sensor -Idriver/sha256 -Idriver/cec -Idriver/bc12 -Idriver/nfc -Idriver/led -Idriver/usb_mux -Idriver/fingerprint -Idriver/fingerprint/elan -Idriver/fingerprint/fpc -Idriver/fingerprint/fpc/libfp -Idriver/fingerprint/fpc/bep -Idriver/ppc -Idriver/charger -Idriver/battery -Idriver/tcpm -Idriver/wpc -Ilibc -Ithird_party/boringssl/common -Icrypto -Ibuild/bloonchipper -Ifuzz -Itest -Ithird_party -Ispi/flash_regpublic -I. -DTEST_ec= -DTEST_EC= -Iinclude/driver -DSECTION_IS_= -DSECTION= -fno-PIC -DCHROMIUM_EC= -DHAVE_PRIVATE -DHAS_TASK_HOOKS= -DHAS_TASK_HOSTCMD= -DHAS_TASK_CONSOLE= -I../../third_party/boringssl -I../../third_party/boringssl/include -I/mnt/host/source/src/platform/ec/third_party/boringssl/include -D__TRUSTY__ -mcpu=cortex-m4 -mcpu=cortex-m4 -mthumb -Oz -Wl,-mllvm -Wl,-inline-threshold=-10 -mno-unaligned-access -mfloat-abi=hard -g -ftrapv -Wall -Wundef -Wno-trigraphs -Wno-format-security -Wno-address-of-packed-member -fno-common -fno-strict-aliasing -fno-strict-overflow -Wimplicit-fallthrough -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables -Werror -Werror=uninitialized -Wno-unused-function -ffunction-sections -fno-delete-null-pointer-checks -fno-PIC -Wl,--build-id=none -o build/bloonchipper/ec.obj common/firmware_image.S
armv7m-cros-eabi-clang --version # Output: Chromium OS 17.0_pre496208_p20230501-r26 clang version 17.0.0 (/mnt/host/source/src/third_party/llvm-project 98f5a340975bc00197c57e39eb4ca26e2da0e8a2) Target: armv7m-cros-unknown-eabi Thread model: posix InstalledDir: /usr/bin