nodejs / nodejs/node

Cross-build x64 host -> arm target fails in V8 host arch guard (v8config.h)

Đang mở
#61,794 4 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

build
Ngôn ngữ chính
JavaScript
Star
122k
Fork
37.3k
Merge trung bình
4 ngày 2 giờ
Pull request đã merge (30 ngày)
283

Mô tả

Summary

Cross-building Node.js for --dest-cpu=arm (32-bit ARM / armhf) from an x64 Linux host fails in V8 host object compilation due to a host/target architecture guard in deps/v8/include/v8config.h.

Environment

  • Host: Ubuntu 24.04 x86_64
  • Target: Raspberry Pi 3, 32-bit Raspbian Buster (armhf)
  • Cross toolchain: arm-linux-gnueabihf-*

Repro

From x64 host:

./configure \
  --dest-os=linux \
  --dest-cpu=arm \
  --cross-compiling \
  --with-arm-float-abi=hard \
  --with-arm-fpu=neon \
  --without-node-snapshot
make -j1

Failure

Host V8 compilation fails with:

#error Target architecture arm is only supported on arm and ia32 host

Coming from deps/v8/include/v8config.h:

#if (V8_TARGET_ARCH_ARM && !(V8_HOST_ARCH_IA32 || V8_HOST_ARCH_ARM))
#error Target architecture arm is only supported on arm and ia32 host
#endif

In generated host makefiles (for example out/tools/v8_gypfiles/v8_libplatform.host.mk), host objects are compiled with -DV8_TARGET_ARCH_ARM, which triggers this guard on x64 hosts.

Notes

  • --without-node-snapshot does not avoid this, as host V8 objects are still built with ARM target macros.
  • A local workaround changing the guard to include x64 host allows compilation to proceed:
-#if (V8_TARGET_ARCH_ARM && !(V8_HOST_ARCH_IA32 || V8_HOST_ARCH_ARM))
+#if (V8_TARGET_ARCH_ARM && !(V8_HOST_ARCH_IA32 || V8_HOST_ARCH_ARM || V8_HOST_ARCH_X64))

Request

What is the intended/supported path for x64-host -> arm-target cross-builds in current Node/V8?

If this should be supported, could build generation be adjusted so host-side V8 tools/objects do not fail this guard (or guard logic updated in a supported way)?

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Tái hiện bản build x64-to-arm bằng các lệnh configure và make trong issue. Bắt đầu với deps/v8/include/v8config.h và out/tools/v8_gypfiles/v8_libplatform.host.mk được tạo ra, sau đó truy vết lý do các đối tượng host nhận macro đích ARM. Hoàn tất khi đường dẫn cross-build được hỗ trợ và guard cần thiết hoặc hành vi tạo build được ghi lại và xác minh.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
cpp, javascript, linux
Lĩnh vực
build-system, compilers, operating-systems
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
45/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.