This commit is contained in:
admin
2026-06-22 15:35:18 +08:00
commit 74e4f32cdf
6014 changed files with 589981 additions and 0 deletions
@@ -0,0 +1,116 @@
cmake_minimum_required(VERSION 3.5)
#声明编译环境
get_filename_component(MY_DIR_NAME "${CMAKE_SOURCE_DIR}" NAME)
#设备类型宏定义
include($ENV{PROJECT_ROOT}/build/cmake/detect_target_product.cmake)
# 定义宏 POWEROAD_COMPILED_LIB
add_compile_definitions(POWEROAD_COMPILED_LIB)
#指定模块/程序名称 #-- 强制使用g++
project(${MY_DIR_NAME} LANGUAGES CXX)
set(SRC_DIR "./")
message("--------------------------------cmake start [${PROJECT_NAME}]--------------------------------")
set(CURRENT_VERSION "${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}")
#通用编译选项
list(APPEND generic_compile_flags "-fPIC" "-rdynamic" "-Wno-psabi" "-Wno-unused-result" "-Wno-narrowing")
#根据环境变量配置编译参数
if ($ENV{pd_complier_name} STREQUAL "complier_arm")
#配置处理器
set(CMAKE_SYSTEM_PROCESSOR arm)
else()
#配置处理器
set(CMAKE_SYSTEM_PROCESSOR arm64)
endif()
# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
#配置系统名称
set(CMAKE_SYSTEM_NAME Linux)#配置编译器
message("-- Ready to set ${TARGET_PRODUCT} compile flags: $ENV{arm_compile_flags}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} $ENV{arm_compile_flags}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} $ENV{arm_compile_flags}")
#配置sysroot路径
set(CMAKE_SYSROOT $ENV{arm_sysroot_path})
message("-- Ready to set ${TARGET_PRODUCT} sysroot path: $ENV{arm_sysroot_path}")
#根据编译器类型,声明导出库路径
set(LIB_A_PATH "$ENV{PROJECT_ROOT}/out/$ENV{TARGET_PRODUCT}/lib/lib_a")
set(LIB_SO_PATH "$ENV{PROJECT_ROOT}/out/$ENV{TARGET_PRODUCT}/lib/lib_so")
#配置输出目录
set(LIB_EXE_OUT_PATH "$ENV{PROJECT_ROOT}/out/$ENV{TARGET_PRODUCT}/bin")
message("-- Ready to set ${TARGET_PRODUCT} LIB_EXE_OUT_PATH: $ENV{LIB_EXE_OUT_PATH}")
#配置查找路径
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
#设置debug模式,断点有用
set(CMAKE_BUILD_TYPE "Release") #Debug/Release
#依赖头文件路径
include_directories(${CMAKE_SOURCE_DIR}/../../../include/public
${CMAKE_SOURCE_DIR}/../../../include/interface
${CMAKE_SOURCE_DIR}/../../../include/open
${CMAKE_SOURCE_DIR}/../../../include/general_type
${CMAKE_SOURCE_DIR}/../../../include/dev_model
${CMAKE_SOURCE_DIR}/../../../include/tinyxml2
${CMAKE_SOURCE_DIR}/../../../include/utility
${CMAKE_SOURCE_DIR}/include
)
#待编译源文件
file(GLOB_RECURSE SELF_SRC ${CMAKE_SOURCE_DIR}/src/*.cpp)
#动态库输出路径
set(LIBRARY_OUTPUT_PATH ${LIB_SO_PATH})
#依赖库路径:cmake版本小于3.13,则利用link_directories
if (${CURRENT_VERSION} STRLESS "3.13")
link_directories(${LIB_A_PATH})
link_directories(${LIB_SO_PATH})
endif()
#生成动态库.so文件:link_directories需在add_library之前,否则不生效
add_library(${PROJECT_NAME} SHARED ${SELF_SRC})
#依赖库路径:cmake版本大于等于3.13,则利用target_link_directories
if (${CURRENT_VERSION} STRGREATER_EQUAL "3.13")
target_link_directories(${PROJECT_NAME} PUBLIC ${LIB_A_PATH})
target_link_directories(${PROJECT_NAME} PUBLIC ${LIB_SO_PATH})
endif()
#设置编译选项
message("-- Ready to set generic compile flags: ${generic_compile_flags}")
target_compile_options(${PROJECT_NAME} PRIVATE ${generic_compile_flags})
# 在Release模式下,添加自定义命令来strip动态库
set(TARGET_PATH ${LIBRARY_OUTPUT_PATH}/lib${PROJECT_NAME}.so)
if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND $ENV{STRIP} -s ${TARGET_PATH}
COMMENT "Stripping symbols from ${TARGET_PATH}"
)
endif()
# 设置第二个输出路径,使用自定义命令复制文件
add_custom_command(
TARGET ${PROJECT_NAME}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${PROJECT_NAME}> $ENV{BOARD_DIR}/lib
)
+88
View File
@@ -0,0 +1,88 @@
#!/bin/bash
cd "$(dirname "$(readlink -f "$0")")"
script_name=$(basename "$0")
#if [ "$0" = "$script_name" ]; then echo "脚本被自身调用,请检查无效路径"; exit 1 ;fi
# 显示脚本执行时间
start_time=$(date +%s); trap 'echo "$(print_execution_time $?)"' EXIT
# 计算并打印脚本执行时间函数
function print_execution_time {
end_time=$(date +%s); execution_time=$((end_time - start_time)); execution_time_formatted=$(date -u -d @$execution_time +"%T")
if [ $1 -eq 0 ];then SET_COLOR="\e[32m "; else SET_COLOR="\e[31m error at $(pwd) \n\e[1m"; fi
mydir_name="$(d=$(pwd); echo ${d##*/})"
echo -e "${SET_COLOR} [$1] 执行时间:$execution_time_formatted ( $mydir_name )\e[0m "
}
current_project_path=$(pwd)
export current_project_name=`echo ${current_project_path##*/}`
echo "current_project_path = ${current_project_path}"
echo "====================================================build shell start [ ${current_project_name} ]===================================================="
pd_complier_type=${TARGET_PRODUCT}
if [ -z ${TARGET_PRODUCT} ];then
PROJECT_ROOT=$(while [ ! -f "build/envsetup.sh" ]; do [ "$(pwd)" = "/" ] && exit 1; cd ..; done; pwd)
if [ ! -z ${PROJECT_ROOT} ];then
source ${PROJECT_ROOT}/build/envsetup.sh && lunch LAST
if [ $? -eq 255 ];then exit 0; fi
pd_complier_type=${TARGET_PRODUCT}
fi
fi
echo -e " ready to build\e[34;1m ${pd_complier_type} \e[0m target [\e[34;1m ${current_project_name}\e[0m ] ......"
unset LD_LIBRARY_PATH
export pd_complier_name="$(if [[ "${TARGET_PRODUCT}" =~ "imx"* ]]; then echo "complier_arm"; else echo "complier_x86"; fi)"
export arm_sysroot_path=${SYSROOT}
export arm_compile_flags=${CFLAGS}
echo "============================build shell start [lib${current_project_name}]===================================================="
# set obj at: platform/out/build/xxxx/build
check_dirs() { # check dir: process/ script/
local dir="$1"; if [[ -d "$dir/process" && -d "$dir/script" ]]; then echo "$dir"; exit 0;fi
local parent="${dir%/*}"; if [[ "$parent" != "$dir" ]]; then check_dirs "$parent"; else echo "$(pwd)"; fi
}
base_folder="$(echo ${PROJECT_ROOT}|tr -s '/')"
if [[ $current_project_path =~ "$base_folder" ]] && [ ! -z $base_folder ]; then
echo ""
else
echo "base_folder = $base_folder"
echo "current_project_path = $current_project_path"
echo -e "\e[31m Error: 环境配置不匹配,在当前项目下请重新配置:\n\e[35m\t source build/envsetup.sh \e[0m"
exit -2
fi
build_path=$(echo "$current_project_path" | sed "s|${base_folder}|${base_folder}/out/build/${pd_complier_type}/|g")
echo "build_path = ${build_path}"
if [[ $1 == "clean" ]] || [[ $1 == "-c" ]] || [[ $1 == "all" ]];then
if [[ "$build_path" == *"/out/build/"* ]]; then
rm -rvf ${build_path}
else
if [ -d ${build_path} ];then
find "${build_path}" -name '*.o' -print0 | xargs -r0 rm -f
find ${build_path} -name 'cmake_install.cmake' -print0 | xargs -r0 rm -f
find ${build_path} -name 'CMakeCache.txt' -print0 | xargs -r0 rm -f
find ${build_path} -type d -name 'CMakeFiles' -print0 | xargs -r0 rm -rf
fi
fi
echo " clean done."
echo "====================================================build shell end [lib${current_project_name}]===================================================="
if [[ $1 != "all" ]];then exit 0; fi
fi
# build path
mkdir -p ${build_path}
cmake -B ${build_path}
echo "----------------make start----------------"
cmake --build "${build_path}" -j4 || exit $?
echo "===============================build shell end [lib${current_project_name}] [${pd_complier_type}]===================================================="
+22
View File
@@ -0,0 +1,22 @@
MYNAME = $(notdir $(CURDIR))
.PHONY: build all clean run
build:
./build.sh $@
all: clean
./build.sh $@
#rebuild: clean build
# ./build.sh clean && ./build.sh
clean:
./build.sh clean
run: build
../../board_dir/bin/$(MYNAME)
Binary file not shown.