| // Copyright 2019 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. |
| |
| //go:build ignore |
| // +build ignore |
| |
| // The clanghost binary is like clangwrap.sh but for self-hosted iOS. |
| // |
| // Use -ldflags="-X main.sdkpath=<path to iPhoneOS.sdk>" when building |
| // the wrapper. |
| package main |
| |
| import ( |
| "fmt" |
| "os" |
| "os/exec" |
| ) |
| |
| var sdkpath = "" |
| |
| func main() { |
| if sdkpath == "" { |
| fmt.Fprintf(os.Stderr, "no SDK is set; use -ldflags=\"-X main.sdkpath=<sdk path>\" when building this wrapper.\n") |
| os.Exit(1) |
| } |
| args := os.Args[1:] |
| // Intercept requests for the path of the "ar" tool and instead |
| // always return "ar", so that the "ar" wrapper is used instead of |
| // /usr/bin/ar. See issue https://go.dev/issue/59221 and CL |
| // https://go.dev/cl/479775 for more detail. |
| if len(args) != 0 && args[0] == "--print-prog-name=ar" { |
| fmt.Printf("ar\n") |
| os.Exit(0) |
| } |
| cmd := exec.Command("clang", "-isysroot", sdkpath, "-mios-version-min=12.0") |
| cmd.Args = append(cmd.Args, args...) |
| cmd.Stdout = os.Stdout |
| cmd.Stderr = os.Stderr |
| if err := cmd.Run(); err != nil { |
| if err, ok := err.(*exec.ExitError); ok { |
| os.Exit(err.ExitCode()) |
| } |
| os.Exit(1) |
| } |
| os.Exit(0) |
| } |