RISC-V 架构适配知识库
  • 睿迁工具集
  • RVSmartPorting
  • 简体中文
  • English (US)
在 Gitee 上查看
  • 睿迁工具集
  • RVSmartPorting
  • 简体中文
  • English (US)
在 Gitee 上查看
  • 简介
    • 贡献规范
  • 入门
    • 内存一致性模型
    • 硬件开发板差异
    • 指令集模块
  • 通用调整
    • 检查项目对多架构的支持性
    • 文件结构调整
    • 目录结构调整
    • 测试用例调整
  • C/C++ 程序
    • 内联汇编
    • 宏定义与判断
    • 移位运算中的整形常数
    • Intrinsic 函数
    • 多版本函数
    • 系统调用
  • 汇编程序
  • 编译配置文件
    • rpmbuild
    • Makefile
    • CMake
    • Autoconf
    • QMake
    • 其它
  • 其它编程语言
    • Rust
    • Go
    • Python
    • 其它语言
  • 辅助工具集
    • 目标代码定位工具
    • 汇编指令翻译工具

Makefile 配置文件

提示

本页面正在重构,内容将逐步更新。您正在查看的是旧版本,查看正在重构的版本请 移步至此

Makefile 文件中制定了软件编译构建过程中的源文件依赖关系及编译参数,其中一些编译配置是架构相关的。

配置架构相关源文件及参数

示例:kexec-tools 的 Makefile 文件多架构组织结构

  • 项目名称:kexec-tools
  • 项目版本:
  • 相关文件:/kexec/Makefile
  • 简介:在 /kexec/arch 文件夹下有多个以架构名命名的文件夹,各自包括一个 Makefile 文件。 顶层目录中的 Makefile 中引用各架构下的 Makefile 文件。

在 /kexec/arch 文件夹下有多个以架构名命名的子文件夹, 每个子文件夹都包括一个 Makefile 文件。 这些 Makefile 中均存在 架构名_KEXEC_SRCS 和 dist 变量, 它们在 src/Makefile.in 参与编译构建。

不同架构下的 Makefile 文件中的主要区别体现在 架构名_KEXEC_SRCS 和 dist 中增减依赖的源文件。 其中 RISC-V 架构与 ARM64 架构对应的 Makefile 内容相似度较高,下面列出了二者的相似部分:

变量RISC-VARM64
架构名_KEXEC_SRCS riscv_KEXEC_SRCS = kexec/arch/riscv/kexec-riscv.c
riscv_KEXEC_SRCS += kexec/arch/riscv/kexec-elf-riscv.c
arm64_KEXEC_SRCS += \
kexec/arch/arm64/crashdump-arm64.c \
kexec/arch/arm64/kexec-arm64.c \
kexec/arch/arm64/kexec-elf-arm64.c \
kexec/arch/arm64/kexec-uImage-arm64.c \
kexec/arch/arm64/kexec-image-arm64.c \
kexec/arch/arm64/kexec-zImage-arm64.c
架构名_MEM_REGIONSriscv_MEM_REGIONS = kexec/mem_regions.c
arm64_MEM_REGIONS = kexec/mem_regions.c
架构名_DT_OPSriscv_DT_OPS += kexec/dt-ops.c
arm64_DT_OPS += kexec/dt-ops.c
架构名_ARCH_REUSE_INITRDriscv_ARCH_REUSE_INITRD =
arm64_ARCH_REUSE_INITRD =
架构名_CPPFLAGSriscv_CPPFLAGS += -I $(srcdir)/kexec/
arm64_CPPFLAGS += -I $(srcdir)/kexec/
dist dist += kexec/arch/riscv/Makefile $(riscv_KEXEC_SRCS) \
kexec/arch/riscv/kexec-riscv.h \
kexec/arch/riscv/include/arch/options.h
dist += $(arm64_KEXEC_SRCS) \
kexec/arch/arm64/include/arch/options.h \
kexec/arch/arm64/crashdump-arm64.h \
kexec/arch/arm64/image-header.h \
kexec/arch/arm64/iomem.h \
kexec/arch/arm64/kexec-arm64.h \
kexec/arch/arm64/Makefile
HAVE_LIBFDT ifdef HAVE_LIBFDT

LIBS += -lfdt

else

include $(srcdir)/kexec/libfdt/Makefile.libfdt

libfdt_SRCS += $(LIBFDT_SRCS:%=kexec/libfdt/%)

riscv_CPPFLAGS += -I$(srcdir)/kexec/libfdt

riscv_KEXEC_SRCS += $(libfdt_SRCS)

endif
ifdef HAVE_LIBFDT

LIBS += -lfdt

else

include $(srcdir)/kexec/libfdt/Makefile.libfdt

libfdt_SRCS += $(LIBFDT_SRCS:%=kexec/libfdt/%)

arm64_CPPFLAGS += -I$(srcdir)/kexec/libfdt

arm64_KEXEC_SRCS += $(libfdt_SRCS)

endif

/kexec/arch/arm64/Makefile 还有一些其他变量定义:

arm64_FS2DT += kexec/fs2dt.c
arm64_FS2DT_INCLUDE += \
 -include $(srcdir)/kexec/arch/arm64/crashdump-arm64.h \
 -include $(srcdir)/kexec/arch/arm64/kexec-arm64.h
arm64_UIMAGE = kexec/kexec-uImage.c
arm64_ADD_SEGMENT =
arm64_VIRT_TO_PHYS =
arm64_PHYS_TO_VIRT =

src\kexec\Makefile 文件中包含了 src\kexec\arch\ 中的各子文件夹中的 Makefile 文件:

# Line 81-95
include $(srcdir)/kexec/arch/alpha/Makefile
include $(srcdir)/kexec/arch/arm/Makefile
include $(srcdir)/kexec/arch/arm64/Makefile
include $(srcdir)/kexec/arch/i386/Makefile
include $(srcdir)/kexec/arch/ia64/Makefile
include $(srcdir)/kexec/arch/m68k/Makefile
include $(srcdir)/kexec/arch/mips/Makefile
include $(srcdir)/kexec/arch/cris/Makefile
include $(srcdir)/kexec/arch/ppc/Makefile
include $(srcdir)/kexec/arch/ppc64/Makefile
include $(srcdir)/kexec/arch/riscv/Makefile     # Line 91: RISC-V Support
include $(srcdir)/kexec/arch/s390/Makefile
include $(srcdir)/kexec/arch/sh/Makefile
include $(srcdir)/kexec/arch/x86_64/Makefile
include $(srcdir)/kexec/arch/hppa/Makefile

src/Makefile.in 对编译构建的操作做了配置,其中包含了 src\kexec\Makefile :

#
# kexec (linux booting linux)
#
include $(srcdir)/kexec/Makefile # Line 166
编辑本页面
最后更新时间:
贡献者: LightningRS, lxy

本知识库采用 木兰开放作品许可协议 署名-相同方式共享 第1版 进行许可

版权所有 © 2025 RVSmartPorting. | 京ICP备20005262号 | beian京公网安备11010802043677号