From: Junio C Hamano <gitster@pobox.com>
To: "Kyohei Kadota via GitGitGadget" <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org, Eric Sunshine <sunshine@sunshineco.com>,
"KADOTA\, Kyohei" <lufia@lufia.org>
Subject: Re: [PATCH v3 2/2] Use $(LD) instead of $(CC) for linking the object files
Date: Wed, 09 Sep 2020 22:31:01 -0700 [thread overview]
Message-ID: <xmqq4ko6ryei.fsf@gitster.c.googlers.com> (raw)
In-Reply-To: <7d33e11867e0a75efb1a906610ff81da2ace9717.1599704262.git.gitgitgadget@gmail.com> (Kyohei Kadota via GitGitGadget's message of "Thu, 10 Sep 2020 02:17:42 +0000")
"Kyohei Kadota via GitGitGadget" <gitgitgadget@gmail.com> writes:
> diff --git a/Makefile b/Makefile
> index 86e5411f39..c0c0c280f0 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -543,6 +543,7 @@ export prefix bindir sharedir sysconfdir gitwebdir perllibdir localedir
>
> # Set our default programs
> CC = cc
> +LD = cc
This is good that any system that use 'cc' to link now will reach
the same 'cc' via $(LD) instead of $(CC).
But those who customize $(CC) to their taste now needs to override
not just CC but also LD. Can we avoid regressing for them? Perhaps
default the value of LD to $(CC) instead of hardcoded 'cc'?
> @@ -2121,7 +2122,7 @@ git.sp git.s git.o: EXTRA_CPPFLAGS = \
> '-DGIT_INFO_PATH="$(infodir_relative_SQ)"'
>
> git$X: git.o GIT-LDFLAGS $(BUILTIN_OBJS) $(GITLIBS)
> - $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) \
> + $(QUIET_LINK)$(LD) -o $@ $(ALL_LDFLAGS) \
> $(filter %.o,$^) $(LIBS)
Are there those who depended on ALL_CFLAGS on the command line when
the final linking happens?
For example, people have '-g -O2' on CFLAGS, and that will be
included in ALL_CFLAGS and passed to the final linking phase. GNU
ld has "-O" option to optimize; when existing systems link with "cc
-g -O2 -o $@ ...", it is likely that "-O2" given to "cc" will cause
the "-O" option to be passed to underlying "ld".
But with the updated procedure (where LD is 'cc' for them), the
linkage will be done without ALL_CFLAGS passed on the command line,
and results in "cc -o $@ ...", without "-g -O2".
That sounds like a regression.
> @@ -2445,17 +2446,17 @@ compat/nedmalloc/nedmalloc.sp: SP_EXTRA_FLAGS += -Wno-non-pointer-null
> endif
>
> git-%$X: %.o GIT-LDFLAGS $(GITLIBS)
> - $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)
> + $(QUIET_LINK)$(LD) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)
>
> git-imap-send$X: imap-send.o $(IMAP_SEND_BUILDDEPS) GIT-LDFLAGS $(GITLIBS)
> - $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
> + $(QUIET_LINK)$(LD) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
> $(IMAP_SEND_LDFLAGS) $(LIBS)
>
> git-http-fetch$X: http.o http-walker.o http-fetch.o GIT-LDFLAGS $(GITLIBS)
> - $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
> + $(QUIET_LINK)$(LD) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
> $(CURL_LIBCURL) $(LIBS)
> git-http-push$X: http.o http-push.o GIT-LDFLAGS $(GITLIBS)
> - $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
> + $(QUIET_LINK)$(LD) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
> $(CURL_LIBCURL) $(EXPAT_LIBEXPAT) $(LIBS)
>
> $(REMOTE_CURL_ALIASES): $(REMOTE_CURL_PRIMARY)
> @@ -2465,7 +2466,7 @@ $(REMOTE_CURL_ALIASES): $(REMOTE_CURL_PRIMARY)
> cp $< $@
>
> $(REMOTE_CURL_PRIMARY): remote-curl.o http.o http-walker.o GIT-LDFLAGS $(GITLIBS)
> - $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
> + $(QUIET_LINK)$(LD) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
> $(CURL_LIBCURL) $(EXPAT_LIBEXPAT) $(LIBS)
>
> @@ -2753,7 +2754,7 @@ perf: all
> t/helper/test-tool$X: $(patsubst %,t/helper/%,$(TEST_BUILTINS_OBJS))
>
> t/helper/test-%$X: t/helper/test-%.o GIT-LDFLAGS $(GITLIBS)
> - $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(filter %.a,$^) $(LIBS)
> + $(QUIET_LINK)$(LD) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(filter %.a,$^) $(LIBS)
Likewise for all of the above.
> diff --git a/ci/lib.sh b/ci/lib.sh
> index 3eefec500d..19c5beb277 100755
> --- a/ci/lib.sh
> +++ b/ci/lib.sh
> @@ -125,6 +125,7 @@ then
All changes to this file to pass LD=cc everywhere CC=cc is passed
look good to me.
> diff --git a/config.mak.in b/config.mak.in
> index e6a6d0f941..76ea7e781e 100644
> --- a/config.mak.in
> +++ b/config.mak.in
> @@ -2,6 +2,7 @@
> # @configure_input@
>
> CC = @CC@
> +LD = @CC@
> CFLAGS = @CFLAGS@
> CPPFLAGS = @CPPFLAGS@
> LDFLAGS = @LDFLAGS@
OK.
> diff --git a/config.mak.uname b/config.mak.uname
> index c7eba69e54..886ce068f8 100644
> --- a/config.mak.uname
> +++ b/config.mak.uname
> @@ -69,6 +69,7 @@ ifeq ($(uname_S),GNU/kFreeBSD)
> endif
> ifeq ($(uname_S),UnixWare)
> CC = cc
> + LD = $(CC)
> NEEDS_SOCKET = YesPlease
> NEEDS_NSL = YesPlease
> NEEDS_SSL_WITH_CRYPTO = YesPlease
> @@ -90,6 +91,7 @@ ifeq ($(uname_S),SCO_SV)
> endif
> ifeq ($(uname_R),5)
> CC = cc
> + LD = $(CC)
> BASIC_CFLAGS += -Kthread
> endif
> NEEDS_SOCKET = YesPlease
> @@ -435,6 +437,7 @@ ifeq ($(uname_S),Windows)
> DEFAULT_HELP_FORMAT = html
>
> CC = compat/vcbuild/scripts/clink.pl
> + LD = $(CC)
> AR = compat/vcbuild/scripts/lib.pl
> CFLAGS =
> BASIC_CFLAGS = -nologo -I. -Icompat/vcbuild/include -DWIN32 -D_CONSOLE -DHAVE_STRING_H -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE
> @@ -525,6 +528,7 @@ ifeq ($(uname_S),NONSTOP_KERNEL)
> ifeq ($(uname_R).$(uname_V),L17.02)
> CC += -WRVU=L16.05
> endif
> + LD = $(CC)
> # Disable all optimization, seems to result in bad code, with -O or -O2
> # or even -O1 (default), /usr/local/libexec/git-core/git-pack-objects
> # abends on "git push". Needs more investigation.
Ditto.
> @@ -665,8 +669,10 @@ else
> BASIC_LDFLAGS += -Wl,--large-address-aware
> endif
> CC = gcc
> + LD = $(CC)
> COMPAT_CFLAGS += -D__USE_MINGW_ANSI_STDIO=0 -DDETECT_MSYS_TTY \
> -fstack-protector-strong
> + BASIC_LDFLAGS += -fstack-protector-strong
> EXTLIBS += -lntdll
> INSTALL = /bin/install
> NO_R_TO_GCC_LINKER = YesPlease
This is an example of the problem we discussed earlier for not
passing ALL_CFLAGS to the linking phase. I am not sure what the
best solution is, though.
Thanks.
prev parent reply other threads:[~2020-09-10 5:31 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-06 1:05 [PATCH 0/4] Fit the building tools to Plan 9 environment KADOTA, Kyohei via GitGitGadget
2020-08-06 1:05 ` [PATCH 1/4] Use $(SHELL_PATH) instead of sh in Makefile lufia via GitGitGadget
2020-08-06 2:13 ` brian m. carlson
2020-08-06 4:10 ` Eric Sunshine
2020-08-06 14:39 ` Kyohei Kadota
2020-08-06 17:30 ` Junio C Hamano
2020-08-10 9:04 ` Kyohei Kadota
2020-08-06 1:05 ` [PATCH 2/4] Define TAR_CF and TAR_XF variables " lufia via GitGitGadget
2020-08-06 17:50 ` Junio C Hamano
2020-08-06 1:05 ` [PATCH 3/4] Fit to Plan 9's ANSI/POSIX compatibility layer lufia via GitGitGadget
2020-08-06 2:04 ` brian m. carlson
2020-08-06 13:49 ` Kyohei Kadota
2020-08-06 23:51 ` brian m. carlson
2020-08-06 23:57 ` Eric Sunshine
2020-08-06 18:10 ` Junio C Hamano
2020-08-10 10:53 ` Kyohei Kadota
2020-08-06 1:05 ` [PATCH 4/4] Use $(LD) instead of $(CC) for linking the object files lufia via GitGitGadget
2020-08-06 2:23 ` [PATCH 0/4] Fit the building tools to Plan 9 environment brian m. carlson
2020-09-09 19:47 ` [PATCH v2 0/2] " KADOTA, Kyohei via GitGitGadget
2020-09-09 19:47 ` [PATCH v2 1/2] Fit to Plan 9's ANSI/POSIX compatibility layer Kyohei Kadota via GitGitGadget
2020-09-09 19:56 ` Eric Sunshine
2020-09-09 20:34 ` Junio C Hamano
2020-09-10 0:35 ` Kyohei Kadota
2020-09-09 19:47 ` [PATCH v2 2/2] Use $(LD) instead of $(CC) for linking the object files Kyohei Kadota via GitGitGadget
2020-09-10 2:17 ` [PATCH v3 0/2] Fit the building tools to Plan 9 environment KADOTA, Kyohei via GitGitGadget
2020-09-10 2:17 ` [PATCH v3 1/2] Fit to Plan 9's ANSI/POSIX compatibility layer Kyohei Kadota via GitGitGadget
2020-09-10 5:13 ` Junio C Hamano
2020-09-10 2:17 ` [PATCH v3 2/2] Use $(LD) instead of $(CC) for linking the object files Kyohei Kadota via GitGitGadget
2020-09-10 5:31 ` Junio C Hamano [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqq4ko6ryei.fsf@gitster.c.googlers.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=lufia@lufia.org \
--cc=sunshine@sunshineco.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.