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 }