Android 컴 파일 시스템 의 Android. bp, Blueprint, Soong

9603 단어 Android
다음으로 이동:http://note.qidong.name/2017/08/android-blueprint/
Android 컴 파일 시스템 의 Android. bp, Blueprint, Soong
본 고 는 Android Nougat (7.0) 에 도 입 된 Android. bp 와 관련 된 도구 체인 을 간단하게 소개 한다.
간단 한 소개
Android. bp 는 Android. mk 의 설정 파일 을 바 꾸 는 데 사 용 됩 니 다.Blueprint 프레임 워 크 를 사용 하여 해석 한 다음 Ninja 파일 로 변환 합 니 다.
Android. mk 와 달리 Android. bp 는 순수한 설정 파일 로 분기, 순환 등 프로 세 스 제어 가 포함 되 지 않 으 며 산수, 논리 연산 도 할 수 없습니다.이와 함께 닌 자 파일 도 마찬가지다.이 로 인해 새로운 문제 와 수요 가 생 겼 다. 안 드 로 이 드 프로젝트 에서 컴 파일 을 선택 하고 설정 을 해석 하 며 Ninja 로 전환 하 는 등 Soong 이 생 겨 났 다. Soong 은 사실 Makefile 컴 파일 시스템 의 핵심, 즉 build/make/core/ 아래 의 내용 에 해당 한다.Android. bp 의 의미 정의 와 해석 을 제공 하고 Ninja 파일 로 변환 합 니 다.
이 밖 에 Soong 은 하나의 androidmk 명령 을 컴 파일 하여 Android. mk 를 수 동 으로 Android. bp 로 변환 할 수 있 습 니 다.이것 은 선택, 순환 등 복잡 한 절 차 를 제어 하지 않 는 Android. mk 에 만 적 용 됩 니 다.
Blueprint 와 Soong 은 모두 Golang 이 쓴 프로젝트 입 니 다.Android Nougat 를 시작 으로 prebuilts/go/ 디 렉 터 리 에 Golang 에 필요 한 실행 환경 을 추가 해 컴 파일 할 때 사용 합 니 다.
Android. bp 및 관련 지원, Android Nougat 부터 가입, Android Oreo (8.0) 부터 기본 으로 시작 합 니 다.Android Nougat 버 전에 서 사용 하려 면 컴 파일 을 실행 할 때 변 수 를 추가 해 야 합 니 다.
make 'USE_SOONG=true'

블 루프 린 트 단독 컴 파일
Soong 을 사용 하면 Android 컴 파일 초기 준비 단계 에서 실행 build/soong/soong.bash 환경 준 비 를 합 니 다.그 중에서 Blueprint 를 out 디 렉 터 리 로 컴 파일 하고 설치 합 니 다.안 드 로 이 드 프로젝트 를 컴 파일 할 때 안 드 로 이 드 bp 관련 툴 체인 이 자동 으로 컴 파일 되 므 로 신경 쓸 필요 가 없다 는 것 이다.
Soong 은 Android 와 강 한 관 계 를 가 진 프로젝트 이 고 Blueprint 는 상대 적 으로 독립 적 이어서 따로 컴 파일 하고 사용 할 수 있 습 니 다.
Blueprint 를 컴 파일 하려 면 먼저 Golang 환경 을 갖 춰 야 합 니 다.그리고 다음 절차 에 따라 명령 을 집행 한다.
go get github.com/google/blueprint
cd $GOPATH/src/github.com/google/blueprint
./bootstrap.bash
./blueprint.bash
ls bin

새로 생 성 된 bin 디 렉 터 리 에는 실행 가능 한 파일 4 개가 포함 되 어 있 습 니 다.
  • bpfmt
  • bpmodify
  • microfactory
  • minibp

  • 문서 가 적 고 도움말 명령 도 명령 에 대한 설명 을 포함 하지 않 기 때문에 그 역할 은 문 자 를 보고 의 미 를 살 수 밖 에 없다.
    툴 체인 관계
    Android. mk, Android. bp, Soong, Blueprint, Ninja, 그들 사이 에는 도대체 어떤 관계 가 있 습 니까?다음은 이 몇 가지 개념 간 의 역할 관 계 를 간단 한 방식 으로 표현 한다.
    Android.bp --> Blueprint --> Soong --> Ninja
    Makefile or Android.mk --> kati --> Ninja
    
    (Android.mk --> Soong --> Blueprint --> Android.bp)
    

    Blueprint 는 Android. bp 를 생 성, 해석 하 는 도구 로 Soong 의 일부분 입 니 다.Soong 은 Android 컴 파일 을 위 한 도구 로 Blueprint 는 파일 을 해석 하 는 형식 일 뿐 Soong 은 내용 의 의 미 를 설명 합 니 다.
    Android. mk 는 Soong 에서 제공 하 는 androidmk 을 통 해 Android. bp 로 변환 할 수 있 으 나 간단 한 설정 만 가능 합 니 다.현재 Oreo 의 컴 파일 프로 세 스 는 여전히 kati 를 사용 하여 전환 되 고 있 습 니 다.
    기 존 Android. mk, 기 존 Android. bp 는 각각 Ninja 로 전환 된다.Android. mk 와 다른 Makefile 에서 파일 을 생 성 합 니 다 out/build-.ninja.안 드 로 이 드 bp 에서 생 성 된다 out/soong/build.ninja.그 밖 에 작은 out/combined-.ninja 파일 을 생 성하 여 두 사람 을 조합 하여 집행 입구 로 삼 는 다.
    결국 Ninja 파일 이 야 말로 원본 코드 컴 파일 을 직접 제어 하 는 도구 입 니 다.
    Android.bp
    샘플 과 기본 개념
        // Android.bp sample
        cc_defaults(
            deps = [
                "libc",
            ],
        )
    
        cc_library(
            name = "cmd",
            srcs = [
                "main.c",
            ],
        )
    
        subdirs = ["subdir1", "subdir2"]
    

    앞의 사례 에서 cc_library 이런 () 앞의 것 이 바로 모듈 (module) 이다.여기 서 module 의 개념 은 Android. mk 에서 module 의 개념 에 직접 대응 합 니 다.그리고 = 앞의 name, srcs 등 이 바로 이 모듈 의 속성 (property) 이다.subdirs 파일 등급 의 최상 위 속성 으로 지정 하면 2 차 디 렉 터 리 에 있 는 Android. bp 를 찾 습 니 다.Android. mk 에서 자주 사용 하 는 것 과 유사 합 니 다 include $(call all-subdir-makefiles).
    모듈 은 속성 을 계승 할 수 있 습 니 다.  cc_defaults 은 파일 에 있 는 모든 모듈 의 부모 모듈 로 공용 속성 을 지정 할 수 있 습 니 다.상기 코드 에서 cc_library 모듈 은 지정 되 지 않 았 지만 deps 속성 이 포함 되 어 있 습 니 다.
    문법
    Blueprint 파일 의 문법 은 설정 파일 일 뿐 입 니 다.
    변수 와 속성 은 모두 동적 으로 강 한 유형 으로 값 을 부여 할 때 확 정 됩 니 다.변수 유형 은 네 가지 밖 에 없다.
  • Bool true 또는 false
  • 문자열 Strings ("string")
  • 문자열 목록 ["string1", "string2"]
  • 매 핑 관계 지도 {key1: "value1", key2: ["value2"]}
  • 설명 방식 은 Golang 과 유사 합 니 다.줄 주석 // line 과 블록 주석 /* block */ 을 지원 합 니 다.
    조작 부 호 는 할당 = 을 제외 하고 + 만 있 습 니 다.
    상용 공구
    컴 파일 과정 에서 관련 이 많 지만 개발 과정 에서 수 동 으로 실행 해 야 할 명령 은 많 지 않다.
    하 나 는 포맷 도구 bpfmt 입 니 다.gofmt 와 유사 하여 Blueprint 파일 을 포맷 할 수 있 습 니 다.(사실 코드 는 기본적으로 gofmt 에서 복 사 된 것 이다.)
    예 를 들 어 현재 디 렉 터 리 와 하위 디 렉 터 리 에 있 는 모든 Android. bp 를 포맷 합 니 다.
    bpfmt -w .
    

    또 하 나 는 androidmk 안 드 로 이 드. mk 를 안 드 로 이 드. bp 로 전환 하 는 일 을 맡 았 다.사실 현 단계 에 서 는 Android. bp 를 쓰 는 것 을 배 울 필요 가 없 으 며, Android. mk 를 써 서 전환 해도 된다.
    androidmk Android.mk > Android.bp
    

    Android. mk 변환 Android. bp 인 스 턴 스
    다음은 AOSP 의 간단 한 모듈 system/core/sdcard/Android.mk 을 사례 로 한다.
        LOCAL_PATH := $(call my-dir)
    
        include $(CLEAR_VARS)
    
        LOCAL_SRC_FILES := sdcard.cpp fuse.cpp
        LOCAL_MODULE := sdcard
        LOCAL_CFLAGS := -Wall -Wno-unused-parameter -Werror
        LOCAL_SHARED_LIBRARIES := libbase libcutils libminijail libpackagelistparser
    
        LOCAL_SANITIZE := integer
    
        include $(BUILD_EXECUTABLE)
    

    이것 은 바 이 너 리 실행 가능 한 파일 을 컴 파일 하 는 작은 모듈 로 내용 이 매우 간단 하 다.실행 androidmk Android.mk > Android.bp 을 통 해 Android. bp 로 전환 할 수 있 습 니 다.
        cc_binary {
            srcs: [
                "sdcard.cpp",
                "fuse.cpp",
            ],
            name: "sdcard",
            cflags: [
                "-Wall",
                "-Wno-unused-parameter",
                "-Werror",
            ],
            shared_libs: [
                "libbase",
                "libcutils",
                "libminijail",
                "libpackagelistparser",
            ],
            sanitize: {
                misc_undefined: ["integer"],
            },
        }
    

    행 수가 많아 졌 지만 그 의 미 는 더욱 명확 해 졌 다 는 것 을 알 수 있다.이 모듈 은 sdcard 이라는 모듈 로 원본 코드 는 두 개의 cpp 파일 이 있 고 라 이브 러 리 에 의존 하 는 것 은 네 개 입 니 다.  cc_binary 이면 include $(BUILD_EXECUTABLE) 에 해당 한다.전환 전후 에 있어 야 할 정 보 는 모두 있 는데 표현 방식 이 바 뀌 었 을 뿐이다.
    메모: Android. mk 에 복잡 한 논리 가 포함 되 어 있 으 면 결 과 를 바 꾸 는 데 문제 가 있 을 수 있 습 니 다. 결과 파일 의 설명 을 참조 하 십시오.
    Android. bp 가 cc_binary, cc_library 와 같은 모듈 을 얼마나 지원 하 는 지 에 대해 서 는 각 모듈 이 name, cflags 와 같은 속성 을 얼마나 지원 하 는 지 에 대해 서 는 Soong 의 문서 만 찾 을 수 있 습 니 다.
    문서.
    현재 (2017 년) 전체 Android. bp 도구 체인 은 문서 가 극도로 부족 한 단계 에 있다.공식 적 으로 불쌍 한 README 을 제외 하고 코드 와 주석 만 볼 수 있 고 이미 존재 하 는 Android. bp 를 참고 할 수 있 습 니 다.
    또한, 이미 Soong 컴 파일 을 사용 한 항목 에서 out/soong/.bootstrap/docs/soong_build.html 모든 사용 가능 한 모듈 과 속성 을 설명 합 니 다.이것 은 두 눈 에 먹칠 하 는 증상 을 다소 완화 시 켰 기 때문에 너무 힘 든 것 은 아니다.실제로 전체 Soong 은 여전히 발전기 에 있 고 구 글 은 거 리 낌 없 이 수정 하 며 호환성 을 전혀 고려 하지 않 았 다.8.0.0 에 쓴 Android. bp 는 8.0.1 에 컴 파일 에 실 패 했 을 수도 있 습 니 다.이것 은 아마도 문서 와 컴 파일 이 연 결 된 진의 일 것 이다.Soong 이 완전히 성숙 해 지면 안 드 로 이 드 개발 홈 페이지 에 상세 한 정보 가 있 을 지도 모른다.
    이 사 이 트 는 AOSP 의 android - 8.0.0 - r9 에서 컴 파일 된 soong 을 제공 합 니 다.build. html, 참고 만 가능 합 니 다.

    좋은 웹페이지 즐겨찾기