cmake: Generate PHY init data partition as part of the build

This commit is contained in:
Angus Gratton 2018-02-01 17:45:41 +08:00 committed by Angus Gratton
parent 0bdc12256e
commit cb99531d15
7 changed files with 55 additions and 6 deletions

View file

@ -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)

View file

@ -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 */

View file

@ -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()

View file

@ -0,0 +1,3 @@
0x1000 bootloader/bootloader.bin
0x8000 partition_table/partition-table.bin
${CONFIG_APP_OFFSET} ${PROJECT_NAME}.elf

View file

@ -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()

View file

@ -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")

View file

@ -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()