Sun OS platforms (legacy solaris but illumos based ones too). (#176)

large pages set via a hint.
diff --git a/build/ninja/clang.py b/build/ninja/clang.py
index a6d2127..bae4417 100644
--- a/build/ninja/clang.py
+++ b/build/ninja/clang.py
@@ -70,7 +70,7 @@
     self.parse_default_variables(variables)
     self.read_build_prefs()
 
-    if self.target.is_linux() or self.target.is_bsd() or self.target.is_raspberrypi():
+    if self.target.is_linux() or self.target.is_bsd() or self.target.is_raspberrypi() or self.target.is_sunos():
       self.cflags += ['-D_GNU_SOURCE=1']
       self.linkflags += ['-pthread']
       self.oslibs += ['m']
@@ -335,7 +335,7 @@
     flags = []
     if targettype == 'sharedlib':
       flags += ['-DBUILD_DYNAMIC_LINK=1']
-      if self.target.is_linux() or self.target.is_bsd():
+      if self.target.is_linux() or self.target.is_bsd() or self.target.is_sunos():
        flags += ['-fPIC']
     flags += self.make_targetarchflags(arch, targettype)
     return flags
diff --git a/build/ninja/gcc.py b/build/ninja/gcc.py
index 20646c1..299be53 100644
--- a/build/ninja/gcc.py
+++ b/build/ninja/gcc.py
@@ -49,7 +49,7 @@
     self.parse_default_variables(variables)
     self.read_build_prefs()
 
-    if self.target.is_linux() or self.target.is_bsd() or self.target.is_raspberrypi():
+    if self.target.is_linux() or self.target.is_bsd() or self.target.is_raspberrypi() or self.target.is_sunos():
       self.cflags += ['-D_GNU_SOURCE=1']
       self.linkflags += ['-pthread']
     if self.target.is_linux() or self.target.is_raspberrypi():
@@ -186,7 +186,7 @@
     flags = []
     if targettype == 'sharedlib':
       flags += ['-DBUILD_DYNAMIC_LINK=1']
-      if self.target.is_linux() or self.target.is_bsd():
+      if self.target.is_linux() or self.target.is_bsd() or self.target.is_sunos():
         flags += ['-fPIC']
     flags += self.make_targetarchflags(arch, targettype)
     return flags
diff --git a/build/ninja/platform.py b/build/ninja/platform.py
index 68cf0ab..cf91c14 100644
--- a/build/ninja/platform.py
+++ b/build/ninja/platform.py
@@ -5,7 +5,7 @@
 import sys
 
 def supported_platforms():
-  return [ 'windows', 'linux', 'macos', 'bsd', 'ios', 'android', 'raspberrypi', 'tizen' ]
+  return [ 'windows', 'linux', 'macos', 'bsd', 'ios', 'android', 'raspberrypi', 'tizen', 'sunos' ]
 
 class Platform(object):
   def __init__(self, platform):
@@ -30,6 +30,8 @@
       self.platform = 'raspberrypi'
     elif self.platform.startswith('tizen'):
       self.platform = 'tizen'
+    elif self.platform.startswith('sunos'):
+      self.platform = 'sunos'
 
   def platform(self):
     return self.platform
@@ -58,5 +60,8 @@
   def is_tizen(self):
     return self.platform == 'tizen'
 
+  def is_sunos(self):
+    return self.platform == 'sunos'
+
   def get(self):
     return self.platform
diff --git a/build/ninja/toolchain.py b/build/ninja/toolchain.py
index dd5f4ac..d10d840 100644
--- a/build/ninja/toolchain.py
+++ b/build/ninja/toolchain.py
@@ -132,7 +132,7 @@
   def initialize_default_archs(self):
     if self.target.is_windows():
       self.archs = ['x86-64']
-    elif self.target.is_linux() or self.target.is_bsd():
+    elif self.target.is_linux() or self.target.is_bsd() or self.target.is_sunos():
       localarch = subprocess.check_output(['uname', '-m']).decode().strip()
       if localarch == 'x86_64' or localarch == 'amd64':
         self.archs = ['x86-64']
diff --git a/rpmalloc/rpmalloc.c b/rpmalloc/rpmalloc.c
index 84227b3..d011bcc 100644
--- a/rpmalloc/rpmalloc.c
+++ b/rpmalloc/rpmalloc.c
@@ -757,6 +757,9 @@
 	void* ptr = mmap(0, size + padding, PROT_READ | PROT_WRITE, flags, fd, 0);
 #  elif defined(MAP_HUGETLB)
 	void* ptr = mmap(0, size + padding, PROT_READ | PROT_WRITE, (_memory_huge_pages ? MAP_HUGETLB : 0) | flags, -1, 0);
+#  elif defined(MAP_ALIGN)
+	caddr_t base = (_memory_huge_pages ? (caddr_t)(4 << 20) : 0);
+	void* ptr = mmap(base, size + padding, PROT_READ | PROT_WRITE, (_memory_huge_pages ? MAP_ALIGN : 0) | flags, -1, 0);
 #  else
 	void* ptr = mmap(0, size + padding, PROT_READ | PROT_WRITE, flags, -1, 0);
 #  endif