Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 10910] ファイルの概要

このコミットは、Go言語プロジェクトのビルドシステムにおいて、サポートされるアーキテクチャ(GOARCH)とオペレーティングシステム(GOOS)の組み合わせを定義するsrc/buildinfo.shスクリプトを追加するものです。このスクリプトは、Goが動作するプラットフォームの完全なリストを、ビルドプロセスで使用される他のシェルスクリプトに提供することを目的としています。

コミット

このコミットは、前回の変更("last CL")で不足していたファイルsrc/buildinfo.shを追加することで、ビルドの問題を修正することを目的としています。これは、Goプロジェクトのビルドプロセスが正しく機能するために必要な、重要な構成ファイルが欠落していたことに対する修正です。

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/ac3028f0a9950890f850306fdde03b272dc6baee

元コミット内容

commit ac3028f0a9950890f850306fdde03b272dc6baee
Author: Russ Cox <rsc@golang.org>
Date:   Tue Dec 20 17:00:52 2011 -0500

    build: fix build
    
    Missing file during last CL.
    
    TBR=r
    CC=golang-dev
    https://golang.org/cl/5505047
---
 src/buildinfo.sh | 40 ++++++++++++++++++++++++++++++++++++++++\n 1 file changed, 40 insertions(+)\n\ndiff --git a/src/buildinfo.sh b/src/buildinfo.sh
new file mode 100644
index 0000000000..4725b39720
--- /dev/null
+++ b/src/buildinfo.sh
@@ -0,0 +1,40 @@
+# Copyright 2011 The Go Authors.  All rights reserved.
+# Use of this source code is governed by a BSD-style
+# license that can be found in the LICENSE file.\n+\n+# This file is included by shell scripts that need to know the\n+# full list of architectures, operating systems, and combinations\n+# that Go runs on.\n+\n+GOARCHES=\"\n+\t386\n+\tamd64\n+\tarm\n+\"\n+\n+GOOSES=\"\n+\tdarwin\n+\tfreebsd\n+\tlinux\n+\tnetbsd\n+\topenbsd\n+\tplan9\n+\twindows
+\"\n+\n+GOOSARCHES=\"\n+\tdarwin_386\n+\tdarwin_amd64\n+\tfreebsd_386\n+\tfreebsd_amd64\n+\tlinux_386\n+\tlinux_amd64\n+\tlinux_arm\n+\tnetbsd_386\n+\tnetbsd_amd64\n+\topenbsd_386\n+\topenbsd_amd64\n+\tplan9_386\n+\twindows_386\n+\twindows_amd64
+\"\n

変更の背景

このコミットは、Goプロジェクトのビルドプロセスにおける重要な修正です。コミットメッセージにある「Missing file during last CL.」という記述から、前回の変更リスト(Change List, CL)でsrc/buildinfo.shというファイルが誤って含まれていなかったことが示唆されます。このファイルはGoのビルドシステムにとって不可欠なものであり、その欠落がビルドエラーを引き起こしていたと考えられます。

Go言語は、多様なオペレーティングシステムとアーキテクチャをサポートするクロスプラットフォームな言語です。そのため、ビルドシステムは、どのプラットフォームの組み合わせがサポートされているかを正確に把握する必要があります。src/buildinfo.shは、これらのサポートされるターゲットプラットフォームを定義する中心的な役割を担っており、Goのコンパイラやツールチェーンをビルドする際に参照されます。このファイルが欠落していると、ビルドスクリプトが正しいプラットフォーム情報を取得できず、結果としてビルドが失敗する可能性がありました。このコミットは、その欠落を補い、ビルドプロセスを正常な状態に戻すためのものです。

前提知識の解説

このコミットを理解するためには、Go言語のビルドシステムにおけるいくつかの基本的な概念を理解しておく必要があります。

  • GOOSとGOARCH:

    • GOOS (Go Operating System): Goプログラムが実行されるターゲットのオペレーティングシステムを指定する環境変数です。例として、linux, windows, darwin (macOS), freebsd などがあります。
    • GOARCH (Go Architecture): Goプログラムが実行されるターゲットのCPUアーキテクチャを指定する環境変数です。例として、amd64 (64-bit x86), 386 (32-bit x86), arm などがあります。
    • Goはこれらの環境変数を組み合わせて、特定のプラットフォーム向けのバイナリをビルドします。例えば、GOOS=linux GOARCH=amd64 go buildとすることで、Linux 64-bit環境で動作するバイナリを生成できます。
  • クロスコンパイル:

    • Go言語の強力な機能の一つに、クロスコンパイル(cross-compilation)があります。これは、あるプラットフォーム(例: macOS)上で、別のプラットフォーム(例: Windows)向けの実行可能ファイルをビルドできる能力を指します。
    • Goのビルドシステムは、GOOSGOARCHの組み合わせに基づいて、適切なコンパイラとライブラリを選択し、ターゲットプラットフォームに特化したバイナリを生成します。
  • Goのビルドプロセス:

    • Goプロジェクトのビルドは、単にgo buildコマンドを実行するだけでなく、内部的には複雑なスクリプトとツールチェーンが連携して動作しています。特にGo自身のコンパイラや標準ライブラリをビルドする際には、make.bashall.bashのようなシェルスクリプトが使用され、これらがGOOSGOARCHの情報を利用してビルドの挙動を制御します。
    • src/buildinfo.shのようなファイルは、これらのビルドスクリプトが参照する共通の定義を提供し、Goがサポートするすべてのプラットフォームの組み合わせを一元的に管理するために使用されます。

技術的詳細

src/buildinfo.shファイルは、Goのビルドシステムにおいて、サポートされるターゲットプラットフォームのリストを定義するためのシェルスクリプトです。このスクリプトは、Goのソースコードリポジトリのsrcディレクトリ直下に配置されており、Goのコンパイラや標準ライブラリをビルドする際に、他のシェルスクリプトによってインクルード(読み込み)されることを意図しています。

ファイル内で定義されている3つの主要なシェル変数について解説します。

  1. GOARCHES:

    • GoがサポートするCPUアーキテクチャのリストを定義します。
    • このコミット時点では、386 (x86 32-bit), amd64 (x86 64-bit), arm の3つがリストされています。
    • Goのビルドスクリプトは、このリストを使用して、各アーキテクチャ向けのコンポーネントをビルドしたり、テストを実行したりします。
  2. GOOSES:

    • Goがサポートするオペレーティングシステムのリストを定義します。
    • このコミット時点では、darwin (macOS), freebsd, linux, netbsd, openbsd, plan9, windows の7つがリストされています。
    • 同様に、ビルドスクリプトはこれらのOS向けのビルドターゲットを生成するためにこのリストを参照します。
  3. GOOSARCHES:

    • Goが公式にサポートするGOOSGOARCHの具体的な組み合わせのリストを定義します。
    • 例えば、darwin_386 (macOS 32-bit), linux_amd64 (Linux 64-bit), windows_amd64 (Windows 64-bit) などが含まれています。
    • このリストは、Goのクロスコンパイル能力を最大限に活用するために重要です。Goのビルドシステムは、このGOOSARCHESのリストに基づいて、各組み合わせに対してコンパイラ、リンカ、標準ライブラリのビルドを行い、テストを実行します。これにより、Goが特定のプラットフォームで正しく動作することを保証します。

このファイルが存在することで、Goのビルドシステムは、サポートされるすべてのプラットフォームの情報を一元的に管理し、ビルドプロセス全体で一貫性のあるターゲット設定を適用できます。これにより、Goのクロスプラットフォーム対応が効率的かつ堅牢に実現されます。

コアとなるコードの変更箇所

このコミットでは、src/buildinfo.shという新しいファイルが追加されています。

diff --git a/src/buildinfo.sh b/src/buildinfo.sh
new file mode 100644
index 0000000000..4725b39720
--- /dev/null
+++ b/src/buildinfo.sh
@@ -0,0 +1,40 @@
+# Copyright 2011 The Go Authors.  All rights reserved.
+# Use of this source code is governed by a BSD-style
+# license can be found in the LICENSE file.
+
+# This file is included by shell scripts that need to know the
+# full list of architectures, operating systems, and combinations
+# that Go runs on.
+
+GOARCHES="
+	386
+	amd64
+	arm
+"
+
+GOOSES="
+	darwin
+	freebsd
+	linux
+	netbsd
+	openbsd
+	plan9
+	windows
+"
+
+GOOSARCHES="
+	darwin_386
+	darwin_amd664
+	freebsd_386
+	freebsd_amd64
+	linux_386
+	linux_amd64
+	linux_arm
+	netbsd_386
+	netbsd_amd64
+	openbsd_386
+	openbsd_amd64
+	plan9_386
+	windows_386
+	windows_amd64
+"

コアとなるコードの解説

追加されたsrc/buildinfo.shファイルは、シェルスクリプトとして記述されており、Goのビルドシステムが利用するプラットフォーム情報を定義しています。

  1. ヘッダーコメント:

    # Copyright 2011 The Go Authors.  All rights reserved.
    # Use of this source code is governed by a BSD-style
    # license can be found in the LICENSE file.
    

    標準的なGoプロジェクトのファイルヘッダーで、著作権情報とライセンス(BSDスタイル)について記述されています。

  2. 目的説明コメント:

    # This file is included by shell scripts that need to know the
    # full list of architectures, operating systems, and combinations
    # that Go runs on.
    

    このコメントは、このファイルの主要な目的を明確に説明しています。Goが動作するアーキテクチャ、オペレーティングシステム、およびそれらの組み合わせの完全なリストを必要とする他のシェルスクリプトによって、このファイルがインクルードされることを示しています。これは、Goのビルドプロセスにおけるこのファイルの役割を理解する上で非常に重要です。

  3. GOARCHES変数:

    GOARCHES="
    	386
    	amd64
    	arm
    "
    

    GoがサポートするCPUアーキテクチャのリストを定義しています。各アーキテクチャはタブでインデントされ、改行で区切られています。これはシェルスクリプトで配列のように扱うための一般的な形式です。

  4. GOOSES変数:

    GOOSES="
    	darwin
    	freebsd
    	linux
    	netbsd
    	openbsd
    	plan9
    	windows
    "
    

    Goがサポートするオペレーティングシステムのリストを定義しています。GOARCHESと同様に、各OSが改行で区切られています。

  5. GOOSARCHES変数:

    GOOSARCHES="
    	darwin_386
    	darwin_amd64
    	freebsd_386
    	freebsd_amd64
    	linux_386
    	linux_amd64
    	linux_arm
    	netbsd_386
    	netbsd_amd64
    	openbsd_386
    	openbsd_amd64
    	plan9_386
    	windows_386
    	windows_amd64
    "
    

    Goが公式にサポートするGOOSGOARCHの具体的な組み合わせのリストを定義しています。例えば、darwin_amd64はmacOS 64-bitを意味します。このリストは、Goのクロスコンパイルターゲットを明示的に指定するために使用されます。

これらの変数は、Goのビルドスクリプト(例: src/make.bashsrc/all.bash)によって読み込まれ、Goのコンパイラ、ツール、標準ライブラリをビルドする際のターゲットプラットフォームの決定に利用されます。これにより、Goのビルドシステムは、サポートされるすべての環境に対して一貫性のあるビルドとテストを実行できるようになります。

関連リンク

参考にした情報源リンク