aboutsummaryrefslogtreecommitdiffstats
path: root/cc/androidmk.go
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2016-01-04 14:34:37 -0800
committerColin Cross <ccross@android.com>2016-03-21 17:31:04 -0700
commitca860ac720e2990bf60d701883ee86bdf9b736a1 (patch)
treeacaf6a039f7ab314dc3b1733447e661b50faa081 /cc/androidmk.go
parent7253e0b8a486797347b8bdec43aa98ce135f3ad7 (diff)
downloadbuild_soong-ca860ac720e2990bf60d701883ee86bdf9b736a1.tar.gz
build_soong-ca860ac720e2990bf60d701883ee86bdf9b736a1.tar.bz2
build_soong-ca860ac720e2990bf60d701883ee86bdf9b736a1.zip
Refactor cc
Refactor all of cc in order to use composition instead of inheritance. All cc module types exported by cc are now *cc.Module objects, with compilation, linking, and installing steps delegated to different objects in order to form the full module type. Additional features that modify dependencies and flags can be inserted in a features object list, and custom module types can be created by adding a Customizer object that can modify properties. Change-Id: Ie1283d14920f7856f6947b0530606b2f4d58fab0
Diffstat (limited to 'cc/androidmk.go')
-rw-r--r--cc/androidmk.go81
1 files changed, 51 insertions, 30 deletions
diff --git a/cc/androidmk.go b/cc/androidmk.go
index 08cdbdcf..aa5c4dcd 100644
--- a/cc/androidmk.go
+++ b/cc/androidmk.go
@@ -22,16 +22,50 @@ import (
"android/soong/common"
)
-func (c *CCLibrary) AndroidMk() (ret common.AndroidMkData, err error) {
- if c.static() {
+func (c *Module) AndroidMk() (ret common.AndroidMkData, err error) {
+ ret.OutputFile = c.outputFile
+ ret.Extra = append(ret.Extra, func(w io.Writer, outputFile common.Path) (err error) {
+ if len(c.deps.SharedLibs) > 0 {
+ fmt.Fprintln(w, "LOCAL_SHARED_LIBRARIES := "+strings.Join(c.deps.SharedLibs, " "))
+ }
+ return nil
+ })
+
+ callSubAndroidMk := func(obj interface{}) {
+ if obj != nil {
+ if androidmk, ok := obj.(interface {
+ AndroidMk(*common.AndroidMkData)
+ }); ok {
+ androidmk.AndroidMk(&ret)
+ }
+ }
+ }
+
+ for _, feature := range c.features {
+ callSubAndroidMk(feature)
+ }
+
+ callSubAndroidMk(c.compiler)
+ callSubAndroidMk(c.linker)
+ callSubAndroidMk(c.installer)
+
+ return ret, nil
+}
+
+func (library *baseLinker) AndroidMk(ret *common.AndroidMkData) {
+ if library.static() {
ret.Class = "STATIC_LIBRARIES"
} else {
ret.Class = "SHARED_LIBRARIES"
}
- ret.OutputFile = c.outputFile()
- ret.Extra = func(w io.Writer, outputFile common.Path) error {
- exportedIncludes := []string{}
- for _, flag := range c.exportedFlags() {
+}
+
+func (library *libraryLinker) AndroidMk(ret *common.AndroidMkData) {
+ library.baseLinker.AndroidMk(ret)
+
+ ret.Extra = append(ret.Extra, func(w io.Writer, outputFile common.Path) error {
+ exportedIncludes := library.exportedFlags()
+ for _, flag := range library.exportedFlags() {
if flag != "" {
exportedIncludes = append(exportedIncludes, strings.TrimPrefix(flag, "-I"))
}
@@ -40,49 +74,36 @@ func (c *CCLibrary) AndroidMk() (ret common.AndroidMkData, err error) {
fmt.Fprintln(w, "LOCAL_EXPORT_C_INCLUDE_DIRS :=", strings.Join(exportedIncludes, " "))
}
- fmt.Fprintln(w, "LOCAL_MODULE_SUFFIX :=", outputFile.Ext())
- if len(c.savedDepNames.SharedLibs) > 0 {
- fmt.Fprintln(w, "LOCAL_SHARED_LIBRARIES :=", strings.Join(c.savedDepNames.SharedLibs, " "))
- }
-
- if c.Properties.Relative_install_path != "" {
- fmt.Fprintln(w, "LOCAL_MODULE_RELATIVE_PATH :=", c.Properties.Relative_install_path)
- }
+ fmt.Fprintln(w, "LOCAL_MODULE_SUFFIX := "+outputFile.Ext())
// These are already included in LOCAL_SHARED_LIBRARIES
fmt.Fprintln(w, "LOCAL_CXX_STL := none")
fmt.Fprintln(w, "LOCAL_SYSTEM_SHARED_LIBRARIES :=")
return nil
- }
- return
+ })
}
-func (c *ccObject) AndroidMk() (ret common.AndroidMkData, err error) {
- ret.OutputFile = c.outputFile()
+func (object *objectLinker) AndroidMk(ret *common.AndroidMkData) {
ret.Custom = func(w io.Writer, name, prefix string) error {
- out := c.outputFile().Path()
+ out := ret.OutputFile.Path()
fmt.Fprintln(w, "\n$("+prefix+"OUT_INTERMEDIATE_LIBRARIES)/"+name+objectExtension+":", out.String(), "| $(ACP)")
fmt.Fprintln(w, "\t$(copy-file-to-target)")
return nil
}
- return
}
-func (c *CCBinary) AndroidMk() (ret common.AndroidMkData, err error) {
+func (binary *binaryLinker) AndroidMk(ret *common.AndroidMkData) {
ret.Class = "EXECUTABLES"
- ret.Extra = func(w io.Writer, outputFile common.Path) error {
+ ret.Extra = append(ret.Extra, func(w io.Writer, outputFile common.Path) error {
fmt.Fprintln(w, "LOCAL_CXX_STL := none")
fmt.Fprintln(w, "LOCAL_SYSTEM_SHARED_LIBRARIES :=")
- fmt.Fprintln(w, "LOCAL_SHARED_LIBRARIES :=", strings.Join(c.savedDepNames.SharedLibs, " "))
- if c.Properties.Relative_install_path != "" {
- fmt.Fprintln(w, "LOCAL_MODULE_RELATIVE_PATH :=", c.Properties.Relative_install_path)
- }
-
return nil
- }
- ret.OutputFile = c.outputFile()
- return
+ })
+}
+
+func (test *testLinker) AndroidMk(ret *common.AndroidMkData) {
+ ret.Disabled = true
}