Update CMake files to compile OpenAMP for Linux

This patch is to enable to build OpenAMP for Linux
userspace.

Signed-off-by: Wendy Liang <jliang@xilinx.com>
This commit is contained in:
Wendy Liang
2016-08-15 15:49:54 -07:00
parent 57e6491957
commit 5614da20ce
12 changed files with 205 additions and 84 deletions

View File

@@ -10,7 +10,7 @@ list (APPEND CMAKE_MODULE_PATH
"${CMAKE_SOURCE_DIR}/cmake/modules"
"${CMAKE_SOURCE_DIR}/cmake/platforms")
project (OpenAMP)
project (open_amp)
enable_language(C ASM)
include (CheckIncludeFiles)

View File

@@ -1,9 +1,8 @@
collector_create (APP_COMMON_SOURCES "")
collector_create (APP_LIB_DIRS "")
collector_create (APP_INC_DIRS "")
collector_create (APP_LIB_DEPS "")
set_property (GLOBAL PROPERTY APP_LIB_DEPS "-lopen_amp")
set_property (GLOBAL APPEND PROPERTY APP_LIB_DEPS "-lmetal")
set (APPS_ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set (APPS_SHARE_DIR "${CMAKE_CURRENT_BINARY_DIR}/share")
@@ -18,11 +17,11 @@ endif (WITH_LINUXREMOTE)
add_subdirectory (echo_test)
add_subdirectory (matrix_multiply)
if (WITH_PROXY)
if (WITH_PROXY_APPS)
if (NOT WITH_REMOTEPROC_MASTER)
add_subdirectory (rpc_demo)
endif (NOT WITH_REMOTEPROC_MASTER)
endif (WITH_PROXY)
endif (WITH_PROXY_APPS)
if (WITH_FUNCTION_TEST_SUITE)
add_subdirectory (func_test_suite)

View File

@@ -1,5 +1,4 @@
set (_app "echo_testd")
set (_cflags "${CMAKE_C_FLAGS} ${APP_EXTRA_C_FLAGS}")
set (_fw_dir "${APPS_SHARE_DIR}")
@@ -11,34 +10,58 @@ collector_list (_list PROJECT_LIB_DIRS)
collector_list (_app_list APP_LIB_DIRS)
link_directories (${_list} ${_app_list})
collector_list (_list APP_COMMON_SOURCES)
if (WITH_REMOTEPROC_MASTER)
list (APPEND _list "${CMAKE_CURRENT_SOURCE_DIR}/echo_testd_remoteproc_master.c")
set (_cflags "${_cflags} -DBAREMETAL_MASTER=1")
else (WITH_REMOTEPROC_MASTER)
list (APPEND _list "${CMAKE_CURRENT_SOURCE_DIR}/echo_testd.c")
endif (WITH_REMOTEPROC_MASTER)
add_executable (${_app}.out ${_list})
set_source_files_properties(${_list} PROPERTIES COMPILE_FLAGS "${_cflags}")
get_property (_linker_script GLOBAL PROPERTY APP_LINKER_SCRIPT)
get_property (_deps GLOBAL PROPERTY APP_LIB_DEPS)
set (_deps "${_deps} ${PLATFORM_LIB_DEPS}")
string (STRIP "${_deps}" _deps)
collector_list (_deps PROJECT_LIB_DEPS)
if (WITH_REMOTEPROC_MASTER)
target_link_libraries(${_app}.out -Wl,-Map=${_app}.map -Wl,--gc-sections -T\"${_linker_script}\" -Wl,--start-group ${_fw_dir}/firmware1.o ${_fw_dir}/firmware2.o ${_deps} -Wl,--end-group)
add_custom_target (${_app}.bin ALL
${CROSS_PREFIX}objcopy -O binary ${_app}.out ${_app}.bin
DEPENDS ${_app}.out)
add_dependencies (${_app}.out ${_fw_dir}/firmware1.o ${_fw_dir}/firmware2.o)
install (FILES "${CMAKE_CURRENT_BINARY_DIR}/${_app}.bin" DESTINATION bin)
else (WITH_REMOTEPROC_MASTER)
target_link_libraries(${_app}.out -Wl,-Map=${_app}.map -Wl,--gc-sections -T\"${_linker_script}\" -Wl,--start-group ${_deps} -Wl,--end-group)
install (TARGETS ${_app}.out RUNTIME DESTINATION bin)
endif (WITH_REMOTEPROC_MASTER)
set (OPENAMP_LIB open_amp)
foreach (_app echo_test echo_testd)
collector_list (_sources APP_COMMON_SOURCES)
set (build_app 1)
if (WITH_REMOTEPROC_MASTER)
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${_app}_remoteproc_master.c")
list (APPEND _sources "${CMAKE_CURRENT_SOURCE_DIR}/${_app}_remoteproc_master.c")
set (_cflags "${_cflags} -DBAREMETAL_MASTER=1")
else ()
set (build_app 0)
endif ()
else (WITH_REMOTEPROC_MASTER)
list (APPEND _sources "${CMAKE_CURRENT_SOURCE_DIR}/${_app}.c")
endif (WITH_REMOTEPROC_MASTER)
if (${build_app} EQUAL "1")
if (WITH_SHARED_LIB)
add_executable (${_app}-shared ${_sources})
target_link_libraries (${_app}-shared ${OPENAMP_LIB}-shared ${_deps})
install (TARGETS ${_app}-shared RUNTIME DESTINATION bin)
endif (WITH_SHARED_LIB)
if (WITH_STATIC_LIB)
if (${PROJECT_SYSTEM} STREQUAL "linux")
add_executable (${_app}-static ${_sources})
target_link_libraries (${_app}-static ${OPENAMP_LIB}-static ${_deps})
install (TARGETS ${_app}-static RUNTIME DESTINATION bin)
else (${PROJECT_SYSTEM})
add_executable (${_app}.out ${_sources})
set_source_files_properties(${_sources} PROPERTIES COMPILE_FLAGS "${_cflags}")
if (WITH_REMOTEPROC_MASTER)
target_link_libraries(${_app}.out -Wl,-Map=${_app}.map -Wl,--gc-sections -T\"${_linker_script}\" -Wl,--start-group ${_fw_dir}/firmware1.o ${_fw_dir}/firmware2.o ${OPENAM__LIB}-static ${_deps} -Wl,--end-group)
add_custom_target (${_app}.bin ALL
${CROSS_PREFIX}objcopy -O binary ${_app}.out ${_app}.bin
DEPENDS ${_app}.out)
add_dependencies (${_app}.out ${_fw_dir}/firmware1.o ${_fw_dir}/firmware2.o)
install (FILES "${CMAKE_CURRENT_BINARY_DIR}/${_app}.bin" DESTINATION bin)
else (WITH_REMOTEPROC_MASTER)
target_link_libraries(${_app}.out -Wl,-Map=${_app}.map -Wl,--gc-sections -T\"${_linker_script}\" -Wl,--start-group ${OPENAMP_LIB}-static ${_deps} -Wl,--end-group)
install (TARGETS ${_app}.out RUNTIME DESTINATION bin)
endif (WITH_REMOTEPROC_MASTER)
endif (${PROJECT_SYSTEM} STREQUAL "linux" )
endif (WITH_STATIC_LIB)
endif (${build_app} EQUAL "1")
endforeach(_app)

View File

@@ -1,5 +1,3 @@
set (_app "matrix_multiplyd")
set (_cflags "${CMAKE_C_FLAGS} ${APP_EXTRA_C_FLAGS}")
set (_fw_dir "${APPS_SHARE_DIR}")
@@ -11,34 +9,58 @@ collector_list (_list PROJECT_LIB_DIRS)
collector_list (_app_list APP_LIB_DIRS)
link_directories (${_list} ${_app_list})
collector_list (_list APP_COMMON_SOURCES)
if (WITH_REMOTEPROC_MASTER)
list (APPEND _list "${CMAKE_CURRENT_SOURCE_DIR}/matrix_multiplyd_remoteproc_master.c")
set (_cflags "${_cflags} -DBAREMETAL_MASTER=1")
else (WITH_REMOTEPROC_MASTER)
list (APPEND _list "${CMAKE_CURRENT_SOURCE_DIR}/matrix_multiplyd.c")
endif (WITH_REMOTEPROC_MASTER)
add_executable (${_app}.out ${_list})
set_source_files_properties(${_list} PROPERTIES COMPILE_FLAGS "${_cflags}")
get_property (_linker_script GLOBAL PROPERTY APP_LINKER_SCRIPT)
get_property (_deps GLOBAL PROPERTY APP_LIB_DEPS)
set (_deps "${_deps} ${PLATFORM_LIB_DEPS}")
string (STRIP "${_deps}" _deps)
collector_list (_deps PROJECT_LIB_DEPS)
if (WITH_REMOTEPROC_MASTER)
target_link_libraries(${_app}.out -Wl,-Map=${_app}.map -Wl,--gc-sections -T\"${_linker_script}\" -Wl,--start-group ${_fw_dir}/firmware1.o ${_fw_dir}/firmware2.o ${_deps} -Wl,--end-group)
add_custom_target (${_app}.bin ALL
${CROSS_PREFIX}objcopy -O binary ${_app}.out ${_app}.bin
DEPENDS ${_app}.out)
add_dependencies (${_app}.out ${_fw_dir}/firmware1.o ${_fw_dir}/firmware2.o)
install (FILES "${CMAKE_CURRENT_BINARY_DIR}/${_app}.bin" DESTINATION bin)
else (WITH_REMOTEPROC_MASTER)
target_link_libraries(${_app}.out -Wl,-Map=${_app}.map -Wl,--gc-sections -T\"${_linker_script}\" -Wl,--start-group ${_deps} -Wl,--end-group)
install (TARGETS ${_app}.out RUNTIME DESTINATION bin)
endif (WITH_REMOTEPROC_MASTER)
set (OPENAMP_LIB open_amp)
foreach (_app matrix_multiply matrix_multiplyd)
collector_list (_sources APP_COMMON_SOURCES)
set (build_app 1)
if (WITH_REMOTEPROC_MASTER)
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${_app}_remoteproc_master.c")
list (APPEND _sources "${CMAKE_CURRENT_SOURCE_DIR}/${_app}_remoteproc_master.c")
set (_cflags "${_cflags} -DBAREMETAL_MASTER=1")
else ()
set (build_app 0)
endif ()
else (WITH_REMOTEPROC_MASTER)
list (APPEND _sources "${CMAKE_CURRENT_SOURCE_DIR}/${_app}.c")
endif (WITH_REMOTEPROC_MASTER)
if (${build_app} EQUAL "1")
if (WITH_SHARED_LIB)
add_executable (${_app}-shared ${_sources})
target_link_libraries (${_app}-shared ${OPENAMP_LIB}-shared ${_deps})
install (TARGETS ${_app}-shared RUNTIME DESTINATION bin)
endif (WITH_SHARED_LIB)
if (WITH_STATIC_LIB)
if (${PROJECT_SYSTEM} STREQUAL "linux")
add_executable (${_app}-static ${_sources})
target_link_libraries (${_app}-static ${OPENAMP_LIB}-static ${_deps})
install (TARGETS ${_app}-static RUNTIME DESTINATION bin)
else (${PROJECT_SYSTEM})
add_executable (${_app}.out ${_sources})
set_source_files_properties(${_sources} PROPERTIES COMPILE_FLAGS "${_cflags}")
if (WITH_REMOTEPROC_MASTER)
target_link_libraries(${_app}.out -Wl,-Map=${_app}.map -Wl,--gc-sections -T\"${_linker_script}\" -Wl,--start-group ${_fw_dir}/firmware1.o ${_fw_dir}/firmware2.o ${OPENAM__LIB}-static ${_deps} -Wl,--end-group)
add_custom_target (${_app}.bin ALL
${CROSS_PREFIX}objcopy -O binary ${_app}.out ${_app}.bin
DEPENDS ${_app}.out)
add_dependencies (${_app}.out ${_fw_dir}/firmware1.o ${_fw_dir}/firmware2.o)
install (FILES "${CMAKE_CURRENT_BINARY_DIR}/${_app}.bin" DESTINATION bin)
else (WITH_REMOTEPROC_MASTER)
target_link_libraries(${_app}.out -Wl,-Map=${_app}.map -Wl,--gc-sections -T\"${_linker_script}\" -Wl,--start-group ${OPENAMP_LIB}-static ${_deps} -Wl,--end-group)
install (TARGETS ${_app}.out RUNTIME DESTINATION bin)
endif (WITH_REMOTEPROC_MASTER)
endif (${PROJECT_SYSTEM} STREQUAL "linux" )
endif (WITH_STATIC_LIB)
endif (${build_app} EQUAL "1")
endforeach(_app)

View File

@@ -1,5 +1,5 @@
set (_app "rpc_demo")
set (_cflags "${CMAKE_C_FLAGS} ${APP_EXTRA_C_FLAGS}")
set (_fw_dir "${APPS_SHARE_DIR}")
collector_list (_list PROJECT_INC_DIRS)
collector_list (_app_list APP_INC_DIRS)
@@ -9,16 +9,38 @@ collector_list (_list PROJECT_LIB_DIRS)
collector_list (_app_list APP_LIB_DIRS)
link_directories (${_list} ${_app_list})
collector_list (_list APP_COMMON_SOURCES)
list (APPEND _list "${CMAKE_CURRENT_SOURCE_DIR}/rpc_demo.c")
add_executable (${_app}.out ${_list})
set_source_files_properties(${_list} PROPERTIES COMPILE_FLAGS "${_cflags}")
get_property (_linker_script GLOBAL PROPERTY APP_LINKER_SCRIPT)
get_property (_deps GLOBAL PROPERTY APP_LIB_DEPS)
set (_deps "${_deps} ${PLATFORM_LIB_DEPS}")
string (STRIP "${_deps}" _deps)
target_link_libraries(${_app}.out -Wl,-Map=echo_test.map -Wl,--gc-sections -T\"${_linker_script}\" -Wl,--start-group ${_deps} -Wl,--end-group)
collector_list (_deps PROJECT_LIB_DEPS)
install (TARGETS ${_app}.out RUNTIME DESTINATION bin)
set (OPENAMP_LIB open_amp)
if (${PROJECT_SYSTEM} STREQUAL "linux")
set (app_list rpc_demod)
else (${PROJECT_SYSTEM})
set (app_list rpc_demo)
endif (${PROJECT_SYSTEM} STREQUAL "linux")
foreach (_app ${app_list})
collector_list (_sources APP_COMMON_SOURCES)
list (APPEND _sources "${CMAKE_CURRENT_SOURCE_DIR}/${_app}.c")
if (WITH_SHARED_LIB)
add_executable (${_app}-shared ${_sources})
target_link_libraries (${_app}-shared ${OPENAMP_LIB}-shared ${_deps})
install (TARGETS ${_app}-shared RUNTIME DESTINATION bin)
endif (WITH_SHARED_LIB)
if (WITH_STATIC_LIB)
if (${PROJECT_SYSTEM} STREQUAL "linux")
add_executable (${_app}-static ${_sources})
target_link_libraries (${_app}-static ${OPENAMP_LIB}-static ${_deps})
install (TARGETS ${_app}-static RUNTIME DESTINATION bin)
else (${PROJECT_SYSTEM})
add_executable (${_app}.out ${_sources})
set_source_files_properties(${_sources} PROPERTIES COMPILE_FLAGS "${_cflags}")
target_link_libraries(${_app}.out -Wl,-Map=${_app}.map -Wl,--gc-sections -T\"${_linker_script}\" -Wl,--start-group ${OPENAMP_LIB}-static ${_deps} -Wl,--end-group)
install (TARGETS ${_app}.out RUNTIME DESTINATION bin)
endif (${PROJECT_SYSTEM} STREQUAL "linux" )
endif (WITH_STATIC_LIB)
endforeach(_app)

View File

@@ -12,3 +12,7 @@ set_property (GLOBAL PROPERTY APP_LINKER_SCRIPT "${_linker_script}")
find_library(LIBXIL_LIB NAMES xil PATHS ${CMAKE_FIND_ROOT_PATH})
get_filename_component(LIBXIL_LIB_DIR ${LIBXIL_LIB} DIRECTORY)
collect(PROJECT_LIB_DIRS ${LIBXIL_LIB_DIR})
collect(PROJECT_LIB_DEPS xil)
collect(PROJECT_LIB_DEPS c)
collect(PROJECT_LIB_DEPS m)

View File

@@ -18,9 +18,14 @@ function (collect name)
string(COMPARE NOTEQUAL "${_base}" "" _is_rel)
set (_list)
foreach (s IN LISTS ARGN)
get_filename_component (s "${s}" ABSOLUTE)
if (_is_rel)
get_filename_component (s "${s}" ABSOLUTE)
file (RELATIVE_PATH s "${_base}" "${s}")
else (_is_rel)
get_filename_component (ts "${s}" ABSOLUTE)
if (EXISTS "${ts}")
set (s "${ts}")
endif (EXISTS "${ts}")
endif (_is_rel)
list (APPEND _list "${s}")
endforeach ()

View File

@@ -1,9 +1,11 @@
find_package (Libmetal REQUIRED)
collect (PROJECT_INC_DIRS "${LIBMETAL_INCLUDE_DIR}")
collect (PROJECT_LIB_DIRS "${LIBMETAL_LIB_DIR}")
collect (PROJECT_LIB_DEPS "${LIBMETAL_LIB}")
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
check_include_files (stdatomic.h HAVE_STDATOMIC_H)
else ("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
set (_saved_cmake_required_flags ${CMAKE_REQUIRED_FLAGS})
set (CMAKE_REQUIRED_FLAGS "-c")

View File

@@ -19,4 +19,13 @@ find_path(LIBMETAL_INCLUDE_DIR NAMES metal/sys.h PATHS ${CMAKE_FIND_ROOT_PATH})
find_library(LIBMETAL_LIB NAMES metal PATHS ${CMAKE_FIND_ROOT_PATH})
get_filename_component(LIBMETAL_LIB_DIR ${LIBMETAL_LIB} DIRECTORY)
mark_as_advanced (LIBMETAL_INCLUDE_DIR LIBMETAL_LIB_DIR)
# handle the QUIETLY and REQUIRED arguments and set HUGETLBFS_FOUND to TRUE if
# all listed variables are TRUE
include (FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS (LIBMETAL DEFAULT_MSG LIBMETAL_LIB LIBMETAL_INCLUDE_DIR)
if (LIBMETAL_FOUND)
set (LIBMETAL_LIBS ${LIBMEAL_LIB})
endif (LIBMETAL_FOUND)
mark_as_advanced (LIBMETAL_LIB LIBMETAL_INCLUDE_DIR LIBMETAL_LIB_DIR)

View File

@@ -34,7 +34,13 @@ endif (WITH_REMOTEPROC_MASTER)
# Select which components are in the openamp lib
option (WITH_PROXY "Build with proxy(access device controlled by other processor)" ON)
option (WITH_APPS "Build with sample applicaitons" OFF)
option (WITH_PROXY_APPS "Build with proxy sample applicaitons" OFF)
if (WITH_APPS)
if (WITH_PROXY)
set (WITH_PROXY_APPS ON)
elseif ("${PROJECT_SYSTEM}" STREQUAL "linux")
set (WITH_PROXY_APPS ON)
endif (WITH_PROXY)
option (WITH_BENCHMARK "Build benchmark app" OFF)
endif (WITH_APPS)
option (WITH_OBSOLETE "Build obsolete system libs" OFF)
@@ -50,5 +56,11 @@ if (WITH_BENCHMARK)
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DOPENAMP_BENCHMARK_ENABLE")
endif (WITH_BENCHMARK)
option (WITH_STATIC_LIB "Build with a static library" ON)
if ("${PROJECT_SYSTEM}" STREQUAL "linux")
option (WITH_SHARED_LIB "Build with a shared library" ON)
endif ("${PROJECT_SYSTEM}" STREQUAL "linux")
message ("-- C_FLAGS : ${CMAKE_C_FLAGS}")
# vim: expandtab:ts=2:sw=2:smartindent

View File

@@ -1,5 +1,6 @@
set (CMAKE_SYSTEM_PROCESSOR "arm64")
set (CROSS_PREFIX "aarch64-linux-gnu-")
set (MACHINE "zynqmp_a53" CACHE STRING "")
include (cross-linux-gcc)

View File

@@ -7,6 +7,7 @@ collect (PROJECT_INC_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/include")
collect (PROJECT_INC_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/include/openamp/machine/${PROJECT_MACHINE}")
collect (PROJECT_INC_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/include/openamp/system/${PROJECT_SYSTEM}/machine/${PROJECT_MACHINE}")
add_subdirectory (common)
add_subdirectory (virtio)
add_subdirectory (rpmsg)
@@ -19,18 +20,39 @@ add_subdirectory (system)
set (OPENAMP_LIB open_amp)
collector_list (_list PROJECT_INC_DIRS)
collector_list (_include PROJECT_INC_DIRS)
include_directories (${_include})
include_directories (${_list} ${LIBMETAL_INCLUDE_DIR})
collector_list (_deps PROJECT_LIB_DEPS)
get_property (_ecflags GLOBAL PROPERTY "PROJECT_LIB_EXTRA_CFLAGS")
collector_list (_list PROJECT_LIB_SOURCES)
set_property (SOURCE ${_list}
collector_list (_sources PROJECT_LIB_SOURCES)
set_property (SOURCE ${_sources}
APPEND_STRING PROPERTY COMPILE_FLAGS " ${_ecflags}")
add_library (${OPENAMP_LIB} STATIC ${_list})
install (TARGETS ${OPENAMP_LIB} ARCHIVE DESTINATION lib)
# Build a shared library if so configured.
if (WITH_SHARED_LIB)
set (_lib ${OPENAMP_LIB}-shared)
add_library (${_lib} SHARED ${_sources})
target_link_libraries (${_lib} ${_deps})
install (TARGETS ${_lib} LIBRARY DESTINATION lib)
set_target_properties (${_lib} PROPERTIES
OUTPUT_NAME "${OPENAMP_LIB}"
VERSION "${PROJECT_VER}"
SOVERSION "${PROJECT_VER_MAJOR}"
)
endif (WITH_SHARED_LIB)
if (WITH_STATIC_LIB)
set (_lib ${OPENAMP_LIB}-static)
add_library (${_lib} STATIC ${_sources})
install (TARGETS ${_lib} ARCHIVE DESTINATION lib)
set_target_properties (${_lib} PROPERTIES
OUTPUT_NAME "${OPENAMP_LIB}"
)
endif (WITH_STATIC_LIB)
install (DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/openamp" DESTINATION include)
# vim: expandtab:ts=2:sw=2:smartindent