mirror of
https://github.com/Cheviiot/Vintner.git
synced 2026-08-03 15:57:24 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8f52e5861a |
@@ -27,15 +27,16 @@ name it's invoked as (a "multi-call binary", like busybox):
|
|||||||
## Quick start
|
## Quick start
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 1. Download and unpack MSVC + Windows SDK (requires accepting Microsoft's
|
# 1. Download and unpack MSVC + Windows SDK into ~/.msvc-go-wine (requires
|
||||||
# Visual Studio Build Tools license, and msitools for unpacking .msi payloads)
|
# accepting Microsoft's Visual Studio Build Tools license, and msitools
|
||||||
msvc-go-wine download --accept-license --dest ~/my_msvc
|
# for unpacking .msi payloads). Pass --dest <dir> for a different location.
|
||||||
|
msvc-go-wine download --accept-license
|
||||||
|
|
||||||
# 2. Wire up the tool wrappers
|
# 2. Wire up the tool wrappers
|
||||||
msvc-go-wine install ~/my_msvc
|
msvc-go-wine install
|
||||||
|
|
||||||
# 3. Add the toolchain to PATH and build
|
# 3. Add the toolchain to PATH and build
|
||||||
export PATH=~/my_msvc/bin/x64:$PATH
|
export PATH=~/.msvc-go-wine/bin/x64:$PATH
|
||||||
cl /nologo /EHsc hello.cpp
|
cl /nologo /EHsc hello.cpp
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -55,12 +56,14 @@ pkcon install wine msitools
|
|||||||
## Commands
|
## Commands
|
||||||
|
|
||||||
```
|
```
|
||||||
msvc-go-wine download --dest <dir> [options] fetch and unpack MSVC/WinSDK
|
msvc-go-wine download --accept-license [--dest <dir>] [options] fetch and unpack MSVC/WinSDK
|
||||||
msvc-go-wine install <dir> wire up wrappers for a downloaded MSVC
|
msvc-go-wine install [dir] wire up wrappers for a downloaded MSVC
|
||||||
msvc-go-wine env --bin <dir>/bin/<arch> print INCLUDE/LIB for native clang-cl/lld-link use
|
msvc-go-wine env --bin <dir>/bin/<arch> print INCLUDE/LIB for native clang-cl/lld-link use
|
||||||
msvc-go-wine version print the version
|
msvc-go-wine version print the version
|
||||||
```
|
```
|
||||||
|
|
||||||
|
`--dest`/`[dir]` both default to `~/.msvc-go-wine` when omitted.
|
||||||
|
|
||||||
`download` supports `--msvc-version`, `--sdk-version`, `--architecture`,
|
`download` supports `--msvc-version`, `--sdk-version`, `--architecture`,
|
||||||
`--host-arch`, `--with-*` component toggles, `--ignore`, `--only-download`,
|
`--host-arch`, `--with-*` component toggles, `--ignore`, `--only-download`,
|
||||||
`--only-unpack`, `--keep-unpack`, `--cache`, `--language`,
|
`--only-unpack`, `--keep-unpack`, `--cache`, `--language`,
|
||||||
@@ -73,7 +76,7 @@ You don't need Wine at all if you drive the (nonredistributable) MSVC/WinSDK
|
|||||||
headers and libraries with Clang/LLD in MSVC-compatible mode:
|
headers and libraries with Clang/LLD in MSVC-compatible mode:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
eval "$(msvc-go-wine env --bin ~/my_msvc/bin/x64)"
|
eval "$(msvc-go-wine env --bin ~/.msvc-go-wine/bin/x64)"
|
||||||
clang-cl -c hello.c
|
clang-cl -c hello.c
|
||||||
lld-link hello.obj -out:hello.exe
|
lld-link hello.obj -out:hello.exe
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import (
|
|||||||
|
|
||||||
func runDownload(args []string) int {
|
func runDownload(args []string) int {
|
||||||
fs := flag.NewFlagSet("download", flag.ContinueOnError)
|
fs := flag.NewFlagSet("download", flag.ContinueOnError)
|
||||||
dest := fs.String("dest", "", "directory to install into (required unless --only-download)")
|
dest := fs.String("dest", "", "directory to install into (default: ~/.msvc-go-wine)")
|
||||||
cacheDir := fs.String("cache", "", "directory to use as a persistent download cache (default: a temp dir, removed afterwards)")
|
cacheDir := fs.String("cache", "", "directory to use as a persistent download cache (default: a temp dir, removed afterwards)")
|
||||||
major := fs.Int("major", 18, "the major VS version to download")
|
major := fs.Int("major", 18, "the major VS version to download")
|
||||||
preview := fs.Bool("preview", false, "download the preview/insiders channel instead of release/stable")
|
preview := fs.Bool("preview", false, "download the preview/insiders channel instead of release/stable")
|
||||||
@@ -122,9 +122,14 @@ func runDownload(args []string) int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !*onlyDownload && *dest == "" {
|
if !*onlyDownload && *dest == "" {
|
||||||
fmt.Fprintln(os.Stderr, "msvc-go-wine download: --dest is required unless --only-download is set")
|
def, err := defaultToolchainDir()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintln(os.Stderr, "msvc-go-wine download:", err)
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
*dest = def
|
||||||
|
fmt.Println("--dest not set, using default:", *dest)
|
||||||
|
}
|
||||||
|
|
||||||
if err := download.FetchPayloads(selected, cache, *onlyDownload); err != nil {
|
if err := download.FetchPayloads(selected, cache, *onlyDownload); err != nil {
|
||||||
fmt.Fprintln(os.Stderr, "msvc-go-wine download:", err)
|
fmt.Fprintln(os.Stderr, "msvc-go-wine download:", err)
|
||||||
|
|||||||
@@ -8,11 +8,23 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func runInstall(args []string) int {
|
func runInstall(args []string) int {
|
||||||
if len(args) != 1 || args[0] == "-h" || args[0] == "--help" {
|
if len(args) > 1 || (len(args) == 1 && (args[0] == "-h" || args[0] == "--help")) {
|
||||||
fmt.Fprintln(os.Stderr, "usage: msvc-go-wine install <dest>")
|
fmt.Fprintln(os.Stderr, "usage: msvc-go-wine install [dest] (default: ~/.msvc-go-wine)")
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
dest := args[0]
|
|
||||||
|
var dest string
|
||||||
|
if len(args) == 1 {
|
||||||
|
dest = args[0]
|
||||||
|
} else {
|
||||||
|
def, err := defaultToolchainDir()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintln(os.Stderr, "msvc-go-wine install:", err)
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
dest = def
|
||||||
|
fmt.Println("No directory given, using default:", dest)
|
||||||
|
}
|
||||||
|
|
||||||
self, err := os.Executable()
|
self, err := os.Executable()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -63,11 +63,14 @@ func printUsage() {
|
|||||||
fmt.Fprint(os.Stderr, `msvc-go-wine - cross compile with MSVC on Linux via Wine
|
fmt.Fprint(os.Stderr, `msvc-go-wine - cross compile with MSVC on Linux via Wine
|
||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
msvc-go-wine download --dest <dir> [options] fetch and unpack MSVC/WinSDK
|
msvc-go-wine download --accept-license [--dest <dir>] [options]
|
||||||
msvc-go-wine install <dir> wire up wrappers for a downloaded MSVC
|
fetch and unpack MSVC/WinSDK
|
||||||
|
msvc-go-wine install [dir] wire up wrappers for a downloaded MSVC
|
||||||
msvc-go-wine env --bin <dir/bin/arch> print INCLUDE/LIB for native clang-cl/lld-link use
|
msvc-go-wine env --bin <dir/bin/arch> print INCLUDE/LIB for native clang-cl/lld-link use
|
||||||
msvc-go-wine version print the version
|
msvc-go-wine version print the version
|
||||||
|
|
||||||
|
--dest/[dir] default to ~/.msvc-go-wine if omitted.
|
||||||
|
|
||||||
Once installed, add <dir>/bin/<arch> to PATH and invoke the tools directly:
|
Once installed, add <dir>/bin/<arch> to PATH and invoke the tools directly:
|
||||||
cl, link, lib, ml, ml64, mc, midl, mt, rc, dumpbin, msbuild, nmake, armasm, armasm64, cmd, findstr
|
cl, link, lib, ml, ml64, mc, midl, mt, rc, dumpbin, msbuild, nmake, armasm, armasm64, cmd, findstr
|
||||||
`)
|
`)
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
)
|
||||||
|
|
||||||
|
// defaultToolchainDir is where `download`/`install` operate when the user
|
||||||
|
// doesn't specify a directory: a hidden ~/.msvc-go-wine, so it doesn't
|
||||||
|
// clutter a plain `ls ~`.
|
||||||
|
func defaultToolchainDir() (string, error) {
|
||||||
|
home, err := os.UserHomeDir()
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return filepath.Join(home, ".msvc-go-wine"), nil
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user