Update CMake files to compile OpenAMP for Linux
authorWendy Liang <jliang@xilinx.com>
Mon, 15 Aug 2016 22:49:54 +0000 (15:49 -0700)
committerWendy Liang <jliang@xilinx.com>
Thu, 13 Oct 2016 05:01:48 +0000 (22:01 -0700)
This patch is to enable to build OpenAMP for Linux
userspace.

Signed-off-by: Wendy Liang <jliang@xilinx.com>
12 files changed:
CMakeLists.txt
apps/CMakeLists.txt
apps/echo_test/CMakeLists.txt
apps/matrix_multiply/CMakeLists.txt
apps/rpc_demo/CMakeLists.txt
apps/system/generic/machine/zynqmp_r5/CMakeLists.txt
cmake/collect.cmake
cmake/depends.cmake
cmake/modules/FindLibmetal.cmake
cmake/options.cmake
cmake/platforms/zynqmp_linux.cmake
lib/CMakeLists.txt

index 33717c821a6fc209e06feb78d5d9cbaf15edbbcf..dda88a6bf0ace1c3d9c850327cff70363f9df5e4 100644 (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)
index c160063e412d09c039b9e23c9fd62a9bc890deb9..1c87a53d2fd74843d8d46b2b47c2adc540e568c5 100644 (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)
index d58bdbf846ebe8c1ac02fa866dcf148ccfdf845a..8d76d5ad1a5cddcf108b968073922a0be2a2c1c6 100644 (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)
-
-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)
+collector_list (_deps PROJECT_LIB_DEPS)
 
-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)
index adf1684864228c200f7d2fc2187a1f5d611bf460..d7ada392744e7923ce16cca2b1085c1fe1a5acc5 100644 (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)
-
-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)
+collector_list (_deps PROJECT_LIB_DEPS)
 
-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)
 
index ea8f446388f9358542415bc09d7a1d8938b158ab..1103a173fbf31936a36b0dcfb1cf8e8bf3d8ab58 100644 (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})
+get_property (_linker_script GLOBAL PROPERTY APP_LINKER_SCRIPT)
+collector_list (_deps PROJECT_LIB_DEPS)
 
-set_source_files_properties(${_list} PROPERTIES COMPILE_FLAGS "${_cflags}")
+set (OPENAMP_LIB open_amp)
 
-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)
+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}")
 
-install (TARGETS ${_app}.out RUNTIME DESTINATION bin)
+      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)
index 0a7222383caa925e52ce254ee6de4200f05f4bfe..d7a5775b86c01936eaf263b2d258cae5ce862ea3 100644 (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)
index 60d12e698adb5c1ab8fb1dd1a071968cccd41491..d1bd17814cb994b34673ce155e800a39f7f9ddd6 100644 (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 ()
index d8dddac9001313e5355652a76890b5e70fd6d925..477d90340bf52e1f8c524215c6b9d042cb081048 100644 (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")
index 32a945259859334a74bdf7db12c40d1e95259fb1..08666b902bbdffc21de887b113c389aeeee0477f 100644 (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)
index 1a747fa9be5268e37c081ede19af744791ef5bb7..358d8508bb1464929b2352e808007a983ab7cffb 100644 (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
index 9800a6bbf75ede151bdc192171004b0775e239ea..0546f71ce23ada5a2cfe2ed840c2ea01593ebf63 100644 (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)
 
index e72b722e4d61f44067f994815843e5e12e43a036..143053625bf3fec04f5925d4ad153f22180363d2 100644 (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