github.com/westcoastroms/westcoastroms-build@v0.0.0-20190928114312-2350e5a73030/build/soong/cc/config/x86_windows_host.go (about)

     1  // Copyright 2015 Google Inc. All rights reserved.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package config
    16  
    17  import (
    18  	"strings"
    19  
    20  	"android/soong/android"
    21  )
    22  
    23  var (
    24  	windowsCflags = []string{
    25  		"-DUSE_MINGW",
    26  		"-DWIN32_LEAN_AND_MEAN",
    27  		"-Wno-unused-parameter",
    28  
    29  		// Workaround differences in inttypes.h between host and target.
    30  		//See bug 12708004.
    31  		"-D__STDC_FORMAT_MACROS",
    32  		"-D__STDC_CONSTANT_MACROS",
    33  
    34  		// Use C99-compliant printf functions (%zd).
    35  		"-D__USE_MINGW_ANSI_STDIO=1",
    36  		// Admit to using >= Vista. Both are needed because of <_mingw.h>.
    37  		"-D_WIN32_WINNT=0x0600",
    38  		"-DWINVER=0x0600",
    39  		// Get 64-bit off_t and related functions.
    40  		"-D_FILE_OFFSET_BITS=64",
    41  
    42  		"--sysroot ${WindowsGccRoot}/${WindowsGccTriple}",
    43  	}
    44  	windowsClangCflags = append(ClangFilterUnknownCflags(windowsCflags), []string{}...)
    45  
    46  	windowsIncludeFlags = []string{
    47  		"-isystem ${WindowsGccRoot}/${WindowsGccTriple}/include",
    48  		"-isystem ${WindowsGccRoot}/lib/gcc/${WindowsGccTriple}/4.8.3/include",
    49  	}
    50  
    51  	windowsClangCppflags = []string{
    52  		"-isystem ${WindowsGccRoot}/${WindowsGccTriple}/include/c++/4.8.3",
    53  		"-isystem ${WindowsGccRoot}/${WindowsGccTriple}/include/c++/4.8.3/backward",
    54  	}
    55  
    56  	windowsX86ClangCppflags = []string{
    57  		"-isystem ${WindowsGccRoot}/${WindowsGccTriple}/include/c++/4.8.3/${WindowsGccTriple}/32",
    58  	}
    59  
    60  	windowsX8664ClangCppflags = []string{
    61  		"-isystem ${WindowsGccRoot}/${WindowsGccTriple}/include/c++/4.8.3/${WindowsGccTriple}",
    62  	}
    63  
    64  	windowsLdflags = []string{
    65  		"--enable-stdcall-fixup",
    66  	}
    67  	windowsClangLdflags = append(ClangFilterUnknownCflags(windowsLdflags), []string{}...)
    68  
    69  	windowsX86Cflags = []string{
    70  		"-m32",
    71  	}
    72  
    73  	windowsX8664Cflags = []string{
    74  		"-m64",
    75  	}
    76  
    77  	windowsX86Ldflags = []string{
    78  		"-m32",
    79  		"-Wl,--large-address-aware",
    80  		"-L${WindowsGccRoot}/${WindowsGccTriple}/lib32",
    81  	}
    82  	windowsX86ClangLdflags = append(ClangFilterUnknownCflags(windowsX86Ldflags), []string{
    83  		"-B${WindowsGccRoot}/lib/gcc/${WindowsGccTriple}/4.8.3/32",
    84  		"-L${WindowsGccRoot}/lib/gcc/${WindowsGccTriple}/4.8.3/32",
    85  		"-B${WindowsGccRoot}/${WindowsGccTriple}/lib32",
    86  	}...)
    87  
    88  	windowsX8664Ldflags = []string{
    89  		"-m64",
    90  		"-L${WindowsGccRoot}/${WindowsGccTriple}/lib64",
    91  	}
    92  	windowsX8664ClangLdflags = append(ClangFilterUnknownCflags(windowsX8664Ldflags), []string{
    93  		"-B${WindowsGccRoot}/lib/gcc/${WindowsGccTriple}/4.8.3",
    94  		"-L${WindowsGccRoot}/lib/gcc/${WindowsGccTriple}/4.8.3",
    95  		"-B${WindowsGccRoot}/${WindowsGccTriple}/lib64",
    96  	}...)
    97  
    98  	windowsAvailableLibraries = addPrefix([]string{
    99  		"gdi32",
   100  		"imagehlp",
   101  		"iphlpapi",
   102  		"netapi32",
   103  		"ole32",
   104  		"powrprof",
   105  		"psapi",
   106  		"pthread",
   107  		"userenv",
   108  		"uuid",
   109  		"version",
   110  		"ws2_32",
   111  	}, "-l")
   112  )
   113  
   114  const (
   115  	windowsGccVersion = "4.8"
   116  )
   117  
   118  func init() {
   119  	pctx.StaticVariable("WindowsGccVersion", windowsGccVersion)
   120  
   121  	pctx.SourcePathVariable("WindowsGccRoot",
   122  		"prebuilts/gcc/${HostPrebuiltTag}/host/x86_64-w64-mingw32-${WindowsGccVersion}")
   123  
   124  	pctx.StaticVariable("WindowsGccTriple", "x86_64-w64-mingw32")
   125  
   126  	pctx.StaticVariable("WindowsCflags", strings.Join(windowsCflags, " "))
   127  	pctx.StaticVariable("WindowsLdflags", strings.Join(windowsLdflags, " "))
   128  
   129  	pctx.StaticVariable("WindowsClangCflags", strings.Join(windowsClangCflags, " "))
   130  	pctx.StaticVariable("WindowsClangLdflags", strings.Join(windowsClangLdflags, " "))
   131  	pctx.StaticVariable("WindowsClangCppflags", strings.Join(windowsClangCppflags, " "))
   132  
   133  	pctx.StaticVariable("WindowsX86Cflags", strings.Join(windowsX86Cflags, " "))
   134  	pctx.StaticVariable("WindowsX8664Cflags", strings.Join(windowsX8664Cflags, " "))
   135  	pctx.StaticVariable("WindowsX86Ldflags", strings.Join(windowsX86Ldflags, " "))
   136  	pctx.StaticVariable("WindowsX8664Ldflags", strings.Join(windowsX8664Ldflags, " "))
   137  
   138  	pctx.StaticVariable("WindowsX86ClangCflags",
   139  		strings.Join(ClangFilterUnknownCflags(windowsX86Cflags), " "))
   140  	pctx.StaticVariable("WindowsX8664ClangCflags",
   141  		strings.Join(ClangFilterUnknownCflags(windowsX8664Cflags), " "))
   142  	pctx.StaticVariable("WindowsX86ClangLdflags", strings.Join(windowsX86ClangLdflags, " "))
   143  	pctx.StaticVariable("WindowsX8664ClangLdflags", strings.Join(windowsX8664ClangLdflags, " "))
   144  	pctx.StaticVariable("WindowsX86ClangCppflags", strings.Join(windowsX86ClangCppflags, " "))
   145  	pctx.StaticVariable("WindowsX8664ClangCppflags", strings.Join(windowsX8664ClangCppflags, " "))
   146  
   147  	pctx.StaticVariable("WindowsIncludeFlags", strings.Join(windowsIncludeFlags, " "))
   148  }
   149  
   150  type toolchainWindows struct {
   151  	cFlags, ldFlags string
   152  }
   153  
   154  type toolchainWindowsX86 struct {
   155  	toolchain32Bit
   156  	toolchainWindows
   157  }
   158  
   159  type toolchainWindowsX8664 struct {
   160  	toolchain64Bit
   161  	toolchainWindows
   162  }
   163  
   164  func (t *toolchainWindowsX86) Name() string {
   165  	return "x86"
   166  }
   167  
   168  func (t *toolchainWindowsX8664) Name() string {
   169  	return "x86_64"
   170  }
   171  
   172  func (t *toolchainWindows) GccRoot() string {
   173  	return "${config.WindowsGccRoot}"
   174  }
   175  
   176  func (t *toolchainWindows) GccTriple() string {
   177  	return "${config.WindowsGccTriple}"
   178  }
   179  
   180  func (t *toolchainWindows) GccVersion() string {
   181  	return windowsGccVersion
   182  }
   183  
   184  func (t *toolchainWindowsX86) Cflags() string {
   185  	return "${config.WindowsCflags} ${config.WindowsX86Cflags}"
   186  }
   187  
   188  func (t *toolchainWindowsX8664) Cflags() string {
   189  	return "${config.WindowsCflags} ${config.WindowsX8664Cflags}"
   190  }
   191  
   192  func (t *toolchainWindows) Cppflags() string {
   193  	return ""
   194  }
   195  
   196  func (t *toolchainWindowsX86) Ldflags() string {
   197  	return "${config.WindowsLdflags} ${config.WindowsX86Ldflags}"
   198  }
   199  
   200  func (t *toolchainWindowsX8664) Ldflags() string {
   201  	return "${config.WindowsLdflags} ${config.WindowsX8664Ldflags}"
   202  }
   203  
   204  func (t *toolchainWindows) IncludeFlags() string {
   205  	return "${config.WindowsIncludeFlags}"
   206  }
   207  
   208  func (t *toolchainWindowsX86) WindresFlags() string {
   209  	return "-F pe-i386"
   210  }
   211  
   212  func (t *toolchainWindowsX8664) WindresFlags() string {
   213  	return "-F pe-x86-64"
   214  }
   215  
   216  func (t *toolchainWindows) ClangSupported() bool {
   217  	return false
   218  }
   219  
   220  func (t *toolchainWindowsX86) ClangTriple() string {
   221  	return "i686-windows-gnu"
   222  }
   223  
   224  func (t *toolchainWindowsX8664) ClangTriple() string {
   225  	return "x86_64-pc-windows-gnu"
   226  }
   227  
   228  func (t *toolchainWindowsX86) ClangCflags() string {
   229  	return "${config.WindowsClangCflags} ${config.WindowsX86ClangCflags}"
   230  }
   231  
   232  func (t *toolchainWindowsX8664) ClangCflags() string {
   233  	return "${config.WindowsClangCflags} ${config.WindowsX8664ClangCflags}"
   234  }
   235  
   236  func (t *toolchainWindowsX86) ClangCppflags() string {
   237  	return "${config.WindowsClangCppflags} ${config.WindowsX86ClangCppflags}"
   238  }
   239  
   240  func (t *toolchainWindowsX8664) ClangCppflags() string {
   241  	return "${config.WindowsClangCppflags} ${config.WindowsX8664ClangCppflags}"
   242  }
   243  
   244  func (t *toolchainWindowsX86) ClangLdflags() string {
   245  	return "${config.WindowsClangLdflags} ${config.WindowsX86ClangLdflags}"
   246  }
   247  
   248  func (t *toolchainWindowsX8664) ClangLdflags() string {
   249  	return "${config.WindowsClangLdflags} ${config.WindowsX8664ClangLdflags}"
   250  }
   251  
   252  func (t *toolchainWindows) ShlibSuffix() string {
   253  	return ".dll"
   254  }
   255  
   256  func (t *toolchainWindows) ExecutableSuffix() string {
   257  	return ".exe"
   258  }
   259  
   260  func (t *toolchainWindows) AvailableLibraries() []string {
   261  	return windowsAvailableLibraries
   262  }
   263  
   264  func (t *toolchainWindows) Bionic() bool {
   265  	return false
   266  }
   267  
   268  var toolchainWindowsX86Singleton Toolchain = &toolchainWindowsX86{}
   269  var toolchainWindowsX8664Singleton Toolchain = &toolchainWindowsX8664{}
   270  
   271  func windowsX86ToolchainFactory(arch android.Arch) Toolchain {
   272  	return toolchainWindowsX86Singleton
   273  }
   274  
   275  func windowsX8664ToolchainFactory(arch android.Arch) Toolchain {
   276  	return toolchainWindowsX8664Singleton
   277  }
   278  
   279  func init() {
   280  	registerToolchainFactory(android.Windows, android.X86, windowsX86ToolchainFactory)
   281  	registerToolchainFactory(android.Windows, android.X86_64, windowsX8664ToolchainFactory)
   282  }