diff --git a/articles/20230929-elf2flt-fix-install.md b/articles/20230929-elf2flt-fix-install.md index 55381a7d109bd0dede20effc0712dbbe5ea36337..5af46ac73d3cae3aaae50cb126b36ce6b8fe1d62 100644 --- a/articles/20230929-elf2flt-fix-install.md +++ b/articles/20230929-elf2flt-fix-install.md @@ -1,4 +1,4 @@ -> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc2 - [spaces newline toc comments codeblock]
+> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.2-rc2 - [spaces]
> Author: Odysseus <320873791@qq.com>
> Date: 2023/09/19
> Revisor: walimis <>
@@ -102,66 +102,9 @@ $ which riscv64-linux-gnu-ld /usr/bin/riscv64-linux-gnu-ld ``` -可以看到工具链调用的是 `/usr/bin` 下的。这里每个人的情况可能会有所不同,需要额外添加配置选项,指定工具链的可执行程序路径。在这里,我采用修改 `configure.ac` 的方案,通过往 `configure.ac` 中添加相应的配置选项达成目的。具体而言,我在 `configure.ac` 中加入 `--with-toolchain-bindir=` 这一配置选项,并把其值传递给变量 `$(toolchain_bindir)`,供 `Makefile.in` 使用。 +可以看到工具链调用的是 `/usr/bin` 下的。这里每个人的情况可能会有所不同,所以我们看一下有无相关的配置选项。实际上,我们在之前的探寻过程中已经发现了一个可用的变量:`$prefix`。在 `./configure` 里面,`$prefix` 变量被追加到 `$bindir` 的开头,因此我们只需使用 `$bindir`。另外,elf2flt 中有一个变量 `$DESTDIR`,是指定 Buildroot 中 host 工具链的,为了保持与 Buildroot 的兼容性,我们还需要在 `$bindir` 前面加上这个变量。 -`configure.ac` 中修改如下: - -```diff -@@ -1,6 +1,12 @@ - dnl Process this file with autoconf to produce a configure script. - AC_INIT(elf2flt.c) - -+AC_ARG_WITH(toolchain-bindir, -+ AS_HELP_STRING([--with-toolchain-bindir=], [path to installed toolchain]), -+ [ ac_toolchain_bindir=$withval ], -+ [ ac_toolchain_bindir=NONE ] -+) -+ - AC_ARG_WITH(zlib-prefix, - AS_HELP_STRING([--with-zlib-prefix=], [path to installed zlib]), - [ ac_zlib_prefix=$withval ], - -@@ -137,6 +143,11 @@ - else - LIBS="$ac_libbfd $LIBS" - fi - -+toolchain_bindir= -+if test "$ac_toolchain_bindir" != "NONE"; then -+ toolchain_bindir=$(cd "$ac_toolchain_bindir" && pwd) -+fi -+ - bfd_include_dir= - if test "$ac_bfd_include_dir" != "NONE"; then - bfd_include_dir=$(cd "$ac_bfd_include_dir" && pwd) - -@@ -158,6 +169,16 @@ - if test "$ac_binutils_ldscript_dir" = "NONE"; then - fi - binutils_ldscript_dir="$ac_binutils_ldscript_dir" - -+if test "$ac_toolchain_bindir" = "NONE" ; then -+ AC_MSG_ERROR([ -+You need to specify the location of the installed toolchain. -+ -+Run configure again specifying this option: -+ -+ ./configure --target= --with-toolchain-bindir= --with-bfd-include-dir= --with-libbfd= --with-libiberty= -+]) -+fi -+ - if test "$ac_libbfd" = "NONE" -o "$ac_libiberty" = "NONE" ; then - AC_MSG_ERROR([ - -@@ -258,6 +279,7 @@ AC_SUBST(target_alias) - AC_SUBST(target_cpu) - AC_SUBST(target_os) - AC_SUBST(target_vendor) -+AC_SUBST(toolchain_bindir) - AC_SUBST(bfd_include_dir) -``` - -而后,对于 `Makefile.in`,我们做出如下修改: +综上,对于 `Makefile.in`,我们做出如下修改: ```diff @@ -8,6 +8,7 @@ @@ -170,7 +113,7 @@ exec_prefix = @exec_prefix@ libdir = @libdir@ includedir = @includedir@ +toolchain_bindir = @toolchain_bindir@ - + CC = @CC@ CPU = @target_cpu@ @@ -179,16 +122,15 @@ install: $(INSTALL) -m 755 $(PROG_FLTHDR) $(DESTDIR)$(target_bindir)/$(PROG_FLTHDR) $(INSTALL) -m 755 $(PROG_ELF2FLT) $(DESTDIR)$(bindir)/$(TARGET)-$(PROG_ELF2FLT) $(INSTALL) -m 755 $(PROG_ELF2FLT) $(DESTDIR)$(target_bindir)/$(PROG_ELF2FLT) -+ cp $(toolchain_bindir)/$(TARGET)-ld $(DESTDIR)$(bindir)/$(TARGET)-ld -+ cp $(toolchain_bindir)/$(TARGET)-ld $(DESTDIR)$(target_bindir)/ld ++ cp $(DESTDIR)$(bindir)/$(TARGET)-ld $(DESTDIR)$(target_bindir)/ld [ -f $(DESTDIR)$(bindir)/$(TARGET)-ld.real$(EXEEXT) ] || \ mv $(DESTDIR)$(bindir)/$(TARGET)-ld$(EXEEXT) $(DESTDIR)$(bindir)/$(TARGET)-ld.real$(EXEEXT) [ -f $(DESTDIR)$(target_bindir)/ld.real$(EXEEXT) ] || \ mv $(DESTDIR)$(target_bindir)/ld$(EXEEXT) $(DESTDIR)$(target_bindir)/ld.real$(EXEEXT) $(INSTALL) -m 755 $(PROG_LD_ELF2FLT) $(DESTDIR)$(bindir)/$(TARGET)-ld$(EXEEXT) $(INSTALL) -m 755 $(PROG_LD_ELF2FLT) $(DESTDIR)$(target_bindir)/ld$(EXEEXT) -+ mv $(toolchain_bindir)/$(TARGET)-ld $(toolchain_bindir)/$(TARGET)-ld_old -+ ln -s $(DESTDIR)$(target_bindir)/ld $(toolchain_bindir)/$(TARGET)-ld ++ mv $(DESTDIR)$(bindir)/$(TARGET)-ld $(DESTDIR)$(bindir)/$(TARGET)-ld_old ++ ln -s $(DESTDIR)$(target_bindir)/ld $(DESTDIR)$(bindir)/$(TARGET)-ld $(INSTALL) -m 644 $(SRC_LDFILE) $(DESTDIR)$(target_libdir)/$(LDFILE) ``` @@ -203,16 +145,15 @@ install: $(INSTALL) -m 755 $(PROG_FLTHDR) $(DESTDIR)$(target_bindir)/$(PROG_FLTHDR) $(INSTALL) -m 755 $(PROG_ELF2FLT) $(DESTDIR)$(bindir)/$(TARGET)-$(PROG_ELF2FLT) $(INSTALL) -m 755 $(PROG_ELF2FLT) $(DESTDIR)$(target_bindir)/$(PROG_ELF2FLT) - cp $(toolchain_bindir)/$(TARGET)-ld $(DESTDIR)$(bindir)/$(TARGET)-ld - cp $(toolchain_bindir)/$(TARGET)-ld $(DESTDIR)$(target_bindir)/ld + cp $(DESTDIR)$(bindir)/$(TARGET)-ld $(DESTDIR)$(target_bindir)/ld [ -f $(DESTDIR)$(bindir)/$(TARGET)-ld.real$(EXEEXT) ] || \ mv $(DESTDIR)$(bindir)/$(TARGET)-ld$(EXEEXT) $(DESTDIR)$(bindir)/$(TARGET)-ld.real$(EXEEXT) [ -f $(DESTDIR)$(target_bindir)/ld.real$(EXEEXT) ] || \ mv $(DESTDIR)$(target_bindir)/ld$(EXEEXT) $(DESTDIR)$(target_bindir)/ld.real$(EXEEXT) $(INSTALL) -m 755 $(PROG_LD_ELF2FLT) $(DESTDIR)$(bindir)/$(TARGET)-ld$(EXEEXT) $(INSTALL) -m 755 $(PROG_LD_ELF2FLT) $(DESTDIR)$(target_bindir)/ld$(EXEEXT) - mv $(toolchain_bindir)/$(TARGET)-ld $(toolchain_bindir)/$(TARGET)-ld_old - ln -s $(DESTDIR)$(target_bindir)/ld $(toolchain_bindir)/$(TARGET)-ld + mv $(DESTDIR)$(bindir)/$(TARGET)-ld $(DESTDIR)$(bindir)/$(TARGET)-ld_old + ln -s $(DESTDIR)$(target_bindir)/ld $(DESTDIR)$(bindir)/$(TARGET)-ld + ln -s $(DESTDIR)$(bindir)/$(TARGET)-elf2flt$(EXEEXT) $(DESTDIR)$(bindir)/elf2flt$(EXEEXT) + ln -s $(DESTDIR)$(bindir)/$(TARGET)-flthdr$(EXEEXT) $(DESTDIR)$(bindir)/flthdr$(EXEEXT) $(INSTALL) -m 644 $(SRC_LDFILE) $(DESTDIR)$(target_libdir)/$(LDFILE) @@ -261,19 +202,18 @@ install: $(INSTALL) -m 755 $(PROG_FLTHDR) $(DESTDIR)$(target_bindir)/$(PROG_FLTHDR) $(INSTALL) -m 755 $(PROG_ELF2FLT) $(DESTDIR)$(bindir)/$(TARGET)-$(PROG_ELF2FLT) $(INSTALL) -m 755 $(PROG_ELF2FLT) $(DESTDIR)$(target_bindir)/$(PROG_ELF2FLT) - cp $(toolchain_bindir)/$(TARGET)-ld $(DESTDIR)$(bindir)/$(TARGET)-ld - cp $(toolchain_bindir)/$(TARGET)-ld $(DESTDIR)$(target_bindir)/ld + cp $(DESTDIR)$(bindir)/$(TARGET)-ld $(DESTDIR)$(target_bindir)/ld [ -f $(DESTDIR)$(bindir)/$(TARGET)-ld.real$(EXEEXT) ] || \ mv $(DESTDIR)$(bindir)/$(TARGET)-ld$(EXEEXT) $(DESTDIR)$(bindir)/$(TARGET)-ld.real$(EXEEXT) [ -f $(DESTDIR)$(target_bindir)/ld.real$(EXEEXT) ] || \ mv $(DESTDIR)$(target_bindir)/ld$(EXEEXT) $(DESTDIR)$(target_bindir)/ld.real$(EXEEXT) $(INSTALL) -m 755 $(PROG_LD_ELF2FLT) $(DESTDIR)$(bindir)/$(TARGET)-ld$(EXEEXT) $(INSTALL) -m 755 $(PROG_LD_ELF2FLT) $(DESTDIR)$(target_bindir)/ld$(EXEEXT) - mv $(toolchain_bindir)/$(TARGET)-ld $(toolchain_bindir)/$(TARGET)-ld_old - ln -s $(DESTDIR)$(target_bindir)/ld $(toolchain_bindir)/$(TARGET)-ld + mv $(DESTDIR)$(bindir)/$(TARGET)-ld $(DESTDIR)$(bindir)/$(TARGET)-ld_old + ln -s $(DESTDIR)$(target_bindir)/ld $(DESTDIR)$(bindir)/$(TARGET)-ld ln -s $(DESTDIR)$(bindir)/$(TARGET)-elf2flt$(EXEEXT) $(DESTDIR)$(bindir)/elf2flt$(EXEEXT) ln -s $(DESTDIR)$(bindir)/$(TARGET)-flthdr$(EXEEXT) $(DESTDIR)$(bindir)/flthdr$(EXEEXT) -+ ln -s $(toolchain_bindir)/$(TARGET)-nm $(DESTDIR)$(target_bindir)/nm ++ ln -s $(DESTDIR)$(bindir)/$(TARGET)-nm $(DESTDIR)$(target_bindir)/nm $(INSTALL) -m 644 $(SRC_LDFILE) $(DESTDIR)$(target_libdir)/$(LDFILE) ```