~aleteoryx/muditaos

f54d4005001945760d87300a8b1e6b0cc6025b1e — Marcin Smoczyński 4 years ago 587915d
[BH-734] Add hardware board selection

To support bell hardware one needs to distinguish between the rt1051
generic target and product's boards.

Signed-off-by: Marcin Smoczyński <smoczynski.marcin@gmail.com>
M .github/workflows/releases.yaml => .github/workflows/releases.yaml +1 -1
@@ 40,7 40,7 @@ jobs:
      run: |
        export JOBS=${JOBS:-$(nproc)} && \
        echo "JOBS=${JOBS}" &&  \
        ./configure.sh pure rt1051 RelWithDebInfo -DPURE_HW_TARGET=T6 -G Ninja && \
        ./configure.sh pure rt1051 RelWithDebInfo -DWITH_BOARD_REVISION=6 -G Ninja && \
        pushd build-purephone-rt1051-RelWithDebInfo && \
        ninja -j ${JOBS} Pure&& \
        ninja -j ${JOBS} PurePhone-UpdatePackage && \

M CMakeLists.txt => CMakeLists.txt +10 -6
@@ 7,6 7,12 @@ project(PureOS)

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")

include(Product)
include(Board)

validate_product_selection()
select_board()

include(Colours)
include(CCacheConfig)
include(ProjectConfig)


@@ 20,12 26,11 @@ include(FetchBootloader)
include(AddPureUpdater)
include(DiskImage)
include(AddPackage)
include(Product)

validate_product_selection()

message("Selected product: ${PRODUCT}")
message("PROJECT_TARGET: ${PROJECT_TARGET}")
message("Selected board:   ${BOARD}")
message("Board revision:   ${BOARD_REVISION}")
message("PROJECT_TARGET:   ${PROJECT_TARGET}")
message("TARGET_COMPILE_DEFINITIONS: ${TARGET_COMPILE_OPTIONS}")
message("TARGET_LIBRARIES: ${TARGET_LIBRARIES}")
message("TARGET_LINKER_FLAGS: ${TARGET_LINKER_FLAGS}")


@@ 156,9 161,8 @@ add_custom_target(
        "Generating version info"
    )


copy_updater_bin()
copy_updater_ver()
fetch_ecoboot()
add_subdirectory(products)

add_subdirectory(products)

M board/CMakeLists.txt => board/CMakeLists.txt +2 -1
@@ 1,2 1,3 @@
add_library(board STATIC)
add_subdirectory(${PROJECT_TARGET_NAME})

add_board_subdirectory()

A cmake/modules/Board.cmake => cmake/modules/Board.cmake +53 -0
@@ 0,0 1,53 @@
include(Utils)

set(WITH_BOARD_REVISION CACHE STRING "Board revision" )

function(add_board_subdirectory)
    if(NOT ${ARGV0} STREQUAL "")
        set(ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/${ARGV0})
    else()
        set(ROOT_DIR ${CMAKE_CURRENT_LIST_DIR})
    endif()

    if(NOT DEFINED BOARD)
        message(FATAL_ERROR "Board is not defined")
    endif()

    if (${BOARD} STREQUAL "bellpx" OR ${BOARD} STREQUAL "puretx")
        add_subdirectory_if_exists(${ROOT_DIR}/rt1051)
    endif ()

    add_subdirectory_if_exists(${ROOT_DIR}/${BOARD})
endfunction()

macro(select_board)
    if(NOT DEFINED PRODUCT)
        message(FATAL_ERROR "Cannot determine board without knowing the product")
    endif()

    set(BOARD_REVISION 1)

    if(${PROJECT_TARGET} STREQUAL "TARGET_Linux")
        set(BOARD linux)
    elseif(${PROJECT_TARGET} STREQUAL "TARGET_RT1051")
        if(${PRODUCT} STREQUAL "PurePhone")
            set(BOARD puretx)
            set(BOARD_REVISION 7)
        elseif(${PRODUCT} STREQUAL "BellHybrid")
            set(BOARD bellpx)
        else()
            message(FATAL_ERROR "Unknown product: ${PRODUCT}")
        endif()
    else()
        message(FATAL_ERROR "Unsupported target: ${PROJECT_TARGET}")
    endif()

    # overwrite board revision with user selection
    if(NOT "${WITH_BOARD_REVISION}" STREQUAL "")
        set(BOARD_REVISION ${WITH_BOARD_REVISION})
    endif()

    if("${BOARD}" STREQUAL "")
        message(FATAL_ERROR "Cannot determine board selection.")
    endif()
endmacro()

M cmake/modules/FetchBootloader.cmake => cmake/modules/FetchBootloader.cmake +1 -1
@@ 1,6 1,6 @@
function(fetch_ecoboot)
    set(ECOBOOT_ASSET_NAME ecoboot.bin)
    if(${PURE_HW_TARGET} STREQUAL "T6")
    if(${BOARD} STREQUAL "puretx" AND ${BOARD_REVISION} LESS_EQUAL 6)
        set(ECOBOOT_ASSET_NAME ecoboot_T6.bin)
    endif()


M cmake/modules/ProjectConfig.cmake => cmake/modules/ProjectConfig.cmake +6 -8
@@ 49,17 49,15 @@ else()
    set (USB_DEVICE_PRODUCT_ID 0x0622 CACHE INTERNAL "Sets USB_DEVICE_PRODUCT_ID to Windows MTP Simulator Product ID")
endif()

option(PURE_HW_TARGET "PURE_HW_TARGET" T7)
if (${PURE_HW_TARGET} STREQUAL "T6")
    message("Building for T6")
    set (MEMORY_LINKER_FILE "memory_T6.ld")
    set (PROJECT_CONFIG_USER_DYNMEM_SIZE 9*1024*1024 CACHE INTERNAL "")
    set (PURE_SDRAM_64_MB 0 CACHE INTERNAL "")
else()
    message("Building for T7 - 64MB SDRAM !")
if(${BOARD} STREQUAL "puretx" AND ${BOARD_REVISION} EQUAL 7)
    message("Building for T7 - 64MB SDRAM")
    set (MEMORY_LINKER_FILE "memory_T7.ld")
    set (PROJECT_CONFIG_USER_DYNMEM_SIZE 28*1024*1024 CACHE INTERNAL "")
    set (PURE_SDRAM_64_MB 1 CACHE INTERNAL "")
else()
    set (MEMORY_LINKER_FILE "memory_T6.ld")
    set (PROJECT_CONFIG_USER_DYNMEM_SIZE 9*1024*1024 CACHE INTERNAL "")
    set (PURE_SDRAM_64_MB 0 CACHE INTERNAL "")
endif()

#Config options described in README.md

M cmake/modules/Utils.cmake => cmake/modules/Utils.cmake +7 -0
@@ 40,3 40,10 @@ function(strip_executable TARGET)
            )
    endif()
endfunction()

function(add_subdirectory_if_exists)
    set(_DIR ${ARGV0})
    if(IS_DIRECTORY ${_DIR})
        add_subdirectory(${_DIR})
    endif()
endfunction()