Đóng góp cho gccgo frontend

Giới thiệu

Đây là một số ghi chú về việc đóng góp cho gccgo frontend của GCC. Để biết thông tin về việc đóng góp cho các phần khác của Go ngoài gccgo, xem Đóng góp cho dự án Go. Để biết thông tin về việc xây dựng gccgo cho bản thân bạn, xem Cài đặt và sử dụng gccgo. Để biết thêm các chi tiết kỹ càng về quy trình phát triển với gccgo frontend, xem tệp HACKING trong kho lưu trữ gofrontend.

Yêu cầu pháp lý

Bạn phải tuân theo các quy tắc bản quyền Go cho tất cả các thay đổi đối với gccgo frontend và thư viện libgo đi kèm. Mã là một phần của GCC thay vì gccgo phải tuân theo các quy tắc đóng góp GCC chung.

Mã nguồn chính cho gccgo frontend có thể tìm thấy tại https://go.googlesource.com/gofrontend. Chúng được mirror tại https://github.com/golang/gofrontend. Mã nguồn chính không thể tự xây dựng được, mà chỉ kết hợp với GCC (trong tương lai, các trình biên dịch khác có thể được hỗ trợ). Các thay đổi được thực hiện cho gccgo frontend cũng được áp dụng vào kho lưu trữ mã nguồn GCC được lưu trữ tại gcc.gnu.org. Trong kho lưu trữ gofrontend, thư mục go được mirror vào thư mục gcc/go/gofrontend trong kho lưu trữ GCC, và thư mục libgo của gofrontend được mirror vào thư mục libgo của GCC. Ngoài ra, thư mục test từ kho lưu trữ Go chính được mirror vào thư mục gcc/testsuite/go.test/test trong kho lưu trữ GCC.

Các thay đổi đối với các thư mục này luôn chảy từ mã nguồn chính vào kho lưu trữ GCC. Các tệp không bao giờ nên được thay đổi trong kho lưu trữ GCC ngoại trừ bằng cách thay đổi chúng trong mã nguồn chính và mirror chúng.

gccgo frontend được viết bằng C++. Nó tuân theo các tiêu chuẩn code GNU và GCC cho C++. Khi viết mã cho frontend, hãy tuân theo định dạng của mã xung quanh. Hầu hết mã dành riêng cho GCC không nằm trong frontend chính và thay vào đó nằm trong mã nguồn GCC trong thư mục gcc/go.

Thư viện runtime cho gccgo về cơ bản giống với thư viện trong kho lưu trữ Go chính. Mã thư viện trong kho lưu trữ Go được định kỳ merge vào thư mục libgo/go của gofrontend và sau đó là kho lưu trữ GCC, sử dụng shell script libgo/merge.sh. Theo đó, hầu hết các thay đổi thư viện nên được thực hiện trong kho lưu trữ Go chính. Các tệp ngoài libgo/go là dành riêng cho gccgo; điều đó nói rằng, một số tệp trong libgo/runtime dựa trên các tệp trong src/runtime của kho lưu trữ Go chính.

Kiểm thử

Tất cả các patch phải được kiểm thử. Một patch gây ra các lỗi mới không thể chấp nhận được.

Để chạy bộ kiểm thử gccgo, chạy make check-go trong thư mục build của bạn. Điều này sẽ chạy các kiểm thử khác nhau trong gcc/testsuite/go.* và cũng sẽ chạy bộ kiểm thử libgo. Bản sao các kiểm thử từ kho lưu trữ Go chính này được chạy bằng script DejaGNU có trong gcc/testsuite/go.test/go-test.exp.

Hầu hết các kiểm thử mới nên được gửi vào kho lưu trữ Go chính để sau đó được mirror vào kho lưu trữ GCC. Nếu có nhu cầu về các kiểm thử cụ thể cho gccgo, chúng nên đặt trong thư mục gcc/testsuite/go.go-torture hoặc gcc/testsuite/go.dg trong kho lưu trữ GCC.

Gửi thay đổi

Các thay đổi cho Go frontend nên tuân theo cùng quy trình như đối với kho lưu trữ Go chính, chỉ là cho dự án gofrontend và danh sách gửi thư gofrontend-dev@googlegroups.com thay vì dự án go và danh sách gửi thư golang-dev@googlegroups.com. Những thay đổi đó sau đó sẽ được merge vào mã nguồn GCC.