以 hardware 下的 android.hardware.bluetooth@1.0-impl.so 为例。

android.bp

//
// Copyright (C) 2016 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.


//引入go脚本

bootstrap_go_package {
    name: "soong-xxxparser",
    pkgPath: "android/soong/xxxparser",

    deps: [
        "blueprint",
        "blueprint-pathtools",
        "soong",
        "soong-android",
        "soong-cc",
        "soong-genrule",
    ],

    srcs: [
        "xxxparser.go",
    ],
    pluginFor: ["soong_build"],
}

xxxparser_defaults {
    name: "xxxparser_defaults",
}

//ANDROIDBP_FUN = ["YES"]

cc_library_shared {
    name: "android.hardware.bluetooth@1.0-impl",
    defaults: ["hidl_defaults", "xxxparser_defaults",],
    //["hidl_defaults"], "xxxparser_defaults",
    vendor: true,
    relative_install_path: "hw",
    //cflags: ["-Wno-error=implicit-function-declaration"],
    srcs: [
        "bluetooth_hci.cc",
        "bluetooth_address.cc",
        "vendor_interface.cc",
        "multibt_hal.cc",
    ],
    include_dirs: [
        "system/bt/hci/include"
    ],
    shared_libs: [
        "android.hardware.bluetooth@1.0",
        "libbase",
        "libcutils",
        "libhardware",
        "libhidlbase",
        "libhidltransport",
        "liblog",
        "libutils","libutilscallstack"
    ],
    static_libs: [
        "android.hardware.bluetooth-async",
        "android.hardware.bluetooth-hci",
    ],
}

cc_library_static {
    name: "android.hardware.bluetooth-async",
    vendor: true,
    defaults: ["hidl_defaults"],
    srcs: [
        "async_fd_watcher.cc",
    ],
    export_include_dirs: ["."],
    shared_libs: [
        "liblog",
    ],
}

cc_library_static {
    name: "android.hardware.bluetooth-hci",
    vendor: true,
    defaults: ["hidl_defaults"],
    srcs: [
        "hci_packetizer.cc",
        "hci_protocol.cc",
        "h4_protocol.cc",
        "mct_protocol.cc","mycallstack.cpp"
    ],
    export_include_dirs: ["."],
    shared_libs: [
        "libbase",
        "libhidlbase",
        "liblog",
        "libutils","libutilscallstack"
    ],
}

//cc_test {
//    name: "bluetooth-vendor-interface-unit-tests",
//    vendor: true,
//    defaults: ["hidl_defaults"],
//    srcs: [
//        "test/async_fd_watcher_unittest.cc",
//        "test/h4_protocol_unittest.cc",
//        "test/mct_protocol_unittest.cc",
//    ],
//    local_include_dirs: [
//        "test",
//    ],
//    shared_libs: [
//        "libbase",
//        "libhidlbase",
//        "liblog",
//        "libutils",
//    ],
//    static_libs: [
//        "android.hardware.bluetooth-async",
//        "android.hardware.bluetooth-hci",
//        "libgmock",
//    ],
//}

//cc_test_host {
//    name: "bluetooth-address-unit-tests",
//    defaults: ["hidl_defaults"],
//    srcs: [
//        "bluetooth_address.cc",
//        "test/bluetooth_address_test.cc",
//        "test/properties.cc",
//    ],
//    local_include_dirs: [
//        "test",
//    ],
//    shared_libs: [
//        "libbase",
//        "liblog",
//    ],
//}

cc_binary {
    name: "android.hardware.bluetooth@1.0-service",
    defaults: ["hidl_defaults"],
    relative_install_path: "hw",
    vendor: true,
    init_rc: ["android.hardware.bluetooth@1.0-service.rc"],
    srcs: ["service.cpp"],
    cflags: ["-Wno-error=implicit-function-declaration"],

    shared_libs: [
        "liblog",
        "libcutils",
        "libdl",
        "libbase",
        "libutils",
        "libutilscallstack",
        "libhardware",
        "libhidlbase",
        "libhidltransport",
        "android.hardware.bluetooth@1.0",
    ],
}

//cc_binary {
//    defaults: ["xxxparser_defaults"],
//    name: "AndroidBp",
//    srcs: ["main.c"],
//    cflags: ["-Wno-error=implicit-function-declaration"],
//    shared_libs: [
//        "libcutils",
//        "liblog",
//        "libutils",
//    ],
//}
 

android.bp 同目录下的go文件 xxxparser.go


package xxxparser
import (
    "android/soong/android"
    "android/soong/cc"
)
    
func init() {
    //resister a module "xxxparser_defaults"
    android.RegisterModuleType("xxxparser_defaults", xxxdroidDefaultsFactory)
}

func xxxdroidDefaultsFactory() (android.Module) {
    module := cc.DefaultsFactory()
    android.AddLoadHook(module, xxxdroidDefaults)
    return module
}
      
func xxxdroidDefaults(ctx android.LoadHookContext) {
    type props struct {
        Cflags []string
    }
    p := &props{}
    p.Cflags = globalDefaults(ctx)
    ctx.AppendProperties(p)
}

func globalDefaults(ctx android.BaseContext) ([]string) {
    var cppflags []string
    //if ctx.AConfig().Getenv("ANDROIDBP_FUN") == "YES" {
      // cppflags = append(cppflags,"-DXXX")
    //}
    
    //export BLUETOOTH_MODULE=BK3515N
    if ctx.AConfig().Getenv("BLUETOOTH_MODULE") == "BK3515N" {
       cppflags = append(cppflags,"-DUSE_BK3515N")
    }
    return cppflags
}


编译前 先导出环境变量 export BLUETOOTH_MODULE=BK3515N,

那么就会设置宏定义 USE_BK3515N

没有导出BLUETOOTH_MODULE,就不会定义宏了。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐