OpenRTX/meson.build

896 wiersze
31 KiB
Meson

##
## OpenRTX - Modular Open Source Radio Firmware
##
project('OpenRTX', ['c', 'cpp'],
version : '0.3.6',
default_options : ['warning_level=3', 'b_staticpic=false'])
##
## Optional defines, common to all souces (e.g. to enable debugging)
##
openrtx_def = {}
##
## UI font configuration, only one uncommented at a time
##
openrtx_def += {'FONT_UBUNTU_REGULAR': ''}
# openrtx_def += {'FONT_FREE_SANS': ''}
##
## Firmware configuration parameters
##
#openrtx_def += {}
##
## ----------------- Platform-independent source files -------------------------
##
##
## OpenRTX core sources
##
openrtx_src = ['openrtx/src/core/state.c',
'openrtx/src/core/threads.c',
'openrtx/src/core/battery.c',
'openrtx/src/core/graphics.c',
'openrtx/src/core/input.c',
'openrtx/src/core/utils.c',
'openrtx/src/core/queue.c',
'openrtx/src/core/chan.c',
'openrtx/src/core/gps.c',
'openrtx/src/core/dsp.cpp',
'openrtx/src/core/cps.c',
'openrtx/src/core/crc.c',
'openrtx/src/core/datetime.c',
'openrtx/src/core/openrtx.c',
'openrtx/src/core/audio_codec.c',
'openrtx/src/core/audio_stream.c',
'openrtx/src/core/audio_path.cpp',
'openrtx/src/core/data_conversion.c',
'openrtx/src/core/memory_profiling.cpp',
'openrtx/src/core/voicePrompts.c',
'openrtx/src/core/voicePromptUtils.c',
'openrtx/src/core/voicePromptData.S',
'openrtx/src/core/nvmem_access.c',
'openrtx/src/rtx/rtx.cpp',
'openrtx/src/rtx/OpMode_FM.cpp',
'openrtx/src/rtx/OpMode_M17.cpp',
'openrtx/src/protocols/M17/M17DSP.cpp',
'openrtx/src/protocols/M17/M17Golay.cpp',
'openrtx/src/protocols/M17/M17Callsign.cpp',
'openrtx/src/protocols/M17/M17Modulator.cpp',
'openrtx/src/protocols/M17/M17Demodulator.cpp',
'openrtx/src/protocols/M17/M17FrameEncoder.cpp',
'openrtx/src/protocols/M17/M17FrameDecoder.cpp',
'openrtx/src/protocols/M17/M17LinkSetupFrame.cpp']
openrtx_inc = ['openrtx/include',
'openrtx/include/rtx',
'openrtx/include/core',
'openrtx/include/calibration',
'openrtx/include/protocols',
'openrtx/include/fonts/adafruit',
'openrtx/include/fonts/symbols',
'platform/drivers/ADC',
'platform/drivers/NVM',
'platform/drivers/GPS',
'platform/drivers/USB',
'platform/drivers/tones',
'platform/drivers/baseband',
'platform/drivers/backlight',
'platform/drivers/chSelector']
##
## OpenRTX UI sources
##
ui_src_default = ['openrtx/src/ui/default/ui.c',
'openrtx/src/ui/default/ui_main.c',
'openrtx/src/ui/default/ui_menu.c',
'openrtx/src/ui/default/ui_strings.c']
ui_src_module17 = ['openrtx/src/ui/module17/ui.c',
'openrtx/src/ui/module17/ui_main.c',
'openrtx/src/ui/module17/ui_menu.c']
##
## Selection of main entrypoint
##
if get_option('test') != ''
main_src = 'tests/platform/'+get_option('test')+'.c'
openrtx_def += {'RUNNING_TESTSUITE' : ''}
else
main_src = 'openrtx/src/main.c'
endif
##
## External libraries
##
# minmea, a lightweight GPS NMEA 0183 parser library
openrtx_src += ['lib/minmea/minmea.c']
openrtx_inc += ['lib/minmea/include']
# QDEC, a very simple, header only, quadrature decoding library
openrtx_inc += ['lib/qdec/include']
# CODEC2, open source speech codec, compile from source on embedded
codec2_proj = subproject('codec2')
if meson.is_cross_build()
codec2_dep = codec2_proj.get_variable('codec2_dep')
else
cpp = meson.get_compiler('cpp')
codec2_dep = cpp.find_library('codec2')
endif
# XPowersLib, library for x-powers power management series
xpowerslib_proj = subproject('XPowersLib')
##
## RTOS
##
subdir('lib/miosix-kernel')
##
## Current git commit or tag
##
r = run_command('git', 'describe', '--tags', '--dirty', '--always')
if r.returncode() != 0
# it failed
endif
git_version = '"'+r.stdout().strip()+'"'
openrtx_def += {'GIT_VERSION': git_version}
##
## --------------------- Family-dependent source files -------------------------
##
##
## TYT MDx family
##
mdx_src = ['openrtx/src/core/xmodem.c',
'openrtx/src/core/backup.c',
'platform/drivers/ADC/ADC1_MDx.c',
'platform/drivers/GPS/GPS_MDx.cpp',
'platform/drivers/NVM/W25Qx.c',
'platform/drivers/NVM/nvmem_settings_MDx.c',
'platform/drivers/audio/audio_MDx.c',
'platform/drivers/baseband/HR_Cx000.cpp',
'platform/drivers/tones/toneGenerator_MDx.cpp']
##
## GDx family: Radioddity GD-77 and Baofeng DM-1801
##
gdx_src = ['openrtx/src/core/xmodem.c',
'openrtx/src/core/backup.c',
'platform/drivers/NVM/W25Qx.c',
'platform/drivers/NVM/AT24Cx_GDx.c',
'platform/drivers/NVM/spiFlash_GDx.c',
'platform/drivers/NVM/nvmem_GDx.c',
'platform/drivers/CPS/cps_io_native_GDx.c',
'platform/drivers/ADC/ADC0_GDx.c',
'platform/drivers/backlight/backlight_GDx.c',
'platform/drivers/baseband/radio_GDx.cpp',
'platform/drivers/baseband/HR_Cx000.cpp',
'platform/drivers/baseband/AT1846S_GDx.cpp',
'platform/drivers/baseband/HR_C6000_GDx.cpp',
'platform/drivers/display/UC1701_GDx.c',
'platform/drivers/keyboard/keyboard_GDx.c',
'platform/drivers/audio/audio_GDx.c']
##
## --------------------- MCU-dependent source files ----------------------------
##
##
## STM32F405
##
stm32f405_src = ['platform/mcu/STM32F4xx/boot/startup.cpp',
'platform/mcu/STM32F4xx/boot/bsp.cpp',
'platform/mcu/STM32F4xx/boot/libc_integration.cpp',
'platform/mcu/STM32F4xx/drivers/usb/usb_bsp.c',
'platform/mcu/STM32F4xx/drivers/usb/usb_core.c',
'platform/mcu/STM32F4xx/drivers/usb/usb_dcd.c',
'platform/mcu/STM32F4xx/drivers/usb/usb_dcd_int.c',
'platform/mcu/STM32F4xx/drivers/usb/usbd_desc.c',
'platform/mcu/STM32F4xx/drivers/usb/usbd_core.c',
'platform/mcu/STM32F4xx/drivers/usb/usbd_ioreq.c',
'platform/mcu/STM32F4xx/drivers/usb/usbd_req.c',
'platform/mcu/STM32F4xx/drivers/usb/usbd_usr.c',
'platform/mcu/STM32F4xx/drivers/gpio.c',
'platform/mcu/STM32F4xx/drivers/usb_vcom.c',
'platform/mcu/STM32F4xx/drivers/delays.cpp',
'platform/mcu/STM32F4xx/drivers/rtc.c',
'platform/mcu/STM32F4xx/drivers/SPI2.c',
'platform/mcu/STM32F4xx/drivers/USART3.cpp',
'platform/mcu/STM32F4xx/drivers/flash.c',
'platform/mcu/STM32F4xx/drivers/rng.c',
'platform/drivers/audio/stm32_dac.cpp',
'platform/drivers/audio/stm32_adc.cpp',
'platform/drivers/audio/stm32_pwm.cpp',
'platform/mcu/CMSIS/Device/ST/STM32F4xx/Source/system_stm32f4xx.c']
stm32f405_inc = ['platform/mcu/CMSIS/Include',
'platform/mcu/CMSIS/Device/ST/STM32F4xx/Include',
'platform/mcu/STM32F4xx',
'platform/mcu/STM32F4xx/drivers',
'platform/mcu/STM32F4xx/drivers/usb']
stm32f405_def = {'STM32F405xx': '', 'HSE_VALUE':'8000000'}
##
## MK22FN512
##
mk22fn512_src = ['platform/mcu/MK22FN512xxx12/boot/startup.cpp',
'platform/mcu/MK22FN512xxx12/boot/bsp.cpp',
'platform/mcu/MK22FN512xxx12/boot/libc_integration.cpp',
'platform/mcu/MK22FN512xxx12/drivers/gpio.c',
'platform/mcu/MK22FN512xxx12/drivers/delays.cpp',
'platform/mcu/MK22FN512xxx12/drivers/I2C0.c',
'platform/mcu/MK22FN512xxx12/drivers/rng.c',
'platform/mcu/MK22FN512xxx12/drivers/usb/usb_device_cdc_acm.c',
'platform/mcu/MK22FN512xxx12/drivers/usb/usb_device_ch9.c',
'platform/mcu/MK22FN512xxx12/drivers/usb/usb_device_dci.c',
'platform/mcu/MK22FN512xxx12/drivers/usb/usb_device_descriptor.c',
'platform/mcu/MK22FN512xxx12/drivers/usb/usb_device_khci.c',
'platform/mcu/MK22FN512xxx12/drivers/usb/usb_osa_bm.c',
'platform/mcu/MK22FN512xxx12/drivers/usb_vcom.c',
'platform/mcu/CMSIS/Device/NXP/MK22FN512xxx12/Source/system_MK22F51212.c']
mk22fn512_inc = ['platform/mcu/CMSIS/Include',
'platform/mcu/CMSIS/Device/NXP/MK22FN512xxx12/Include',
'platform/mcu/MK22FN512xxx12',
'platform/mcu/MK22FN512xxx12/drivers']
mk22fn512_def = {}
##
## ----------------------- Platform specializations ----------------------------
##
##
## Linux
##
linux_src = ['platform/targets/linux/emulator/emulator.c',
'platform/targets/linux/emulator/sdl_engine.c',
'platform/drivers/display/display_libSDL.c',
'platform/drivers/keyboard/keyboard_linux.c',
'platform/drivers/NVM/nvmem_linux.c',
'platform/drivers/GPS/GPS_linux.c',
'platform/mcu/x86_64/drivers/delays.c',
'platform/mcu/x86_64/drivers/rng.cpp',
'platform/drivers/baseband/radio_linux.cpp',
'platform/drivers/audio/audio_linux.c',
'platform/drivers/audio/file_source.c',
'platform/targets/linux/platform.c',
'platform/drivers/CPS/cps_io_libc.c',
'platform/drivers/NVM/posix_file.c']
linux_inc = ['platform/targets/linux',
'platform/targets/linux/emulator']
linux_def = {'PLATFORM_LINUX': '', 'VP_USE_FILESYSTEM':''}
sdl_dep = dependency('SDL2', required: false)
threads_dep = dependency('threads', required: false)
pulse_dep = dependency('libpulse', required: false)
linux_src += openrtx_src
linux_inc += openrtx_inc
linux_def += openrtx_def
linux_def += {'sniprintf':'snprintf', 'vsniprintf':'vsnprintf'}
#
# Standard UI
#
linux_default_src = linux_src + ui_src_default
linux_default_def = linux_def + {'CONFIG_SCREEN_WIDTH': '160', 'CONFIG_SCREEN_HEIGHT': '128', 'CONFIG_PIX_FMT_RGB565': '',
'CONFIG_GPS': '', 'CONFIG_RTC': ''}
linux_small_def = linux_def + {'CONFIG_SCREEN_WIDTH': '128', 'CONFIG_SCREEN_HEIGHT': '64', 'CONFIG_PIX_FMT_BW': '',
'CONFIG_GPS': '', 'CONFIG_RTC': ''}
#
# Module17 UI
#
linux_mod17_src = linux_src + ui_src_module17
linux_mod17_def = linux_def + {'CONFIG_SCREEN_WIDTH': '128', 'CONFIG_SCREEN_HEIGHT': '64', 'CONFIG_PIX_FMT_BW': ''}
linux_c_args = ['-ffunction-sections', '-fdata-sections']
linux_cpp_args = ['-ffunction-sections', '-fdata-sections', '-std=c++14']
linux_l_args = ['-lm', '-lreadline', '-lpulse-simple', '-Wl,--gc-sections']
# Add AddressSanitizer if required
if get_option('asan')
linux_c_args += '-fsanitize=address'
linux_cpp_args += '-fsanitize=address'
linux_l_args += '-fsanitize=address'
endif
# Add Undefined Behaviour Sanitizer if required
if get_option('ubsan')
linux_c_args += '-fsanitize=undefined'
linux_cpp_args += '-fsanitize=undefined'
linux_l_args += '-fsanitize=undefined'
endif
##
## TYT MD-3x0 family
##
md3x0_src = ['platform/drivers/NVM/nvmem_MD3x0.c',
'platform/drivers/CPS/cps_io_native_MD3x0.c',
'platform/drivers/NVM/spiFlash_MD3x.c',
'platform/drivers/baseband/SKY72310.c',
'platform/drivers/baseband/radio_MD3x0.cpp',
'platform/drivers/baseband/HR_C5000_MDx.cpp',
'platform/drivers/keyboard/keyboard_MD3x.c',
'platform/drivers/display/HX8353_MD3x.cpp',
'platform/drivers/backlight/backlight_MDx.c',
'platform/targets/MD-3x0/platform.c']
md3x0_inc = ['platform/targets/MD-3x0']
md3x0_def = {'PLATFORM_MD3x0': '', 'timegm': 'mktime'}
md3x0_src += openrtx_src + stm32f405_src + miosix_cm4f_src + ui_src_default + mdx_src
md3x0_inc += openrtx_inc + stm32f405_inc + miosix_cm4f_inc
md3x0_def += openrtx_def + stm32f405_def + miosix_cm4f_def
##
## TYT MD-UV380
##
mduv3x0_src = ['platform/drivers/NVM/nvmem_MDUV3x0.c',
'platform/drivers/NVM/spiFlash_MD3x.c',
'platform/drivers/CPS/cps_io_native_MDUV3x0.c',
'platform/targets/MD-UV3x0/platform.c',
'platform/drivers/keyboard/keyboard_MD3x.c',
'platform/drivers/display/HX8353_MD3x.cpp',
'platform/drivers/backlight/backlight_MDx.c',
'platform/drivers/chSelector/chSelector_UV3x0.c',
'platform/drivers/baseband/radio_UV3x0.cpp',
'platform/drivers/baseband/AT1846S_UV3x0.cpp',
'platform/drivers/baseband/HR_C6000_UV3x0.cpp']
mduv3x0_inc = ['platform/targets/MD-UV3x0']
mduv3x0_def = {'PLATFORM_MDUV3x0': '', 'timegm': 'mktime'}
mduv3x0_src += openrtx_src + stm32f405_src + miosix_cm4f_src + ui_src_default + mdx_src
mduv3x0_inc += openrtx_inc + stm32f405_inc + miosix_cm4f_inc
mduv3x0_def += openrtx_def + stm32f405_def + miosix_cm4f_def
##
## TYT MD-9600
##
md9600_src = ['platform/targets/MD-9600/platform.c',
'platform/drivers/display/ST7567_MD9600.c',
'platform/drivers/keyboard/keyboard_MD9600.c',
'platform/drivers/chSelector/chSelector_MD9600.c',
'platform/drivers/baseband/radio_MD9600.cpp',
'platform/drivers/NVM/nvmem_MD9600.c',
'platform/drivers/NVM/spiFlash_MD9600.c',
'platform/drivers/CPS/cps_io_native_MD9600.c']
md9600_inc = ['platform/targets/MD-9600']
md9600_def = {'PLATFORM_MD9600': ''}
md9600_src += openrtx_src + stm32f405_src + miosix_cm4f_src + ui_src_default + mdx_src
md9600_inc += openrtx_inc + stm32f405_inc + miosix_cm4f_inc
md9600_def += openrtx_def + stm32f405_def + miosix_cm4f_def
##
## Radioddity GD-77
##
gd77_src = ['platform/targets/GD-77/platform.c']
gd77_inc = ['platform/targets/GD-77']
gd77_def = {'PLATFORM_GD77': ''}
gd77_src += openrtx_src + mk22fn512_src + miosix_cm4f_src + ui_src_default + gdx_src
gd77_inc += openrtx_inc + mk22fn512_inc + miosix_cm4f_inc
gd77_def += openrtx_def + mk22fn512_def + miosix_cm4f_def
##
## Baofeng DM-1801
##
dm1801_src = ['platform/targets/DM-1801/platform.c']
dm1801_inc = ['platform/targets/DM-1801']
dm1801_def = {'PLATFORM_DM1801': ''}
dm1801_src += openrtx_src + mk22fn512_src + miosix_cm4f_src + ui_src_default + gdx_src
dm1801_inc += openrtx_inc + mk22fn512_inc + miosix_cm4f_inc
dm1801_def += openrtx_def + mk22fn512_def + miosix_cm4f_def
##
## Module 17
##
mod17_src = ['platform/targets/Module17/platform.c',
'platform/drivers/display/SH110x_Mod17.c',
'platform/drivers/ADC/ADC1_Mod17.c',
'platform/drivers/keyboard/keyboard_Mod17.c',
'platform/drivers/NVM/nvmem_Mod17.c',
'platform/drivers/CPS/cps_io_native_Mod17.c',
'platform/drivers/baseband/radio_Mod17.cpp',
'platform/drivers/audio/audio_Mod17.c',
'platform/drivers/audio/MAX9814_Mod17.cpp',
'platform/drivers/baseband/MCP4551_Mod17.cpp']
mod17_inc = ['platform/targets/Module17']
mod17_def = {'PLATFORM_MOD17': ''}
mod17_src += openrtx_src + stm32f405_src + miosix_cm4f_src + ui_src_module17
mod17_inc += openrtx_inc + stm32f405_inc + miosix_cm4f_inc
mod17_def += openrtx_def + stm32f405_def + miosix_cm4f_def
##
## -------------------------- Compilation arguments ----------------------------
##
linux_c_args = linux_c_args
linux_cpp_args = linux_cpp_args
linux_small_c_args = linux_c_args
linux_small_cpp_args = linux_cpp_args
linux_mod17_c_args = linux_c_args
linux_mod17_cpp_args = linux_cpp_args
foreach k, v : linux_default_def
if v == ''
linux_c_args += '-D@0@'.format(k)
linux_cpp_args += '-D@0@'.format(k)
else
linux_c_args += '-D@0@=@1@'.format(k, v)
linux_cpp_args += '-D@0@=@1@'.format(k, v)
endif
endforeach
foreach k, v : linux_small_def
if v == ''
linux_small_c_args += '-D@0@'.format(k)
linux_small_cpp_args += '-D@0@'.format(k)
else
linux_small_c_args += '-D@0@=@1@'.format(k, v)
linux_small_cpp_args += '-D@0@=@1@'.format(k, v)
endif
endforeach
foreach k, v : linux_mod17_def
if v == ''
linux_mod17_c_args += '-D@0@'.format(k)
linux_mod17_cpp_args += '-D@0@'.format(k)
else
linux_mod17_c_args += '-D@0@=@1@'.format(k, v)
linux_mod17_cpp_args += '-D@0@=@1@'.format(k, v)
endif
endforeach
md3x0_args = []
foreach k, v : md3x0_def
if v == ''
md3x0_args += '-D@0@'.format(k)
else
md3x0_args += '-D@0@=@1@'.format(k, v)
endif
endforeach
mduv3x0_args = []
foreach k, v : mduv3x0_def
if v == ''
mduv3x0_args += '-D@0@'.format(k)
else
mduv3x0_args += '-D@0@=@1@'.format(k, v)
endif
endforeach
gd77_args = []
foreach k, v : gd77_def
if v == ''
gd77_args += '-D@0@'.format(k)
else
gd77_args += '-D@0@=@1@'.format(k, v)
endif
endforeach
dm1801_args = []
foreach k, v : dm1801_def
if v == ''
dm1801_args += '-D@0@'.format(k)
else
dm1801_args += '-D@0@=@1@'.format(k, v)
endif
endforeach
md9600_args = []
foreach k, v : md9600_def
if v == ''
md9600_args += '-D@0@'.format(k)
else
md9600_args += '-D@0@=@1@'.format(k, v)
endif
endforeach
mod17_args = []
foreach k, v : mod17_def
if v == ''
mod17_args += '-D@0@'.format(k)
else
mod17_args += '-D@0@=@1@'.format(k, v)
endif
endforeach
linux_opts = {
'sources' : linux_default_src,
'include_directories': linux_inc,
'dependencies' : [sdl_dep, threads_dep, pulse_dep, codec2_dep],
'c_args' : linux_c_args,
'cpp_args' : linux_cpp_args,
'link_args' : linux_l_args
}
linux_small_opts = {
'sources' : linux_default_src,
'include_directories': linux_inc,
'dependencies' : [sdl_dep, threads_dep, pulse_dep, codec2_dep],
'c_args' : linux_small_c_args,
'cpp_args' : linux_small_cpp_args,
'link_args' : linux_l_args
}
linux_mod17_opts = {
'sources' : linux_mod17_src,
'include_directories': linux_inc,
'dependencies' : [sdl_dep, threads_dep, pulse_dep, codec2_dep],
'c_args' : linux_mod17_c_args,
'cpp_args' : linux_mod17_cpp_args,
'link_args' : linux_l_args
}
md3x0_opts = {
'sources' : md3x0_src,
'include_directories': md3x0_inc,
'dependencies' : [codec2_dep],
'c_args' : md3x0_args,
'cpp_args' : md3x0_args,
'link_args' : ['-Wl,-T../platform/mcu/STM32F4xx/linker_script_MDx.ld',
'-Wl,--print-memory-usage']
}
mduv3x0_opts = {
'sources' : mduv3x0_src,
'include_directories': mduv3x0_inc,
'dependencies' : [codec2_dep],
'c_args' : mduv3x0_args,
'cpp_args' : mduv3x0_args,
'link_args' : ['-Wl,-T../platform/mcu/STM32F4xx/linker_script_MDx.ld',
'-Wl,--print-memory-usage']
}
gd77_opts = {
'sources' : gd77_src,
'include_directories': gd77_inc,
'dependencies' : [codec2_dep],
'c_args' : gd77_args,
'cpp_args' : gd77_args,
'link_args' : ['-Wl,-T../platform/mcu/MK22FN512xxx12/linker_script.ld',
'-Wl,--print-memory-usage'],
}
dm1801_opts = {
'sources' : dm1801_src,
'include_directories': dm1801_inc,
'dependencies' : [codec2_dep],
'c_args' : dm1801_args,
'cpp_args' : dm1801_args,
'link_args' : ['-Wl,-T../platform/mcu/MK22FN512xxx12/linker_script.ld',
'-Wl,--print-memory-usage'],
}
md9600_opts = {
'sources' : md9600_src,
'include_directories': md9600_inc,
'dependencies' : [codec2_dep],
'c_args' : md9600_args,
'cpp_args' : md9600_args,
'link_args' : ['-Wl,-T../platform/mcu/STM32F4xx/linker_script_MDx.ld',
'-Wl,--print-memory-usage'],
}
mod17_opts = {
'sources' : mod17_src,
'include_directories': mod17_inc,
'dependencies' : [codec2_dep],
'c_args' : mod17_args,
'cpp_args' : mod17_args,
'link_args' : ['-Wl,-T../platform/mcu/STM32F4xx/linker_script_Mod17.ld',
'-Wl,--print-memory-usage'],
}
ttwrplus_opts = {
'sources' : ['CMakeLists.txt'],
'include_directories': [],
'dependencies' : [codec2_dep],
'c_args' : [],
'cpp_args' : [],
'link_args' : [],
}
##
## ---------------------------- Compilation targets ----------------------------
##
targets = [
{
'name' : 'linux',
'opts' : linux_opts,
'flashable': false
},
{
'name' : 'linux_smallscreen',
'opts' : linux_small_opts,
'flashable': false
},
{
'name' : 'linux_mod17',
'opts' : linux_mod17_opts,
'flashable': false
},
{
'name' : 'md3x0',
'opts' : md3x0_opts,
'flashable': true,
'wrap' : 'MD380',
'load_addr': '0x0800C000'
},
{
'name' : 'mduv3x0',
'opts' : mduv3x0_opts,
'flashable': true,
'wrap' : 'UV3X0',
'load_addr': '0x0800C000'
},
{
'name' : 'gd77',
'opts' : gd77_opts,
'flashable': true,
'wrap' : 'GD-77',
'load_addr': '0x0800C000'
},
{
'name' : 'dm1801',
'opts' : dm1801_opts,
'flashable': true,
'wrap' : 'DM-1801',
'load_addr': '0x0800C000'
},
{
'name' : 'md9600',
'opts' : md9600_opts,
'flashable': true,
'wrap' : 'MD9600',
'load_addr': '0x0800C000'
},
{
'name' : 'mod17',
'opts' : mod17_opts,
'flashable': true,
'wrap' : ' ',
'load_addr': ' '
},
{
'name' : 'ttwrplus',
'opts' : ttwrplus_opts,
'flashable': true,
'wrap' : ' ',
'load_addr': ' '
},
]
if build_machine.system() == 'linux'
bin2sgl = find_program('scripts/bin2sgl.Linux', required:false, disabler:true)
elif build_machine.system() == 'windows'
bin2sgl = find_program('scripts/bin2sgl.exe', required:false, disabler:true)
endif
radio_tool = find_program('radio_tool')
objcopy = find_program('objcopy', required:false, disabler:true)
gd77_loader = find_program('scripts/gd-77_firmware_loader.py', required:false, disabler:true)
dfu_util = find_program('dfu-util', required:false, disabler:true)
west = find_program('west', required:false, disabler:true)
uf2conv = find_program('scripts/uf2conv.py', required:false, disabler:true)
foreach t : targets
name = 'openrtx_'+t['name']
# ttwrplus is a Zephyr target, we compile it using west and package it in uf2 format
if name == 'openrtx_ttwrplus'
if build_machine.system() == 'linux'
txt = custom_target('Copy CMakeLists.txt',
input : 'CMakeLists.txt',
output : 'CMakeLists.txt',
command : ['cp', '@INPUT@', '@OUTPUT@'],
install : false,
build_by_default : true)
elif build_machine.system() == 'windows'
txt = custom_target('Copy CMakeLists.txt',
input : 'CMakeLists.txt',
output : 'CMakeLists.txt',
command : ['xcopy', '@INPUT@', '@OUTPUT@'],
install : false,
build_by_default : true)
endif
bin = custom_target(name,
input : txt,
output : name+'_bin',
command : [west,
'build',
'-b', 'ttwrplus',
'-d', '.', '..'])
uf2 = custom_target(name+'_uf2',
input : bin,
output : name+'.uf2',
command : [uf2conv,
'zephyr/zephyr.bin',
'-c',
'-f', 'ESP32S3',
'-b', '0x0',
'-o', '@OUTPUT@'])
custom_target(name+'_flash',
input : uf2,
output : name+'_flash',
command : [uf2conv, '-D', '@INPUT@'])
else
target_opts = t['opts']
exe = executable(name,
sources : target_opts['sources'] + main_src,
include_directories : target_opts['include_directories'],
dependencies : target_opts['dependencies'],
c_args : target_opts['c_args'],
cpp_args : target_opts['cpp_args'],
link_args : target_opts['link_args'])
if t['flashable']
bin = custom_target(name+'_bin',
output : name+'_bin',
input : exe,
command : [objcopy, '-O', 'binary', '@INPUT@', '@OUTPUT@'])
# Handle GD77 custom wrapping and flashing tools
if name == 'openrtx_gd77' or name == 'openrtx_dm1801'
if build_machine.system() == 'linux'
wrap = custom_target(name+'_wrap',
output : name+'_wrap.sgl',
input : bin,
command : [bin2sgl,
'-f', '@INPUT@',
'-m', t['wrap'],
'&&',
'mv', '@INPUT@.sgl', '@OUTPUT@'])
elif build_machine.system() == 'windows'
wrap = custom_target(name+'_wrap',
output : name+'_bin.sgl',
input : bin,
command : [bin2sgl, '@INPUT@', '-m', t['wrap']])
endif
custom_target(name+'_flash',
input : wrap,
output : name+'_flash',
command : [gd77_loader, '-f', '@INPUT@', '-m', t['wrap']])
# Module17 also uses dfu-tool for flashing
elif name == 'openrtx_mod17'
# Wrap target for Module17 for consistency, same output as bin target
custom_target(name+'_wrap',
output : name+'_wrap',
input : exe,
command : [objcopy, '-O', 'binary', '@INPUT@', '@OUTPUT@'])
custom_target(name+'_flash',
input : bin,
output : name+'_flash',
command : [dfu_util,
'-d', '0483:df11',
'-a', '0',
'-D', '@INPUT@',
'-s', '0x08000000'])
else
wrap = custom_target(name+'_wrap',
output : name+'_wrap',
input : bin,
command : [radio_tool,
'--wrap',
'-o', '@OUTPUT@',
'-r', t['wrap'],
'-s', t['load_addr']+':@INPUT@'])
custom_target(name+'_flash',
input : wrap,
output : name+'_flash',
command : [radio_tool, '-d', '0', '-f', '-i', '@INPUT@'])
endif
endif
endif
endforeach
##
## ----------------------------------- Unit Tests ------------------------------
##
unit_test_opts = {'c_args' : linux_c_args,
'cpp_args' : linux_cpp_args,
'include_directories': linux_inc,
'dependencies' : [sdl_dep, threads_dep, pulse_dep, codec2_dep],
'link_args' : linux_l_args}
unit_test_src = linux_src + ui_src_default
m17_golay_test = executable('m17_golay_test',
sources : unit_test_src + ['tests/unit/M17_golay.cpp'],
kwargs : unit_test_opts)
m17_viterbi_test = executable('m17_viterbi_test',
sources : unit_test_src + ['tests/unit/M17_viterbi.cpp'],
kwargs : unit_test_opts)
m17_demodulator_test = executable('m17_demodulator_test',
sources: unit_test_src + ['tests/unit/M17_demodulator.cpp'],
kwargs: unit_test_opts)
m17_rrc_test = executable('m17_rrc_test',
sources: unit_test_src + ['tests/unit/M17_rrc.cpp'],
kwargs: unit_test_opts)
cps_test = executable('cps_test',
sources : unit_test_src + ['tests/unit/cps.c'],
kwargs : unit_test_opts)
linux_inputStream_test = executable('linux_inputStream_test',
sources : unit_test_src + ['tests/unit/linux_inputStream_test.cpp'],
kwargs : unit_test_opts)
sine_test = executable('sine_test',
sources : unit_test_src + ['tests/unit/play_sine.c'],
kwargs : unit_test_opts)
vp_test = executable('vp_test',
sources : unit_test_src + ['tests/unit/voice_prompts.c'],
kwargs : unit_test_opts)
minmea_conversion_test = executable('minmea_conversion_test',
sources : unit_test_src + ['tests/unit/convert_minmea_coord.c'],
kwargs : unit_test_opts)
test('M17 Golay Unit Test', m17_golay_test)
test('M17 Viterbi Unit Test', m17_viterbi_test)
## test('M17 Demodulator Test', m17_demodulator_test) # Skipped for now as this test no longer works after an M17 refactor
test('M17 RRC Test', m17_rrc_test)
test('Codeplug Test', cps_test)
test('Linux InputStream Test', linux_inputStream_test)
test('Sine Test', sine_test)
## test('Voice Prompts Test', vp_test) # Skipped for now as this test no longer works
test('minmea conversion Test', minmea_conversion_test)