• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
15package cc
16
17import (
18	"strings"
19
20	"android/soong/android"
21)
22
23type StripProperties struct {
24	Strip struct {
25		None              *bool    `android:"arch_variant"`
26		All               *bool    `android:"arch_variant"`
27		Keep_symbols      *bool    `android:"arch_variant"`
28		Keep_symbols_list []string `android:"arch_variant"`
29		Use_gnu_strip     *bool    `android:"arch_variant"`
30	} `android:"arch_variant"`
31}
32
33type stripper struct {
34	StripProperties StripProperties
35}
36
37func (stripper *stripper) needsStrip(ctx ModuleContext) bool {
38	// TODO(ccross): enable host stripping when embedded in make?  Make never had support for stripping host binaries.
39	return (!ctx.Config().EmbeddedInMake() || ctx.Device()) && !Bool(stripper.StripProperties.Strip.None)
40}
41
42func (stripper *stripper) strip(ctx ModuleContext, in android.Path, out android.ModuleOutPath,
43	flags builderFlags) {
44	if ctx.Darwin() {
45		TransformDarwinStrip(ctx, in, out)
46	} else {
47		if Bool(stripper.StripProperties.Strip.Keep_symbols) {
48			flags.stripKeepSymbols = true
49		} else if len(stripper.StripProperties.Strip.Keep_symbols_list) > 0 {
50			flags.stripKeepSymbolsList = strings.Join(stripper.StripProperties.Strip.Keep_symbols_list, ",")
51		} else if !Bool(stripper.StripProperties.Strip.All) {
52			flags.stripKeepMiniDebugInfo = true
53		}
54		if Bool(stripper.StripProperties.Strip.Use_gnu_strip) {
55			flags.stripUseGnuStrip = true
56		}
57		if ctx.Config().Debuggable() && !flags.stripKeepMiniDebugInfo {
58			flags.stripAddGnuDebuglink = true
59		}
60		TransformStrip(ctx, in, out, flags)
61	}
62}
63