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
+147
View File
@@ -0,0 +1,147 @@
cmake_minimum_required(VERSION 3.5)
#声明编译环境
get_filename_component(MY_DIR_NAME "${CMAKE_SOURCE_DIR}" NAME)
# 定义宏 POWEROAD_COMPILED_LIB
add_compile_definitions(POWEROAD_COMPILED_LIB)
#指定模块/程序名称 #-- 强制使用g++
project(${MY_DIR_NAME})
set(SRC_DIR "./")
message("--------------------------------cmake start [${PROJECT_NAME}]--------------------------------")
set(CURRENT_VERSION "${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}")
#通用编译选项
list(APPEND generic_compile_flags "-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)
# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
endif()
#配置系统名称
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
#依赖头文件路径
#--------------------设置.h与.c文件路径-----------------------------------
#设置所有include 相关路径
include_directories(${CMAKE_SOURCE_DIR}/../../../include #公共include
${CMAKE_SOURCE_DIR}/../../../include/dev_model #公共include
${CMAKE_SOURCE_DIR}/../../../include/general_type #公共include
${CMAKE_SOURCE_DIR}/inc #自有include
)
# 查找src目录下的所有*.cpp,*.c源文件,并将文件列表保存到 DIR_LIB_SRCS 变量
# 递归地查找所有.cpp文件
file(GLOB_RECURSE CPP_SOURCES ${CMAKE_SOURCE_DIR}/${SRC_DIR}/*.cpp )
# 递归地查找所有.c文件 #实测没用,只能编cpp
file(GLOB_RECURSE C_SOURCES ${CMAKE_SOURCE_DIR}/${SRC_DIR}/*.c)
# 将两者合并到SRC_LIST列表中
set(SRC_LIST ${C_SOURCES} ${CPP_SOURCES} )
# 排除 demo/ 目录下的所有文件
foreach(SOURCE IN LISTS SRC_LIST)
if("${SOURCE}" MATCHES ".*/demo/.*" OR "${SOURCE}" MATCHES ".*/build/.*")
list(REMOVE_ITEM SRC_LIST ${SOURCE})
endif()
endforeach()
#message("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n ${SRC_LIST} \n################################################")
# 提取current目录的父目录名称
get_filename_component(PARENT_DIR "${CMAKE_SOURCE_DIR}" PATH)
get_filename_component(PARENT_DIR_NAME "${PARENT_DIR}" NAME)
# 根据父目录名称决定编译为静态库还是动态库
if("${PARENT_DIR_NAME}" STREQUAL "a_src")
message("=========.a=======PARENT_DIR_NAME = ${PARENT_DIR_NAME}")
#--------------------设置输出静态库-----------------------------------
#设置生成目录
set(LIBRARY_OUTPUT_PATH ${LIB_A_PATH})
#生成静态库.a文件
add_library(${PROJECT_NAME} STATIC ${SRC_LIST})
#设置编译选项
message("-- Ready to set generic compile flags: ${generic_compile_flags}")
target_compile_options(${PROJECT_NAME} PRIVATE ${generic_compile_flags})
elseif("${PARENT_DIR_NAME}" STREQUAL "so_src")
message("=========.so=======PARENT_DIR_NAME = ${PARENT_DIR_NAME}")
#动态库输出路径
set(LIBRARY_OUTPUT_PATH ${LIB_SO_PATH})
add_library(${PROJECT_NAME} SHARED ${SRC_LIST})
#设置编译选项
message("-- Ready to set generic compile flags: ${generic_compile_flags}")
target_compile_options(${PROJECT_NAME} PRIVATE ${generic_compile_flags} "-fPIC")
# =========================设置输出路径 ===============================
# #生成动态库.so文件
message(" PROJECT_NAME= ${PROJECT_NAME}")
set_target_properties(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${LIB_SO_PATH})
# 在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 make_directory $ENV{BOARD_DIR}/lib/
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${PROJECT_NAME}> $ENV{BOARD_DIR}/lib
)
else()
message("=========.exc=======PARENT_DIR_NAME = ${PARENT_DIR_NAME}")
message(FATAL_ERROR "${PARENT_DIR_NAME} directory not found in expected locations.")
endif()
+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}]===================================================="
Binary file not shown.
Binary file not shown.
+172
View File
@@ -0,0 +1,172 @@
cmake_minimum_required(VERSION 3.10)
#声明编译环境
get_filename_component(MY_DIR_NAME "${CMAKE_SOURCE_DIR}" NAME)
#指定模块/程序名称 #-- 强制使用g++
project(${MY_DIR_NAME} LANGUAGES CXX)
# 设置全局编译选项
set(SRC_DIR "./")
#设置编译器以及输出文件路径
message("------cmake start [${PROJECT_NAME}] ---------[${CMAKE_SOURCE_DIR}]-----------------------")
set(CURRENT_VERSION "${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}")
#通用编译选项
list(APPEND generic_compile_flags "-fPIC" "-rdynamic" "-Wno-psabi" "-Wno-unused-result" "-Wno-narrowing")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
#根据环境变量配置编译参数
if ($ENV{pd_complier_name} STREQUAL "complier_arm")
#配置处理器
set(CMAKE_SYSTEM_PROCESSOR arm)
else()
#配置处理器
set(CMAKE_SYSTEM_PROCESSOR arm64)
# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
endif()
#配置系统名称
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")
message("-- Ready to set LIB_A_PATH: ${LIB_A_PATH}")
message("-- Ready to set LIB_SO_PATH: ${LIB_SO_PATH}")
#配置输出目录
set(LIB_EXE_OUT_PATH "$ENV{PROJECT_ROOT}/out/$ENV{TARGET_PRODUCT}/bin")
message("-- Ready to set LIB_EXE_OUT_PATH: ${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
#--------------------设置库函数路径--静态库+动态库-----------------------------------
set(LIB ${LIB_A_PATH} #静态库
${LIB_SO_PATH} #动态库
)
link_directories(${LIB})
#--------------------设置.h与.c文件路径-----------------------------------
#依赖头文件路径
#设置所有include 相关路径
include_directories(${CMAKE_SOURCE_DIR}/../../../../include #外部头文件
${CMAKE_SOURCE_DIR}/../../../../include/dev_model
${CMAKE_SOURCE_DIR}/../../../../include/sys_model
${CMAKE_SOURCE_DIR}/../../../../include/general_type
${CMAKE_SOURCE_DIR}/../../../../include/alarm_code
#库文件
${CMAKE_SOURCE_DIR}/../../../../lib_src/so_src/prfce/inc
${CMAKE_SOURCE_DIR}/../../../../lib_src/so_src/prpublicmemory/inc
${CMAKE_SOURCE_DIR}/../../../../lib_src/so_src/prlog/inc
${CMAKE_SOURCE_DIR}/../../../../lib_src/so_src/prxml/inc
${CMAKE_SOURCE_DIR}/../../../../lib_src/so_src/prgeneral/inc
${CMAKE_SOURCE_DIR}/../../../../lib_src/so_src/prnotice/inc
${CMAKE_SOURCE_DIR}/../../../../lib_src/so_src/prsqlite/inc
#扩展头文件
${CMAKE_SOURCE_DIR}/../../../../include/public
)
# 递归获取所有子目录 本地头文件
# 用于存储唯一的头文件目录
set(UNIQUE_INCLUDE_DIRS)
# 递归查找所有 .h 文件
file(GLOB_RECURSE all_headers RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.h")
# 遍历所有找到的头文件
foreach(header IN LISTS all_headers)
# 提取头文件的目录部分
get_filename_component(header_dir ${header} DIRECTORY)
# 如果这个目录还没有被添加到 UNIQUE_INCLUDE_DIRS 中,则添加它
# 使用 list(FIND ...) 命令来检查目录是否已存在
list(FIND UNIQUE_INCLUDE_DIRS "${header_dir}" index)
if(${index} EQUAL -1)
list(APPEND UNIQUE_INCLUDE_DIRS ${header_dir})
# 打印这个新添加的目录
message("Adding include directory: ${header_dir}")
endif()
endforeach()
# 将唯一的头文件目录添加到包含路径中
# 注意:这里使用的是 UNIQUE_INCLUDE_DIRS 变量,它包含了去重后的目录列表
include_directories(${UNIQUE_INCLUDE_DIRS})
# 查找src目录下的所有*.cpp,*.c源文件,并将文件列表保存到 DIR_LIB_SRCS 变量
# 递归地查找所有.cpp文件
file(GLOB_RECURSE CPP_SOURCES ${CMAKE_SOURCE_DIR}/${SRC_DIR}/*.cpp )
# 递归地查找所有.c文件 #实测没用,只能编cpp
file(GLOB_RECURSE C_SOURCES ${CMAKE_SOURCE_DIR}/${SRC_DIR}/*.c)
# 将两者合并到SRC_LIST列表中
set(SRC_LIST ${C_SOURCES} ${CPP_SOURCES})
#message("________________________________________________")
#message("${SRC_LIST}")
#message("________________________________________________")
# 排除 demo/ 目录下的所有文件
foreach(SOURCE IN LISTS SRC_LIST)
if("${SOURCE}" MATCHES ".*/demo/.*" OR "${SOURCE}" MATCHES ".*/build/.*")
list(REMOVE_ITEM SRC_LIST ${SOURCE})
endif()
endforeach()
#message("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n ${SRC_LIST} \n################################################")
#--------------------设置可执行文件-----------------------------------
#设置可执行文件路径
set(EXECUTABLE_OUTPUT_PATH ${LIB_EXE_OUT_PATH})
#生成可执行文件
add_executable(${PROJECT_NAME} ${SRC_LIST})
#链接的库
target_link_libraries(${PROJECT_NAME}
-lprxml
)
#如果是Release版本,删除调试符号减少文件大小
# strip
if (CMAKE_BUILD_TYPE)
if (${CMAKE_BUILD_TYPE} STREQUAL "Release")
set(TARGET_PATH "${EXECUTABLE_OUTPUT_PATH}/${PROJECT_NAME}")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND $ENV{STRIP} -s ${TARGET_PATH})
endif()
endif()
# 设置第二个输出路径,使用自定义命令复制文件
add_custom_command(
TARGET ${PROJECT_NAME}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${PROJECT_NAME}> $ENV{BOARD_DIR}/bin
)
message(${PROJECT_NAME})
+46
View File
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--EmscCfg-->
<Root>
<!--The following parameters do not need to be modified by default-->
<PrimaryNode name="EmsCfg">
<SecondaryNode name="EmsStructure">
<!--EMS结构配置,上电读取一次-->
<GridMeterNum>3</GridMeterNum>
<!--电网电表数量-->
<LoadSysNum>1</LoadSysNum>
<!--负载数量-->
<EvcsSysNum>4</EvcsSysNum>
<!--充电桩数量-->
<OilSysNum>0</OilSysNum>
<!--柴电数量-->
<PvSysNum>3</PvSysNum>
<!--光伏数量-->
<WindSysNum>0</WindSysNum>
<!--风能数量-->
<StorageSysNum>1</StorageSysNum>
<!--储能系统数量-->
</SecondaryNode>
<SecondaryNode name="EmsInteration">
<!--EMS配置交互信息,需要更改,保存最后的状态-->
<EmsRunMode>1</EmsRunMode>
<!--MANUAL-0,AUTO-1,DEMO-2-->
<VN_MxMode>0</VN_MxMode>
<!--0/1/2: M1/M2/M3-->
</SecondaryNode>
<SecondaryNode name="EmsCfgHmi">
<!--EMS HMI配置-->
<ScreenCloseTime>60</ScreenCloseTime>
<!--自动息屏时间 单位s-->
</SecondaryNode>
<SecondaryNode name="Emscloud">
<!--日志开关 0 关闭 1 开启-->
<logEnable>0</logEnable>
<!--日志大小单位为M-->
<logMaxsize>1</logMaxsize>
<!--日志最大文件数-->
<filecounts>3</filecounts>
<!--日志等级 0 error,1 warning,2 info,3 debug,4 trace-->
<logLevel>3</logLevel>
</SecondaryNode>
</PrimaryNode>
</Root>
Binary file not shown.
+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.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+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.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.