You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.3 KiB
74 lines
2.3 KiB
# Copyright (c) 2019 Intel Corp. |
|
# SPDX-License-Identifier: Apache-2.0 |
|
|
|
# Convert the .bin file argument to a .o file, create a wrapper |
|
# library for the .o file, and register the library as a generated |
|
# file that is to be linked in after the first link. |
|
function(add_bin_file_to_the_next_link target_dependency bin) |
|
add_custom_command( |
|
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${bin}.o |
|
COMMAND |
|
${CMAKE_OBJCOPY} |
|
-I binary |
|
-B ${OUTPUT_ARCH} |
|
-O ${OUTPUT_FORMAT} |
|
--rename-section .data=${bin},CONTENTS,ALLOC,LOAD,READONLY,DATA |
|
${bin}.bin |
|
${bin}.o |
|
DEPENDS ${target_dependency} ${bin}.bin |
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} |
|
) |
|
add_custom_target(${bin}_o DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${bin}.o) |
|
add_library(${bin} STATIC IMPORTED GLOBAL) |
|
set_property(TARGET ${bin} PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/${bin}.o) |
|
add_dependencies(${bin} ${bin}_o) |
|
set_property(GLOBAL APPEND PROPERTY GENERATED_KERNEL_OBJECT_FILES ${bin}) |
|
endfunction() |
|
|
|
if(CONFIG_X86_64) |
|
include(intel64.cmake) |
|
else() |
|
include(ia32.cmake) |
|
endif() |
|
|
|
# Always set for 64-bit (long mode requires page tables), optional for 32-bit |
|
if (CONFIG_MMU) |
|
set(GEN_MMU ${ZEPHYR_BASE}/arch/x86/gen_mmu.py) |
|
|
|
if(DEFINED X86_EXTRA_GEN_MMU_ARGUMENTS) |
|
# Make the string into a list, or else it will be passed to ${GEN_MMU} |
|
# as a quoted string, which is then parsed as one item by Python's |
|
# argparse. |
|
string(REPLACE " " ";" |
|
X86_EXTRA_GEN_MMU_ARGUMENTS |
|
"${X86_EXTRA_GEN_MMU_ARGUMENTS}") |
|
else() |
|
set(X86_EXTRA_GEN_MMU_ARGUMENTS "") |
|
endif() |
|
|
|
add_custom_target( |
|
pagetables_bin_target |
|
DEPENDS |
|
pagetables.bin |
|
) |
|
add_custom_command( |
|
OUTPUT pagetables.bin |
|
COMMAND |
|
${PYTHON_EXECUTABLE} |
|
${GEN_MMU} |
|
--kernel $<TARGET_FILE:${ZEPHYR_PREBUILT_EXECUTABLE}> |
|
--output pagetables.bin |
|
$<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:--verbose> |
|
${X86_EXTRA_GEN_MMU_ARGUMENTS} |
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} |
|
DEPENDS ${ZEPHYR_PREBUILT_EXECUTABLE} ${GEN_MMU} |
|
) |
|
|
|
add_bin_file_to_the_next_link(pagetables_bin_target pagetables) |
|
endif() |
|
|
|
if(CONFIG_ARCH_HAS_TIMING_FUNCTIONS AND |
|
NOT CONFIG_SOC_HAS_TIMING_FUNCTIONS AND |
|
NOT CONFIG_BOARD_HAS_TIMING_FUNCTIONS) |
|
zephyr_library_sources_ifdef(CONFIG_TIMING_FUNCTIONS timing.c) |
|
endif()
|
|
|