diff --git a/cc/gen_stub_libs.py b/cc/gen_stub_libs.py
index d6cd973..7c70406 100755
--- a/cc/gen_stub_libs.py
+++ b/cc/gen_stub_libs.py
@@ -79,7 +79,7 @@
     return version.endswith('_PRIVATE') or version.endswith('_PLATFORM')
 
 
-def should_omit_version(name, tags, arch, api):
+def should_omit_version(name, tags, arch, api, vndk):
     """Returns True if the version section should be ommitted.
 
     We want to omit any sections that do not have any symbols we'll have in the
@@ -90,6 +90,8 @@
         return True
     if 'platform-only' in tags:
         return True
+    if 'vndk' in tags and not vndk:
+        return True
     if not symbol_in_arch(tags, arch):
         return True
     if not symbol_in_api(tags, arch, api):
@@ -271,11 +273,12 @@
 
 class Generator(object):
     """Output generator that writes stub source files and version scripts."""
-    def __init__(self, src_file, version_script, arch, api):
+    def __init__(self, src_file, version_script, arch, api, vndk):
         self.src_file = src_file
         self.version_script = version_script
         self.arch = arch
         self.api = api
+        self.vndk = vndk
 
     def write(self, versions):
         """Writes all symbol data to the output files."""
@@ -286,13 +289,15 @@
         """Writes a single version block's data to the output files."""
         name = version.name
         tags = version.tags
-        if should_omit_version(name, tags, self.arch, self.api):
+        if should_omit_version(name, tags, self.arch, self.api, self.vndk):
             return
 
         section_versioned = symbol_versioned_in_api(tags, self.api)
         version_empty = True
         pruned_symbols = []
         for symbol in version.symbols:
+            if not self.vndk and 'vndk' in symbol.tags:
+                continue
             if not symbol_in_arch(symbol.tags, self.arch):
                 continue
             if not symbol_in_api(symbol.tags, self.arch, self.api):
@@ -333,6 +338,8 @@
     parser.add_argument(
         '--arch', choices=ALL_ARCHITECTURES, required=True,
         help='Architecture being targeted.')
+    parser.add_argument(
+        '--vndk', action='store_true', help='Use the VNDK variant.')
 
     parser.add_argument(
         'symbol_file', type=os.path.realpath, help='Path to symbol file.')
@@ -361,7 +368,8 @@
 
     with open(args.stub_src, 'w') as src_file:
         with open(args.version_script, 'w') as version_file:
-            generator = Generator(src_file, version_file, args.arch, args.api)
+            generator = Generator(src_file, version_file, args.arch, args.api,
+                                  args.vndk)
             generator.write(versions)
 
 
diff --git a/cc/test_gen_stub_libs.py b/cc/test_gen_stub_libs.py
index 8683d31..8611ef3 100755
--- a/cc/test_gen_stub_libs.py
+++ b/cc/test_gen_stub_libs.py
@@ -107,27 +107,39 @@
 
 class OmitVersionTest(unittest.TestCase):
     def test_omit_private(self):
-        self.assertFalse(gsl.should_omit_version('foo', [], 'arm', 9))
-
-        self.assertTrue(gsl.should_omit_version('foo_PRIVATE', [], 'arm', 9))
-        self.assertTrue(gsl.should_omit_version('foo_PLATFORM', [], 'arm', 9))
+        self.assertFalse(gsl.should_omit_version('foo', [], 'arm', 9, False))
 
         self.assertTrue(gsl.should_omit_version(
-            'foo', ['platform-only'], 'arm', 9))
+            'foo_PRIVATE', [], 'arm', 9, False))
+        self.assertTrue(gsl.should_omit_version(
+            'foo_PLATFORM', [], 'arm', 9, False))
+
+        self.assertTrue(gsl.should_omit_version(
+            'foo', ['platform-only'], 'arm', 9, False))
+
+    def test_omit_vndk(self):
+        self.assertTrue(gsl.should_omit_version(
+            'foo', ['vndk'], 'arm', 9, False))
+
+        self.assertFalse(gsl.should_omit_version('foo', [], 'arm', 9, True))
+        self.assertFalse(gsl.should_omit_version(
+            'foo', ['vndk'], 'arm', 9, True))
 
     def test_omit_arch(self):
-        self.assertFalse(gsl.should_omit_version('foo', [], 'arm', 9))
-        self.assertFalse(gsl.should_omit_version('foo', ['arm'], 'arm', 9))
+        self.assertFalse(gsl.should_omit_version('foo', [], 'arm', 9, False))
+        self.assertFalse(gsl.should_omit_version(
+            'foo', ['arm'], 'arm', 9, False))
 
-        self.assertTrue(gsl.should_omit_version('foo', ['x86'], 'arm', 9))
+        self.assertTrue(gsl.should_omit_version(
+            'foo', ['x86'], 'arm', 9, False))
 
     def test_omit_api(self):
-        self.assertFalse(gsl.should_omit_version('foo', [], 'arm', 9))
+        self.assertFalse(gsl.should_omit_version('foo', [], 'arm', 9, False))
         self.assertFalse(
-            gsl.should_omit_version('foo', ['introduced=9'], 'arm', 9))
+            gsl.should_omit_version('foo', ['introduced=9'], 'arm', 9, False))
 
         self.assertTrue(
-            gsl.should_omit_version('foo', ['introduced=14'], 'arm', 9))
+            gsl.should_omit_version('foo', ['introduced=14'], 'arm', 9, False))
 
 
 class SymbolFileParseTest(unittest.TestCase):
@@ -302,7 +314,7 @@
         # OmitVersionTest, PrivateVersionTest, and SymbolPresenceTest.
         src_file = cStringIO.StringIO()
         version_file = cStringIO.StringIO()
-        generator = gsl.Generator(src_file, version_file, 'arm', 9)
+        generator = gsl.Generator(src_file, version_file, 'arm', 9, False)
 
         version = gsl.Version('VERSION_PRIVATE', None, [], [
             gsl.Symbol('foo', []),
@@ -330,7 +342,7 @@
         # SymbolPresenceTest.
         src_file = cStringIO.StringIO()
         version_file = cStringIO.StringIO()
-        generator = gsl.Generator(src_file, version_file, 'arm', 9)
+        generator = gsl.Generator(src_file, version_file, 'arm', 9, False)
 
         version = gsl.Version('VERSION_1', None, [], [
             gsl.Symbol('foo', ['x86']),
@@ -346,10 +358,17 @@
         self.assertEqual('', src_file.getvalue())
         self.assertEqual('', version_file.getvalue())
 
+        version = gsl.Version('VERSION_1', None, [], [
+            gsl.Symbol('foo', ['vndk']),
+        ])
+        generator.write_version(version)
+        self.assertEqual('', src_file.getvalue())
+        self.assertEqual('', version_file.getvalue())
+
     def test_write(self):
         src_file = cStringIO.StringIO()
         version_file = cStringIO.StringIO()
-        generator = gsl.Generator(src_file, version_file, 'arm', 9)
+        generator = gsl.Generator(src_file, version_file, 'arm', 9, False)
 
         versions = [
             gsl.Version('VERSION_1', None, [], [
@@ -410,6 +429,7 @@
 
             VERSION_4 { # versioned=9
                 wibble;
+                wizzes; # vndk
             } VERSION_2;
 
             VERSION_5 { # versioned=14
@@ -421,7 +441,7 @@
 
         src_file = cStringIO.StringIO()
         version_file = cStringIO.StringIO()
-        generator = gsl.Generator(src_file, version_file, 'arm', 9)
+        generator = gsl.Generator(src_file, version_file, 'arm', 9, False)
         generator.write(versions)
 
         expected_src = textwrap.dedent("""\
