Add MSYS as a platform.
This adds code to build GN for
the MSYS2 platform, NOT mingw,
meaning the Cygwin like POSIX layer.
Change-Id: I6e26522c465750e67ce3b26fd11c8b02726dabdb
Reviewed-on: https://gn-review.googlesource.com/c/gn/+/9660
Reviewed-by: Brett Wilson <brettw@chromium.org>
Commit-Queue: Brett Wilson <brettw@chromium.org>
diff --git a/build/gen.py b/build/gen.py
index c4effa8..c8f0e88 100755
--- a/build/gen.py
+++ b/build/gen.py
@@ -37,6 +37,8 @@
self._platform = 'darwin'
elif self._platform.startswith('mingw'):
self._platform = 'mingw'
+ elif self._platform.startswith('msys'):
+ self._platform = 'msys'
elif self._platform.startswith('win'):
self._platform = 'msvc'
elif self._platform.startswith('aix'):
@@ -54,7 +56,7 @@
@staticmethod
def known_platforms():
- return ['linux', 'darwin', 'mingw', 'msvc', 'aix', 'fuchsia', 'freebsd', 'openbsd', 'haiku', 'solaris']
+ return ['linux', 'darwin', 'mingw', 'msys', 'msvc', 'aix', 'fuchsia', 'freebsd', 'openbsd', 'haiku', 'solaris']
def platform(self):
return self._platform
@@ -65,6 +67,9 @@
def is_mingw(self):
return self._platform == 'mingw'
+ def is_msys(self):
+ return self._platform == 'msys'
+
def is_msvc(self):
return self._platform == 'msvc'
@@ -84,7 +89,7 @@
return self._platform == 'solaris'
def is_posix(self):
- return self._platform in ['linux', 'freebsd', 'darwin', 'aix', 'openbsd', 'haiku', 'solaris']
+ return self._platform in ['linux', 'freebsd', 'darwin', 'aix', 'openbsd', 'haiku', 'solaris', 'msys']
def main(argv):
@@ -202,6 +207,7 @@
template_filename = os.path.join(SCRIPT_DIR, {
'msvc': 'build_win.ninja.template',
'mingw': 'build_linux.ninja.template',
+ 'msys': 'build_linux.ninja.template',
'darwin': 'build_mac.ninja.template',
'linux': 'build_linux.ninja.template',
'freebsd': 'build_linux.ninja.template',
@@ -293,6 +299,10 @@
cxx = os.environ.get('CXX', 'g++')
ld = os.environ.get('LD', 'g++')
ar = os.environ.get('AR', 'ar -X64')
+ elif platform.is_msys():
+ cxx = os.environ.get('CXX', 'g++')
+ ld = os.environ.get('LD', 'g++')
+ ar = os.environ.get('AR', 'ar')
else:
cxx = os.environ.get('CXX', 'clang++')
ld = cxx
@@ -361,14 +371,23 @@
'-std=c++17'
])
- if platform.is_linux() or platform.is_mingw():
+ if platform.is_linux() or platform.is_mingw() or platform.is_msys():
ldflags.append('-Wl,--as-needed')
if not options.no_static_libstdcpp:
ldflags.append('-static-libstdc++')
- # This is needed by libc++.
- if not platform.is_mingw():
+ if platform.is_mingw() or platform.is_msys():
+ cflags.remove('-std=c++17')
+ cflags.extend([
+ '-Wno-deprecated-copy',
+ '-Wno-implicit-fallthrough',
+ '-Wno-redundant-move',
+ '-Wno-unused-variable',
+ '-std=gnu++17'
+ ])
+ else:
+ # This is needed by libc++.
libs.append('-ldl')
elif platform.is_darwin():
min_mac_version_flag = '-mmacosx-version-min=10.9'
@@ -384,7 +403,7 @@
if platform.is_posix() and not platform.is_haiku():
ldflags.append('-pthread')
- if platform.is_mingw():
+ if platform.is_mingw() or platform.is_msys():
cflags.extend(['-DUNICODE',
'-DNOMINMAX',
'-DWIN32_LEAN_AND_MEAN',
diff --git a/src/base/files/file.h b/src/base/files/file.h
index 673a638..dead6bd 100644
--- a/src/base/files/file.h
+++ b/src/base/files/file.h
@@ -23,7 +23,7 @@
namespace base {
#if defined(OS_BSD) || defined(OS_MACOSX) || defined(OS_NACL) || \
- defined(OS_HAIKU) || defined(OS_ANDROID) && __ANDROID_API__ < 21
+ defined(OS_HAIKU) || defined(OS_MSYS) || defined(OS_ANDROID) && __ANDROID_API__ < 21
typedef struct stat stat_wrapper_t;
#elif defined(OS_POSIX) || defined(OS_FUCHSIA)
typedef struct stat64 stat_wrapper_t;
diff --git a/src/base/files/file_posix.cc b/src/base/files/file_posix.cc
index a60b22b..349cbfe 100644
--- a/src/base/files/file_posix.cc
+++ b/src/base/files/file_posix.cc
@@ -25,7 +25,7 @@
namespace {
#if defined(OS_BSD) || defined(OS_MACOSX) || defined(OS_NACL) || \
- defined(OS_HAIKU) || defined(OS_ANDROID) && __ANDROID_API__ < 21
+ defined(OS_HAIKU) || defined(OS_MSYS) || defined(OS_ANDROID) && __ANDROID_API__ < 21
int CallFstat(int fd, stat_wrapper_t* sb) {
return fstat(fd, sb);
}
diff --git a/src/base/files/file_util_posix.cc b/src/base/files/file_util_posix.cc
index 90362ff..79c9428 100644
--- a/src/base/files/file_util_posix.cc
+++ b/src/base/files/file_util_posix.cc
@@ -58,7 +58,7 @@
namespace {
#if defined(OS_BSD) || defined(OS_MACOSX) || defined(OS_NACL) || \
- defined(OS_HAIKU) || defined(OS_ANDROID) && __ANDROID_API__ < 21
+ defined(OS_HAIKU) || defined(OS_MSYS) || defined(OS_ANDROID) && __ANDROID_API__ < 21
int CallStat(const char* path, stat_wrapper_t* sb) {
return stat(path, sb);
}
diff --git a/src/gn/args.cc b/src/gn/args.cc
index bba3eca..392c0c9 100644
--- a/src/gn/args.cc
+++ b/src/gn/args.cc
@@ -302,7 +302,7 @@
void Args::SetSystemVarsLocked(Scope* dest) const {
// Host OS.
const char* os = nullptr;
-#if defined(OS_WIN)
+#if defined(OS_WIN) || defined(OS_MSYS)
os = "win";
#elif defined(OS_MACOSX)
os = "mac";
diff --git a/src/gn/function_write_file_unittest.cc b/src/gn/function_write_file_unittest.cc
index 7113526..5ee6123 100644
--- a/src/gn/function_write_file_unittest.cc
+++ b/src/gn/function_write_file_unittest.cc
@@ -13,7 +13,7 @@
#include "gn/test_with_scope.h"
#include "util/test/test.h"
-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_HAIKU)
+#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_HAIKU) || defined(OS_MSYS)
#include <sys/time.h>
#endif
diff --git a/src/util/build_config.h b/src/util/build_config.h
index f7cc991..717b4e3 100644
--- a/src/util/build_config.h
+++ b/src/util/build_config.h
@@ -34,6 +34,8 @@
// we really are using glibc, not uClibc pretending to be glibc
#define LIBC_GLIBC 1
#endif
+#elif defined(__MSYS__)
+#define OS_MSYS 1
#elif defined(_WIN32)
#define OS_WIN 1
#elif defined(__Fuchsia__)
@@ -71,7 +73,8 @@
#if defined(OS_AIX) || defined(OS_ANDROID) || defined(OS_ASMJS) || \
defined(OS_FREEBSD) || defined(OS_LINUX) || defined(OS_MACOSX) || \
defined(OS_NACL) || defined(OS_NETBSD) || defined(OS_OPENBSD) || \
- defined(OS_QNX) || defined(OS_SOLARIS) || defined(OS_HAIKU)
+ defined(OS_QNX) || defined(OS_SOLARIS) || defined(OS_HAIKU) || \
+ defined(OS_MSYS)
#define OS_POSIX 1
#endif