#------------------------------------------------------------------------------
#
# \brief    CMakeLists.txt file for "libHALWrapper"
#
#           The source files are (mostly) obtained from stm via obtain.sh script.
#           To let the Depencies work we need to mention the sourcefiles with
#           absolute pathes via an ${S} variable.
#
# \author   Maximilian Seesslen <m@seesslen.net>
#
#------------------------------------------------------------------------------


cmake_minimum_required(VERSION 3.11)

# ASM neccessary or startup asembler file does not get included
project (libHALWrapper ASM C)


# set ( S "${CMAKE_CURRENT_SOURCE_DIR}/" )
set ( S "${CMAKE_CURRENT_BINARY_DIR}/HAL/" )
file(MAKE_DIRECTORY ${S})

# Thats neccessary to avoid "assert_param"-link problems (Its a makro anyway)
# add_definitions( -DUSE_STDPERIPH_DRIVER )
# add_definitions( -DUSE_USB_DOUBLE_BUFFER )
if ( "${MCU_REV_LONG}" STREQUAL "" )
        message ( SEND_ERROR "CMake variable MCU_REV_LONG is not set. It should be something like 'f042x6'.\n" )
	message ( SEND_ERROR
                "If you are using arena, check your arena board files. The used arena board is '${ARENA_BOARD}'.")
	message ( FATAL_ERROR
                "The used board file is '${ARENA_BOARD_FILE}'."
		)
endif()

string( SUBSTRING "${MCU_REV_LONG}" 0 2 MCU_REV )
string( SUBSTRING "${MCU_REV_LONG}" 0 4 MCU_REV_MID )
set ( MCU_REV_MASK "${MCU_REV_MID}xx" )

# Uppercase variants of variables
string( TOUPPER "${MCU_REV_LONG}" MCU_REV_LONG_UC )
string( TOUPPER "${MCU_REV_MID}" MCU_REV_MID_UC )
string( TOUPPER "${MCU_REV}" MCU_REV_UC )
string( REPLACE "X" "x" MCU_REV_LONG_UC "${MCU_REV_LONG_UC}")
set ( MCU_REV_MASK_UC "${MCU_REV_MID_UC}xx" )

if ( "${MCU_REV}" STREQUAL "" )
        message ( FATAL_ERROR
                "Coud not extract MCU_REV from '${MCU_REV_LONG}'."
                )
endif()

set( MCU_REV_LONG "${MCU_REV_LONG}" PARENT_SCOPE )
set( MCU_REV_MID  "${MCU_REV_MID}"  PARENT_SCOPE )
set( MCU_REV_MASK "${MCU_REV_MASK}" PARENT_SCOPE )
set( MCU_REV      "${MCU_REV}"      PARENT_SCOPE )

# ST itself uses direct pathes
include_directories( "${S}/include/${MCU_REV}/stm" )
include_directories( "${S}/include/${MCU_REV}" )
include_directories( "${libHALWrapper_SOURCE_DIR}/include" )

set( libHALWrapper_SOURCES
      ${libHALWrapper_SOURCES}
      ${S}src/${MCU_REV}/startup_stm32${MCU_REV_LONG}.s
      ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_gpio.c
      # src/${MCU_REV}/misc.c
      ${S}src/${MCU_REV}/system_stm32${MCU_REV}xx.c
      ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_crc.c
      ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_usart.c
      ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_uart.c
      ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_rcc.c
      # Neccessary for HAL_RCC_OscConfig(); [..]rcc.c only provides weak function
      ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_rcc_ex.c
      # src/${MCU_REV}/stm32${MCU_REV}xx_hal_exti.c
      ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal.c
      ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_cortex.c
      ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_flash.c
      ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_flash_ex.c
      ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_tim.c
      ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_tim_ex.c
      # src/${MCU_REV}/stm32${MCU_REV}xx_hal_syscfg.c
      ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_pwr.c
      ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_adc_ex.c
      ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_adc.c
      ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_rtc.c
      ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_dma.c
      ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_spi.c
      ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_i2c.c
      ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_iwdg.c
      ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_rtc_ex.c
)

set( libHALWrapper_HEADERS
		${libHALWrapper_HEADERS}
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_adc.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_adc_ex.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_conf.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_cortex.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_dac.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_dac_ex.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_def.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_dma.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_exti.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_flash.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_flash_ex.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_gpio.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_gpio_ex.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_irda.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_iwdg.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_i2c.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_pcd.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_pcd_ex.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_pwr.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_rcc.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_rcc_ex.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_rtc.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_rtc_ex.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_smartcard.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_spi.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_tim.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_tim_ex.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_usart.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_uart.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_wwdg.h

		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_ll_adc.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_ll_exti.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx.h
		${S}include/${MCU_REV}/stm/stm32${MCU_REV_LONG}.h
		${S}include/${MCU_REV}/stm/core_cm4.h
		${S}include/${MCU_REV}/stm/core_cm3.h
		${S}include/${MCU_REV}/stm/core_cm0.h
		${S}include/${MCU_REV}/stm/core_cm1.h
		${S}include/${MCU_REV}/stm/cmsis_version.h
		${S}include/${MCU_REV}/stm/cmsis_compiler.h
		${S}include/${MCU_REV}/stm/cmsis_gcc.h
		${S}include/${MCU_REV}/stm/mpu_armv7.h
		${S}include/${MCU_REV}/stm/system_stm32${MCU_REV}xx.h
		${S}include/${MCU_REV}/stm/Legacy/stm32_hal_legacy.h
)

set ( libHALWrapper_DOCS
      ${S}doc/LICENSE.md
)

#--- STM32L0 ------------------------------------------------------------------

if( "${MCU_REV}" MATCHES "l0" )
	set( libHALWrapper_SOURCES
			${libHALWrapper_SOURCES}
         ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_crc_ex.c
         ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_pwr_ex.c
   )
	 set( libHALWrapper_HEADERS
		  ${libHALWrapper_HEADERS}
        ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_crc.h
    )
endif( "${MCU_REV}" MATCHES "l0" )

#--- STM32L1 ------------------------------------------------------------------

if( "${MCU_REV}" MATCHES "l1" )
	 set( libHALWrapper_SOURCES
			 ${libHALWrapper_SOURCES}
			 ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_pwr_ex.c
			 ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_lcd.c
          ${S}src/${MCU_REV}/stm32${MCU_REV}xx_ll_usb.c
    )
endif()

#--- STM32L4 ------------------------------------------------------------------

if( "${MCU_REV}" MATCHES "l4" )
	 set( libHALWrapper_SOURCES
			 ${libHALWrapper_SOURCES}
			 ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_pwr_ex.c
          ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_crc_ex.c
			 ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_can.c
			 ${S}src/${MCU_REV}/stm32${MCU_REV}xx_ll_sdmmc.c
			 ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_sd.c
			 ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_qspi.c
	)
	set( libHALWrapper_HEADERS
			${libHALWrapper_HEADERS}
         ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_comp.h
         ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_dma_ex.h
         ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_i2c_ex.h
         ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_irda_ex.h
         ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_smartcard_ex.h
         ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_spi_ex.h
         ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_usart_ex.h
   )
endif()

#--- STM32F0 ------------------------------------------------------------------

if( "${MCU_REV}" MATCHES "f0" )
	 set( libHALWrapper_SOURCES
			 ${libHALWrapper_SOURCES}
          ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_can.c
          ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_tsc.c
			 ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_uart_ex.c
			 ${S}src/${MCU_REV}/stm32${MCU_REV}xx_ll_usb.c
    )
	 set( libHALWrapper_HEADERS
			 ${libHALWrapper_HEADERS}
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_can.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_crc.h
    )
endif( "${MCU_REV}" MATCHES "f0" )

#--- STM32F1 ------------------------------------------------------------------

if( "${MCU_REV}" MATCHES "f1" )
	 set( libHALWrapper_SOURCES
			 ${libHALWrapper_SOURCES}
          ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_can.c
    )
	 set( libHALWrapper_HEADERS
			 ${libHALWrapper_HEADERS}
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_can.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_crc.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_dma_ex.h
    )
endif( "${MCU_REV}" MATCHES "f1" )

#--- STM32F3 ------------------------------------------------------------------

if( "${MCU_REV}" MATCHES "f3" )
	 set( libHALWrapper_SOURCES
			 ${libHALWrapper_SOURCES}
          ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_can.c
			 ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_crc_ex.c
          ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_tsc.c
          ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_uart_ex.c
          ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_dac.c
          ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_dac_ex.c
    )
	 set( libHALWrapper_HEADERS
			 ${libHALWrapper_HEADERS}
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_can.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_crc.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_dma_ex.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_i2c_ex.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_irda_ex.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_smartcard_ex.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_spi_ex.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_usart_ex.h
    )
endif( "${MCU_REV}" MATCHES "f3" )

#--- STM32F4 ------------------------------------------------------------------

if( "${MCU_REV}" MATCHES "f4" )
	 set( libHALWrapper_SOURCES
			 ${libHALWrapper_SOURCES}
          ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_can.c
			 # ${S}src_sup/stm32f4_discovery_accelerometer.c
			 # ${S}src_sup/stm32f4_discovery.c
			 # ${S}src_sup/lis302dl.c
			 # ${S}src_sup/lis3dsh.c
    )
	 set( libHALWrapper_HEADERS
			 ${libHALWrapper_HEADERS}
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_can.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_comp.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_crc.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_dma_ex.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_i2c_ex.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_irda_ex.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_smartcard_ex.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_spi_ex.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_usart_ex.h
    )
endif( "${MCU_REV}" MATCHES "f4" )

#--- STM32G0 ------------------------------------------------------------------

if( "${MCU_REV}" MATCHES "g0" )
    set( libHALWrapper_SOURCES
          ${libHALWrapper_SOURCES}
          ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_crc_ex.c
          ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_uart_ex.c
          ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_pwr_ex.c
    )
    set( libHALWrapper_HEADERS
          ${libHALWrapper_HEADERS}
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_crc.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_uart_ex.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_pwr_ex.h
    )
endif( "${MCU_REV}" MATCHES "g0" )

#--- STM32G4 ------------------------------------------------------------------

if( "${MCU_REV}" MATCHES "g4" )
	 set( libHALWrapper_SOURCES
			 ${libHALWrapper_SOURCES}
          ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_crc_ex.c
			 ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_pwr_ex.c
			 ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_fdcan.c
          ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_uart_ex.c
          ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_i2c_ex.c
          ${S}src/${MCU_REV}/stm32${MCU_REV}xx_ll_usb.c
    )
	 set( libHALWrapper_HEADERS
			 ${libHALWrapper_HEADERS}
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_cordic.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_crc.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_crc_ex.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_comp.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_cryp.h
			 ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_cryp_ex.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_dma_ex.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_fdcan.h
			 ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_flash_ramfunc.h
			 ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_fmac.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_hrtim.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_i2s.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_i2c_ex.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_irda_ex.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_lptim.h
			 ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_nand.h
			 ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_nor.h
			 ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_opamp.h
			 ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_opamp_ex.h
			 ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_pwr_ex.h
			 ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_qspi.h
			 ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_rng.h
			 ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_sai.h
			 ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_sai_ex.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_smartcard_ex.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_smbus.h
			 ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_smbus_ex.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_spi_ex.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_sram.h
			 ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_uart_ex.h
          ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_usart_ex.h
          # ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_rtc_ex.h
	 )
endif( "${MCU_REV}" MATCHES "g4" )

#--- --------------------------------------------------------------------------



if( NOT ( ( "${MCU_REV}" MATCHES "f4" ) OR ( "${MCU_REV}" MATCHES "l0" ) ) )
set( libHALWrapper_SOURCES
		${libHALWrapper_SOURCES}
      ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_pcd.c
      ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_pcd_ex.c
)
endif()


if( NOT ( ( "${MCU_REV}" MATCHES "f4" ) OR ( "${MCU_REV}" MATCHES "l0" ) OR ( "${MCU_REV}" MATCHES "f1" ) OR ( "${MCU_REV}" MATCHES "l1" ) ) )
set( libHALWrapper_SOURCES
		${libHALWrapper_SOURCES}
      ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_spi_ex.c
)
endif()


if ( NOT ( MCU_REV_LONG STREQUAL "f042x6") )
   if( DEFINED STM32_USE_DAC )
		set( libHALWrapper_SOURCES
				${libHALWrapper_SOURCES}
            ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_dac_ex.c
            ${S}src/${MCU_REV}/stm32${MCU_REV}xx_hal_dac.c
      )
		set( libHALWrapper_HEADERS
				${libHALWrapper_HEADERS}
            ${S}include/${MCU_REV}/stm/stm32${MCU_REV}xx_hal_dac.h
      )
   endif()
endif()

#--- LIS302DL-------------------------

if( DEFINED STM32_USE_LIS302DL)
	set( libHALWrapper_SOURCES
		${libHALWrapper_SOURCES}
      ${S}src/${MCU_REV}/stm32${MCU_REV}_discovery_lis302dl.c
   )

	set( libHALWrapper_HEADERS
			${libHALWrapper_HEADERS}
         ${S}include/${MCU_REV}/stm/stm32${MCU_REV}_discovery_lis302dl.h
   )
endif()

set( libHALWrapper_SOURCES_SUPPLEMENTARY
			src/stm32xx_rtc_sup.cpp
			src/stm32xx_system_sup.c
)

set( libHALWrapper_HEADERS_SUPPLEMENTARY
		  include/HALWrapper/stm32xx_rtc_sup.h
)

find_program(BASH bash HINTS /bin)

add_custom_command(OUTPUT ${libHALWrapper_SOURCES} ${libHALWrapper_HEADERS} ${libHALWrapper_DOCS}
                   COMMAND
                            ${CMAKE_COMMAND} -E env ${BASH} -c "${CMAKE_CURRENT_SOURCE_DIR}/scripts/obtain_github.sh ${MCU_REV} &> obtain_${MCU_REV}.log"
                   VERBATIM
                   WORKING_DIRECTORY ${S}

)

add_library( stm-${MCU_REV} STATIC
	${libHALWrapper_SOURCES}
	${libHALWrapper_SOURCES_SUPPLEMENTARY}
	${libHALWrapper_HEADERS}
	${libHALWrapper_HEADERS_SUPPLEMENTARY}
	${libHALWrapper_DOCS}
)

target_compile_definitions(
    stm-${MCU_REV}
        PUBLIC
            STM32${MCU_REV_UC}
            STM32${MCU_REV_MID_UC}
            STM32${MCU_REV_LONG_UC}
            STM32${MCU_REV_MASK_UC}
)

target_include_directories(
   stm-${MCU_REV} INTERFACE
		"${S}/include/${MCU_REV}"
		"${CMAKE_CURRENT_SOURCE_DIR}/include"
)

install(TARGETS stm-${MCU_REV}
		  RUNTIME DESTINATION lib
		  ARCHIVE DESTINATION lib
)

install ( FILES ${libHALWrapper_HEADERS}
         DESTINATION include/stm
)

install ( DIRECTORY include/HALWrapper
         DESTINATION include
)

install ( FILES ${S}/doc/LICENSE.md
			DESTINATION share/doc
)

install ( DIRECTORY ${S}/doc/HAL
			DESTINATION share/doc
)

install ( DIRECTORY ${S}/doc/CMSIS
			DESTINATION share/doc
)

#------------------------------------------------------------------------------
