Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

x/build: add a Windows builder with clang #38755

Open
jayconrod opened this issue Apr 29, 2020 · 10 comments
Open

x/build: add a Windows builder with clang #38755

jayconrod opened this issue Apr 29, 2020 · 10 comments

Comments

@jayconrod
Copy link
Contributor

@jayconrod jayconrod commented Apr 29, 2020

In theory, we should be able to use either GCC or Clang on all platforms where cgo is supported. Currently, none of the Windows builders use Clang. It would be good to verify cgo works in that configuration.

@gopherbot
Copy link

@gopherbot gopherbot commented Feb 13, 2021

Change https://golang.org/cl/291630 mentions this issue: cmd/link: set SizeOfRawData filed in COFF files for .bss section

@gopherbot
Copy link

@gopherbot gopherbot commented Feb 13, 2021

Change https://golang.org/cl/291630 mentions this issue: cmd/link: set SizeOfRawData field in COFF files for .bss section

@gopherbot
Copy link

@gopherbot gopherbot commented Feb 14, 2021

Change https://golang.org/cl/291632 mentions this issue: cmd/link: do not pass -Bsymbolic for PE DLLs

@gopherbot
Copy link

@gopherbot gopherbot commented Feb 14, 2021

Change https://golang.org/cl/291633 mentions this issue: cmd/link: set .ctors COFF section to writable and aligned to 8 bytes

@gopherbot
Copy link

@gopherbot gopherbot commented Feb 14, 2021

Change https://golang.org/cl/291633 mentions this issue: cmd/link: set .ctors COFF section to writable and aligned

gopherbot pushed a commit that referenced this issue Feb 23, 2021
… .bss section

GCC and Clang both set the SizeOfRawData field rather than the
VirtualSize field for communicating the size of the .bss section. As a
consequence, LLD does not look at VirtualSize and collapses the .bss
section into whatever is around it, resulting in runtime crashes. This
commit changes the logic so that if the requested "file size" is 0, then
the SizeOfRawData field is set rather than the VirtualSize field as the
sole length marker.

Fixes #44250.
Fixes #39326.
Updates #38755.
Updates #36439.
Updates #43800.

Change-Id: Ied89ddaa0a717fed840238244c6e4848845aeeb6
Reviewed-on: https://go-review.googlesource.com/c/go/+/291630
Trust: Jason A. Donenfeld <Jason@zx2c4.com>
Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
gopherbot pushed a commit that referenced this issue Feb 23, 2021
This is only a valid option on ELF. Binutils accepts it, but LLVM
rejects it, so for Windows, it's best to just omit it.

Updates #44250.
Updates #39326.
Updates #38755.
Updates #36439.
Updates #43800.

Change-Id: Iffd2345d757f23dd737e63bd464cd412527077c4
Reviewed-on: https://go-review.googlesource.com/c/go/+/291632
Trust: Jason A. Donenfeld <Jason@zx2c4.com>
Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
gopherbot pushed a commit that referenced this issue Feb 23, 2021
Without setting these flags, LLVM's LLD ignores the .ctors section when
merging objects.

Updates #44250.
Updates #39326.
Updates #38755.
Updates #36439.
Updates #43800.

Change-Id: I8766104508f7acd832088a590ee7d68afa0d6065
Reviewed-on: https://go-review.googlesource.com/c/go/+/291633
Trust: Jason A. Donenfeld <Jason@zx2c4.com>
Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
@zx2c4
Copy link
Contributor

@zx2c4 zx2c4 commented Feb 23, 2021

@jayconrod git master now has patches to make this work.

Here's a toolchain you can use: https://github.com/mstorsjo/llvm-mingw/releases/download/20201020/llvm-mingw-20201020-msvcrt-x86_64.zip

I've had good luck with this, and at some point we might consider encouraging the llvm toolchains, since only those support arm.

@Keithcat1
Copy link

@Keithcat1 Keithcat1 commented Feb 23, 2021

Minor issue: when rebuilding my application using the llvm-lld linker, I have to delete my applications executable first or I get this message: go build json: build output "json.exe" already exists and is not an object file

@zx2c4
Copy link
Contributor

@zx2c4 zx2c4 commented Feb 23, 2021

Can you let me know if f1562c7 fixes the issue for you?

@Keithcat1
Copy link

@Keithcat1 Keithcat1 commented Feb 23, 2021

Give me half an hour. I also noticed that when I start a binary created with llvm-lld, it doesn't create a command line prompt. It is as if I had used the the -H WINDOWSGUI flag, even though I didn't.

@Keithcat1
Copy link

@Keithcat1 Keithcat1 commented Feb 23, 2021

Yeah, seems to work. Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
5 participants