github.com/westcoastroms/westcoastroms-build@v0.0.0-20190928114312-2350e5a73030/build/soong/cc/toolchain_library.go (about)

     1  // Copyright 2016 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  
    15  package cc
    16  
    17  import (
    18  	"android/soong/android"
    19  )
    20  
    21  //
    22  // Device libraries shipped with gcc
    23  //
    24  
    25  func init() {
    26  	android.RegisterModuleType("toolchain_library", toolchainLibraryFactory)
    27  }
    28  
    29  type toolchainLibraryDecorator struct {
    30  	*libraryDecorator
    31  }
    32  
    33  func (*toolchainLibraryDecorator) linkerDeps(ctx DepsContext, deps Deps) Deps {
    34  	// toolchain libraries can't have any dependencies
    35  	return deps
    36  }
    37  
    38  func toolchainLibraryFactory() android.Module {
    39  	module, library := NewLibrary(android.HostAndDeviceSupported)
    40  	library.BuildOnlyStatic()
    41  	toolchainLibrary := &toolchainLibraryDecorator{
    42  		libraryDecorator: library,
    43  	}
    44  	module.compiler = toolchainLibrary
    45  	module.linker = toolchainLibrary
    46  	module.Properties.Clang = BoolPtr(false)
    47  	module.stl = nil
    48  	module.sanitize = nil
    49  	module.installer = nil
    50  	return module.Init()
    51  }
    52  
    53  func (library *toolchainLibraryDecorator) compile(ctx ModuleContext, flags Flags,
    54  	deps PathDeps) Objects {
    55  	return Objects{}
    56  }
    57  
    58  func (library *toolchainLibraryDecorator) link(ctx ModuleContext,
    59  	flags Flags, deps PathDeps, objs Objects) android.Path {
    60  
    61  	libName := ctx.ModuleName() + staticLibraryExtension
    62  	outputFile := android.PathForModuleOut(ctx, libName)
    63  
    64  	if flags.Clang {
    65  		ctx.ModuleErrorf("toolchain_library must use GCC, not Clang")
    66  	}
    67  
    68  	CopyGccLib(ctx, libName, flagsToBuilderFlags(flags), outputFile)
    69  
    70  	ctx.CheckbuildFile(outputFile)
    71  
    72  	return outputFile
    73  }