From 4403f2a13051b71daf21d71685c640fa0a73c694 Mon Sep 17 00:00:00 2001 From: dragonmux Date: Wed, 29 Nov 2023 02:31:57 +0000 Subject: [PATCH] stm32/f0: Created a meson build system for the STM32F0 series support --- include/libopencm3/stm32/f0/meson.build | 46 ++++++++++++ include/meson.build | 3 +- lib/stm32/common/meson.build | 32 ++++++++ lib/stm32/f0/meson.build | 98 +++++++++++++++++++++++++ lib/stm32/meson.build | 1 + meson_options.txt | 3 +- 6 files changed, 181 insertions(+), 2 deletions(-) create mode 100644 include/libopencm3/stm32/f0/meson.build create mode 100644 lib/stm32/f0/meson.build diff --git a/include/libopencm3/stm32/f0/meson.build b/include/libopencm3/stm32/f0/meson.build new file mode 100644 index 00000000..3b2e5c7b --- /dev/null +++ b/include/libopencm3/stm32/f0/meson.build @@ -0,0 +1,46 @@ +# This file is part of the libopencm3 project. +# +# Copyright (C) 2023 1BitSquared +# Written by Rachel Mant +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +stm32f0_nvic_header = custom_target( + 'nvic.h', + command: [irq2nvic, '@INPUT@'], + input: 'irq.json', + # We only name one of the 3 output files due to how this all works. + # This script will write: + # - include/libopencm3/stm32/f0/nvic.h + # - lib/stm32/f0/vector_nvic.c + # - include/libopencmsis/stm32/f0/irqhandlers.h + output: 'nvic.h', + install: false, +) + +stm32f0_vector_nvic = declare_dependency( + sources: stm32f0_nvic_header, +) diff --git a/include/meson.build b/include/meson.build index 3ee983c4..69be8659 100644 --- a/include/meson.build +++ b/include/meson.build @@ -31,7 +31,8 @@ common_includes = include_directories('.') target_paths = { - 'stm32f1': 'stm32/f1' + 'stm32f0': 'stm32/f0', + 'stm32f1': 'stm32/f1', } if target_platform != 'all' diff --git a/lib/stm32/common/meson.build b/lib/stm32/common/meson.build index d5497a62..44f4753c 100644 --- a/lib/stm32/common/meson.build +++ b/lib/stm32/common/meson.build @@ -29,17 +29,31 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. libstm32_adc_v1_sources = files('adc_common_v1.c') +libstm32_adc_v2_sources = files('adc_common_v2.c') libstm32_crc_v1_sources = files('crc_common_all.c') +libstm32_crc_v2_sources = [ + libstm32_crc_v1_sources, + files('crc_v2.c'), +] +libstm32_crs_sources = files('crs_common_all.c') libstm32_dac_sources = files('dac_common_all.c') libstm32_dac_v1_sources = [ libstm32_dac_sources, files('dac_common_v1.c'), ] +libstm32_dac_v2_sources = [ + libstm32_dac_sources, + files('dac_common_v2.c'), +] libstm32_desig_v1_sources = files( 'desig_common_all.c', 'desig_common_v1.c' ) libstm32_dma_sources = files('dma_common_l1f013.c') +libstm32_dma_csel_sources = [ + libstm32_dma_sources, + files('dma_common_csel.c'), +] libstm32_exti_sources = files('exti_common_all.c') libstm32_flash_sources = files('flash_common_all.c') libstm32_flash_f_sources = [ @@ -51,20 +65,38 @@ libstm32_flash_f01_sources = [ files('flash_common_f01.c'), ] libstm32_gpio_sources = files('gpio_common_all.c') +libstm32_gpio_f0234_sources = [ + libstm32_gpio_sources, + files('gpio_common_f0234.c'), +] libstm32_iwdg_sources = files('iwdg_common_all.c') libstm32_i2c_v1_sources = files('i2c_common_v1.c') +libstm32_i2c_v2_sources = files('i2c_common_v2.c') libstm32_pwr_v1_sources = files('pwr_common_v1.c') libstm32_rcc_sources = files('rcc_common_all.c') +libstm32_rtc_l1f024_sources = files('rtc_common_l1f024.c') libstm32_spi_sources = files('spi_common_all.c') libstm32_spi_v1_sources = [ libstm32_spi_sources, files('spi_common_v1.c'), ] +libstm32_spi_v2_sources = [ + libstm32_spi_sources, + files('spi_common_v2.c'), +] libstm32_timer_sources = files('timer_common_all.c') +libstm32_timer_f0234_sources = [ + libstm32_timer_sources, + files('timer_common_f0234.c'), +] libstm32_usart_sources = files('usart_common_all.c') libstm32_usart_f124_sources = [ libstm32_usart_sources, files('usart_common_f124.c'), ] +libstm32_usart_v2_sources = [ + libstm32_usart_sources, + files('usart_common_v2.c'), +] libstm32_usb_fs_sources = files('st_usbfs_core.c') diff --git a/lib/stm32/f0/meson.build b/lib/stm32/f0/meson.build new file mode 100644 index 00000000..8e6db267 --- /dev/null +++ b/lib/stm32/f0/meson.build @@ -0,0 +1,98 @@ +# This file is part of the libopencm3 project. +# +# Copyright (C) 2023 1BitSquared +# Written by Rachel Mant +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +stm32f0_cm3 = declare_dependency( + sources: cm3_sources, + include_directories: cm3_includes, + dependencies: stm32f0_vector_nvic, +) + +# Sources specific to the F0 series +libstm32f0_sources = files( + 'adc.c', + 'comparator.c', + 'flash.c', + #'i2c.c', # XXX: This source is unused for some reason + 'rcc.c', + #'syscfg.c', # XXX: This source is unused for some reason +) + +libstm32f0_compile_args = [ + '-mcpu=cortex-m0', + '-mthumb', + '-DSTM32F0', +] + +# Build a static library for the target platform +libstm32f0 = static_library( + 'opencm3_stm32f0', + [ + libstm32f0_sources, + libstm32_adc_v2_sources, + libstm32_crc_v2_sources, + libstm32_crs_sources, + libstm32_dac_v1_sources, + libstm32_desig_v1_sources, + libstm32_dma_csel_sources, + libstm32_exti_sources, + libstm32_flash_f01_sources, + libstm32_gpio_f0234_sources, + libstm32_iwdg_sources, + libstm32_i2c_v2_sources, + libstm32_pwr_v1_sources, + libstm32_rcc_sources, + libstm32_rtc_l1f024_sources, + libstm32_spi_v2_sources, + libstm32_timer_f0234_sources, + libstm32_usart_v2_sources, + libstm32_can_sources, + ], + c_args: libstm32f0_compile_args, + include_directories: common_includes, + implicit_include_directories: false, + dependencies: [ + stm32f0_cm3, + usb_common, + libstm32_usb_fs_v2, + ], + pic: false, +) + +# Make the dependency available to use +opencm3_stm32f0 = declare_dependency( + compile_args: libstm32f0_compile_args, + include_directories: common_includes, + link_with: libstm32f0, + link_args: [ + f'-L@locm3_ld_script_path@', + ], +) + +meson.override_dependency('opencm3_stm32f0', opencm3_stm32f0) diff --git a/lib/stm32/meson.build b/lib/stm32/meson.build index 13ea5b3a..8117df67 100644 --- a/lib/stm32/meson.build +++ b/lib/stm32/meson.build @@ -48,6 +48,7 @@ libstm32_usb_fs_v2 = declare_dependency( # Mapping of target platform names to subdirs subdirs = { + 'stm32f0': 'f0', 'stm32f1': 'f1', } diff --git a/meson_options.txt b/meson_options.txt index ec62a908..766150ce 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -3,7 +3,8 @@ option( type: 'combo', choices: [ 'all', - 'stm32f1' + 'stm32f0', + 'stm32f1', ], value: 'all', description: 'The hardware platform you wish to target'