반응형

soong_config_string_variable을 사용해서 cc_prebuilt_library_shared의 srcs를 다르게 설정하는 방법입니다.
1. soong_config 정의
먼저 Android.bp에 soong_config를 정의합니다:
soong_config_module_type {
    name: "product_cc_prebuilt_library_shared",
    module_type: "cc_prebuilt_library_shared",
    config_namespace: "myproject",
    string_variables: ["product_variant"],
    properties: ["srcs"],
}

product_cc_prebuilt_library_shared {
    name: "libcalc",
    
    // 기본 srcs (product_variant가 설정되지 않았을 때)
    srcs: ["default/libcalc.so"],
    
    soong_config_variables: {
        product_variant: {
            productA: {
                srcs: ["productA/libcalc.so"],
            },
            productB: {
                srcs: ["productB/libcalc.so"],
            },
            productC: {
                srcs: ["productC/libcalc.so"],
            },
            conditions_default: {
                srcs: ["default/libcalc.so"],
            },
        },
    },
    
    compile_multilib: "both",
    strip: {
        none: true,
    },
}
2. BoardConfig.mk 설정
해당 product의 device/manufacturer/product/BoardConfig.mk에 변수를 설정합니다:
# Soong config namespace 등록
SOONG_CONFIG_NAMESPACES += myproject

# string variable 등록
SOONG_CONFIG_myproject += product_variant

# 값 설정
SOONG_CONFIG_myproject_product_variant := productA
3. Architecture별로 다른 so 파일 사용하기
만약 32bit/64bit별로 다른 파일을 사용하려면:
product_cc_prebuilt_library_shared {
    name: "libcalc",
    
    compile_multilib: "both",
    
    soong_config_variables: {
        product_variant: {
            productA: {
                srcs: ["productA/libcalc.so"],
                multilib: {
                    lib32: {
                        srcs: ["productA/lib/libcalc.so"],
                    },
                    lib64: {
                        srcs: ["productA/lib64/libcalc.so"],
                    },
                },
            },
            productB: {
                srcs: ["productB/libcalc.so"],
                multilib: {
                    lib32: {
                        srcs: ["productB/lib/libcalc.so"],
                    },
                    lib64: {
                        srcs: ["productB/lib64/libcalc.so"],
                    },
                },
            },
        },
    },
    
    strip: {
        none: true,
    },
}
주의사항
srcs에 지정하는 경로는 Android.bp 파일이 있는 디렉토리를 기준으로 상대경로입니다
prebuilt library는 strip.none: true를 설정해서 이미 strip된 바이너리를 그대로 사용하는 것이 일반적입니다
compile_multilib: "both"로 설정하면 32bit/64bit 모두 빌드됩니다
이렇게 하면 빌드 시 SOONG_CONFIG_myproject_product_variant 값에 따라 자동으로 적절한 libcalc.so 파일이 선택됩니다!

반응형