我目前正在使用来自 crosstool-ng/crosstool-ng 的最新 crosstool-ng 为最新的 gcc 编译器 (6.3.0) 和 Cygwin64 构建 esp-open-sdk。
我发现我以前记录的许多问题现在都消失了。我之前使用 64 位 Cygwin 和插件时遇到的问题现在都消失了,启用预编译头文件并包含 GDB 的 TUI 界面时出现的问题也消失了。这些不再需要在 crosstool 构建覆盖中定义出来,为了获得几乎可以工作的构建,我所要做的就是将叠加层、样本和本地补丁复制到当前的 crosstool-NG 树中。
最后,我只需要稍微调整一下 0003-xtensa-add-HW-FPU-sequences-for-DIV-SQRT-RECIP-RSQRT 补丁,工具链就构建好了,似乎可以正常工作。然后我开始构建 open-sdk 的其余部分,这是我遇到了几个障碍的地方。
首先对于任何使用 Cygwin 的人来说,他们已经对实现 Posix 文件权限的方式和 Windows 下的权限顺序进行了一些更改,这会导致一些奇怪的事情发生。结合这一点,我认为 crosstool-ng 现在在最终构建的工具链上添加了更严格的文件和目录权限,结果是在将 esptool、libcirom 和其他库安装到树中时会出现文件访问错误。我必须将 chmod u+w 命令添加到主要 Makefile 的部分,它会在其中复制或创建文件。
其次,我现在有一个关于创建基于 sysroot 的工具链的 crosstool-NG 的未解决问题 - 似乎 CT_USE_SYSROOT 的默认选项设置不正确,结果是没有创建 sysroot 目录系统。当您正在寻找或创建 libc 或 libhal 等时,这会导致 Makefile 的其他部分失败。我不得不手动将 CT_USE_SYSROOT=y 添加到覆盖中,问题自行解决。
最后,构建 esp-open-lwip 失败了,因为它使用了 -mforce-l32 并且这个补丁没有添加到我的 gcc6.3.0 构建中。我没有删除此编译器选项,而是调整了 Makefile 以查看它是否适用,而且它几乎适用,只有几行被拒绝。但是,仔细查看被拒绝的补丁,似乎 -mauto-litpools 选项现在是代码的一部分,这可能会发生冲突。
所以想知道-mforce-l32是什么状态,能不能调整一下和后面的代码共存?
这是来自 xtensa.md 的被拒绝的补丁。另一个被拒绝的是针对 xtensa.opt 的并且是微不足道的,但是这个看起来有点繁琐。所有其他补丁应用完美。
代码:
全选xtensa.md.rej
--- gcc/config/xtensa/xtensa.md
+++ gcc/config/xtensa/xtensa.md
@@ -799,8 +802,8 @@
})
(define_insn "movhi_internal"
- [(set (match_operand:HI 0 "nonimmed_operand" "=D,D,a,a,a,U,*a,*A")
- (match_operand:HI 1 "move_operand" "M,d,r,I,U,r,*A,*r"))]
+ [(set (match_operand:HI 0 "nonimmed_operand" "=D,D,a,a,a,a,U,*a,*A")
+ (match_operand:HI 1 "move_operand" "M,d,r,I,Y,Z,r,*A,*r"))]
"xtensa_valid_move (HImode, operands)"
"@
movi.n\t%0, %x1
@@ -808,12 +811,13 @@
mov\t%0, %1
movi\t%0, %x1
%v1l16ui\t%0, %1
+ ssa8l\t%B1 ; srli\t%0, %B1, 2 ; slli\t%0, %0, 2 ; %v1l32i\t%0, %0, 0 ; srl\t%0, %0 ; extui\t%0, %0, 0, 16
%v0s16i\t%1, %0
rsr\t%0, ACCLO
wsr\t%1, ACCLO"
- [(set_attr "type" "move,move,move,move,load,store,rsr,wsr")
+ [(set_attr "type" "move,move,move,move,load,load,store,rsr,wsr")
(set_attr "mode" "HI")
- (set_attr "length" "2,2,3,3,3,3,3,3")])
+ (set_attr "length" "2,2,3,3,3,18,3,3,3")])
;; 8-bit Integer moves
xtensa.md的相关部分
代码:
全选xtensa.md
})
(define_insn "movhi_internal"
[(set (match_operand:HI 0 "nonimmed_operand" "=D,D,a,a,a,a,U,*a,*A")
(match_operand:HI 1 "move_operand" "M,d,r,I,Y,U,r,*A,*r"))]
"xtensa_valid_move (HImode, operands)"
"@
movi.n\t%0, %x1
mov.n\t%0, %1
mov\t%0, %1
movi\t%0, %x1
movi\t%0, %1
%v1l16ui\t%0, %1
%v0s16i\t%1, %0
rsr\t%0, ACCLO
wsr\t%1, ACCLO"
[(set_attr "type" "move,move,move,move,move,load,store,rsr,wsr")
(set_attr "mode" "HI")
(set_attr "length" "2,2,3,3,3,3,3,3,3")])
;; 8-bit Integer moves