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

     1  // Copyright 2015 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  	"fmt"
    19  	"regexp"
    20  	"strings"
    21  
    22  	"android/soong/android"
    23  )
    24  
    25  // Efficiently converts a list of include directories to a single string
    26  // of cflags with -I prepended to each directory.
    27  func includeDirsToFlags(dirs android.Paths) string {
    28  	return android.JoinWithPrefix(dirs.Strings(), "-I")
    29  }
    30  
    31  func includeFilesToFlags(files android.Paths) string {
    32  	return android.JoinWithPrefix(files.Strings(), "-include ")
    33  }
    34  
    35  func ldDirsToFlags(dirs []string) string {
    36  	return android.JoinWithPrefix(dirs, "-L")
    37  }
    38  
    39  func libNamesToFlags(names []string) string {
    40  	return android.JoinWithPrefix(names, "-l")
    41  }
    42  
    43  var indexList = android.IndexList
    44  var inList = android.InList
    45  var filterList = android.FilterList
    46  var removeListFromList = android.RemoveListFromList
    47  var removeFromList = android.RemoveFromList
    48  
    49  var libNameRegexp = regexp.MustCompile(`^lib(.*)$`)
    50  
    51  func moduleToLibName(module string) (string, error) {
    52  	matches := libNameRegexp.FindStringSubmatch(module)
    53  	if matches == nil {
    54  		return "", fmt.Errorf("Library module name %s does not start with lib", module)
    55  	}
    56  	return matches[1], nil
    57  }
    58  
    59  func flagsToBuilderFlags(in Flags) builderFlags {
    60  	return builderFlags{
    61  		globalFlags:    strings.Join(in.GlobalFlags, " "),
    62  		arFlags:        strings.Join(in.ArFlags, " "),
    63  		asFlags:        strings.Join(in.AsFlags, " "),
    64  		cFlags:         strings.Join(in.CFlags, " "),
    65  		toolingCFlags:  strings.Join(in.ToolingCFlags, " "),
    66  		conlyFlags:     strings.Join(in.ConlyFlags, " "),
    67  		cppFlags:       strings.Join(in.CppFlags, " "),
    68  		yaccFlags:      strings.Join(in.YaccFlags, " "),
    69  		protoFlags:     strings.Join(in.protoFlags, " "),
    70  		protoOutParams: strings.Join(in.protoOutParams, ","),
    71  		aidlFlags:      strings.Join(in.aidlFlags, " "),
    72  		rsFlags:        strings.Join(in.rsFlags, " "),
    73  		ldFlags:        strings.Join(in.LdFlags, " "),
    74  		libFlags:       strings.Join(in.libFlags, " "),
    75  		tidyFlags:      strings.Join(in.TidyFlags, " "),
    76  		sAbiFlags:      strings.Join(in.SAbiFlags, " "),
    77  		yasmFlags:      strings.Join(in.YasmFlags, " "),
    78  		toolchain:      in.Toolchain,
    79  		clang:          in.Clang,
    80  		coverage:       in.Coverage,
    81  		tidy:           in.Tidy,
    82  		sAbiDump:       in.SAbiDump,
    83  		protoRoot:      in.ProtoRoot,
    84  
    85  		systemIncludeFlags: strings.Join(in.SystemIncludeFlags, " "),
    86  
    87  		groupStaticLibs: in.GroupStaticLibs,
    88  		arGoldPlugin:    in.ArGoldPlugin,
    89  	}
    90  }
    91  
    92  func addPrefix(list []string, prefix string) []string {
    93  	for i := range list {
    94  		list[i] = prefix + list[i]
    95  	}
    96  	return list
    97  }
    98  
    99  func addSuffix(list []string, suffix string) []string {
   100  	for i := range list {
   101  		list[i] = list[i] + suffix
   102  	}
   103  	return list
   104  }