mirror of
https://github.com/apache/nuttx.git
synced 2026-06-01 16:59:28 +08:00
cmake:refactor CMake add_romfs module to support ABS path
Add support for etc files with absolute paths
usages:
```
add_board_rcsrcs(${CMAKE_CURRENT_SOURCE_DIR}/etc/build.prop)
``
Signed-off-by: xuxin19 <xuxin19@xiaomi.com>
This commit is contained in:
+65
-15
@@ -20,6 +20,20 @@
|
|||||||
#
|
#
|
||||||
# ##############################################################################
|
# ##############################################################################
|
||||||
|
|
||||||
|
function(add_board_rcsrcs)
|
||||||
|
set_property(
|
||||||
|
TARGET board
|
||||||
|
APPEND
|
||||||
|
PROPERTY BOARD_RCSRCS ${ARGN})
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(add_board_rcraws)
|
||||||
|
set_property(
|
||||||
|
TARGET board
|
||||||
|
APPEND
|
||||||
|
PROPERTY BOARD_RCRAWS ${ARGN})
|
||||||
|
endfunction()
|
||||||
|
|
||||||
# ~~~
|
# ~~~
|
||||||
# nuttx_add_romfs
|
# nuttx_add_romfs
|
||||||
#
|
#
|
||||||
@@ -59,6 +73,19 @@ function(nuttx_add_romfs)
|
|||||||
message(FATAL_ERROR "Either PATH or FILES must be specified")
|
message(FATAL_ERROR "Either PATH or FILES must be specified")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(TARGET board)
|
||||||
|
get_property(
|
||||||
|
board_rcsrcs
|
||||||
|
TARGET board
|
||||||
|
PROPERTY BOARD_RCSRCS)
|
||||||
|
get_property(
|
||||||
|
board_rcraws
|
||||||
|
TARGET board
|
||||||
|
PROPERTY BOARD_RCRAWS)
|
||||||
|
list(APPEND RCSRCS ${board_rcsrcs})
|
||||||
|
list(APPEND RCRAWS ${board_rcraws})
|
||||||
|
endif()
|
||||||
|
|
||||||
get_directory_property(TOOLCHAIN_DIR_FLAGS DIRECTORY ${CMAKE_SOURCE_DIR}
|
get_directory_property(TOOLCHAIN_DIR_FLAGS DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||||
COMPILE_OPTIONS)
|
COMPILE_OPTIONS)
|
||||||
|
|
||||||
@@ -75,32 +102,55 @@ function(nuttx_add_romfs)
|
|||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
foreach(rcsrc ${RCSRCS})
|
foreach(rcsrc ${RCSRCS})
|
||||||
get_filename_component(rcpath ${rcsrc} DIRECTORY)
|
if(IS_ABSOLUTE ${rcsrc})
|
||||||
|
string(REGEX REPLACE "^(.*)/etc(/.*)?$" "\\1" SOURCE_ETC_PREFIX
|
||||||
|
"${rcsrc}")
|
||||||
|
string(REGEX REPLACE "^.*/(etc(/.*)?)$" "\\1" REMAINING_PATH "${rcsrc}")
|
||||||
|
string(REGEX REPLACE "^/" "" SOURCE_ETC_SUFFIX "${REMAINING_PATH}")
|
||||||
|
else()
|
||||||
|
set(SOURCE_ETC_PREFIX ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
set(SOURCE_ETC_SUFFIX ${rcsrc})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
get_filename_component(rcpath ${SOURCE_ETC_SUFFIX} DIRECTORY)
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT ${rcsrc}
|
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${SOURCE_ETC_SUFFIX}
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${rcpath}
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${rcpath}
|
||||||
COMMAND
|
COMMAND
|
||||||
${CMAKE_C_COMPILER} ${ROMFS_CMAKE_C_FLAGS} -E -P -x c
|
${CMAKE_C_COMPILER} ${ROMFS_CMAKE_C_FLAGS} -E -P -x c
|
||||||
-I${CMAKE_BINARY_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/${rcsrc} >
|
-I${CMAKE_BINARY_DIR}/include ${SOURCE_ETC_PREFIX}/${SOURCE_ETC_SUFFIX}
|
||||||
${rcsrc}
|
> ${CMAKE_CURRENT_BINARY_DIR}/${SOURCE_ETC_SUFFIX}
|
||||||
DEPENDS nuttx_context ${CMAKE_CURRENT_SOURCE_DIR}/${rcsrc})
|
DEPENDS nuttx_context ${SOURCE_ETC_PREFIX}/${SOURCE_ETC_SUFFIX})
|
||||||
list(APPEND DEPENDS ${rcsrc})
|
list(APPEND DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${SOURCE_ETC_SUFFIX})
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
foreach(rcraw ${RCRAWS})
|
foreach(rcraw ${RCRAWS})
|
||||||
get_filename_component(absrcraw ${rcraw} ABSOLUTE)
|
|
||||||
if(IS_DIRECTORY ${absrcraw})
|
if(IS_ABSOLUTE ${rcraw})
|
||||||
|
string(REGEX REPLACE "^(.*)/etc(/.*)?$" "\\1" SOURCE_ETC_PREFIX
|
||||||
|
"${rcraw}")
|
||||||
|
string(REGEX REPLACE "^.*/(etc(/.*)?)$" "\\1" REMAINING_PATH "${rcraw}")
|
||||||
|
string(REGEX REPLACE "^/" "" SOURCE_ETC_SUFFIX "${REMAINING_PATH}")
|
||||||
|
else()
|
||||||
|
set(SOURCE_ETC_PREFIX ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
set(SOURCE_ETC_SUFFIX ${rcraw})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(IS_DIRECTORY ${SOURCE_ETC_PREFIX}/${SOURCE_ETC_SUFFIX})
|
||||||
file(
|
file(
|
||||||
GLOB subdir
|
GLOB subraws
|
||||||
LIST_DIRECTORIES false
|
LIST_DIRECTORIES false
|
||||||
${rcraws} ${rcraw})
|
RELATIVE ${SOURCE_ETC_PREFIX}
|
||||||
foreach(rcraw ${rcraws})
|
${SOURCE_ETC_PREFIX}/${SOURCE_ETC_SUFFIX})
|
||||||
list(APPEND DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${rcraw})
|
foreach(subraw ${subraws})
|
||||||
configure_file(${rcraw} ${CMAKE_CURRENT_BINARY_DIR}/${rcraw} COPYONLY)
|
list(APPEND DEPENDS ${SOURCE_ETC_PREFIX}/${subraw})
|
||||||
|
configure_file(${SOURCE_ETC_PREFIX}/${subraw}
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/${subraw} COPYONLY)
|
||||||
endforeach()
|
endforeach()
|
||||||
else()
|
else()
|
||||||
list(APPEND DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${rcraw})
|
list(APPEND DEPENDS ${SOURCE_ETC_PREFIX}/${SOURCE_ETC_SUFFIX})
|
||||||
configure_file(${rcraw} ${CMAKE_CURRENT_BINARY_DIR}/${rcraw} COPYONLY)
|
configure_file(${SOURCE_ETC_PREFIX}/${SOURCE_ETC_SUFFIX}
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/${SOURCE_ETC_SUFFIX} COPYONLY)
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user