| Dan Willemsen | 218f656 | 2015-07-08 18:13:11 -0700 | [diff] [blame] | 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 ( | 
| Dan Willemsen | 9775052 | 2016-02-09 17:43:51 -0800 | [diff] [blame] | 18 | 	"fmt" | 
| Dan Willemsen | 218f656 | 2015-07-08 18:13:11 -0700 | [diff] [blame] | 19 | 	"io" | 
| Colin Cross | a234466 | 2016-03-24 13:14:12 -0700 | [diff] [blame] | 20 | 	"path/filepath" | 
| Dan Willemsen | 218f656 | 2015-07-08 18:13:11 -0700 | [diff] [blame] | 21 | 	"strings" | 
 | 22 |  | 
| Colin Cross | 635c3b0 | 2016-05-18 15:37:25 -0700 | [diff] [blame] | 23 | 	"android/soong/android" | 
| Dan Willemsen | 218f656 | 2015-07-08 18:13:11 -0700 | [diff] [blame] | 24 | ) | 
 | 25 |  | 
| Jiyong Park | 27b188b | 2017-07-18 13:23:39 +0900 | [diff] [blame] | 26 | var ( | 
| Jiyong Park | f9332f1 | 2018-02-01 00:54:12 +0900 | [diff] [blame] | 27 | 	vendorSuffix   = ".vendor" | 
 | 28 | 	recoverySuffix = ".recovery" | 
| Jiyong Park | 27b188b | 2017-07-18 13:23:39 +0900 | [diff] [blame] | 29 | ) | 
 | 30 |  | 
| Dan Willemsen | f2c27d7 | 2016-07-13 16:50:22 -0700 | [diff] [blame] | 31 | type AndroidMkContext interface { | 
 | 32 | 	Target() android.Target | 
| Colin Cross | b916a38 | 2016-07-29 17:28:03 -0700 | [diff] [blame] | 33 | 	subAndroidMk(*android.AndroidMkData, interface{}) | 
| Jeff Gaston | af3cc2d | 2017-09-27 17:01:44 -0700 | [diff] [blame] | 34 | 	useVndk() bool | 
| Colin Cross | b916a38 | 2016-07-29 17:28:03 -0700 | [diff] [blame] | 35 | } | 
 | 36 |  | 
 | 37 | type subAndroidMkProvider interface { | 
 | 38 | 	AndroidMk(AndroidMkContext, *android.AndroidMkData) | 
 | 39 | } | 
 | 40 |  | 
 | 41 | func (c *Module) subAndroidMk(data *android.AndroidMkData, obj interface{}) { | 
 | 42 | 	if c.subAndroidMkOnce == nil { | 
 | 43 | 		c.subAndroidMkOnce = make(map[subAndroidMkProvider]bool) | 
 | 44 | 	} | 
 | 45 | 	if androidmk, ok := obj.(subAndroidMkProvider); ok { | 
 | 46 | 		if !c.subAndroidMkOnce[androidmk] { | 
 | 47 | 			c.subAndroidMkOnce[androidmk] = true | 
 | 48 | 			androidmk.AndroidMk(c, data) | 
 | 49 | 		} | 
 | 50 | 	} | 
| Dan Willemsen | f2c27d7 | 2016-07-13 16:50:22 -0700 | [diff] [blame] | 51 | } | 
 | 52 |  | 
| Colin Cross | a18e9cf | 2017-08-10 17:00:19 -0700 | [diff] [blame] | 53 | func (c *Module) AndroidMk() android.AndroidMkData { | 
| Colin Cross | bc6fb16 | 2016-05-24 15:39:04 -0700 | [diff] [blame] | 54 | 	if c.Properties.HideFromMake { | 
| Colin Cross | a18e9cf | 2017-08-10 17:00:19 -0700 | [diff] [blame] | 55 | 		return android.AndroidMkData{ | 
 | 56 | 			Disabled: true, | 
 | 57 | 		} | 
| Colin Cross | bc6fb16 | 2016-05-24 15:39:04 -0700 | [diff] [blame] | 58 | 	} | 
 | 59 |  | 
| Colin Cross | a18e9cf | 2017-08-10 17:00:19 -0700 | [diff] [blame] | 60 | 	ret := android.AndroidMkData{ | 
 | 61 | 		OutputFile: c.outputFile, | 
| Logan Chien | 43d34c3 | 2017-12-20 01:17:32 +0800 | [diff] [blame] | 62 | 		Required:   c.Properties.AndroidMkRuntimeLibs, | 
 | 63 |  | 
| Colin Cross | a18e9cf | 2017-08-10 17:00:19 -0700 | [diff] [blame] | 64 | 		Extra: []android.AndroidMkExtraFunc{ | 
 | 65 | 			func(w io.Writer, outputFile android.Path) { | 
| Colin Cross | 5beccee | 2017-12-07 15:28:59 -0800 | [diff] [blame] | 66 | 				if len(c.Properties.Logtags) > 0 { | 
 | 67 | 					fmt.Fprintln(w, "LOCAL_LOGTAGS_FILES :=", strings.Join(c.Properties.Logtags, " ")) | 
 | 68 | 				} | 
| Colin Cross | a18e9cf | 2017-08-10 17:00:19 -0700 | [diff] [blame] | 69 | 				fmt.Fprintln(w, "LOCAL_SANITIZE := never") | 
 | 70 | 				if len(c.Properties.AndroidMkSharedLibs) > 0 { | 
 | 71 | 					fmt.Fprintln(w, "LOCAL_SHARED_LIBRARIES := "+strings.Join(c.Properties.AndroidMkSharedLibs, " ")) | 
 | 72 | 				} | 
| Nan Zhang | 0007d81 | 2017-11-07 10:57:05 -0800 | [diff] [blame] | 73 | 				if c.Target().Os == android.Android && | 
| Jiyong Park | 9768628 | 2018-05-30 09:59:23 +0900 | [diff] [blame] | 74 | 					String(c.Properties.Sdk_version) != "" && !c.useVndk() && !c.inRecovery() { | 
| Nan Zhang | 0007d81 | 2017-11-07 10:57:05 -0800 | [diff] [blame] | 75 | 					fmt.Fprintln(w, "LOCAL_SDK_VERSION := "+String(c.Properties.Sdk_version)) | 
| Colin Cross | a18e9cf | 2017-08-10 17:00:19 -0700 | [diff] [blame] | 76 | 					fmt.Fprintln(w, "LOCAL_NDK_STL_VARIANT := none") | 
 | 77 | 				} else { | 
 | 78 | 					// These are already included in LOCAL_SHARED_LIBRARIES | 
 | 79 | 					fmt.Fprintln(w, "LOCAL_CXX_STL := none") | 
 | 80 | 				} | 
| Jeff Gaston | af3cc2d | 2017-09-27 17:01:44 -0700 | [diff] [blame] | 81 | 				if c.useVndk() { | 
| Colin Cross | a18e9cf | 2017-08-10 17:00:19 -0700 | [diff] [blame] | 82 | 					fmt.Fprintln(w, "LOCAL_USE_VNDK := true") | 
 | 83 | 				} | 
 | 84 | 			}, | 
 | 85 | 		}, | 
 | 86 | 	} | 
| Colin Cross | ca860ac | 2016-01-04 14:34:37 -0800 | [diff] [blame] | 87 |  | 
| Colin Cross | ca860ac | 2016-01-04 14:34:37 -0800 | [diff] [blame] | 88 | 	for _, feature := range c.features { | 
| Colin Cross | b916a38 | 2016-07-29 17:28:03 -0700 | [diff] [blame] | 89 | 		c.subAndroidMk(&ret, feature) | 
| Colin Cross | ca860ac | 2016-01-04 14:34:37 -0800 | [diff] [blame] | 90 | 	} | 
 | 91 |  | 
| Colin Cross | b916a38 | 2016-07-29 17:28:03 -0700 | [diff] [blame] | 92 | 	c.subAndroidMk(&ret, c.compiler) | 
 | 93 | 	c.subAndroidMk(&ret, c.linker) | 
| Colin Cross | 8ff9ef4 | 2017-05-08 13:44:11 -0700 | [diff] [blame] | 94 | 	if c.sanitize != nil { | 
 | 95 | 		c.subAndroidMk(&ret, c.sanitize) | 
 | 96 | 	} | 
| Colin Cross | b916a38 | 2016-07-29 17:28:03 -0700 | [diff] [blame] | 97 | 	c.subAndroidMk(&ret, c.installer) | 
| Colin Cross | ca860ac | 2016-01-04 14:34:37 -0800 | [diff] [blame] | 98 |  | 
| Jeff Gaston | af3cc2d | 2017-09-27 17:01:44 -0700 | [diff] [blame] | 99 | 	if c.useVndk() && c.hasVendorVariant() { | 
| Jiyong Park | 27b188b | 2017-07-18 13:23:39 +0900 | [diff] [blame] | 100 | 		// .vendor suffix is added only when we will have two variants: core and vendor. | 
 | 101 | 		// The suffix is not added for vendor-only module. | 
 | 102 | 		ret.SubName += vendorSuffix | 
| Jiyong Park | f9332f1 | 2018-02-01 00:54:12 +0900 | [diff] [blame] | 103 | 	} else if c.inRecovery() && !c.onlyInRecovery() { | 
 | 104 | 		ret.SubName += recoverySuffix | 
| Dan Willemsen | 4416e5d | 2017-04-06 12:43:22 -0700 | [diff] [blame] | 105 | 	} | 
 | 106 |  | 
| Colin Cross | a18e9cf | 2017-08-10 17:00:19 -0700 | [diff] [blame] | 107 | 	return ret | 
| Colin Cross | ca860ac | 2016-01-04 14:34:37 -0800 | [diff] [blame] | 108 | } | 
 | 109 |  | 
| Anders Lewis | b97e818 | 2017-07-14 15:20:13 -0700 | [diff] [blame] | 110 | func androidMkWriteTestData(data android.Paths, ctx AndroidMkContext, ret *android.AndroidMkData) { | 
 | 111 | 	var testFiles []string | 
 | 112 | 	for _, d := range data { | 
 | 113 | 		rel := d.Rel() | 
 | 114 | 		path := d.String() | 
 | 115 | 		if !strings.HasSuffix(path, rel) { | 
 | 116 | 			panic(fmt.Errorf("path %q does not end with %q", path, rel)) | 
 | 117 | 		} | 
 | 118 | 		path = strings.TrimSuffix(path, rel) | 
 | 119 | 		testFiles = append(testFiles, path+":"+rel) | 
 | 120 | 	} | 
 | 121 | 	if len(testFiles) > 0 { | 
| Colin Cross | 27a4b05 | 2017-08-10 16:32:23 -0700 | [diff] [blame] | 122 | 		ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) { | 
| Anders Lewis | b97e818 | 2017-07-14 15:20:13 -0700 | [diff] [blame] | 123 | 			fmt.Fprintln(w, "LOCAL_TEST_DATA := "+strings.Join(testFiles, " ")) | 
| Anders Lewis | b97e818 | 2017-07-14 15:20:13 -0700 | [diff] [blame] | 124 | 		}) | 
 | 125 | 	} | 
 | 126 | } | 
 | 127 |  | 
| Dan Willemsen | 5853940 | 2017-03-19 13:44:32 -0700 | [diff] [blame] | 128 | func (library *libraryDecorator) androidMkWriteExportedFlags(w io.Writer) { | 
 | 129 | 	exportedFlags := library.exportedFlags() | 
 | 130 | 	if len(exportedFlags) > 0 { | 
 | 131 | 		fmt.Fprintln(w, "LOCAL_EXPORT_CFLAGS :=", strings.Join(exportedFlags, " ")) | 
| Dan Willemsen | d578134 | 2017-02-15 16:15:21 -0800 | [diff] [blame] | 132 | 	} | 
| Dan Willemsen | 5853940 | 2017-03-19 13:44:32 -0700 | [diff] [blame] | 133 | 	exportedFlagsDeps := library.exportedFlagsDeps() | 
 | 134 | 	if len(exportedFlagsDeps) > 0 { | 
 | 135 | 		fmt.Fprintln(w, "LOCAL_EXPORT_C_INCLUDE_DEPS :=", strings.Join(exportedFlagsDeps.Strings(), " ")) | 
 | 136 | 	} | 
 | 137 | } | 
| Dan Willemsen | d578134 | 2017-02-15 16:15:21 -0800 | [diff] [blame] | 138 |  | 
| Dan Willemsen | 5853940 | 2017-03-19 13:44:32 -0700 | [diff] [blame] | 139 | func (library *libraryDecorator) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) { | 
| Dan Willemsen | d578134 | 2017-02-15 16:15:21 -0800 | [diff] [blame] | 140 | 	if library.static() { | 
 | 141 | 		ret.Class = "STATIC_LIBRARIES" | 
 | 142 | 	} else if library.shared() { | 
 | 143 | 		ctx.subAndroidMk(ret, &library.stripper) | 
 | 144 | 		ctx.subAndroidMk(ret, &library.relocationPacker) | 
 | 145 |  | 
 | 146 | 		ret.Class = "SHARED_LIBRARIES" | 
 | 147 | 	} else if library.header() { | 
| Colin Cross | 0f86d18 | 2017-08-10 17:07:28 -0700 | [diff] [blame] | 148 | 		ret.Custom = func(w io.Writer, name, prefix, moduleDir string, data android.AndroidMkData) { | 
| Dan Willemsen | d578134 | 2017-02-15 16:15:21 -0800 | [diff] [blame] | 149 | 			fmt.Fprintln(w, "\ninclude $(CLEAR_VARS)") | 
 | 150 | 			fmt.Fprintln(w, "LOCAL_PATH :=", moduleDir) | 
| Colin Cross | 0f86d18 | 2017-08-10 17:07:28 -0700 | [diff] [blame] | 151 | 			fmt.Fprintln(w, "LOCAL_MODULE :=", name+data.SubName) | 
| Dan Willemsen | d578134 | 2017-02-15 16:15:21 -0800 | [diff] [blame] | 152 |  | 
 | 153 | 			archStr := ctx.Target().Arch.ArchType.String() | 
 | 154 | 			var host bool | 
 | 155 | 			switch ctx.Target().Os.Class { | 
 | 156 | 			case android.Host: | 
 | 157 | 				fmt.Fprintln(w, "LOCAL_MODULE_HOST_ARCH := ", archStr) | 
 | 158 | 				host = true | 
 | 159 | 			case android.HostCross: | 
 | 160 | 				fmt.Fprintln(w, "LOCAL_MODULE_HOST_CROSS_ARCH := ", archStr) | 
 | 161 | 				host = true | 
 | 162 | 			case android.Device: | 
 | 163 | 				fmt.Fprintln(w, "LOCAL_MODULE_TARGET_ARCH := ", archStr) | 
 | 164 | 			} | 
 | 165 |  | 
 | 166 | 			if host { | 
| Dan Willemsen | 866b563 | 2017-09-22 12:28:24 -0700 | [diff] [blame] | 167 | 				makeOs := ctx.Target().Os.String() | 
 | 168 | 				if ctx.Target().Os == android.Linux || ctx.Target().Os == android.LinuxBionic { | 
 | 169 | 					makeOs = "linux" | 
 | 170 | 				} | 
 | 171 | 				fmt.Fprintln(w, "LOCAL_MODULE_HOST_OS :=", makeOs) | 
| Dan Willemsen | d578134 | 2017-02-15 16:15:21 -0800 | [diff] [blame] | 172 | 				fmt.Fprintln(w, "LOCAL_IS_HOST_MODULE := true") | 
| Jeff Gaston | af3cc2d | 2017-09-27 17:01:44 -0700 | [diff] [blame] | 173 | 			} else if ctx.useVndk() { | 
| Dan Willemsen | 4416e5d | 2017-04-06 12:43:22 -0700 | [diff] [blame] | 174 | 				fmt.Fprintln(w, "LOCAL_USE_VNDK := true") | 
| Dan Willemsen | d578134 | 2017-02-15 16:15:21 -0800 | [diff] [blame] | 175 | 			} | 
 | 176 |  | 
| Dan Willemsen | 5853940 | 2017-03-19 13:44:32 -0700 | [diff] [blame] | 177 | 			library.androidMkWriteExportedFlags(w) | 
| Dan Willemsen | d578134 | 2017-02-15 16:15:21 -0800 | [diff] [blame] | 178 | 			fmt.Fprintln(w, "include $(BUILD_HEADER_LIBRARY)") | 
| Dan Willemsen | d578134 | 2017-02-15 16:15:21 -0800 | [diff] [blame] | 179 | 		} | 
 | 180 |  | 
 | 181 | 		return | 
 | 182 | 	} | 
 | 183 |  | 
| Colin Cross | 27a4b05 | 2017-08-10 16:32:23 -0700 | [diff] [blame] | 184 | 	ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) { | 
| Dan Willemsen | 5853940 | 2017-03-19 13:44:32 -0700 | [diff] [blame] | 185 | 		library.androidMkWriteExportedFlags(w) | 
| Jayant Chowdhary | 3e231fd | 2017-02-08 13:45:53 -0800 | [diff] [blame] | 186 | 		fmt.Fprintln(w, "LOCAL_ADDITIONAL_DEPENDENCIES := ") | 
 | 187 | 		if library.sAbiOutputFile.Valid() { | 
 | 188 | 			fmt.Fprintln(w, "LOCAL_ADDITIONAL_DEPENDENCIES += ", library.sAbiOutputFile.String()) | 
 | 189 | 			if library.sAbiDiff.Valid() && !library.static() { | 
 | 190 | 				fmt.Fprintln(w, "LOCAL_ADDITIONAL_DEPENDENCIES += ", library.sAbiDiff.String()) | 
| Jayant Chowdhary | 715cac3 | 2017-04-20 06:53:59 -0700 | [diff] [blame] | 191 | 				fmt.Fprintln(w, "HEADER_ABI_DIFFS += ", library.sAbiDiff.String()) | 
| Jayant Chowdhary | 3e231fd | 2017-02-08 13:45:53 -0800 | [diff] [blame] | 192 | 			} | 
 | 193 | 		} | 
| Dan Willemsen | 218f656 | 2015-07-08 18:13:11 -0700 | [diff] [blame] | 194 |  | 
| Dan Willemsen | 1d577e2 | 2016-08-29 15:53:15 -0700 | [diff] [blame] | 195 | 		fmt.Fprintln(w, "LOCAL_BUILT_MODULE_STEM := $(LOCAL_MODULE)"+outputFile.Ext()) | 
| Dan Willemsen | 218f656 | 2015-07-08 18:13:11 -0700 | [diff] [blame] | 196 |  | 
| Dan Willemsen | 9775052 | 2016-02-09 17:43:51 -0800 | [diff] [blame] | 197 | 		fmt.Fprintln(w, "LOCAL_SYSTEM_SHARED_LIBRARIES :=") | 
| Dan Willemsen | 218f656 | 2015-07-08 18:13:11 -0700 | [diff] [blame] | 198 |  | 
| Dan Willemsen | 581341d | 2017-02-09 16:16:31 -0800 | [diff] [blame] | 199 | 		if library.coverageOutputFile.Valid() { | 
 | 200 | 			fmt.Fprintln(w, "LOCAL_PREBUILT_COVERAGE_ARCHIVE :=", library.coverageOutputFile.String()) | 
 | 201 | 		} | 
| Colin Cross | ca860ac | 2016-01-04 14:34:37 -0800 | [diff] [blame] | 202 | 	}) | 
| Colin Cross | b916a38 | 2016-07-29 17:28:03 -0700 | [diff] [blame] | 203 |  | 
| Colin Cross | 4ac4480 | 2017-02-15 14:06:12 -0800 | [diff] [blame] | 204 | 	if library.shared() { | 
| Colin Cross | b916a38 | 2016-07-29 17:28:03 -0700 | [diff] [blame] | 205 | 		ctx.subAndroidMk(ret, library.baseInstaller) | 
 | 206 | 	} | 
| Dan Willemsen | 218f656 | 2015-07-08 18:13:11 -0700 | [diff] [blame] | 207 | } | 
 | 208 |  | 
| Dan Willemsen | f2c27d7 | 2016-07-13 16:50:22 -0700 | [diff] [blame] | 209 | func (object *objectLinker) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) { | 
| Colin Cross | 0f86d18 | 2017-08-10 17:07:28 -0700 | [diff] [blame] | 210 | 	ret.Custom = func(w io.Writer, name, prefix, moduleDir string, data android.AndroidMkData) { | 
| Colin Cross | ca860ac | 2016-01-04 14:34:37 -0800 | [diff] [blame] | 211 | 		out := ret.OutputFile.Path() | 
| Dan Willemsen | 218f656 | 2015-07-08 18:13:11 -0700 | [diff] [blame] | 212 |  | 
| Colin Cross | 0f86d18 | 2017-08-10 17:07:28 -0700 | [diff] [blame] | 213 | 		fmt.Fprintln(w, "\n$("+prefix+"OUT_INTERMEDIATE_LIBRARIES)/"+name+data.SubName+objectExtension+":", out.String()) | 
| Dan Willemsen | 9775052 | 2016-02-09 17:43:51 -0800 | [diff] [blame] | 214 | 		fmt.Fprintln(w, "\t$(copy-file-to-target)") | 
| Dan Willemsen | 218f656 | 2015-07-08 18:13:11 -0700 | [diff] [blame] | 215 | 	} | 
| Dan Willemsen | 218f656 | 2015-07-08 18:13:11 -0700 | [diff] [blame] | 216 | } | 
 | 217 |  | 
| Colin Cross | b916a38 | 2016-07-29 17:28:03 -0700 | [diff] [blame] | 218 | func (binary *binaryDecorator) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) { | 
| Colin Cross | 1e7d370 | 2016-08-24 15:25:47 -0700 | [diff] [blame] | 219 | 	ctx.subAndroidMk(ret, binary.baseInstaller) | 
| Colin Cross | b916a38 | 2016-07-29 17:28:03 -0700 | [diff] [blame] | 220 | 	ctx.subAndroidMk(ret, &binary.stripper) | 
| Dan Willemsen | 7517ed0 | 2016-06-10 17:20:30 -0700 | [diff] [blame] | 221 |  | 
| Dan Willemsen | 218f656 | 2015-07-08 18:13:11 -0700 | [diff] [blame] | 222 | 	ret.Class = "EXECUTABLES" | 
| Colin Cross | 27a4b05 | 2017-08-10 16:32:23 -0700 | [diff] [blame] | 223 | 	ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) { | 
| Dan Willemsen | 9775052 | 2016-02-09 17:43:51 -0800 | [diff] [blame] | 224 | 		fmt.Fprintln(w, "LOCAL_SYSTEM_SHARED_LIBRARIES :=") | 
| Colin Cross | b916a38 | 2016-07-29 17:28:03 -0700 | [diff] [blame] | 225 | 		if Bool(binary.Properties.Static_executable) { | 
| Colin Cross | 3854a60 | 2016-01-11 12:49:11 -0800 | [diff] [blame] | 226 | 			fmt.Fprintln(w, "LOCAL_FORCE_STATIC_EXECUTABLE := true") | 
 | 227 | 		} | 
| Colin Cross | 9b09f24 | 2016-12-07 13:37:42 -0800 | [diff] [blame] | 228 |  | 
 | 229 | 		if len(binary.symlinks) > 0 { | 
 | 230 | 			fmt.Fprintln(w, "LOCAL_MODULE_SYMLINKS := "+strings.Join(binary.symlinks, " ")) | 
 | 231 | 		} | 
 | 232 |  | 
| Dan Willemsen | 581341d | 2017-02-09 16:16:31 -0800 | [diff] [blame] | 233 | 		if binary.coverageOutputFile.Valid() { | 
 | 234 | 			fmt.Fprintln(w, "LOCAL_PREBUILT_COVERAGE_ARCHIVE :=", binary.coverageOutputFile.String()) | 
 | 235 | 		} | 
| Yifan Hong | 946e32e | 2018-04-03 13:22:50 -0700 | [diff] [blame] | 236 |  | 
 | 237 | 		if len(binary.Properties.Overrides) > 0 { | 
 | 238 | 			fmt.Fprintln(w, "LOCAL_OVERRIDES_MODULES := "+strings.Join(binary.Properties.Overrides, " ")) | 
 | 239 | 		} | 
| Colin Cross | ca860ac | 2016-01-04 14:34:37 -0800 | [diff] [blame] | 240 | 	}) | 
 | 241 | } | 
 | 242 |  | 
| Colin Cross | b916a38 | 2016-07-29 17:28:03 -0700 | [diff] [blame] | 243 | func (benchmark *benchmarkDecorator) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) { | 
 | 244 | 	ctx.subAndroidMk(ret, benchmark.binaryDecorator) | 
| Dan Willemsen | 58a5c8b | 2017-05-23 15:10:37 -0700 | [diff] [blame] | 245 | 	ret.Class = "NATIVE_TESTS" | 
| Colin Cross | 27a4b05 | 2017-08-10 16:32:23 -0700 | [diff] [blame] | 246 | 	ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) { | 
| Colin Cross | e28f4e2 | 2017-04-24 18:10:29 -0700 | [diff] [blame] | 247 | 		if len(benchmark.Properties.Test_suites) > 0 { | 
 | 248 | 			fmt.Fprintln(w, "LOCAL_COMPATIBILITY_SUITE :=", | 
 | 249 | 				strings.Join(benchmark.Properties.Test_suites, " ")) | 
 | 250 | 		} | 
| Nelson Li | 1f6b14e | 2018-04-18 16:55:21 +0000 | [diff] [blame] | 251 | 		fmt.Fprintln(w, "LOCAL_NATIVE_BENCHMARK := true") | 
| Colin Cross | e28f4e2 | 2017-04-24 18:10:29 -0700 | [diff] [blame] | 252 | 	}) | 
| Anders Lewis | b97e818 | 2017-07-14 15:20:13 -0700 | [diff] [blame] | 253 |  | 
 | 254 | 	androidMkWriteTestData(benchmark.data, ctx, ret) | 
| Colin Cross | b916a38 | 2016-07-29 17:28:03 -0700 | [diff] [blame] | 255 | } | 
 | 256 |  | 
 | 257 | func (test *testBinary) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) { | 
 | 258 | 	ctx.subAndroidMk(ret, test.binaryDecorator) | 
| Dan Willemsen | 0fe7253 | 2017-01-17 13:25:49 -0800 | [diff] [blame] | 259 | 	ret.Class = "NATIVE_TESTS" | 
| Colin Cross | b916a38 | 2016-07-29 17:28:03 -0700 | [diff] [blame] | 260 | 	if Bool(test.Properties.Test_per_src) { | 
| Nan Zhang | 0007d81 | 2017-11-07 10:57:05 -0800 | [diff] [blame] | 261 | 		ret.SubName = "_" + String(test.binaryDecorator.Properties.Stem) | 
| Colin Cross | a234466 | 2016-03-24 13:14:12 -0700 | [diff] [blame] | 262 | 	} | 
| Colin Cross | faeb7aa | 2017-02-01 14:12:44 -0800 | [diff] [blame] | 263 |  | 
| Colin Cross | 27a4b05 | 2017-08-10 16:32:23 -0700 | [diff] [blame] | 264 | 	ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) { | 
| Colin Cross | a929db0 | 2017-03-27 16:27:50 -0700 | [diff] [blame] | 265 | 		if len(test.Properties.Test_suites) > 0 { | 
| Dan Shi | 4df566d | 2017-04-03 12:29:25 -0700 | [diff] [blame] | 266 | 			fmt.Fprintln(w, "LOCAL_COMPATIBILITY_SUITE :=", | 
| Colin Cross | a929db0 | 2017-03-27 16:27:50 -0700 | [diff] [blame] | 267 | 				strings.Join(test.Properties.Test_suites, " ")) | 
 | 268 | 		} | 
| Colin Cross | a929db0 | 2017-03-27 16:27:50 -0700 | [diff] [blame] | 269 | 	}) | 
 | 270 |  | 
| Anders Lewis | b97e818 | 2017-07-14 15:20:13 -0700 | [diff] [blame] | 271 | 	androidMkWriteTestData(test.data, ctx, ret) | 
| Colin Cross | a234466 | 2016-03-24 13:14:12 -0700 | [diff] [blame] | 272 | } | 
 | 273 |  | 
| Colin Cross | b916a38 | 2016-07-29 17:28:03 -0700 | [diff] [blame] | 274 | func (test *testLibrary) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) { | 
 | 275 | 	ctx.subAndroidMk(ret, test.libraryDecorator) | 
 | 276 | } | 
| Dan Willemsen | e7932e8 | 2016-05-16 15:56:53 -0700 | [diff] [blame] | 277 |  | 
| Colin Cross | b916a38 | 2016-07-29 17:28:03 -0700 | [diff] [blame] | 278 | func (library *toolchainLibraryDecorator) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) { | 
 | 279 | 	ret.Class = "STATIC_LIBRARIES" | 
| Colin Cross | 27a4b05 | 2017-08-10 16:32:23 -0700 | [diff] [blame] | 280 | 	ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) { | 
| Dan Willemsen | e7932e8 | 2016-05-16 15:56:53 -0700 | [diff] [blame] | 281 | 		fmt.Fprintln(w, "LOCAL_MODULE_SUFFIX := "+outputFile.Ext()) | 
| Dan Willemsen | e7932e8 | 2016-05-16 15:56:53 -0700 | [diff] [blame] | 282 | 		fmt.Fprintln(w, "LOCAL_SYSTEM_SHARED_LIBRARIES :=") | 
| Dan Willemsen | e7932e8 | 2016-05-16 15:56:53 -0700 | [diff] [blame] | 283 | 	}) | 
 | 284 | } | 
 | 285 |  | 
| Dan Willemsen | f2c27d7 | 2016-07-13 16:50:22 -0700 | [diff] [blame] | 286 | func (stripper *stripper) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) { | 
 | 287 | 	// Make only supports stripping target modules | 
 | 288 | 	if ctx.Target().Os != android.Android { | 
 | 289 | 		return | 
 | 290 | 	} | 
 | 291 |  | 
| Colin Cross | 27a4b05 | 2017-08-10 16:32:23 -0700 | [diff] [blame] | 292 | 	ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) { | 
| Nan Zhang | 0007d81 | 2017-11-07 10:57:05 -0800 | [diff] [blame] | 293 | 		if Bool(stripper.StripProperties.Strip.None) { | 
 | 294 |  | 
| Dan Willemsen | 7517ed0 | 2016-06-10 17:20:30 -0700 | [diff] [blame] | 295 | 			fmt.Fprintln(w, "LOCAL_STRIP_MODULE := false") | 
| Nan Zhang | 0007d81 | 2017-11-07 10:57:05 -0800 | [diff] [blame] | 296 | 		} else if Bool(stripper.StripProperties.Strip.Keep_symbols) { | 
| Dan Willemsen | 7517ed0 | 2016-06-10 17:20:30 -0700 | [diff] [blame] | 297 | 			fmt.Fprintln(w, "LOCAL_STRIP_MODULE := keep_symbols") | 
| Dan Willemsen | f2c27d7 | 2016-07-13 16:50:22 -0700 | [diff] [blame] | 298 | 		} else { | 
 | 299 | 			fmt.Fprintln(w, "LOCAL_STRIP_MODULE := mini-debug-info") | 
| Dan Willemsen | 7517ed0 | 2016-06-10 17:20:30 -0700 | [diff] [blame] | 300 | 		} | 
| Dan Willemsen | 7517ed0 | 2016-06-10 17:20:30 -0700 | [diff] [blame] | 301 | 	}) | 
 | 302 | } | 
 | 303 |  | 
| Dan Willemsen | 394e9dc | 2016-09-14 15:04:48 -0700 | [diff] [blame] | 304 | func (packer *relocationPacker) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) { | 
| Colin Cross | 27a4b05 | 2017-08-10 16:32:23 -0700 | [diff] [blame] | 305 | 	ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) { | 
| Dan Willemsen | 394e9dc | 2016-09-14 15:04:48 -0700 | [diff] [blame] | 306 | 		if packer.Properties.PackingRelocations { | 
 | 307 | 			fmt.Fprintln(w, "LOCAL_PACK_MODULE_RELOCATIONS := true") | 
 | 308 | 		} | 
| Dan Willemsen | 394e9dc | 2016-09-14 15:04:48 -0700 | [diff] [blame] | 309 | 	}) | 
 | 310 | } | 
 | 311 |  | 
| Dan Willemsen | f2c27d7 | 2016-07-13 16:50:22 -0700 | [diff] [blame] | 312 | func (installer *baseInstaller) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) { | 
| Dan Willemsen | 03ce63e | 2016-09-29 12:17:49 -0700 | [diff] [blame] | 313 | 	// Soong installation is only supported for host modules. Have Make | 
 | 314 | 	// installation trigger Soong installation. | 
 | 315 | 	if ctx.Target().Os.Class == android.Host { | 
 | 316 | 		ret.OutputFile = android.OptionalPathForPath(installer.path) | 
 | 317 | 	} | 
 | 318 |  | 
| Colin Cross | 27a4b05 | 2017-08-10 16:32:23 -0700 | [diff] [blame] | 319 | 	ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) { | 
| Colin Cross | a234466 | 2016-03-24 13:14:12 -0700 | [diff] [blame] | 320 | 		path := installer.path.RelPathString() | 
| Colin Cross | bf305de | 2016-03-29 17:32:06 -0700 | [diff] [blame] | 321 | 		dir, file := filepath.Split(path) | 
 | 322 | 		stem := strings.TrimSuffix(file, filepath.Ext(file)) | 
| Dan Willemsen | 1d577e2 | 2016-08-29 15:53:15 -0700 | [diff] [blame] | 323 | 		fmt.Fprintln(w, "LOCAL_MODULE_SUFFIX := "+filepath.Ext(file)) | 
| Colin Cross | e14388b | 2016-05-03 14:08:40 -0700 | [diff] [blame] | 324 | 		fmt.Fprintln(w, "LOCAL_MODULE_PATH := $(OUT_DIR)/"+filepath.Clean(dir)) | 
| Colin Cross | bf305de | 2016-03-29 17:32:06 -0700 | [diff] [blame] | 325 | 		fmt.Fprintln(w, "LOCAL_MODULE_STEM := "+stem) | 
| Colin Cross | a234466 | 2016-03-24 13:14:12 -0700 | [diff] [blame] | 326 | 	}) | 
| Dan Willemsen | 218f656 | 2015-07-08 18:13:11 -0700 | [diff] [blame] | 327 | } | 
| Dan Albert | 914449f | 2016-06-17 16:45:24 -0700 | [diff] [blame] | 328 |  | 
| Colin Cross | b916a38 | 2016-07-29 17:28:03 -0700 | [diff] [blame] | 329 | func (c *stubDecorator) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) { | 
| Dan Willemsen | 01a9059 | 2017-04-07 15:21:13 -0700 | [diff] [blame] | 330 | 	ret.SubName = ndkLibrarySuffix + "." + c.properties.ApiLevel | 
| Dan Albert | 705c84b | 2016-08-08 10:45:03 -0700 | [diff] [blame] | 331 | 	ret.Class = "SHARED_LIBRARIES" | 
| Dan Albert | 914449f | 2016-06-17 16:45:24 -0700 | [diff] [blame] | 332 |  | 
| Colin Cross | 27a4b05 | 2017-08-10 16:32:23 -0700 | [diff] [blame] | 333 | 	ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) { | 
| Colin Cross | 0875c52 | 2017-11-28 17:34:01 -0800 | [diff] [blame] | 334 | 		path, file := filepath.Split(c.installPath.String()) | 
| Dan Albert | 914449f | 2016-06-17 16:45:24 -0700 | [diff] [blame] | 335 | 		stem := strings.TrimSuffix(file, filepath.Ext(file)) | 
| Dan Albert | cdd4c24 | 2016-08-08 14:44:56 -0700 | [diff] [blame] | 336 | 		fmt.Fprintln(w, "LOCAL_SYSTEM_SHARED_LIBRARIES :=") | 
 | 337 | 		fmt.Fprintln(w, "LOCAL_MODULE_SUFFIX := "+outputFile.Ext()) | 
| Dan Albert | 914449f | 2016-06-17 16:45:24 -0700 | [diff] [blame] | 338 | 		fmt.Fprintln(w, "LOCAL_MODULE_PATH := "+path) | 
 | 339 | 		fmt.Fprintln(w, "LOCAL_MODULE_STEM := "+stem) | 
| Dan Willemsen | 866810d | 2017-04-04 14:13:45 -0700 | [diff] [blame] | 340 | 		fmt.Fprintln(w, "LOCAL_NO_NOTICE_FILE := true") | 
| Dan Albert | 914449f | 2016-06-17 16:45:24 -0700 | [diff] [blame] | 341 |  | 
 | 342 | 		// Prevent make from installing the libraries to obj/lib (since we have | 
 | 343 | 		// dozens of libraries with the same name, they'll clobber each other | 
 | 344 | 		// and the real versions of the libraries from the platform). | 
 | 345 | 		fmt.Fprintln(w, "LOCAL_COPY_TO_INTERMEDIATE_LIBRARIES := false") | 
| Dan Albert | 914449f | 2016-06-17 16:45:24 -0700 | [diff] [blame] | 346 | 	}) | 
 | 347 | } | 
| Dan Willemsen | b916b80 | 2017-03-19 13:44:32 -0700 | [diff] [blame] | 348 |  | 
 | 349 | func (c *llndkStubDecorator) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) { | 
 | 350 | 	ret.Class = "SHARED_LIBRARIES" | 
| Jiyong Park | f9332f1 | 2018-02-01 00:54:12 +0900 | [diff] [blame] | 351 | 	ret.SubName = vendorSuffix | 
| Dan Willemsen | b916b80 | 2017-03-19 13:44:32 -0700 | [diff] [blame] | 352 |  | 
| Colin Cross | 27a4b05 | 2017-08-10 16:32:23 -0700 | [diff] [blame] | 353 | 	ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) { | 
| Dan Willemsen | b916b80 | 2017-03-19 13:44:32 -0700 | [diff] [blame] | 354 | 		c.libraryDecorator.androidMkWriteExportedFlags(w) | 
 | 355 |  | 
 | 356 | 		fmt.Fprintln(w, "LOCAL_BUILT_MODULE_STEM := $(LOCAL_MODULE)"+outputFile.Ext()) | 
 | 357 | 		fmt.Fprintln(w, "LOCAL_STRIP_MODULE := false") | 
 | 358 | 		fmt.Fprintln(w, "LOCAL_SYSTEM_SHARED_LIBRARIES :=") | 
 | 359 | 		fmt.Fprintln(w, "LOCAL_UNINSTALLABLE_MODULE := true") | 
 | 360 | 		fmt.Fprintln(w, "LOCAL_NO_NOTICE_FILE := true") | 
| Dan Willemsen | 4416e5d | 2017-04-06 12:43:22 -0700 | [diff] [blame] | 361 | 		fmt.Fprintln(w, "LOCAL_USE_VNDK := true") | 
| Dan Willemsen | b916b80 | 2017-03-19 13:44:32 -0700 | [diff] [blame] | 362 | 	}) | 
 | 363 | } | 
| Justin Yun | 7154928 | 2017-11-17 12:10:28 +0900 | [diff] [blame] | 364 |  | 
 | 365 | func (c *vndkPrebuiltLibraryDecorator) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) { | 
 | 366 | 	ret.Class = "SHARED_LIBRARIES" | 
 | 367 |  | 
| Jae Shin | 43ef264 | 2017-12-29 16:20:21 +0900 | [diff] [blame] | 368 | 	ret.SubName = c.NameSuffix() | 
| Justin Yun | 7154928 | 2017-11-17 12:10:28 +0900 | [diff] [blame] | 369 |  | 
 | 370 | 	ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) { | 
 | 371 | 		c.libraryDecorator.androidMkWriteExportedFlags(w) | 
 | 372 |  | 
 | 373 | 		path := c.path.RelPathString() | 
 | 374 | 		dir, file := filepath.Split(path) | 
 | 375 | 		stem := strings.TrimSuffix(file, filepath.Ext(file)) | 
 | 376 | 		fmt.Fprintln(w, "LOCAL_STRIP_MODULE := false") | 
 | 377 | 		fmt.Fprintln(w, "LOCAL_SYSTEM_SHARED_LIBRARIES :=") | 
 | 378 | 		fmt.Fprintln(w, "LOCAL_USE_VNDK := true") | 
 | 379 | 		fmt.Fprintln(w, "LOCAL_BUILT_MODULE_STEM := $(LOCAL_MODULE)"+outputFile.Ext()) | 
 | 380 | 		fmt.Fprintln(w, "LOCAL_MODULE_SUFFIX := "+filepath.Ext(file)) | 
 | 381 | 		fmt.Fprintln(w, "LOCAL_MODULE_PATH := $(OUT_DIR)/"+filepath.Clean(dir)) | 
 | 382 | 		fmt.Fprintln(w, "LOCAL_MODULE_STEM := "+stem) | 
 | 383 | 	}) | 
| Colin Cross | 7a6fcbe | 2017-12-06 13:08:00 -0800 | [diff] [blame] | 384 | } | 
| Dan Albert | 8ba131b | 2017-12-14 13:23:15 -0800 | [diff] [blame] | 385 |  | 
 | 386 | func (c *ndkPrebuiltStlLinker) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) { | 
 | 387 | 	ret.Class = "SHARED_LIBRARIES" | 
 | 388 |  | 
 | 389 | 	ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) { | 
 | 390 | 		// Prevent make from installing the libraries to obj/lib (since we have | 
 | 391 | 		// dozens of libraries with the same name, they'll clobber each other | 
 | 392 | 		// and the real versions of the libraries from the platform). | 
 | 393 | 		fmt.Fprintln(w, "LOCAL_COPY_TO_INTERMEDIATE_LIBRARIES := false") | 
 | 394 | 	}) | 
 | 395 | } | 
| Jiyong Park | 374510b | 2018-03-19 18:23:01 +0900 | [diff] [blame] | 396 |  | 
 | 397 | func (c *vendorPublicLibraryStubDecorator) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) { | 
 | 398 | 	ret.Class = "SHARED_LIBRARIES" | 
 | 399 | 	ret.SubName = vendorPublicLibrarySuffix | 
 | 400 |  | 
 | 401 | 	ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) { | 
 | 402 | 		c.libraryDecorator.androidMkWriteExportedFlags(w) | 
 | 403 |  | 
 | 404 | 		fmt.Fprintln(w, "LOCAL_BUILT_MODULE_STEM := $(LOCAL_MODULE)"+outputFile.Ext()) | 
 | 405 | 		fmt.Fprintln(w, "LOCAL_STRIP_MODULE := false") | 
 | 406 | 		fmt.Fprintln(w, "LOCAL_SYSTEM_SHARED_LIBRARIES :=") | 
 | 407 | 		fmt.Fprintln(w, "LOCAL_UNINSTALLABLE_MODULE := true") | 
 | 408 | 		fmt.Fprintln(w, "LOCAL_NO_NOTICE_FILE := true") | 
 | 409 | 	}) | 
 | 410 | } |