blob: 042e012d98c2c0674d6d25d7f1150a5a64ed6551 [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
Colin Crossc511bc52020-04-07 16:50:32 +000070 module.Properties.Sdk_version = StringPtr("current")
Colin Crossb916a382016-07-29 17:28:03 -070071 return module.Init()
72}
73
74func (library *toolchainLibraryDecorator) compile(ctx ModuleContext, flags Flags,
Dan Willemsen5cb580f2016-09-26 17:33:01 -070075 deps PathDeps) Objects {
76 return Objects{}
Colin Crossb916a382016-07-29 17:28:03 -070077}
78
79func (library *toolchainLibraryDecorator) link(ctx ModuleContext,
Dan Willemsen5cb580f2016-09-26 17:33:01 -070080 flags Flags, deps PathDeps, objs Objects) android.Path {
Colin Crossb916a382016-07-29 17:28:03 -070081
Dan Willemsenfeea4df2018-10-07 18:16:48 -070082 if library.Properties.Src == nil {
83 ctx.PropertyErrorf("src", "No library source specified")
84 return android.PathForSource(ctx, "")
Colin Crossb916a382016-07-29 17:28:03 -070085 }
86
Yi Kongacee27c2019-03-29 20:05:14 -070087 srcPath := android.PathForSource(ctx, *library.Properties.Src)
88
89 if library.stripper.StripProperties.Strip.Keep_symbols_list != nil {
90 fileName := ctx.ModuleName() + staticLibraryExtension
91 outputFile := android.PathForModuleOut(ctx, fileName)
92 buildFlags := flagsToBuilderFlags(flags)
Ryan Prichardf979d732019-05-30 20:53:29 -070093 library.stripper.stripStaticLib(ctx, srcPath, outputFile, buildFlags)
Yi Kongacee27c2019-03-29 20:05:14 -070094 return outputFile
95 }
96
Yi Kongc49c3932019-10-15 02:01:19 -070097 if library.Properties.Repack_objects_to_keep != nil {
98 fileName := ctx.ModuleName() + staticLibraryExtension
99 outputFile := android.PathForModuleOut(ctx, fileName)
100 TransformArchiveRepack(ctx, srcPath, outputFile, library.Properties.Repack_objects_to_keep)
101
102 return outputFile
103 }
104
Yi Kongacee27c2019-03-29 20:05:14 -0700105 return srcPath
Colin Crossb916a382016-07-29 17:28:03 -0700106}
Pirama Arumuga Nainar65c95ff2019-03-25 10:21:31 -0700107
108func (library *toolchainLibraryDecorator) nativeCoverage() bool {
109 return false
110}