diff --git a/cc/androidmk.go b/cc/androidmk.go
index 0cd6faf..f45fbbe 100644
--- a/cc/androidmk.go
+++ b/cc/androidmk.go
@@ -156,14 +156,6 @@
 	}
 }
 
-func (vndkLibrary *vndkExtLibraryDecorator) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) {
-	ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) error {
-		fmt.Fprintln(w, "LOCAL_EXTENDS_MODULE := ", vndkLibrary.properties.Extends)
-		return nil
-	})
-	vndkLibrary.libraryDecorator.AndroidMk(ctx, ret)
-}
-
 func (object *objectLinker) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) {
 	ret.Custom = func(w io.Writer, name, prefix, moduleDir string) error {
 		out := ret.OutputFile.Path()
diff --git a/cc/cc.go b/cc/cc.go
index c5f1c35..4c69723 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -163,9 +163,6 @@
 	vndk() bool
 	selectedStl() string
 	baseModuleName() string
-	isNdk() bool
-	isVndk() bool
-	isSameProcessHal() bool
 }
 
 type ModuleContext interface {
@@ -408,18 +405,6 @@
 	return ctx.mod.ModuleBase.BaseModuleName()
 }
 
-func (ctx *moduleContextImpl) isNdk() bool {
-	return inList(ctx.baseModuleName(), ndkPrebuiltSharedLibraries)
-}
-
-func (ctx *moduleContextImpl) isVndk() bool {
-	return config.IsVndkLibrary(ctx.baseModuleName())
-}
-
-func (ctx *moduleContextImpl) isSameProcessHal() bool {
-	return inList(ctx.baseModuleName(), ctx.ctx.DeviceConfig().SameProcessHalDeps())
-}
-
 func newBaseModule(hod android.HostOrDeviceSupported, multilib android.Multilib) *Module {
 	return &Module{
 		hod:      hod,
diff --git a/cc/config/global.go b/cc/config/global.go
index 68de5d0..1ce1cce 100644
--- a/cc/config/global.go
+++ b/cc/config/global.go
@@ -176,11 +176,3 @@
 func VndkLibraries() []string {
 	return []string{}
 }
-
-func VndkIndirectLibraries() []string {
-	return []string{}
-}
-
-func IsVndkLibrary(name string) bool {
-	return inList(name, VndkLibraries()) || inList(name, VndkIndirectLibraries())
-}
diff --git a/cc/installer.go b/cc/installer.go
index de04ab6..64f87d9 100644
--- a/cc/installer.go
+++ b/cc/installer.go
@@ -47,7 +47,6 @@
 
 	dir      string
 	dir64    string
-	subDir   string
 	relative string
 	location installLocation
 
@@ -61,14 +60,14 @@
 }
 
 func (installer *baseInstaller) installDir(ctx ModuleContext) android.OutputPath {
-	dir := installer.dir
+	subDir := installer.dir
 	if ctx.toolchain().Is64Bit() && installer.dir64 != "" {
-		dir = installer.dir64
+		subDir = installer.dir64
 	}
 	if !ctx.Host() && !ctx.Arch().Native {
-		dir = filepath.Join(dir, ctx.Arch().ArchType.String())
+		subDir = filepath.Join(subDir, ctx.Arch().ArchType.String())
 	}
-	return android.PathForModuleInstall(ctx, dir, installer.subDir, installer.Properties.Relative_install_path, installer.relative)
+	return android.PathForModuleInstall(ctx, subDir, installer.Properties.Relative_install_path, installer.relative)
 }
 
 func (installer *baseInstaller) install(ctx ModuleContext, file android.Path) {
diff --git a/cc/library.go b/cc/library.go
index 0ce84a1..0658fef 100644
--- a/cc/library.go
+++ b/cc/library.go
@@ -587,26 +587,6 @@
 
 func (library *libraryDecorator) install(ctx ModuleContext, file android.Path) {
 	if !ctx.static() {
-		if ctx.Device() {
-			if ctx.isNdk() {
-				library.baseInstaller.subDir = "ndk"
-				if ctx.Proprietary() {
-					ctx.ModuleErrorf("NDK library must not be proprietary")
-				}
-			} else if ctx.isVndk() {
-				library.baseInstaller.subDir = "vndk"
-				if ctx.Proprietary() {
-					ctx.ModuleErrorf("VNDK library must not be proprietary")
-				}
-			} else if ctx.isSameProcessHal() {
-				library.baseInstaller.subDir = "sameprocess"
-				if !ctx.Proprietary() {
-					ctx.ModuleErrorf("SameProcess HAL library must be proprietary")
-				}
-			} else {
-				// Do nothing for other types of lib
-			}
-		}
 		library.baseInstaller.install(ctx, file)
 	}
 }
diff --git a/cc/makevars.go b/cc/makevars.go
index 3ab7955..200faff 100644
--- a/cc/makevars.go
+++ b/cc/makevars.go
@@ -58,7 +58,6 @@
 		ctx.Strict("BOARD_VNDK_VERSION", "")
 	}
 	ctx.Strict("VNDK_LIBRARIES", strings.Join(config.VndkLibraries(), " "))
-	ctx.Strict("VNDK_INDIRECT_LIBRARIES", strings.Join(config.VndkIndirectLibraries(), " "))
 
 	ctx.Strict("ADDRESS_SANITIZER_CONFIG_EXTRA_CFLAGS", asanCflags)
 	ctx.Strict("ADDRESS_SANITIZER_CONFIG_EXTRA_LDFLAGS", asanLdflags)
diff --git a/cc/vndk_library.go b/cc/vndk_library.go
deleted file mode 100644
index cca4f3f..0000000
--- a/cc/vndk_library.go
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright 2017 Google Inc. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package cc
-
-import (
-	"github.com/google/blueprint"
-
-	"android/soong/android"
-	"android/soong/cc/config"
-)
-
-type vndkExtLibraryProperties struct {
-	// Name of the VNDK library module that this VNDK-ext library is extending.
-	// This library will have the same file name and soname as the original VNDK
-	// library, but will be installed in /system/lib/vndk-ext rather
-	// than /system/lib/vndk.
-	Extends string
-}
-
-type vndkExtLibraryDecorator struct {
-	*libraryDecorator
-
-	properties vndkExtLibraryProperties
-}
-
-func init() {
-	android.RegisterModuleType("vndk_ext_library", vndkExtLibraryFactory)
-}
-
-func (deco *vndkExtLibraryDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flags {
-	extends := deco.properties.Extends
-	if extends != "" {
-		if config.IsVndkLibrary(extends) {
-			// TODO(jiyong): ensure that the module referenced by 'extends' exists. Don't know how...
-			// Adding a dependency was not successful because it leads to circular dependency
-			// in between this and the 'extends' module.
-			// Ideally, this should be something like follows:
-			// otherCtx = findModuleByName(deco.properties.Extends)
-			// if otherCtx != nil && otherCtx.isVndk() {
-			//     deco.libaryDecorator.libName = otherCtx.getBaseName()
-			// }
-			deco.libraryDecorator.libName = extends
-		} else {
-			ctx.PropertyErrorf("extends", "%s should be a VNDK or VNDK-indirect library", extends)
-		}
-	} else {
-		ctx.PropertyErrorf("extends", "missing. A VNDK-ext library must extend existing VNDK library")
-	}
-	return deco.libraryDecorator.linkerFlags(ctx, flags)
-}
-
-func (deco *vndkExtLibraryDecorator) install(ctx ModuleContext, file android.Path) {
-	deco.libraryDecorator.baseInstaller.subDir = "vndk-ext"
-	deco.libraryDecorator.baseInstaller.install(ctx, file)
-}
-
-func vndkExtLibraryFactory() (blueprint.Module, []interface{}) {
-	module, library := NewLibrary(android.DeviceSupported)
-	library.BuildOnlyShared()
-
-	_, props := module.Init()
-
-	deco := &vndkExtLibraryDecorator{
-		libraryDecorator: library,
-	}
-
-	module.installer = deco
-	module.linker = deco
-
-	props = append(props, &deco.properties)
-
-	return module, props
-}
