blob: 79c9e36e05db0880549ddb7a844a05042ea8292e [file] [log] [blame]
Dan Willemsen490fd492015-11-24 17:53:15 -08001// 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
Colin Crossb98c8b02016-07-29 13:44:28 -070015package config
Dan Willemsen490fd492015-11-24 17:53:15 -080016
17import (
18 "strings"
19
Colin Cross635c3b02016-05-18 15:37:25 -070020 "android/soong/android"
Dan Willemsen490fd492015-11-24 17:53:15 -080021)
22
23var (
24 windowsCflags = []string{
25 "-fno-exceptions", // from build/core/combo/select.mk
26 "-Wno-multichar", // from build/core/combo/select.mk
27
28 "-DUSE_MINGW",
29 "-DWIN32_LEAN_AND_MEAN",
30 "-Wno-unused-parameter",
Dan Willemsen490fd492015-11-24 17:53:15 -080031
32 // Workaround differences in inttypes.h between host and target.
33 //See bug 12708004.
34 "-D__STDC_FORMAT_MACROS",
35 "-D__STDC_CONSTANT_MACROS",
36
37 // Use C99-compliant printf functions (%zd).
38 "-D__USE_MINGW_ANSI_STDIO=1",
Dan Willemsen01fdd3d2016-03-30 00:01:12 -070039 // Admit to using >= Vista. Both are needed because of <_mingw.h>.
40 "-D_WIN32_WINNT=0x0600",
41 "-DWINVER=0x0600",
Dan Willemsen490fd492015-11-24 17:53:15 -080042 // Get 64-bit off_t and related functions.
43 "-D_FILE_OFFSET_BITS=64",
44
Colin Crossb98c8b02016-07-29 13:44:28 -070045 "--sysroot ${WindowsGccRoot}/${WindowsGccTriple}",
Dan Willemsen01fdd3d2016-03-30 00:01:12 -070046
Dan Willemsen490fd492015-11-24 17:53:15 -080047 // HOST_RELEASE_CFLAGS
48 "-O2", // from build/core/combo/select.mk
49 "-g", // from build/core/combo/select.mk
50 "-fno-strict-aliasing", // from build/core/combo/select.mk
51 }
52
53 windowsIncludeFlags = []string{
Colin Crossb98c8b02016-07-29 13:44:28 -070054 "-isystem ${WindowsGccRoot}/${WindowsGccTriple}/include",
55 "-isystem ${WindowsGccRoot}/lib/gcc/${WindowsGccTriple}/4.8.3/include",
Dan Willemsen490fd492015-11-24 17:53:15 -080056 }
57
58 windowsLdflags = []string{
Dan Willemsen490fd492015-11-24 17:53:15 -080059 "--enable-stdcall-fixup",
60 }
Dan Willemsen07cd0512016-02-03 23:16:33 -080061
62 windowsX86Cflags = []string{
63 "-m32",
64 }
65
66 windowsX8664Cflags = []string{
67 "-m64",
68 }
69
70 windowsX86Ldflags = []string{
71 "-m32",
Colin Crossb98c8b02016-07-29 13:44:28 -070072 "-L${WindowsGccRoot}/${WindowsGccTriple}/lib32",
Dan Willemsen07cd0512016-02-03 23:16:33 -080073 }
74
75 windowsX8664Ldflags = []string{
76 "-m64",
Colin Crossb98c8b02016-07-29 13:44:28 -070077 "-L${WindowsGccRoot}/${WindowsGccTriple}/lib64",
Dan Willemsen07cd0512016-02-03 23:16:33 -080078 }
Dan Willemsen2b1f0942016-07-20 12:47:47 -070079
80 windowsAvailableLibraries = addPrefix([]string{
81 "gdi32",
82 "imagehlp",
83 "ole32",
84 "psapi",
Kenny Rootb9123492016-09-20 14:49:33 -070085 "pthread",
Dan Willemsen2b1f0942016-07-20 12:47:47 -070086 "userenv",
87 "uuid",
88 "ws2_32",
89 }, "-l")
Dan Willemsen490fd492015-11-24 17:53:15 -080090)
91
Dan Willemsen34fc3b12015-12-07 12:30:44 -080092const (
93 windowsGccVersion = "4.8"
94)
95
Dan Willemsen490fd492015-11-24 17:53:15 -080096func init() {
Colin Crossb98c8b02016-07-29 13:44:28 -070097 pctx.StaticVariable("WindowsGccVersion", windowsGccVersion)
Dan Willemsen490fd492015-11-24 17:53:15 -080098
Colin Crossb98c8b02016-07-29 13:44:28 -070099 pctx.SourcePathVariable("WindowsGccRoot",
100 "prebuilts/gcc/${HostPrebuiltTag}/host/x86_64-w64-mingw32-${WindowsGccVersion}")
Dan Willemsen490fd492015-11-24 17:53:15 -0800101
Colin Crossb98c8b02016-07-29 13:44:28 -0700102 pctx.StaticVariable("WindowsGccTriple", "x86_64-w64-mingw32")
Dan Willemsen490fd492015-11-24 17:53:15 -0800103
Colin Crossb98c8b02016-07-29 13:44:28 -0700104 pctx.StaticVariable("WindowsCflags", strings.Join(windowsCflags, " "))
105 pctx.StaticVariable("WindowsLdflags", strings.Join(windowsLdflags, " "))
Dan Willemsen07cd0512016-02-03 23:16:33 -0800106
Colin Crossb98c8b02016-07-29 13:44:28 -0700107 pctx.StaticVariable("WindowsX86Cflags", strings.Join(windowsX86Cflags, " "))
108 pctx.StaticVariable("WindowsX8664Cflags", strings.Join(windowsX8664Cflags, " "))
109 pctx.StaticVariable("WindowsX86Ldflags", strings.Join(windowsX86Ldflags, " "))
110 pctx.StaticVariable("WindowsX8664Ldflags", strings.Join(windowsX8664Ldflags, " "))
Dan Willemsend352edf2016-05-18 16:06:10 -0700111
Colin Crossb98c8b02016-07-29 13:44:28 -0700112 pctx.StaticVariable("WindowsIncludeFlags", strings.Join(windowsIncludeFlags, " "))
Dan Willemsen490fd492015-11-24 17:53:15 -0800113}
114
115type toolchainWindows struct {
Dan Willemsen490fd492015-11-24 17:53:15 -0800116 cFlags, ldFlags string
117}
118
Dan Willemsen07cd0512016-02-03 23:16:33 -0800119type toolchainWindowsX86 struct {
120 toolchain32Bit
121 toolchainWindows
122}
123
124type toolchainWindowsX8664 struct {
125 toolchain64Bit
126 toolchainWindows
127}
128
129func (t *toolchainWindowsX86) Name() string {
Dan Willemsen490fd492015-11-24 17:53:15 -0800130 return "x86"
131}
132
Dan Willemsen07cd0512016-02-03 23:16:33 -0800133func (t *toolchainWindowsX8664) Name() string {
134 return "x86_64"
135}
136
Dan Willemsen490fd492015-11-24 17:53:15 -0800137func (t *toolchainWindows) GccRoot() string {
Colin Crossb98c8b02016-07-29 13:44:28 -0700138 return "${config.WindowsGccRoot}"
Dan Willemsen490fd492015-11-24 17:53:15 -0800139}
140
141func (t *toolchainWindows) GccTriple() string {
Colin Crossb98c8b02016-07-29 13:44:28 -0700142 return "${config.WindowsGccTriple}"
Dan Willemsen490fd492015-11-24 17:53:15 -0800143}
144
145func (t *toolchainWindows) GccVersion() string {
Dan Willemsen34fc3b12015-12-07 12:30:44 -0800146 return windowsGccVersion
Dan Willemsen490fd492015-11-24 17:53:15 -0800147}
148
Dan Willemsen07cd0512016-02-03 23:16:33 -0800149func (t *toolchainWindowsX86) Cflags() string {
Colin Crossb98c8b02016-07-29 13:44:28 -0700150 return "${config.WindowsCflags} ${config.WindowsX86Cflags}"
Dan Willemsen07cd0512016-02-03 23:16:33 -0800151}
152
153func (t *toolchainWindowsX8664) Cflags() string {
Colin Crossb98c8b02016-07-29 13:44:28 -0700154 return "${config.WindowsCflags} ${config.WindowsX8664Cflags}"
Dan Willemsen490fd492015-11-24 17:53:15 -0800155}
156
157func (t *toolchainWindows) Cppflags() string {
158 return ""
159}
160
Dan Willemsen07cd0512016-02-03 23:16:33 -0800161func (t *toolchainWindowsX86) Ldflags() string {
Colin Crossb98c8b02016-07-29 13:44:28 -0700162 return "${config.WindowsLdflags} ${config.WindowsX86Ldflags}"
Dan Willemsen07cd0512016-02-03 23:16:33 -0800163}
164
165func (t *toolchainWindowsX8664) Ldflags() string {
Colin Crossb98c8b02016-07-29 13:44:28 -0700166 return "${config.WindowsLdflags} ${config.WindowsX8664Ldflags}"
Dan Willemsen490fd492015-11-24 17:53:15 -0800167}
168
169func (t *toolchainWindows) IncludeFlags() string {
Colin Crossb98c8b02016-07-29 13:44:28 -0700170 return "${config.WindowsIncludeFlags}"
Dan Willemsen490fd492015-11-24 17:53:15 -0800171}
172
173func (t *toolchainWindows) ClangSupported() bool {
174 return false
175}
176
177func (t *toolchainWindows) ClangTriple() string {
178 panic("Clang is not supported under mingw")
179}
180
181func (t *toolchainWindows) ClangCflags() string {
182 panic("Clang is not supported under mingw")
183}
184
185func (t *toolchainWindows) ClangCppflags() string {
186 panic("Clang is not supported under mingw")
187}
188
189func (t *toolchainWindows) ClangLdflags() string {
190 panic("Clang is not supported under mingw")
191}
192
193func (t *toolchainWindows) ShlibSuffix() string {
194 return ".dll"
195}
196
197func (t *toolchainWindows) ExecutableSuffix() string {
198 return ".exe"
199}
200
Dan Willemsen2b1f0942016-07-20 12:47:47 -0700201func (t *toolchainWindows) AvailableLibraries() []string {
202 return windowsAvailableLibraries
203}
204
Dan Willemsen07cd0512016-02-03 23:16:33 -0800205var toolchainWindowsX86Singleton Toolchain = &toolchainWindowsX86{}
206var toolchainWindowsX8664Singleton Toolchain = &toolchainWindowsX8664{}
Dan Willemsen490fd492015-11-24 17:53:15 -0800207
Colin Cross635c3b02016-05-18 15:37:25 -0700208func windowsX86ToolchainFactory(arch android.Arch) Toolchain {
Dan Willemsen07cd0512016-02-03 23:16:33 -0800209 return toolchainWindowsX86Singleton
210}
211
Colin Cross635c3b02016-05-18 15:37:25 -0700212func windowsX8664ToolchainFactory(arch android.Arch) Toolchain {
Dan Willemsen07cd0512016-02-03 23:16:33 -0800213 return toolchainWindowsX8664Singleton
Dan Willemsen490fd492015-11-24 17:53:15 -0800214}
215
216func init() {
Colin Crossa1ad8d12016-06-01 17:09:44 -0700217 registerToolchainFactory(android.Windows, android.X86, windowsX86ToolchainFactory)
218 registerToolchainFactory(android.Windows, android.X86_64, windowsX8664ToolchainFactory)
Dan Willemsen490fd492015-11-24 17:53:15 -0800219}