function(obsw_module_config)
endfunction()

function(pre_source_hw_os_config)

# FreeRTOS
if(FSFW_OSAL MATCHES freertos)
    message(FATAL_ERROR "No FreeRTOS support implemented yet.")
# RTEMS
elseif(FSFW_OSAL STREQUAL rtems)
    add_definitions(-DRTEMS)
    message(FATAL_ERROR "No RTEMS support implemented yet.")
elseif(FSFW_OSAL STREQUAL linux)
    add_definitions(-DUNIX -DLINUX) 
    find_package(Threads REQUIRED)
# Hosted
else()
    set(BSP_PATH "bsp_hosted")
    if(WIN32)
        add_definitions(-DWIN32)
    elseif(UNIX)
        find_package(Threads REQUIRED)
        add_definitions(-DUNIX -DLINUX) 
    endif()
endif()

# Cross-compile information
if(CMAKE_CROSSCOMPILING)
    # set(CMAKE_VERBOSE TRUE)

    message(STATUS "Cross-compiling for ${TGT_BSP} target")
    message(STATUS "Cross-compile gcc: ${CMAKE_C_COMPILER}")
    message(STATUS "Cross-compile g++: ${CMAKE_CXX_COMPILER}")
    
    if(CMAKE_VERBOSE)
        message(STATUS "Cross-compile linker: ${CMAKE_LINKER}")
        message(STATUS "Cross-compile size utility: ${CMAKE_SIZE}")
        message(STATUS "Cross-compile objcopy utility: ${CMAKE_OBJCOPY}")
        message(STATUS "Cross-compile ranlib utility: ${CMAKE_RANLIB}")
        message(STATUS "Cross-compile ar utility: ${CMAKE_AR}")
        message(STATUS "Cross-compile nm utility: ${CMAKE_NM}")
        message(STATUS "Cross-compile strip utility: ${CMAKE_STRIP}")
        message(STATUS 
            "Cross-compile assembler: ${CMAKE_ASM_COMPILER} "
            "-x assembler-with-cpp"
        )
        message(STATUS "ABI flags: ${ABI_FLAGS}")
        message(STATUS "Custom linker script: ${LINKER_SCRIPT}")
    endif()
    
    set_property(CACHE TGT_BSP 
        PROPERTY STRINGS  
        "arm/q7s" "arm/raspberrypi" "arm/egse"
    )
endif()
    

if(TGT_BSP)
    if (TGT_BSP MATCHES "arm/raspberrypi" OR TGT_BSP MATCHES "arm/beagleboneblack")
        set(BSP_PATH "bsp_linux_board")
    elseif(TGT_BSP MATCHES "arm/q7s")
        set(BSP_PATH "bsp_q7s")
  elseif(TGT_BSP MATCHES "arm/egse")
    set(BSP_PATH "bsp_egse")
  elseif(TGT_BSP MATCHES "arm/te0720-1cfa")
    set(BSP_PATH "bsp_te0720_1cfa")
    else() 
        message(WARNING "CMake not configured for this target!")
        message(FATAL_ERROR "Target: ${TGT_BSP}!")
    endif()
else()
    set(BSP_PATH "bsp_hosted")
endif()
        
set(BSP_PATH ${BSP_PATH} PARENT_SCOPE)

endfunction()

function(pre_project_config)

# Basic input sanitization
if(DEFINED TGT_BSP)
	if(${TGT_BSP} MATCHES "arm/raspberrypi" AND NOT FSFW_OSAL MATCHES linux)
		message(STATUS "FSFW OSAL invalid for specified target BSP ${TGT_BSP}!")
		message(STATUS "Setting valid FSFW_OSAL: linux") 
		set(FSFW_OSAL "linux")
	endif()
endif()


# Disable compiler checks for cross-compiling.
if(FSFW_OSAL MATCHES linux AND TGT_BSP AND EIVE_HARDCODED_TOOLCHAIN_FILE)
	if(TGT_BSP MATCHES "arm/q7s" OR TGT_BSP MATCHES "arm/te0720-1cfa")
		set(CMAKE_TOOLCHAIN_FILE 
			"${CMAKE_CURRENT_SOURCE_DIR}/cmake/Zynq7020CrossCompileConfig.cmake"
			PARENT_SCOPE
		)
	elseif(TGT_BSP MATCHES "arm/raspberrypi" OR TGT_BSP MATCHES "arm/egse")
		if(NOT DEFINED ENV{LINUX_ROOTFS})
			if(NOT DEFINED LINUX_ROOTFS)
			    message(WARNING "No LINUX_ROOTFS environmental or CMake variable set!")
				set(ENV{LINUX_ROOTFS} "$ENV{HOME}/raspberrypi/rootfs")
			else()
				set(ENV{LINUX_ROOTFS} "${LINUX_ROOTFS}")
			endif()
		else()	
			message(STATUS 
			    "LINUX_ROOTFS from environmental variables used: $ENV{LINUX_ROOTFS}"
			)
		endif()
	
		if(NOT DEFINED ENV{RASPBERRY_VERSION})
			if(NOT RASPBERRY_VERSION)
				message(STATUS "No RASPBERRY_VERSION specified, setting to 4")
				set(RASPBERRY_VERSION "4" CACHE STRING "Raspberry Pi version")
			else()
				message(STATUS "Setting RASPBERRY_VERSION to ${RASPBERRY_VERSION}")
				set(RASPBERRY_VERSION ${RASPBERRY_VERSION} CACHE STRING "Raspberry Pi version")
		        set(ENV{RASPBERRY_VERSION} ${RASPBERRY_VERSION})
			endif()
		else()
			message(STATUS 
				"RASPBERRY_VERSION from environmental variables used: "
				"$ENV{RASPBERRY_VERSION}"
			)
		endif()

		set(CMAKE_TOOLCHAIN_FILE 
			"${CMAKE_CURRENT_SOURCE_DIR}/cmake/RPiCrossCompileConfig.cmake"
			PARENT_SCOPE
		)
    elseif(${TGT_BSP} MATCHES "arm/beagleboneblack")
        if(LINUX_CROSS_COMPILE)
            set(CMAKE_TOOLCHAIN_FILE
                "${CMAKE_CURRENT_SOURCE_DIR}/cmake/BBBCrossCompileConfig.cmake"
                PARENT_SCOPE
            )
        endif()
    else()
		message(WARNING "Target BSP (TGT_BSP) ${TGT_BSP} unknown!")
	endif()
endif()

endfunction()