############################################################################
#
# Copyright (c) PX4 Development Team. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# . Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# . Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
# . Neither the name PX4 nor the names of its contributors may be
# used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
############################################################################ #=============================================================================
#
# Defined functions in this file
#
# OS Specific Functions
#
# * px4_posix_add_firmware
# * px4_posix_generate_builtin_commands
# * px4_posix_add_export
# * px4_posix_generate_romfs
#
# Required OS Interface Functions
#
# * px4_os_add_flags
# * px4_os_prebuild_targets
# include(common/px4_base)
list(APPEND CMAKE_MODULE_PATH ${PX4_SOURCE_DIR}/cmake/posix) #=============================================================================
#
# px4_posix_generate_builtin_commands
#
# This function generates the builtin_commands.c src for posix
#
# Usage:
# px4_posix_generate_builtin_commands(
# MODULE_LIST <in-list>
# OUT <file>)
#
# Input:
# MODULE_LIST : list of modules
#
# Output:
# OUT : stem of generated apps.cpp/apps.h ("apps")
#
# Example:
# px4_posix_generate_builtin_commands(
# OUT <generated-src> MODULE_LIST px4_simple_app)
#
function(px4_posix_generate_builtin_commands)
px4_parse_function_args(
NAME px4_posix_generate_builtin_commands
ONE_VALUE OUT
MULTI_VALUE MODULE_LIST
REQUIRED MODULE_LIST OUT
ARGN ${ARGN}) set(builtin_apps_string)
set(builtin_apps_decl_string)
set(command_count )
foreach(module ${MODULE_LIST})
# default
set(MAIN_DEFAULT MAIN-NOTFOUND)
set(STACK_DEFAULT )
set(PRIORITY_DEFAULT SCHED_PRIORITY_DEFAULT)
foreach(property MAIN STACK PRIORITY)
get_target_property(${property} ${module} ${property})
if(NOT ${property})
set(${property} ${${property}_DEFAULT})
endif()
endforeach()
if (MAIN)
set(builtin_apps_string
"${builtin_apps_string}\tapps[\"${MAIN}\"] = ${MAIN}_main;\n")
set(builtin_apps_decl_string
"${builtin_apps_decl_string}int ${MAIN}_main(int argc, char *argv[]);\n")
math(EXPR command_count "${command_count}+1")
endif()
endforeach()
configure_file(${PX4_SOURCE_DIR}/src/platforms/apps.cpp.in ${OUT}.cpp)
configure_file(${PX4_SOURCE_DIR}/src/platforms/apps.h.in ${OUT}.h)
endfunction() #=============================================================================
#
# px4_os_add_flags
#
# Set the posix build flags.
#
# Usage:
# px4_os_add_flags(
# C_FLAGS <inout-variable>
# CXX_FLAGS <inout-variable>
# OPTIMIZATION_FLAGS <inout-variable>
# EXE_LINKER_FLAGS <inout-variable>
# INCLUDE_DIRS <inout-variable>
# LINK_DIRS <inout-variable>
# DEFINITIONS <inout-variable>)
#
# Input:
# BOARD : flags depend on board/posix config
#
# Input/Output: (appends to existing variable)
# C_FLAGS : c compile flags variable
# CXX_FLAGS : c++ compile flags variable
# OPTIMIZATION_FLAGS : optimization compile flags variable
# EXE_LINKER_FLAGS : executable linker flags variable
# INCLUDE_DIRS : include directories
# LINK_DIRS : link directories
# DEFINITIONS : definitions
#
# Note that EXE_LINKER_FLAGS is not suitable for adding libraries because
# these flags are added before any of the object files and static libraries.
# Add libraries in src/firmware/posix/CMakeLists.txt.
#
# Example:
# px4_os_add_flags(
# C_FLAGS CMAKE_C_FLAGS
# CXX_FLAGS CMAKE_CXX_FLAGS
# OPTIMIZATION_FLAGS optimization_flags
# EXE_LINKER_FLAG CMAKE_EXE_LINKER_FLAGS
# INCLUDES <list>)
#
function(px4_os_add_flags) set(inout_vars
C_FLAGS CXX_FLAGS OPTIMIZATION_FLAGS EXE_LINKER_FLAGS INCLUDE_DIRS LINK_DIRS DEFINITIONS) px4_parse_function_args(
NAME px4_os_add_flags
ONE_VALUE ${inout_vars} BOARD
REQUIRED ${inout_vars} BOARD
ARGN ${ARGN}) px4_add_common_flags(
BOARD ${BOARD}
C_FLAGS ${C_FLAGS}
CXX_FLAGS ${CXX_FLAGS}
OPTIMIZATION_FLAGS ${OPTIMIZATION_FLAGS}
EXE_LINKER_FLAGS ${EXE_LINKER_FLAGS}
INCLUDE_DIRS ${INCLUDE_DIRS}
LINK_DIRS ${LINK_DIRS}
DEFINITIONS ${DEFINITIONS}) set(added_include_dirs
src/platforms/posix/include
) # This block sets added_definitions and added_cxx_flags.
if(UNIX AND APPLE)
set(added_definitions
-D__PX4_POSIX
-D__PX4_DARWIN
-D__DF_DARWIN
-Dnoreturn_function=__attribute__\(\(noreturn\)\)
) set(added_cxx_flags) if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0)
message(FATAL_ERROR "PX4 Firmware requires XCode 8 or newer on Mac OS. Version installed on this system: ${CMAKE_CXX_COMPILER_VERSION}")
endif() EXEC_PROGRAM(uname ARGS -v OUTPUT_VARIABLE DARWIN_VERSION)
STRING(REGEX MATCH "[0-9]+" DARWIN_VERSION ${DARWIN_VERSION})
# message(STATUS "PX4 Darwin Version: ${DARWIN_VERSION}")
if (DARWIN_VERSION LESS )
list(APPEND added_definitions
-DCLOCK_MONOTONIC=
-DCLOCK_REALTIME=
-D__PX4_APPLE_LEGACY
)
endif() else() set(added_definitions
-D__PX4_POSIX
-D__PX4_LINUX
-D__DF_LINUX
-Dnoreturn_function=__attribute__\(\(noreturn\)\)
) # Use -pthread For linux/g++.
set(added_cxx_flags
-pthread
) endif() set(added_exe_linker_flags) # This block sets added_c_flags (appends to others).
if ("${BOARD}" STREQUAL "eagle") if ("$ENV{HEXAGON_ARM_SYSROOT}" STREQUAL "")
message(FATAL_ERROR "HEXAGON_ARM_SYSROOT not set")
else()
set(HEXAGON_ARM_SYSROOT $ENV{HEXAGON_ARM_SYSROOT})
endif() # Add the toolchain specific flags
set(added_cflags ${POSIX_CMAKE_C_FLAGS} --sysroot=${HEXAGON_ARM_SYSROOT}) list(APPEND added_cxx_flags
${POSIX_CMAKE_CXX_FLAGS}
--sysroot=${HEXAGON_ARM_SYSROOT}
) list(APPEND added_exe_linker_flags
-Wl,-rpath-link,${HEXAGON_ARM_SYSROOT}/usr/lib
-Wl,-rpath-link,${HEXAGON_ARM_SYSROOT}/lib
--sysroot=${HEXAGON_ARM_SYSROOT}
)
# This block sets added_c_flags (appends to others).
elseif ("${BOARD}" STREQUAL "excelsior") if ("$ENV{HEXAGON_ARM_SYSROOT}" STREQUAL "")
message(FATAL_ERROR "HEXAGON_ARM_SYSROOT not set")
else()
set(HEXAGON_ARM_SYSROOT $ENV{HEXAGON_ARM_SYSROOT})
endif() # Add the toolchain specific flags set(added_cflags ${POSIX_CMAKE_C_FLAGS} --sysroot=${HEXAGON_ARM_SYSROOT}/lib32-apq8096 -mfloat-abi=softfp -mfpu=neon -mthumb-interwork) list(APPEND added_cxx_flags
${POSIX_CMAKE_CXX_FLAGS}
--sysroot=${HEXAGON_ARM_SYSROOT}/lib32-apq8096 -mfloat-abi=softfp -mfpu=neon -mthumb-interwork ) list(APPEND added_exe_linker_flags
-Wl,-rpath-link,${HEXAGON_ARM_SYSROOT}/lib32-apq8096/usr/lib
-Wl,-rpath-link,${HEXAGON_ARM_SYSROOT}/lib32-apq8096/lib --sysroot=${HEXAGON_ARM_SYSROOT}/lib32-apq8096 -mfloat-abi=softfp -mfpu=neon -mthumb-interwork )
elseif ("${BOARD}" STREQUAL "rpi")
SET(RPI_COMPILE_FLAGS
-mcpu=cortex-a53
-mfpu=neon
-mfloat-abi=hard
)
LIST(APPEND added_c_flags ${RPI_COMPILE_FLAGS})
LIST(APPEND added_cxx_flags ${RPI_COMPILE_FLAGS}) FIND_PROGRAM(CXX_COMPILER_PATH ${CMAKE_CXX_COMPILER}) GET_FILENAME_COMPONENT(CXX_COMPILER_PATH ${CXX_COMPILER_PATH} DIRECTORY)
GET_FILENAME_COMPONENT(CXX_COMPILER_PATH "${CXX_COMPILER_PATH}/../" ABSOLUTE) IF ("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
set(CLANG_COMPILE_FLAGS
--target=arm-pc-linux-gnueabihf
-ccc-gcc-name arm-linux-gnueabihf-gcc
--sysroot=${CXX_COMPILER_PATH}/arm-linux-gnueabihf/libc
-I${CXX_COMPILER_PATH}/arm-linux-gnueabihf/libc/usr/include/
) set(added_c_flags ${POSIX_CMAKE_C_FLAGS} ${CLANG_COMPILE_FLAGS})
list(APPEND added_cxx_flags ${POSIX_CMAKE_CXX_FLAGS} ${CLANG_COMPILE_FLAGS})
list(APPEND added_exe_linker_flags ${POSIX_CMAKE_EXE_LINKER_FLAGS} ${CLANG_COMPILE_FLAGS}
-B${CXX_COMPILER_PATH}/arm-linux-gnueabihf/libc/usr/lib
-L${CXX_COMPILER_PATH}/arm-linux-gnueabihf/libc/usr/lib
)
ENDIF()
endif() # output
foreach(var ${inout_vars})
string(TOLOWER ${var} lower_var)
#message(STATUS "posix: set(${${var}} ${${${var}}} ${added_${lower_var}} PARENT_SCOPE)")
set(${${var}} ${${${var}}} ${added_${lower_var}} PARENT_SCOPE)
endforeach() endfunction() #=============================================================================
#
# px4_os_prebuild_targets
#
# This function generates os dependent targets
#
# Usage:
# px4_os_prebuild_targets(
# OUT <out-list_of_targets>
# BOARD <in-string>
# )
#
# Input:
# BOARD : board
# THREADS : number of threads for building
#
# Output:
# OUT : the target list
#
# Example:
# px4_os_prebuild_targets(OUT target_list BOARD px4fmu-v2)
#
function(px4_os_prebuild_targets)
px4_parse_function_args(
NAME px4_os_prebuild_targets
ONE_VALUE OUT BOARD THREADS
REQUIRED OUT BOARD
ARGN ${ARGN})
add_custom_target(${OUT})
endfunction()

最新文章

  1. WPF中弹出菜单
  2. 剑指Offer面试题:2.二维数组中的查找
  3. [ASP.NET MVC 小牛之路]10 - Controller 和 Action (2)
  4. 【2016-11-10】【坚持学习】【Day23】【Socket 编程初步了解】
  5. PHP获取当前页面的URL
  6. C++模拟C#事件委托机制(二)
  7. 作品-系统-[原生开发]新蓝景CRM管理系统
  8. MAC地址,使用java获取IP地址和MAC地址。
  9. 机器学习&amp;&amp;数据挖掘之一:决策树基础认识
  10. 关于js的那些事儿
  11. spring管理事务需要注意的
  12. 商城项目实战 | 2.1 Android 仿京东商城——自定义 Toolbar (一)
  13. 【Data Visual】一文搞懂matplotlib数据可视化
  14. .Net版InfluxDB客户端使用时的一些坑
  15. 牛刀小试——记一次帮朋友小幅优化SQL
  16. ipv6地址抓包分析
  17. react中的this.setState()
  18. Phonics 自然拼读法 g, o, u, l, f, b Teacher:Lamb
  19. 【BZOJ2870】最长道路(边分治)
  20. mina使用总结

热门文章

  1. 小鱼易连 for mac如何使用?小鱼易连 mac版使用教程
  2. 二分图最大权匹配——KM算法
  3. 重磅发布!阿里云推PostgreSQL 10 高可用版
  4. PIC16F877A的TIME0学习
  5. paper 135:关于C#泛型的知识点
  6. MVC MVC3中 ViewBag、ViewData和TempData的使用和区别 【转】
  7. VMware 虚拟机NAT模式如何设置网络连接,从头到尾全过程~!!
  8. Ubuntu18.04 禁用笔记本电脑键盘
  9. nginx 配置反向代理和静态资源
  10. redis的一些特性