惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
The GitHub Blog
The GitHub Blog
F
Fortinet All Blogs
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Cisco Talos Blog
Cisco Talos Blog
P
Privacy & Cybersecurity Law Blog
I
Intezer
Y
Y Combinator Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
N
Netflix TechBlog - Medium
The Hacker News
The Hacker News
AWS News Blog
AWS News Blog
aimingoo的专栏
aimingoo的专栏
A
About on SuperTechFans
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Stack Overflow Blog
Stack Overflow Blog
Hacker News: Ask HN
Hacker News: Ask HN
酷 壳 – CoolShell
酷 壳 – CoolShell
量子位
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
B
Blog
T
Tor Project blog
C
Cybersecurity and Infrastructure Security Agency CISA
云风的 BLOG
云风的 BLOG
博客园_首页
V2EX - 技术
V2EX - 技术
T
Threat Research - Cisco Blogs
腾讯CDC
宝玉的分享
宝玉的分享
博客园 - 叶小钗
罗磊的独立博客
S
Securelist
The Last Watchdog
The Last Watchdog
Google Online Security Blog
Google Online Security Blog
Scott Helme
Scott Helme
博客园 - 司徒正美
W
WeLiveSecurity
有赞技术团队
有赞技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
Secure Thoughts
NISL@THU
NISL@THU
N
News and Events Feed by Topic
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
雷峰网
雷峰网
大猫的无限游戏
大猫的无限游戏
K
Kaspersky official blog
IT之家
IT之家

JieJiSS' Blog

为 SQLAlchemy Model 添加 type hint 和 type check Boot an Arch Linux RISC-V using qemu-system 关于基于机器学习的多目标对象追踪算法的文献综述 - JieJiSS' Blog RV64 板子更换 rootfs 指南 - JieJiSS' Blog ACTF2022 safer-tg-bot-{1,2} WP - JieJiSS' Blog A RISC-V gcc pitfall revealed by a glibc update Setup an Arch Linux RISC-V Development Environment 解构赋值踩坑:神秘失踪的数据 - JieJiSS' Blog How's the GDPR (used to) related to my blog Rust is incompatible with LLVM, at least partially python-mtrpacket 在 riscv64 上编译测试不通过 - JieJiSS' Blog 快速获得 RISC-V 开发环境 - JieJiSS' Blog Redmi AirDots 3 Pro 连接电脑后蓝牙类别不正确的解决方案 为什么 ArrowFunction 不能 new - JieJiSS' Blog Bilibili 2020-10-24 CTF WriteUp - JieJiSS' Blog 对于又一种对SS流式加密的攻击(奇虎团队)的详细分析 - JieJiSS' Blog 在MacOS上配置dnscrypt-proxy(免分流) - JieJiSS' Blog 市县中心点坐标(经纬度) - JieJiSS' Blog 二项式定理及其推广公式的一种简单理解办法 - JieJiSS' Blog
在 RISC-V 上编译 Node.js 16
2022-01-21 · via JieJiSS' Blog

最近因为实习原因经常和 RISC-V 打交道,迫于需要,尝试在 riscv64gc 环境下编译运行 njs 16 并大获成功,记录一下流程步骤。

当前 njs 16(gallium LTS)主线版本是 v16.13.1,把源代码拉下来:

1
2
wget https://nodejs.org/dist/v16.13.1/node-v16.13.1.tar.xz
tar -xvf node-v16.13.1.tar.xz

把同事(luyahan)的 patch 拉下来:

1
wget https://github.com/nodejs/node/pull/41566.patch

这个 patch 是上游 v8 的 4 个 commit 的 cherry-pick,修复了编译时 node_mksnapshot 卡住、测试时 inspector 相关某个测试点 CRASH signal 11(也就是 SIGSEGV / Seg Fault)的问题。

把 patch 打上去:

1
2
cd node-v16.13.1
patch -Np1 -i ../41566.patch

之后用 riscv-gnu-toolchain 正常编译就行了,不会用 make 那套的话可以照抄 Arch Linux 官方源的 PKGBUILD。如果是 gcc>=10,注意在 make 的时候指定 CFLAGS="-fno-strict-aliasing $CFLAGS"CXXFLAGS="-fno-strict-aliasing $CXXFLAGS",否则会挂一个测试点(cctest/test_node_postmortem_metadata.cc)。

这个 toolchain 可以直接下载到针对 x86_64 平台 cross-compile 的版本。编译的时候会开 qemu-user 来模拟 RISC-V 环境,由于 QEMU 的 bug(和 feature),有几个测试点会挂,这是正常现象。

嫌麻烦可以开一台 Arch Linux,然后:

1
2
3
4
5
6
wget -c http://ns2.felixcat.org/images/archriscv-20210601.tar.zst
sha512sum archriscv-20210601.tar.zst

mkdir ~/archriscv
tar -xvf archriscv-20210601.tar.zst -C ~/archriscv
sudo systemd-nspawn -D ~/archriscv/ --machine archriscv

这样你就得到了一个经过了 chroot 的 Arch Linux RISC-V 环境,它的 repo 源指向 PLCT archrv 小队(其实主要是 Felix Yan)维护的 repo。

这样甚至不用编译 njs,我们已经编译好了,形成 .pkg.tar.zst 放到 repo 里,直接 pacman -S nodejs-lts-gallium 就可以装上。

来源:https://blog.jiejiss.com/