海思官方makefile源码的学习3(代码片段)

七六伍 七六伍     2022-11-07     372

关键词:

下面是一段 海思官方的makefile的代码,

VSS_CFLAGS := -fno-aggressive-loop-optimizations
VSS_CFLAGS += -ffunction-sections -fdata-sections
VSS_CFLAGS += -Wall -g  -Wno-date-time
VSS_CFLAGS += -fstack-protector
VSS_CFLAGS += -DVER_X=1 -DVER_Y=0 -DVER_Z=0 -DVER_P=0 -DVER_B=10 -DUSER_BIT_64 -DKERNEL_BIT_64 -DENABLE_JPEGEDCF -Wno-date-time
VSS_CFLAGS += -O2 -fPIC -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -Wno-error=implicit-function-declaration
VSS_CFLAGS += -mcpu=cortex-a73.cortex-a53
VSS_CFLAGS += -lpthread -lm -ldl -DISP_V2 -lstdc++ -DHI_XXXX

# Compile Define
COMPILE    = $(CC) $(VSS_CFLAGS) -c "$<" -o "$@" $(VSS_INCLUDE_PATH)
COMPILEDEP = $(CC) -MM "$<" $(VSS_CFLAGS) $(VSS_INCLUDE_PATH)
LINK       = $(CC) $(VSS_CFLAGS) -Wl,--gc-sections

VSS_CFLAGS := -fno-aggressive-loop-optimizations

gcc启用优化并使用-fno-aggressive-loop-optimizations标志导致无限循环行为消失

官方解释: https://gcc.gnu.org/gcc-4.8/changes.html
GCC now uses a more aggressive analysis to derive an upper bound for the number of iterations of loops using constraints imposed by language standards. This may cause non-conforming programs to no longer work as expected, such as SPEC CPU 2006 464.h264ref and 416.gamess. A new option, -fno-aggressive-loop-optimizations, was added to disable this aggressive analysis. In some loops that have known constant number of iterations, but undefined behavior is known to occur in the loop before reaching or during the last iteration, GCC will warn about the undefined behavior in the loop instead of deriving lower upper bound of the number of iterations for the loop. The warning can be disabled with -Wno-aggressive-loop-optimizations.

-ffunction-sections -fdata-sections

有时我们会遇到这种情况,可执行程序需要链接一些静态库,但是静态库中的函数并没有全部使用,只用了其中的几个,但是系统默认会自动把整个静态库全部链接到可执行程序中,造成可执行程序的大小大大增加,浪费了flash空间和内存空间。gcc为我们提供的解决这个问题的方法。

**

-Wall -g -Wno-date-time

**
gcc 的-Wall 选项可以打印出编译时所有的错误或者警告信息。这个选项很容易被遗忘,编译的时候,没有错误或者警告提示,以为自己的程序很完美,其实,里面有可能隐藏着许多陷阱。
变量没有初始化,类型不匹配,或者类型转换错误等警告提示需要重点注意,错误就隐藏在这些代码里面。没有使用的变量也需要注意,去掉无用的代码,让整个程序显得干净一点。

**

-fstack-protector

**
检测堆栈溢出

**

-lpthread -lm -ldl -DISP_V2 -lstdc++ -DHI_XXXX

**
数学库 -lm ;
-lptread 链接线程库
lc 是link libc
lm 是link libm
lz 是link libz

-ldl

#include <dlfcn.h>

dlopen(),dlclose() , dlerror() , dlsym() , the Base Definitions volume of IEEE Std 1003.1-2001, <dlfcn.h>

这些函数,动态库的相关部分

-dl ,是显式加载动态库的动态函数库

海思平台osdrv顶层makefile使用说明(代码片段)

本目录下的编译脚本支持arm-himix200-linux,arm-himix200-linux工具链对应glibc库。具体命令如下(以hi3516dv300举例)注意:   由于开源工具整改,部分开源工具不再提供源码包,客户编译OSDRV时需要自行下载:   a:linux-4.9.3... 查看详情

makefile第五课:makefile介绍(代码片段)

目录Makefile基本格式、规则、伪目标前言1.基本格式2.Makefile规则3.伪目标总结Makefile基本格式、规则、伪目标前言学习杜老师推荐的Makefile教程视频,链接。记录下个人学习笔记,仅供自己参考。之前有转载过杜老师的从零... 查看详情

makefile学习笔记系列4:makefile模板化(代码片段)

...12436/article/details/52461906中已经实现具有子目录层次结构的makefile写法,即主目录Makefile调用到每个子目录中的Makefile编译相应子目录的代码。但是每增加一个子目录又得为这个子目录添加一个为该子目录编译的Makefile文件,... 查看详情

linux内核移植入门(代码片段)

文章目录基本概念内核源码目录结构内核配置主目录Makefile各子目录Makefile如何配置内核?1.配置仓库选取2.交叉编译器的修改3.体系结构体的选择4.修改配置文件内核编译编译结果:几种linux内核文件的区别开发板上U-Boot启动linux内核... 查看详情

legendofmir(传奇)官方源码学习3服务端程序初始化过程(代码片段)

一、窗体事件整个服务端界面只有2个事件,一个SMain_Load一个SMain_FormClosing,一个负责初始化,一个负责程序关闭保存SMain_Load事件privatevoidSMain_Load(objectsender,EventArgse)EditEnvir.LoadDB();Envir.Start();AutoResize();这里要讲一下比... 查看详情

makefile学习(代码片段)

1、多个if判断DEMO:=2all:ifeq($(DEMO),1)@echo"DEMO1"elseifeq($(DEMO),2)@echo"DEMO2"elseifeq($(DEMO),3)@echo"DEMO3"else@echo"DEMOOther"endif 2、打印变量DEMO:=1all:@echo$$DEMO=$DEMO@echo$$(DEMO)=$(D 查看详情

gdbmake/makefile学习心得(代码片段)

gdb、make/makefile学习心得文章目录gdb、make/makefile学习心得gcc/g++文件名问题gdb进入和退出gdb基本调试操作make/makefile依赖关系:如何写一个makefile多文件的makefile多个文件在一个makefile分别编译gcc/g++预处理的博客在学... 查看详情

linux学习记录:makefile(代码片段)

Makefile这是本人在学习makefile时的记录,方便日后查询。所有我遇到的makefile相关的内容都会被记录在这篇笔记中,所以在之后接触到makefile相关的新内容后,会对这篇笔记的内容进行更新。目录Makefile零、Makefile简介一... 查看详情

mybatis框架学习笔记(代码片段)

官方中文文档–>https://mybatis.org/mybatis-3/zh/getting-started.html或点击–>mybatis文档mybatis3版本的源码–>https://github.com/mybatis/mybatis-3/releases或点击–>mybatis3源码文章目录1.什么是mybatis2.基础搭建使用(1)添加相关maven依赖 查看详情

makefile编写学习--1(代码片段)

makefile是在编译中大型程序中使用的自动化编译工具make依赖的指令文件。这样可以使得程序的编译更加便捷快速。makefile的一般规则如下:target...:prerequisites...commandtarget即是一个目标文件,它可以是可执行程序、目标中间文件、... 查看详情

solidity内嵌汇编学习(代码片段)

这里我们接下来学习Solidity官方文档内嵌汇编的第二个示例学习VectorSum。本文依旧以Solidity0.8.7官方文档进行学习。有了第一个示例的学习做铺垫,我们这里的学习就容易多了,什么也不说,直接上示例源码://SPDX-License... 查看详情

makefile的学习(代码片段)

目录MakeMakefile了解规则符号小demo通用Makefile更新中MakeMakefile了解一个最简单的小demohello:hello.cgcc-ohellohello.cclean:rm-fhello//强制删除(f)make命令根据文件更新的时间戳来决定哪些文件需要重新编译,这使得可以避免编译... 查看详情

makefile学习(代码片段)

...,也就是.lib文件,在UNIX下,是ArchiveFile,也就是.a文件。MakefileMakefile里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。1、显式规则。显式规则说明了,如何生成一个或多的的目标文件。这是由Makefile... 查看详情

c_cpp海思运行时api学习记录(代码片段)

查看详情

makefile学习笔记系列4:makefile模板化(代码片段)

...12436/article/details/52461906中已经实现具有子目录层次结构的makefile写法,即主目录Makefile调用到每个子目录中的Makefile编译相应子目录的代码。但是每增加一个子目录又得为这个子目录添加一个为该子目录编译的Makefile文件,... 查看详情

海思himix200交叉编译openssl(代码片段)

...error:unrecognizedcommandlineoption‘-m32’这种情况需要手工修改Makefile,删除文件中所有的-m32选项no-shared生成静态库,如果要生成动态库,则使用-shared选项no-asm在交叉编译过程中不使用汇编代码代码加速编译过程–prefix指定安装目录... 查看详情

mybatis源码分析:从一个简单的例子开始(代码片段)

...分析学习,就先从myabtis开始吧。文章内容基于源码和官方文档。mybatis中文官方文档:https://mybatis.org/mybatis-3/zh/1、从一个简单的例子开始从官网的例子开始:从xml中构建SqlSessionFactory// 查看详情

mybatis源码分析:从一个简单的例子开始(代码片段)

...分析学习,就先从myabtis开始吧。文章内容基于源码和官方文档。mybatis中文官方文档:https://mybatis.org/mybatis-3/zh/1、从一个简单的例子开始从官网的例子开始:从xml中构建SqlSessionFactory// 查看详情