meta: add build system
This commit is contained in:
95
cmake/BSP.cmake
Normal file
95
cmake/BSP.cmake
Normal file
@@ -0,0 +1,95 @@
|
||||
find_package(Python COMPONENTS Interpreter)
|
||||
|
||||
set(bsp_manifest ${CMAKE_CURRENT_BINARY_DIR}/bsp-manifest.json)
|
||||
set(bsp_tool ${CMAKE_SOURCE_DIR}/util/bsp-tool.py)
|
||||
|
||||
function(bsp_reset)
|
||||
execute_process(
|
||||
COMMAND ${Python_EXECUTABLE} ${bsp_tool} reset ${bsp_manifest}
|
||||
COMMAND_ERROR_IS_FATAL ANY)
|
||||
endfunction(bsp_reset)
|
||||
|
||||
function(bsp_add_library)
|
||||
set(options)
|
||||
set(one_value_args NAME HEADER_DIR LIB_DIR)
|
||||
set(multi_value_args)
|
||||
|
||||
cmake_parse_arguments(PARSE_ARGV 0 arg
|
||||
"${options}"
|
||||
"${one_value_args}"
|
||||
"${multi_value_args}")
|
||||
|
||||
set(target_name ${arg_NAME})
|
||||
set(bsp_target_name _bsp-${target_name})
|
||||
meta_target_get_header_directories(TARGET ${target_name} OUT header_dirs)
|
||||
|
||||
get_property(bsp_targets GLOBAL PROPERTY bsp_target_list)
|
||||
list(LENGTH bsp_targets nr_bsp_targets)
|
||||
if (${nr_bsp_targets} GREATER 0)
|
||||
math(EXPR serialiser_index "${nr_bsp_targets}-1")
|
||||
list(GET bsp_targets ${serialiser_index} serialiser)
|
||||
endif ()
|
||||
|
||||
add_custom_target(${bsp_target_name}
|
||||
COMMAND ${Python_EXECUTABLE} ${bsp_tool}
|
||||
add-binary ${bsp_manifest} ${target_name}
|
||||
${arg_LIB_DIR} $<TARGET_FILE:${target_name}>
|
||||
COMMAND ${Python_EXECUTABLE} ${bsp_tool}
|
||||
add-headers ${bsp_manifest} ${target_name}
|
||||
${arg_HEADER_DIR} ${header_dirs}
|
||||
COMMENT "Preparing bsp component: ${target_name}"
|
||||
DEPENDS ${target_name} ${serialiser})
|
||||
|
||||
set_property(GLOBAL PROPERTY bsp_target_list ${bsp_targets} ${bsp_target_name})
|
||||
endfunction(bsp_add_library)
|
||||
|
||||
function(bsp_add_program)
|
||||
set(options)
|
||||
set(one_value_args NAME BIN_DIR)
|
||||
set(multi_value_args)
|
||||
|
||||
cmake_parse_arguments(PARSE_ARGV 0 arg
|
||||
"${options}"
|
||||
"${one_value_args}"
|
||||
"${multi_value_args}")
|
||||
|
||||
set(target_name ${arg_NAME})
|
||||
set(bsp_target_name _bsp-${target_name})
|
||||
|
||||
get_property(bsp_targets GLOBAL PROPERTY bsp_target_list)
|
||||
list(LENGTH bsp_targets nr_bsp_targets)
|
||||
if (${nr_bsp_targets} GREATER 0)
|
||||
math(EXPR serialiser_index "${nr_bsp_targets}-1")
|
||||
list(GET bsp_targets ${serialiser_index} serialiser)
|
||||
endif ()
|
||||
|
||||
add_custom_target(${bsp_target_name}
|
||||
COMMAND ${Python_EXECUTABLE} ${bsp_tool}
|
||||
add-binary ${bsp_manifest} ${target_name}
|
||||
${arg_BIN_DIR} $<TARGET_FILE:${target_name}>
|
||||
COMMENT "Preparing bsp component: ${target_name}"
|
||||
DEPENDS ${target_name} ${serialiser})
|
||||
|
||||
set_property(GLOBAL PROPERTY bsp_target_list ${bsp_targets} ${bsp_target_name})
|
||||
endfunction(bsp_add_program)
|
||||
|
||||
function(bsp_finalise)
|
||||
set(options)
|
||||
set(one_value_args BSP_NAME)
|
||||
set(multi_value_args)
|
||||
|
||||
cmake_parse_arguments(PARSE_ARGV 0 arg
|
||||
"${options}"
|
||||
"${one_value_args}"
|
||||
"${multi_value_args}")
|
||||
|
||||
set(bsp_output_path ${CMAKE_CURRENT_BINARY_DIR}/${arg_BSP_NAME})
|
||||
get_property(bsp_targets GLOBAL PROPERTY bsp_target_list)
|
||||
add_custom_command(OUTPUT ${bsp_output_path}
|
||||
COMMAND ${Python_EXECUTABLE} ${bsp_tool}
|
||||
build-bsp ${bsp_manifest} ${bsp_output_path}
|
||||
DEPENDS ${bsp_targets}
|
||||
COMMENT "Building bsp: ${arg_BSP_NAME}")
|
||||
add_custom_target(bsp
|
||||
DEPENDS ${bsp_output_path})
|
||||
endfunction(bsp_finalise)
|
||||
34
cmake/Meta.cmake
Normal file
34
cmake/Meta.cmake
Normal file
@@ -0,0 +1,34 @@
|
||||
function(meta_target_add_header_directory)
|
||||
set(options)
|
||||
set(one_value_args TARGET PATH)
|
||||
set(multi_value_args)
|
||||
|
||||
cmake_parse_arguments(PARSE_ARGV 0 arg
|
||||
"${options}"
|
||||
"${one_value_args}"
|
||||
"${multi_value_args}")
|
||||
|
||||
get_property(header_dir_list
|
||||
TARGET ${arg_TARGET}
|
||||
PROPERTY meta_header_directories)
|
||||
set_property(
|
||||
TARGET ${arg_TARGET}
|
||||
PROPERTY meta_header_directories
|
||||
${header_dir_list} ${arg_PATH})
|
||||
endfunction(meta_target_add_header_directory)
|
||||
|
||||
function(meta_target_get_header_directories)
|
||||
set(options)
|
||||
set(one_value_args TARGET OUT)
|
||||
set(multi_value_args)
|
||||
|
||||
cmake_parse_arguments(PARSE_ARGV 0 arg
|
||||
"${options}"
|
||||
"${one_value_args}"
|
||||
"${multi_value_args}")
|
||||
|
||||
get_property(header_dir_list
|
||||
TARGET ${arg_TARGET}
|
||||
PROPERTY meta_header_directories)
|
||||
set(${arg_OUT} ${header_dir_list} PARENT_SCOPE)
|
||||
endfunction(meta_target_get_header_directories)
|
||||
115
cmake/Sysroot.cmake
Normal file
115
cmake/Sysroot.cmake
Normal file
@@ -0,0 +1,115 @@
|
||||
find_package(Python COMPONENTS Interpreter)
|
||||
|
||||
set(sysroot_manifest ${CMAKE_CURRENT_BINARY_DIR}/sysroot-manifest.json)
|
||||
set(sysroot_tool ${CMAKE_SOURCE_DIR}/util/sysroot-tool.py)
|
||||
|
||||
function(sysroot_reset)
|
||||
execute_process(
|
||||
COMMAND ${Python_EXECUTABLE} ${sysroot_tool} reset ${sysroot_manifest}
|
||||
COMMAND_ERROR_IS_FATAL ANY)
|
||||
endfunction(sysroot_reset)
|
||||
|
||||
function(sysroot_add_library)
|
||||
set(options)
|
||||
set(one_value_args NAME HEADER_DIR LIB_DIR)
|
||||
set(multi_value_args)
|
||||
|
||||
cmake_parse_arguments(PARSE_ARGV 0 arg
|
||||
"${options}"
|
||||
"${one_value_args}"
|
||||
"${multi_value_args}")
|
||||
|
||||
set(target_name ${arg_NAME})
|
||||
set(sysroot_target_name _sysroot-${target_name})
|
||||
meta_target_get_header_directories(TARGET ${target_name} OUT header_dirs)
|
||||
|
||||
get_property(sysroot_targets GLOBAL PROPERTY sysroot_target_list)
|
||||
list(LENGTH sysroot_targets nr_sysroot_targets)
|
||||
if (${nr_sysroot_targets} GREATER 0)
|
||||
math(EXPR serialiser_index "${nr_sysroot_targets}-1")
|
||||
list(GET sysroot_targets ${serialiser_index} serialiser)
|
||||
endif ()
|
||||
|
||||
add_custom_target(${sysroot_target_name}
|
||||
COMMAND ${Python_EXECUTABLE} ${sysroot_tool}
|
||||
add-binary ${sysroot_manifest} ${target_name}
|
||||
${arg_LIB_DIR} $<TARGET_FILE:${target_name}>
|
||||
COMMAND ${Python_EXECUTABLE} ${sysroot_tool}
|
||||
add-headers ${sysroot_manifest} ${target_name}
|
||||
${arg_HEADER_DIR} ${header_dirs}
|
||||
COMMENT "Preparing sysroot component: ${target_name}"
|
||||
DEPENDS ${target_name} ${serialiser})
|
||||
|
||||
set_property(GLOBAL PROPERTY sysroot_target_list ${sysroot_targets} ${sysroot_target_name})
|
||||
endfunction(sysroot_add_library)
|
||||
|
||||
function(sysroot_add_program)
|
||||
set(options)
|
||||
set(one_value_args NAME BIN_DIR)
|
||||
set(multi_value_args)
|
||||
|
||||
cmake_parse_arguments(PARSE_ARGV 0 arg
|
||||
"${options}"
|
||||
"${one_value_args}"
|
||||
"${multi_value_args}")
|
||||
|
||||
set(target_name ${arg_NAME})
|
||||
set(sysroot_target_name _sysroot-${target_name})
|
||||
|
||||
get_property(sysroot_targets GLOBAL PROPERTY sysroot_target_list)
|
||||
list(LENGTH sysroot_targets nr_sysroot_targets)
|
||||
if (${nr_sysroot_targets} GREATER 0)
|
||||
math(EXPR serialiser_index "${nr_sysroot_targets}-1")
|
||||
list(GET sysroot_targets ${serialiser_index} serialiser)
|
||||
endif ()
|
||||
|
||||
add_custom_target(${sysroot_target_name}
|
||||
COMMAND ${Python_EXECUTABLE} ${sysroot_tool}
|
||||
add-binary ${sysroot_manifest} ${target_name}
|
||||
${arg_BIN_DIR} $<TARGET_FILE:${target_name}>
|
||||
COMMENT "Preparing sysroot component: ${target_name}"
|
||||
DEPENDS ${target_name} ${serialiser})
|
||||
|
||||
set_property(GLOBAL PROPERTY sysroot_target_list ${sysroot_targets} ${sysroot_target_name})
|
||||
endfunction(sysroot_add_program)
|
||||
|
||||
function(sysroot_add_file)
|
||||
set(options)
|
||||
set(one_value_args ID SRC_PATH DEST_DIR)
|
||||
set(multi_value_args DEPENDS)
|
||||
|
||||
cmake_parse_arguments(PARSE_ARGV 0 arg
|
||||
"${options}"
|
||||
"${one_value_args}"
|
||||
"${multi_value_args}")
|
||||
|
||||
set(src_path ${arg_SRC_PATH})
|
||||
set(dest_dir ${arg_DEST_DIR})
|
||||
set(sysroot_target_name _sysroot-${arg_ID})
|
||||
|
||||
get_property(sysroot_targets GLOBAL PROPERTY sysroot_target_list)
|
||||
list(LENGTH sysroot_targets nr_sysroot_targets)
|
||||
if (${nr_sysroot_targets} GREATER 0)
|
||||
math(EXPR serialiser_index "${nr_sysroot_targets}-1")
|
||||
list(GET sysroot_targets ${serialiser_index} serialiser)
|
||||
endif ()
|
||||
|
||||
add_custom_target(${sysroot_target_name}
|
||||
COMMAND ${Python_EXECUTABLE} ${sysroot_tool}
|
||||
add-binary ${sysroot_manifest} ${arg_ID}
|
||||
${dest_dir} ${src_path}
|
||||
COMMENT "Preparing sysroot component: ${arg_ID}"
|
||||
DEPENDS ${target_name} ${serialiser} ${arg_DEPENDS})
|
||||
|
||||
set_property(GLOBAL PROPERTY sysroot_target_list ${sysroot_targets} ${sysroot_target_name})
|
||||
endfunction(sysroot_add_file)
|
||||
|
||||
|
||||
function(sysroot_finalise)
|
||||
get_property(sysroot_targets GLOBAL PROPERTY sysroot_target_list)
|
||||
add_custom_target(sysroot
|
||||
COMMAND ${Python_EXECUTABLE} ${sysroot_tool}
|
||||
build-sysroot ${sysroot_manifest} ${CMAKE_BINARY_DIR}/sysroot
|
||||
DEPENDS ${sysroot_targets}
|
||||
COMMENT "Building sysroot...")
|
||||
endfunction(sysroot_finalise)
|
||||
80
cmake/Templates.cmake
Normal file
80
cmake/Templates.cmake
Normal file
@@ -0,0 +1,80 @@
|
||||
function(rosetta_add_executable)
|
||||
set(options)
|
||||
set(one_value_args NAME SYSROOT_PATH)
|
||||
set(multi_value_args
|
||||
SUBDIRS
|
||||
EXTRA_SOURCES)
|
||||
cmake_parse_arguments(PARSE_ARGV 0 arg
|
||||
"${options}"
|
||||
"${one_value_args}"
|
||||
"${multi_value_args}")
|
||||
|
||||
set(exec_name ${arg_NAME})
|
||||
get_property(programs GLOBAL PROPERTY rosetta_program_list)
|
||||
set_property(GLOBAL PROPERTY rosetta_program_list ${programs} ${exec_name})
|
||||
|
||||
file(GLOB sources *.c *.h)
|
||||
|
||||
foreach (dir ${arg_SUBDIRS})
|
||||
file(GLOB dir_sources ${dir}/*.c ${dir}/*.h)
|
||||
set(sources ${sources} ${dir_sources})
|
||||
endforeach (dir)
|
||||
|
||||
message(STATUS "Building program ${exec_name}")
|
||||
add_executable(${exec_name}
|
||||
${sources}
|
||||
${arg_EXTRA_SOURCES})
|
||||
|
||||
set_target_properties(${exec_name} PROPERTIES
|
||||
POSITION_INDEPENDENT_CODE ON
|
||||
sys_bin_dir ${arg_SYSROOT_PATH})
|
||||
install(TARGETS ${exec_name}
|
||||
DESTINATION ${arg_SYSROOT_PATH})
|
||||
endfunction(rosetta_add_executable)
|
||||
|
||||
function(rosetta_add_library)
|
||||
set(options SHARED)
|
||||
set(one_value_args NAME SYSROOT_PATH)
|
||||
set(multi_value_args
|
||||
SOURCE_DIRS
|
||||
EXTRA_SOURCES)
|
||||
cmake_parse_arguments(PARSE_ARGV 0 arg
|
||||
"${options}"
|
||||
"${one_value_args}"
|
||||
"${multi_value_args}")
|
||||
|
||||
set(lib_name ${arg_NAME})
|
||||
|
||||
get_property(libs GLOBAL PROPERTY rosetta_library_list)
|
||||
set_property(GLOBAL PROPERTY rosetta_library_list ${libs} ${lib_name})
|
||||
|
||||
file(GLOB sources *.c *.h)
|
||||
file(GLOB_RECURSE headers include/*.h)
|
||||
|
||||
foreach (dir ${arg_SOURCE_DIRS})
|
||||
file(GLOB dir_sources ${dir}/*.c ${dir}/*.h)
|
||||
set(sources ${sources} ${dir_sources})
|
||||
endforeach (dir)
|
||||
|
||||
message(STATUS "Building library ${lib_name}")
|
||||
if (arg_SHARED)
|
||||
add_library(${lib_name} SHARED
|
||||
${sources}
|
||||
${headers}
|
||||
${arg_EXTRA_SOURCES})
|
||||
else ()
|
||||
add_library(${lib_name} STATIC
|
||||
${sources}
|
||||
${headers}
|
||||
${arg_EXTRA_SOURCES})
|
||||
endif ()
|
||||
|
||||
target_include_directories(${lib_name} PUBLIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include)
|
||||
set_target_properties(${lib_name} PROPERTIES
|
||||
POSITION_INDEPENDENT_CODE ON
|
||||
src_header_dir ${CMAKE_CURRENT_SOURCE_DIR}/include
|
||||
sys_header_dir ${arg_SYSROOT_PATH}/include
|
||||
sys_bin_dir ${arg_SYSROOT_PATH}/lib
|
||||
PREFIX "")
|
||||
endfunction(rosetta_add_library)
|
||||
Reference in New Issue
Block a user