| # Top-level cmake file for building MicroPython on ESP32. |
| |
| cmake_minimum_required(VERSION 3.12) |
| |
| # Set the board if it's not already set. |
| if(NOT MICROPY_BOARD) |
| set(MICROPY_BOARD GENERIC) |
| endif() |
| |
| # Set the board directory and check that it exists. |
| if(NOT MICROPY_BOARD_DIR) |
| set(MICROPY_BOARD_DIR ${CMAKE_CURRENT_LIST_DIR}/boards/${MICROPY_BOARD}) |
| endif() |
| if(NOT EXISTS ${MICROPY_BOARD_DIR}/mpconfigboard.cmake) |
| message(FATAL_ERROR "Invalid MICROPY_BOARD specified: ${MICROPY_BOARD}") |
| endif() |
| |
| # Define the output sdkconfig so it goes in the build directory. |
| set(SDKCONFIG ${CMAKE_BINARY_DIR}/sdkconfig) |
| |
| # Save the manifest file set from the cmake command line. |
| set(MICROPY_USER_FROZEN_MANIFEST ${MICROPY_FROZEN_MANIFEST}) |
| |
| # Include board config; this is expected to set (among other options): |
| # - SDKCONFIG_DEFAULTS |
| # - IDF_TARGET |
| include(${MICROPY_BOARD_DIR}/mpconfigboard.cmake) |
| |
| # Set the frozen manifest file. Note if MICROPY_FROZEN_MANIFEST is set from the cmake |
| # command line, then it will override the default and any manifest set by the board. |
| if (MICROPY_USER_FROZEN_MANIFEST) |
| set(MICROPY_FROZEN_MANIFEST ${MICROPY_USER_FROZEN_MANIFEST}) |
| elseif (NOT MICROPY_FROZEN_MANIFEST) |
| set(MICROPY_FROZEN_MANIFEST ${CMAKE_CURRENT_LIST_DIR}/boards/manifest.py) |
| endif() |
| |
| # Concatenate all sdkconfig files into a combined one for the IDF to use. |
| file(WRITE ${CMAKE_BINARY_DIR}/sdkconfig.combined.in "") |
| foreach(SDKCONFIG_DEFAULT ${SDKCONFIG_DEFAULTS}) |
| file(READ ${SDKCONFIG_DEFAULT} CONTENTS) |
| file(APPEND ${CMAKE_BINARY_DIR}/sdkconfig.combined.in "${CONTENTS}") |
| endforeach() |
| configure_file(${CMAKE_BINARY_DIR}/sdkconfig.combined.in ${CMAKE_BINARY_DIR}/sdkconfig.combined COPYONLY) |
| set(SDKCONFIG_DEFAULTS ${CMAKE_BINARY_DIR}/sdkconfig.combined) |
| |
| # Include main IDF cmake file. |
| include($ENV{IDF_PATH}/tools/cmake/project.cmake) |
| |
| # Set the location of the main component for the project (one per target). |
| set(EXTRA_COMPONENT_DIRS main_${IDF_TARGET}) |
| |
| # Define the project. |
| project(micropython) |