diff --git a/include/libopencm3/lm3s/meson.build b/include/libopencm3/lm3s/meson.build new file mode 100644 index 00000000..2481f982 --- /dev/null +++ b/include/libopencm3/lm3s/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. + +lm3s_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/lm3s/nvic.h + # - lib/lm3s/vector_nvic.c + # - include/libopencmsis/lm3s/irqhandlers.h + output: 'nvic.h', + install: false, +) + +lm3s_vector_nvic = declare_dependency( + sources: lm3s_nvic_header, +) diff --git a/include/meson.build b/include/meson.build index d90cf6a1..5a8f803e 100644 --- a/include/meson.build +++ b/include/meson.build @@ -36,10 +36,11 @@ target_paths = { 'stm32f3': 'stm32/f3', 'stm32f4': 'stm32/f4', 'stm32f7': 'stm32/f7', + 'lm4f': 'lm3s', } if target_platform != 'all' - target_path = target_paths[target_platform] + target_path = target_paths.get(target_platform, target_platform) subdir(f'libopencm3/@target_path@') else foreach target_name, target_path : target_paths diff --git a/lib/lm4f/meson.build b/lib/lm4f/meson.build new file mode 100644 index 00000000..e61e80c4 --- /dev/null +++ b/lib/lm4f/meson.build @@ -0,0 +1,78 @@ +# 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. + +lm4f_cm3 = declare_dependency( + sources: cm3_sources, + dependencies: lm3s_vector_nvic, +) + +# Sources specific to the LM4F (Tiva-C) series +liblm4f_sources = files( + 'gpio.c', + 'rcc.c', + 'systemcontrol.c', + 'uart.c', +) + +liblm4f_compile_args = [ + '-mfloat-abi=hard', + '-mfpu=fpv4-sp-d16', + '-mcpu=cortex-m4', + '-mthumb', + '-DLM4F', +] + +# Build a static library for the target platform +liblm4f = static_library( + 'opencm3_lm4f', + [ + liblm4f_sources, + usb_lm4f_sources, + ], + c_args: liblm4f_compile_args, + include_directories: common_includes, + dependencies: [ + lm4f_cm3, + usb_common, + ], + pic: false, +) + +# Make the dependency available to use +libopencm3_lm4f = declare_dependency( + compile_args: liblm4f_compile_args, + include_directories: common_includes, + link_with: liblm4f, + link_args: [ + f'-L@locm3_ld_script_path@', + ], +) + +meson.override_dependency('opencm3_lm4f', libopencm3_lm4f) diff --git a/lib/meson.build b/lib/meson.build index 098ae129..88adc038 100644 --- a/lib/meson.build +++ b/lib/meson.build @@ -39,3 +39,6 @@ locm3_ld_script_path = meson.current_source_dir() if target_platform.startswith('stm32') or target_platform == 'all' subdir('stm32') endif +if target_platform == 'lm4f' or target_platform == 'all' + subdir('lm4f') +endif diff --git a/meson_options.txt b/meson_options.txt index 3f943a65..02ab9e8c 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -8,6 +8,7 @@ option( 'stm32f3', 'stm32f4', 'stm32f7', + 'lm4f', ], value: 'all', description: 'The hardware platform you wish to target'