soong
2026. 1. 6. 14:59soong_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 파일이 선택됩니다!
