blob: dfc6f7679fd7678bf06cb8ea1d0639a952f499be [file] [log] [blame]
Colin Crossb916a382016-07-29 17:28:03 -07001// 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
15package cc
16
17import (
Colin Crossb916a382016-07-29 17:28:03 -070018 "android/soong/android"
19)
20
21//
22// Device libraries shipped with gcc
23//
24
25func init() {
Colin Crosse40b4ea2018-10-02 22:25:58 -070026 android.RegisterModuleType("toolchain_library", ToolchainLibraryFactory)
Colin Crossb916a382016-07-29 17:28:03 -070027}
28
Dan Willemsenfeea4df2018-10-07 18:16:48 -070029type toolchainLibraryProperties struct {
30 // the prebuilt toolchain library, as a path from the top of the source tree
31 Src *string `android:"arch_variant"`
Yi Kongc49c3932019-10-15 02:01:19 -070032
33 // Repack the archive with only the selected objects.
34 Repack_objects_to_keep []string `android:"arch_variant"`
Dan Willemsenfeea4df2018-10-07 18:16:48 -070035}
36
Colin Crossb916a382016-07-29 17:28:03 -070037type toolchainLibraryDecorator struct {
38 *libraryDecorator
Dan Willemsenfeea4df2018-10-07 18:16:48 -070039
Yi Kongacee27c2019-03-29 20:05:14 -070040 stripper
41
Dan Willemsenfeea4df2018-10-07 18:16:48 -070042 Properties toolchainLibraryProperties
Colin Crossb916a382016-07-29 17:28:03 -070043}
44
Colin Cross37047f12016-12-13 17:06:13 -080045func (*toolchainLibraryDecorator) linkerDeps(ctx DepsContext, deps Deps) Deps {
Colin Crossb916a382016-07-29 17:28:03 -070046 // toolchain libraries can't have any dependencies
47 return deps
48}
49
Dan Willemsenfeea4df2018-10-07 18:16:48 -070050func (library *toolchainLibraryDecorator) linkerProps() []interface{} {
51 var props []interface{}
52 props = append(props, library.libraryDecorator.linkerProps()...)
Yi Kongacee27c2019-03-29 20:05:14 -070053 return append(props, &library.Properties, &library.stripper.StripProperties)
Dan Willemsenfeea4df2018-10-07 18:16:48 -070054}
55
Patrice Arrudaea3fcdf2019-04-03 14:37:46 -070056// toolchain_library is used internally by the build tool to link the specified
57// static library in src property to the device libraries that are shipped with
58// gcc.
Colin Crosse40b4ea2018-10-02 22:25:58 -070059func ToolchainLibraryFactory() android.Module {
Colin Crossab3b7322016-12-09 14:46:15 -080060 module, library := NewLibrary(android.HostAndDeviceSupported)
61 library.BuildOnlyStatic()
Colin Crossb916a382016-07-29 17:28:03 -070062 toolchainLibrary := &toolchainLibraryDecorator{
63 libraryDecorator: library,
64 }
65 module.compiler = toolchainLibrary
66 module.linker = toolchainLibrary
Colin Crossb916a382016-07-29 17:28:03 -070067 module.stl = nil
68 module.sanitize = nil
69 module.installer = nil
70 return module.Init()
71}
72
73func (library *toolchainLibraryDecorator) compile(ctx ModuleContext, flags Flags,
Dan Willemsen5cb580f2016-09-26 17:33:01 -070074 deps PathDeps) Objects {
75 return Objects{}
Colin Crossb916a382016-07-29 17:28:03 -070076}
77
78func (library *toolchainLibraryDecorator) link(ctx ModuleContext,
Dan Willemsen5cb580f2016-09-26 17:33:01 -070079 flags Flags, deps PathDeps, objs Objects) android.Path {
Colin Crossb916a382016-07-29 17:28:03 -070080
Dan Willemsenfeea4df2018-10-07 18:16:48 -070081 if library.Properties.Src == nil {
82 ctx.PropertyErrorf("src", "No library source specified")
83 return android.PathForSource(ctx, "")
Colin Crossb916a382016-07-29 17:28:03 -070084 }
85
Yi Kongacee27c2019-03-29 20:05:14 -070086 srcPath := android.PathForSource(ctx, *library.Properties.Src)
87
88 if library.stripper.StripProperties.Strip.Keep_symbols_list != nil {
89 fileName := ctx.ModuleName() + staticLibraryExtension
90 outputFile := android.PathForModuleOut(ctx, fileName)
91 buildFlags := flagsToBuilderFlags(flags)
Ryan Prichardf979d732019-05-30 20:53:29 -070092 library.stripper.stripStaticLib(ctx, srcPath, outputFile, buildFlags)
Yi Kongacee27c2019-03-29 20:05:14 -070093 return outputFile
94 }
95
Yi Kongc49c3932019-10-15 02:01:19 -070096 if library.Properties.Repack_objects_to_keep != nil {
97 fileName := ctx.ModuleName() + staticLibraryExtension
98 outputFile := android.PathForModuleOut(ctx, fileName)
99 TransformArchiveRepack(ctx, srcPath, outputFile, library.Properties.Repack_objects_to_keep)
100
101 return outputFile
102 }
103
Yi Kongacee27c2019-03-29 20:05:14 -0700104 return srcPath
Colin Crossb916a382016-07-29 17:28:03 -0700105}
Pirama Arumuga Nainar65c95ff2019-03-25 10:21:31 -0700106
107func (library *toolchainLibraryDecorator) nativeCoverage() bool {
108 return false
109}