From: Angus Gratton Date: Thu, 1 Feb 2018 09:45:41 +0000 (+0800) Subject: cmake: Generate PHY init data partition as part of the build X-Git-Tag: v3.1-rc2~9^2~59 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cb99531d15e4c409d43e033c9111ef83e5c1d218;p=esp-idf cmake: Generate PHY init data partition as part of the build --- diff --git a/components/esp32/CMakeLists.txt b/components/esp32/CMakeLists.txt index cf0dff1f0b..a67ab89d1d 100644 --- a/components/esp32/CMakeLists.txt +++ b/components/esp32/CMakeLists.txt @@ -58,4 +58,18 @@ else() add_custom_target(esp32_linker_script DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/esp32_out.ld) add_dependencies(esp32 esp32_linker_script) -endif() + if(CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION) + set(PHY_INIT_DATA_BIN phy_init_data.bin) + + # To get the phy_init_data.bin file, compile phy_init_data.h as a C file and then objcopy the object file to a raw binary + add_custom_command( + OUTPUT ${PHY_INIT_DATA_BIN} + DEPENDS ${CMAKE_CURRENT_LIST_DIR}/phy_init_data.h + COMMAND ${CMAKE_C_COMPILER} -x c -c -o phy_init_data.obj -I ${CMAKE_CURRENT_LIST_DIR} -I ${CMAKE_CURRENT_LIST_DIR}/include -I ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_LIST_DIR}/phy_init_data.h + COMMAND ${CMAKE_OBJCOPY} -O binary phy_init_data.obj ${PHY_INIT_DATA_BIN} + ) + add_custom_target(phy_init_data ALL DEPENDS ${PHY_INIT_DATA_BIN}) + + endif(CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION) + +endif(BOOTLOADER_BUILD) diff --git a/components/esp32/phy_init_data.h b/components/esp32/phy_init_data.h index d09bbdd9c6..9213020ca1 100644 --- a/components/esp32/phy_init_data.h +++ b/components/esp32/phy_init_data.h @@ -12,7 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#pragma once +#ifndef PHY_INIT_DATA_H +#define PHY_INIT_DATA_H /* don't use #pragma once here, we compile this file sometimes */ #include "esp_phy_init.h" #include "sdkconfig.h" @@ -138,3 +139,5 @@ static const esp_phy_init_data_t phy_init_data= { { static const char phy_init_magic_post[] = PHY_INIT_MAGIC; +#endif /* PHY_INIT_DATA_H */ + diff --git a/components/esptool_py/CMakeLists.txt b/components/esptool_py/CMakeLists.txt index bdd55ceeac..f5f5514ee2 100644 --- a/components/esptool_py/CMakeLists.txt +++ b/components/esptool_py/CMakeLists.txt @@ -1 +1,10 @@ register_config_only_component() + +configure_file( + "${CMAKE_CURRENT_LIST_DIR}/flash_project_args.in" + "${CMAKE_BINARY_DIR}/flash_project_args" + ) +if(CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION) + file_append_line(${CMAKE_BINARY_DIR}/flash_project_args + "${CONFIG_PHY_DATA_OFFSET} esp32/phy_init_data.bin") +endif() diff --git a/components/esptool_py/flash_project_args.in b/components/esptool_py/flash_project_args.in new file mode 100644 index 0000000000..1733f5753b --- /dev/null +++ b/components/esptool_py/flash_project_args.in @@ -0,0 +1,3 @@ +0x1000 bootloader/bootloader.bin +0x8000 partition_table/partition-table.bin +${CONFIG_APP_OFFSET} ${PROJECT_NAME}.elf diff --git a/components/partition_table/CMakeLists.txt b/components/partition_table/CMakeLists.txt index f394088066..c0b2a38336 100644 --- a/components/partition_table/CMakeLists.txt +++ b/components/partition_table/CMakeLists.txt @@ -11,12 +11,12 @@ else() endif() if(CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES) - set(unsigned_partition_bin "partition-unsigned.bin") - set(final_partition_bin "partition.bin") + set(unsigned_partition_bin "partition-table-unsigned.bin") + set(final_partition_bin "partition-table.bin") set(final_partition_target "sign_partition_table") else() - set(unsigned_partition_bin "partition.bin") - set(final_partition_bin "partition.bin") + set(unsigned_partition_bin "partition-table.bin") + set(final_partition_bin "partition-table.bin") set(final_partition_target "build_partition_table") endif() diff --git a/toolchain.cmake b/toolchain.cmake index cecba78af4..ccf6eab864 100644 --- a/toolchain.cmake +++ b/toolchain.cmake @@ -3,5 +3,6 @@ set(CMAKE_SYSTEM_NAME Generic) set(CMAKE_C_COMPILER xtensa-esp32-elf-gcc) set(CMAKE_CXX_COMPILER xtensa-esp32-elf-g++) set(CMAKE_ASM_COMPILER xtensa-esp32-elf-gcc) +set(CMAKE_OBJCOPY xtensa-esp32-elf-objcopy) set(CMAKE_EXE_LINKER_FLAGS "-nostdlib" CACHE STRING "Linker Base Flags") diff --git a/tools/cmake/utilities.cmake b/tools/cmake/utilities.cmake index 5c3bac996e..759b559a37 100644 --- a/tools/cmake/utilities.cmake +++ b/tools/cmake/utilities.cmake @@ -127,3 +127,22 @@ macro(include_if_exists path) include("${path}") endif() endmacro(include_if_exists) + +# Append a single line to the file specified +# The line ending is determined by the host OS +function(file_append_line file line) + if(ENV{MSYSTEM} OR CMAKE_HOST_WIN32) + set(line_ending "\r\n") + else() # unix + set(line_ending "\n") + endif() + file(READ ${file} existing) + string(FIND ${existing} ${line_ending} last_newline REVERSE) + string(LENGTH ${existing} length) + math(EXPR length "${length}-1") + if(NOT length EQUAL last_newline) # file doesn't end with a newline + file(APPEND "${file}" "${line_ending}") + endif() + file(APPEND "${file}" "${line}${line_ending}") +endfunction() +