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

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

このコミットは、Go言語のランタイムビルドシステムにおける問題を修正し、特に複数のビルドシステムを同時にサポートすることから脱却しようとする試みの一環です。MakefileMakefile.autoという2つのビルド関連ファイルが変更され、ビルドプロセスの簡素化と循環依存性の解消が図られています。

コミット

commit cfd17a1b57adb6f1602f6a635af7f50be688ed10
Author: Russ Cox <rsc@golang.org>
Date:   Fri Dec 16 17:58:53 2011 -0500

    runtime: fix build
    
    I am looking forward to not supporting two build
    systems simultaneously.  Make complains about
    a circular dependency still, but I don't understand it
    and it's probably not worth the time to figure out.
    
    TBR=r
    CC=golang-dev
    https://golang.org/cl/5496058

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

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

元コミット内容

runtime: fix build

I am looking forward to not supporting two build
systems simultaneously.  Make complains about
a circular dependency still, but I don't understand it
and it's probably not worth the time to figure out.

TBR=r
CC=golang-dev
https://golang.org/cl/5496058

変更の背景

このコミットが行われた2011年当時、Go言語のビルドシステムは過渡期にありました。従来のMakefileベースのビルドシステムと、Go自身のツールチェイン(go toolコマンド群)を利用した新しいビルドシステムが混在しており、その両方をサポートすることによる複雑さや問題が発生していました。コミットメッセージにある「not supporting two build systems simultaneously」(2つのビルドシステムを同時にサポートしないこと)という記述は、この状況を解消し、ビルドプロセスを一本化したいという意図を明確に示しています。

また、Makefileが「circular dependency」(循環依存性)について不満を述べている、という記述から、ビルドターゲット間の依存関係が複雑になり、無限ループやビルドエラーを引き起こす可能性のある問題が存在していたことが伺えます。このコミットは、これらの問題を解決し、Goランタイムのビルドを安定させることを目的としています。

前提知識の解説

Makefileとビルドシステム

Makefileは、プログラムのコンパイルやリンクなどのビルドプロセスを自動化するためのファイルです。makeコマンドによって解釈され、ファイル間の依存関係を定義し、必要なコマンドを実行してターゲットを生成します。大規模なプロジェクトでは、複数のMakefileが存在したり、自動生成されるMakefile(例: Makefile.auto)が使われたりすることがあります。

循環依存性 (Circular Dependency)

ビルドシステムにおける循環依存性とは、AがBに依存し、BがAに依存するといったように、ビルドターゲットやファイルが互いに依存し合う状態を指します。これはビルドプロセスの無限ループや、どのターゲットからビルドを開始すべきか判断できないといった問題を引き起こし、ビルドエラーの原因となります。

Go言語のビルドシステム (2011年頃)

Go言語は、その初期から独自のツールチェイン(go build, go installなど)を持つことを目指していました。しかし、プロジェクトの初期段階では、C言語で書かれた部分(ランタイムなど)のビルドには従来のmakeが使われていました。このコミットが行われた時期は、Go自身のツールチェインが成熟しつつあり、makeへの依存を減らしていく過渡期にあたります。

gomake

コミットメッセージや変更内容から推測すると、gomakeはGoプロジェクト内で使用される、makeコマンドのラッパーまたはGo言語に特化したmakeの代替のようなツールであると考えられます。これは、GoのビルドプロセスをよりGoらしく、かつ効率的に制御するために導入された可能性があります。

技術的詳細

このコミットの主要な変更点は、src/pkg/runtime/Makefilesrc/pkg/runtime/Makefile.autoの2つのファイルにあります。

src/pkg/runtime/Makefileの変更

  1. x:=$(shell gomake -f Makefile.auto)の追加:

    • これは、Makefileの冒頭に新しい行として追加されています。
    • $(shell ...)は、シェルコマンドを実行し、その出力を変数に代入するmakeの機能です。
    • gomake -f Makefile.autoは、Makefile.autogomakeで実行することを意味します。
    • この行の追加により、メインのMakefileMakefile.autoのビルドプロセスをトリガーするようになりました。これは、ビルドの制御をMakefile.autoに委譲し、MakefileMakefile.auto間の依存関係を明確にする(または、Makefile.autoをメインのビルドフローに統合する)ための重要な変更です。これにより、従来のMakefileが抱えていた循環依存性の問題の一部を解消しようとしている可能性があります。
  2. ヘッダーファイルの依存関係の削除:

    • AUTOHFILESからzasm_GOOS_GOARCH.hが削除されました。
    • HFILESからasm_$(GOARCH).hが削除されました。
    • これらのヘッダーファイルは、Goランタイムのアセンブリコードに関連するもので、OSやアーキテクチャ固有の定義を含んでいます。これらの依存関係がMakefileから削除されたのは、おそらくMakefile.autoがこれらのファイルの生成と依存関係をより適切に管理するようになったためと考えられます。
  3. %.$O: zasm_GOOS_GOARCH.hの追加:

    • これは、zasm_GOOS_GOARCH.hがオブジェクトファイル(.$O)の依存関係として追加されたことを示しています。これは、zasm_GOOS_GOARCH.hがオブジェクトファイルのビルドに必要であることを明示しています。

src/pkg/runtime/Makefile.autoの変更

  1. include ../../Make.incの追加:

    • Makefile.autoMake.incをインクルードするようになりました。これにより、共通のビルド設定や変数がMakefile.autoでも利用可能になり、ビルドシステム全体の一貫性が向上します。
  2. HFILES変数の定義と追加:

    • Makefile.auto内でHFILES変数が定義され、arch_GOARCH.h, os_GOOS.h, signals_GOOS.h, defs_GOOS_GOARCH.h, zasm_GOOS_GOARCH.hといったヘッダーファイルが含まれるようになりました。
    • これは、Makefile.autoがこれらのヘッダーファイルの生成と管理の責任を負うことを明確にしています。
  3. zasm_%.hターゲットの依存関係の変更:

    • zasm_%.h: mkasmh.sh proc.c defs.hzasm_%.h: mkasmh.sh proc.c $(HFILES)に変更されました。
    • これにより、zasm_%.hの生成が、Makefile.autoで定義されたすべてのHFILESに依存するようになりました。これは、ヘッダーファイルの依存関係をより包括的に管理するための変更です。
  4. ヘッダーファイルのコピー規則の追加:

    • arch_GOARCH.h: arch_$(GOARCH).h
    • defs_GOOS_GOARCH.h: defs_$(GOOS)_$(GOARCH).h
    • os_GOOS.h: os_$(GOOS).h
    • signals_GOOS.h: signals_$(GOOS).h
    • zasm_GOOS_GOARCH.h: zasm_$(GOOS)_$(GOARCH).h
    • これらの規則は、OSやアーキテクチャ固有のヘッダーファイルを、一般的な名前のヘッダーファイルにコピーする役割を担っています。これにより、ビルドプロセスが特定の環境に依存することなく、汎用的なヘッダーファイル名で参照できるようになります。

これらの変更は全体として、GoランタイムのビルドプロセスをMakefile.autoに集約し、Makefileの役割を簡素化することで、ビルドシステムの複雑性を軽減し、循環依存性の問題を解消しようとする意図が見られます。

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

diff --git a/src/pkg/runtime/Makefile b/src/pkg/runtime/Makefile
index 75443324da..4d81def5a8 100644
--- a/src/pkg/runtime/Makefile
+++ b/src/pkg/runtime/Makefile
@@ -4,6 +4,8 @@
 
 include ../../Make.inc
 
+x:=$(shell gomake -f Makefile.auto)
+
 TARG=runtime
 
 GOFILES=\
@@ -106,7 +108,6 @@ AUTOHFILES=\
  \tos_GOOS.h\\\
  \tsignals_GOOS.h\\\
  \tdefs_GOOS_GOARCH.h\\\
-\tzasm_GOOS_GOARCH.h\\\
  
 HFILES=\
  \tcgocall.h\\\
@@ -114,7 +115,6 @@ HFILES=\
  \thashmap.h\\\
  \tmalloc.h\\\
  \tstack.h\\\
-\tasm_$(GOARCH).h\\\
  \t$(AUTOHFILES)\\\
  
 GOFILES+=$(GOFILES_$(GOOS))\
@@ -155,3 +155,5 @@ signals_GOOS.h: signals_$(GOOS).h
 
 zasm_GOOS_GOARCH.h: zasm_$(GOOS)_$(GOARCH).h
  \tcp $^ $@
+\
+%.$(O): zasm_GOOS_GOARCH.h
diff --git a/src/pkg/runtime/Makefile.auto b/src/pkg/runtime/Makefile.auto
index b3b31c8cca..7c9ceb0fa7 100644
--- a/src/pkg/runtime/Makefile.auto
+++ b/src/pkg/runtime/Makefile.auto
@@ -2,6 +2,8 @@
 # Use of this source code is governed by a BSD-style
 # license that can be found in the LICENSE file.
 
+include ../../Make.inc
+
 GOARCHES=\
  \t386\\\
  \tamd64\\\
@@ -48,6 +50,13 @@ AUTO=\
  \tzsyscall_windows_amd64.c\\\
  \tzversion.go\\\
  
+HFILES=\
+\tarch_GOARCH.h\\\
+\tos_GOOS.h\\\
+\tsignals_GOOS.h\\\
+\tdefs_GOOS_GOARCH.h\\\
+\tzasm_GOOS_GOARCH.h\\\
+\
 all: auto
 auto: $(AUTO)\
  
@@ -86,9 +95,24 @@ zruntime_defs_%.go: proc.c iface.c hashmap.c chan.c $(HFILES) mkgodefs.sh
  \tmv -f $@.tmp $@
  
  # struct field offsets #defined for assembly
-zasm_%.h: mkasmh.sh proc.c defs.h
+zasm_%.h: mkasmh.sh proc.c $(HFILES)
  \t./mkasmh.sh $* >$@.tmp
  \tmv -f $@.tmp $@
  
  clean:\
  \trm -f goc2c mkversion $(AUTO)\
+\
+arch_GOARCH.h: arch_$(GOARCH).h
+\tcp $^ $@
+\
+defs_GOOS_GOARCH.h: defs_$(GOOS)_$(GOARCH).h
+\tcp $^ $@
+\
+os_GOOS.h: os_$(GOOS).h
+\tcp $^ $@
+\
+signals_GOOS.h: signals_$(GOOS).h
+\tcp $^ $@
+\
+zasm_GOOS_GOARCH.h: zasm_$(GOOS)_$(GOARCH).h
+\tcp $^ $@

コアとなるコードの解説

src/pkg/runtime/Makefile

  • x:=$(shell gomake -f Makefile.auto): この行は、Makefileが実行される際に、Makefile.autogomakeで実行することを強制します。これにより、Makefile.autoで定義されたビルドステップが、メインのビルドプロセスの一部として組み込まれます。これは、ビルドの制御をMakefile.autoに委譲し、Makefileの役割を簡素化する重要なステップです。
  • AUTOHFILESHFILESからのヘッダーファイル削除: zasm_GOOS_GOARCH.hasm_$(GOARCH).hがこれらのリストから削除されました。これは、これらのヘッダーファイルの生成と依存関係の管理がMakefile.autoに移管されたためです。
  • %.$(O): zasm_GOOS_GOARCH.h: この新しい規則は、すべてのオブジェクトファイル(.oまたは.obj)がzasm_GOOS_GOARCH.hに依存することを宣言しています。これは、アセンブリコードのビルドに必要な定義がこのヘッダーファイルに含まれているためです。

src/pkg/runtime/Makefile.auto

  • include ../../Make.inc: Makefile.autoも共通のビルド設定をインクルードするようになり、ビルドシステム全体の一貫性が向上しました。
  • HFILES変数の定義: Makefile.auto内で、ランタイムビルドに必要なすべてのヘッダーファイル(arch_GOARCH.h, os_GOOS.h, signals_GOOS.h, defs_GOOS_GOARCH.h, zasm_GOOS_GOARCH.h)がHFILESとして明示的に定義されました。これにより、これらのファイルの生成と依存関係がMakefile.autoによって一元的に管理されるようになります。
  • zasm_%.hターゲットの依存関係の変更: zasm_%.hの生成が、defs.hだけでなく、Makefile.autoで定義されたすべての$(HFILES)に依存するようになりました。これは、アセンブリヘッダーの生成に必要なすべての依存関係を網羅するための変更です。
  • ヘッダーファイルのコピー規則の追加: arch_GOARCH.h, defs_GOOS_GOARCH.h, os_GOOS.h, signals_GOOS.h, zasm_GOOS_GOARCH.hといった汎用的なヘッダーファイル名が、それぞれOSやアーキテクチャ固有のファイルからコピーされる規則が追加されました。これにより、ビルドプロセスは特定の環境に依存せず、一貫したヘッダーファイル名で参照できるようになり、ビルドの柔軟性と移植性が向上します。

これらの変更は、Goランタイムのビルドプロセスをよりモジュール化し、Makefile.autoにヘッダーファイルの生成と依存関係の管理を集約することで、従来のMakefileが抱えていた複雑性や循環依存性の問題を解消しようとするものです。

関連リンク

参考にした情報源リンク

  • makeコマンドとMakefileの一般的なドキュメント
  • Go言語の初期のビルドシステムに関する議論やドキュメント(当時の情報源は現在アクセスできない可能性がありますが、一般的な知識として参照しました)
  • 循環依存性に関する一般的なソフトウェアエンジニアリングの概念
  • Go言語のソースコードリポジトリ(変更履歴とファイル構造の確認)
  • gomakeに関する情報(Goプロジェクトの文脈での使用法)

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

このコミットは、Go言語のランタイムビルドシステムにおける問題を修正し、特に複数のビルドシステムを同時にサポートすることから脱却しようとする試みの一環です。MakefileMakefile.autoという2つのビルド関連ファイルが変更され、ビルドプロセスの簡素化と循環依存性の解消が図られています。

コミット

commit cfd17a1b57adb6f1602f6a635af7f50be688ed10
Author: Russ Cox <rsc@golang.org>
Date:   Fri Dec 16 17:58:53 2011 -0500

    runtime: fix build
    
    I am looking forward to not supporting two build
    systems simultaneously.  Make complains about
    a circular dependency still, but I don't understand it
    and it's probably not worth the time to figure out.
    
    TBR=r
    CC=golang-dev
    https://golang.org/cl/5496058

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

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

元コミット内容

runtime: fix build

I am looking forward to not supporting two build
systems simultaneously.  Make complains about
a circular dependency still, but I don't understand it
and it's probably not worth the time to figure out.

TBR=r
CC=golang-dev
https://golang.org/cl/5496058

変更の背景

このコミットが行われた2011年当時、Go言語のビルドシステムは過渡期にありました。従来のMakefileベースのビルドシステムと、Go自身のツールチェイン(go toolコマンド群)を利用した新しいビルドシステムが混在しており、その両方をサポートすることによる複雑さや問題が発生していました。コミットメッセージにある「not supporting two build systems simultaneously」(2つのビルドシステムを同時にサポートしないこと)という記述は、この状況を解消し、ビルドプロセスを一本化したいという意図を明確に示しています。

また、Makefileが「circular dependency」(循環依存性)について不満を述べている、という記述から、ビルドターゲット間の依存関係が複雑になり、無限ループやビルドエラーを引き起こす可能性のある問題が存在していたことが伺えます。このコミットは、これらの問題を解決し、Goランタイムのビルドを安定させることを目的としています。

前提知識の解説

Makefileとビルドシステム

Makefileは、プログラムのコンパイルやリンクなどのビルドプロセスを自動化するためのファイルです。makeコマンドによって解釈され、ファイル間の依存関係を定義し、必要なコマンドを実行してターゲットを生成します。大規模なプロジェクトでは、複数のMakefileが存在したり、自動生成されるMakefile(例: Makefile.auto)が使われたりすることがあります。

循環依存性 (Circular Dependency)

ビルドシステムにおける循環依存性とは、AがBに依存し、BがAに依存するといったように、ビルドターゲットやファイルが互いに依存し合う状態を指します。これはビルドプロセスの無限ループや、どのターゲットからビルドを開始すべきか判断できないといった問題を引き起こし、ビルドエラーの原因となります。

Go言語のビルドシステム (2011年頃)

Go言語は、その初期から独自のツールチェイン(go build, go installなど)を持つことを目指していました。しかし、プロジェクトの初期段階では、C言語で書かれた部分(ランタイムなど)のビルドには従来のmakeが使われていました。このコミットが行われた時期は、Go自身のツールチェインが成熟しつつあり、makeへの依存を減らしていく過渡期にあたります。

gomake

コミットメッセージや変更内容から推測すると、gomakeはGoプロジェクト内で使用される、makeコマンドのラッパーまたはGo言語に特化したmakeの代替のようなツールであると考えられます。これは、GoのビルドプロセスをよりGoらしく、かつ効率的に制御するために導入された可能性があります。

技術的詳細

このコミットの主要な変更点は、src/pkg/runtime/Makefilesrc/pkg/runtime/Makefile.autoの2つのファイルにあります。

src/pkg/runtime/Makefileの変更

  1. x:=$(shell gomake -f Makefile.auto)の追加:

    • これは、Makefileの冒頭に新しい行として追加されています。
    • $(shell ...)は、シェルコマンドを実行し、その出力を変数に代入するmakeの機能です。
    • gomake -f Makefile.autoは、Makefile.autogomakeで実行することを意味します。
    • この行の追加により、メインのMakefileMakefile.autoのビルドプロセスをトリガーするようになりました。これは、ビルドの制御をMakefile.autoに委譲し、MakefileMakefile.auto間の依存関係を明確にする(または、Makefile.autoをメインのビルドフローに統合する)ための重要な変更です。これにより、従来のMakefileが抱えていた循環依存性の問題の一部を解消しようとしている可能性があります。
  2. ヘッダーファイルの依存関係の削除:

    • AUTOHFILESからzasm_GOOS_GOARCH.hが削除されました。
    • HFILESからasm_$(GOARCH).hが削除されました。
    • これらのヘッダーファイルは、Goランタイムのアセンブリコードに関連するもので、OSやアーキテクチャ固有の定義を含んでいます。これらの依存関係がMakefileから削除されたのは、おそらくMakefile.autoがこれらのファイルの生成と依存関係をより適切に管理するようになったためと考えられます。
  3. %.$O: zasm_GOOS_GOARCH.hの追加:

    • これは、zasm_GOOS_GOARCH.hがオブジェクトファイル(.$O)の依存関係として追加されたことを示しています。これは、zasm_GOOS_GOARCH.hがオブジェクトファイルのビルドに必要であることを明示しています。

src/pkg/runtime/Makefile.autoの変更

  1. include ../../Make.incの追加:

    • Makefile.autoMake.incをインクルードするようになりました。これにより、共通のビルド設定や変数がMakefile.autoでも利用可能になり、ビルドシステム全体の一貫性が向上します。
  2. HFILES変数の定義と追加:

    • Makefile.auto内でHFILES変数が定義され、arch_GOARCH.h, os_GOOS.h, signals_GOOS.h, defs_GOOS_GOARCH.h, zasm_GOOS_GOARCH.hといったヘッダーファイルが含まれるようになりました。
    • これは、Makefile.autoがこれらのヘッダーファイルの生成と管理の責任を負うことを明確にしています。
  3. zasm_%.hターゲットの依存関係の変更:

    • zasm_%.h: mkasmh.sh proc.c defs.hzasm_%.h: mkasmh.sh proc.c $(HFILES)に変更されました。
    • これにより、zasm_%.hの生成が、Makefile.autoで定義されたすべてのHFILESに依存するようになりました。これは、ヘッダーファイルの依存関係をより包括的に管理するための変更です。
  4. ヘッダーファイルのコピー規則の追加:

    • arch_GOARCH.h: arch_$(GOARCH).h
    • defs_GOOS_GOARCH.h: defs_$(GOOS)_$(GOARCH).h
    • os_GOOS.h: os_$(GOOS).h
    • signals_GOOS.h: signals_$(GOOS).h
    • zasm_GOOS_GOARCH.h: zasm_$(GOOS)_$(GOARCH).h
    • これらの規則は、OSやアーキテクチャ固有のヘッダーファイルを、一般的な名前のヘッダーファイルにコピーする役割を担っています。これにより、ビルドプロセスが特定の環境に依存することなく、汎用的なヘッダーファイル名で参照できるようになります。

これらの変更は全体として、GoランタイムのビルドプロセスをMakefile.autoに集約し、Makefileの役割を簡素化することで、ビルドシステムの複雑性を軽減し、循環依存性の問題を解消しようとする意図が見られます。

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

diff --git a/src/pkg/runtime/Makefile b/src/pkg/runtime/Makefile
index 75443324da..4d81def5a8 100644
--- a/src/pkg/runtime/Makefile
+++ b/src/pkg/runtime/Makefile
@@ -4,6 +4,8 @@
 
 include ../../Make.inc
 
+x:=$(shell gomake -f Makefile.auto)
+
 TARG=runtime
 
 GOFILES=\
@@ -106,7 +108,6 @@ AUTOHFILES=\
  \tos_GOOS.h\\\
  \tsignals_GOOS.h\\\
  \tdefs_GOOS_GOARCH.h\\\
-\tzasm_GOOS_GOARCH.h\\\
  
 HFILES=\
  \tcgocall.h\\\
@@ -114,7 +115,6 @@ HFILES=\
  \thashmap.h\\\
  \tmalloc.h\\\
  \tstack.h\\\
-\tasm_$(GOARCH).h\\\
  \t$(AUTOHFILES)\\\
  
 GOFILES+=$(GOFILES_$(GOOS))\
@@ -155,3 +155,5 @@ signals_GOOS.h: signals_GOOS.h
 
 zasm_GOOS_GOARCH.h: zasm_$(GOOS)_$(GOARCH).h
  \tcp $^ $@
+\
+%.$(O): zasm_GOOS_GOARCH.h
diff --git a/src/pkg/runtime/Makefile.auto b/src/pkg/runtime/Makefile.auto
index b3b31c8cca..7c9ceb0fa7 100644
--- a/src/pkg/runtime/Makefile.auto
+++ b/src/pkg/runtime/Makefile.auto
@@ -2,6 +2,8 @@
 # Use of this source code is governed by a BSD-style
 # license that can be found in the LICENSE file.
 
+include ../../Make.inc
+
 GOARCHES=\
  \t386\\\
  \tamd64\\\
@@ -48,6 +50,13 @@ AUTO=\
  \tzsyscall_windows_amd64.c\\\
  \tzversion.go\\\
  
+HFILES=\
+\tarch_GOARCH.h\\\
+\tos_GOOS.h\\\
+\tsignals_GOOS.h\\\
+\tdefs_GOOS_GOARCH.h\\\
+\tzasm_GOOS_GOARCH.h\\\
+\
 all: auto
 auto: $(AUTO)\
  
@@ -86,9 +95,24 @@ zruntime_defs_%.go: proc.c iface.c hashmap.c chan.c $(HFILES) mkgodefs.sh
  \tmv -f $@.tmp $@
  
  # struct field offsets #defined for assembly
-zasm_%.h: mkasmh.sh proc.c defs.h
+zasm_%.h: mkasmh.sh proc.c $(HFILES)
  \t./mkasmh.sh $* >$@.tmp
  \tmv -f $@.tmp $@
  
  clean:\
  \trm -f goc2c mkversion $(AUTO)\
+\
+arch_GOARCH.h: arch_$(GOARCH).h
+\tcp $^ $@
+\
+defs_GOOS_GOARCH.h: defs_$(GOOS)_$(GOARCH).h
+\tcp $^ $@
+\
+os_GOOS.h: os_$(GOOS).h
+\tcp $^ $@
+\
+signals_GOOS.h: signals_$(GOOS).h
+\tcp $^ $@
+\
+zasm_GOOS_GOARCH.h: zasm_$(GOOS)_$(GOARCH).h
+\tcp $^ $@

コアとなるコードの解説

src/pkg/runtime/Makefile

  • x:=$(shell gomake -f Makefile.auto): この行は、Makefileが実行される際に、Makefile.autogomakeで実行することを強制します。これにより、Makefile.autoで定義されたビルドステップが、メインのビルドプロセスの一部として組み込まれます。これは、ビルドの制御をMakefile.autoに委譲し、Makefileの役割を簡素化する重要なステップです。
  • AUTOHFILESHFILESからのヘッダーファイル削除: zasm_GOOS_GOARCH.hasm_$(GOARCH).hがこれらのリストから削除されました。これは、これらのヘッダーファイルの生成と依存関係の管理がMakefile.autoに移管されたためです。
  • %.$(O): zasm_GOOS_GOARCH.h: この新しい規則は、すべてのオブジェクトファイル(.oまたは.obj)がzasm_GOOS_GOARCH.hに依存することを宣言しています。これは、アセンブリコードのビルドに必要な定義がこのヘッダーファイルに含まれているためです。

src/pkg/runtime/Makefile.auto

  • include ../../Make.inc: Makefile.autoも共通のビルド設定をインクルードするようになり、ビルドシステム全体の一貫性が向上しました。
  • HFILES変数の定義: Makefile.auto内で、ランタイムビルドに必要なすべてのヘッダーファイル(arch_GOARCH.h, os_GOOS.h, signals_GOOS.h, defs_GOOS_GOARCH.h, zasm_GOOS_GOARCH.h)がHFILESとして明示的に定義されました。これにより、これらのファイルの生成と依存関係がMakefile.autoによって一元的に管理されるようになります。
  • zasm_%.hターゲットの依存関係の変更: zasm_%.hの生成が、defs.hだけでなく、Makefile.autoで定義されたすべての$(HFILES)に依存するようになりました。これは、アセンブリヘッダーの生成に必要なすべての依存関係を網羅するための変更です。
  • ヘッダーファイルのコピー規則の追加: arch_GOARCH.h, defs_GOOS_GOARCH.h, os_GOOS.h, signals_GOOS.h, zasm_GOOS_GOARCH.hといった汎用的なヘッダーファイル名が、それぞれOSやアーキテクチャ固有のファイルからコピーされる規則が追加されました。これにより、ビルドプロセスは特定の環境に依存せず、一貫したヘッダーファイル名で参照できるようになり、ビルドの柔軟性と移植性が向上します。

これらの変更は、Goランタイムのビルドプロセスをよりモジュール化し、Makefile.autoにヘッダーファイルの生成と依存関係の管理を集約することで、従来のMakefileが抱えていた複雑性や循環依存性の問題を解消しようとするものです。

関連リンク

参考にした情報源リンク

  • makeコマンドとMakefileの一般的なドキュメント
  • Go言語の初期のビルドシステムに関する議論やドキュメント(当時の情報源は現在アクセスできない可能性がありますが、一般的な知識として参照しました)
  • 循環依存性に関する一般的なソフトウェアエンジニアリングの概念
  • Go言語のソースコードリポジトリ(変更履歴とファイル構造の確認)
  • gomakeに関する情報(Goプロジェクトの文脈での使用法)