Wednesday, February 28, 2024

AOSP에서 .mk와 .bp 파일의 문법과 주의사항에 대한 이해

AOSP란 무엇인가?

AOSP(AOSP, Android Open Source Project)는 Google에서 관리하는 Android 운영체제의 오픈 소스 프로젝트입니다. 이 프로젝트의 목표는 휴대폰, 태블릿, 웨어러블 디바이스 등 다양한 플랫폼에서 실행될 수 있는 안드로이드 운영체제를 개발하고 유지하는 것입니다.

왜 AOSP가 중요한가?

AOSP는 전 세계에서 가장 널리 사용되는 모바일 운영체제인 Android를 개발 및 수정할 수 있는 기반을 제공합니다. 이를 통해 개발자는 Android 운영체제를 자신들의 요구에 맞게 맞춤화할 수 있습니다. 이러한 유연성 덕분에 Android는 다양한 디바이스와 시나리오에서 사용될 수 있게 되었습니다.

AOSP와 .mk, .bp 파일

AOSP의 빌드 시스템은 .mk와 .bp 파일을 사용하여 프로젝트 구성을 관리합니다. 이들 파일은 각각 Makefile과 Blueprint 파일로, 프로젝트의 빌드 과정을 정의하고 제어하는 데 사용됩니다.

Android.mk와 Android.bp

Android.mk는 Android 운영체제의 빌드 시스템에서 전통적으로 사용되던 파일입니다. 이 파일은 make 빌드 시스템의 문법을 따르며, 각 모듈의 소스 코드 위치, 필요한 라이브러리, 빌드 옵션 등을 지정합니다.

Android.bp는 최근에 도입된 Blueprint 빌드 시스템을 위한 파일입니다. 이 파일은 Go 언어로 작성된 도구인 Soong을 사용하여 처리됩니다. Android.bp 파일은 JSON과 비슷한 문법을 사용하며, Android.mk보다 더 간결하고 이해하기 쉽습니다.

변화의 이유

Android.mk에서 Android.bp로의 전환은 빌드 시스템을 더 빠르고 효율적으로 만들기 위한 Google의 노력의 일환입니다. 특히, Blueprint 빌드 시스템은 Android.mk에 비해 더 빠른 빌드 시간을 제공하며, 더욱 간결하고 명확한 문법을 사용합니다.

.mk와 .bp 파일의 역할

.mk와 .bp 파일은 AOSP 빌드 시스템의 핵심 요소입니다. 이들 파일은 각각 Android Makefile(.mk)과 Blueprint(.bp) 파일을 나타내며, AOSP 프로젝트의 빌드 구성을 정의하고, 빌드 프로세스를 제어하는 역할을 합니다.

Android.mk 파일의 역할

Android.mk 파일은 Android의 전통적인 빌드 시스템인 Make의 문법을 따른다. 각 Android.mk 파일은 하나 이상의 모듈을 정의하며, 이 모듈은 AOSP 빌드 시스템이 생성해야 하는 빌드 출력의 단위를 나타낸다.

모듈은 소스 파일 위치, 필요한 C/C++ 라이브러리, 컴파일러 플래그 등과 같은 정보를 포함하며, 이 정보를 바탕으로 빌드 시스템은 각 모듈에 대한 빌드 규칙을 생성한다.

Android.bp 파일의 역할

Android.bp 파일은 Google이 최근에 도입한 Blueprint 빌드 시스템을 위한 것이다. 이 파일은 Go 언어로 작성된 도구인 Soong을 사용하여 처리된다.

Android.bp 파일은 JSON과 비슷한 구조를 가진 문법을 사용하여 빌드 규칙을 정의한다. 이 파일은 Android.mk보다 더 간결하고 이해하기 쉬우며, 빌드 시스템을 더 빠르고 효율적으로 만드는데 중요한 역할을 한다.

Android.mk와 Android.bp의 비교

Android.mk와 Android.bp는 동일한 목표를 가지고 있지만, 그들이 처리하는 방식은 매우 다릅니다. Android.mk는 Makefile 문법을 사용하여 빌드 규칙을 정의하는 반면, Android.bp는 JSON과 비슷한 문법을 사용하여 빌드 규칙을 정의합니다.

Android.mk는 Makefile의 복잡성과 느린 빌드 시간 때문에 개발자들에게 많은 어려움을 주었습니다. 이에 반해, Android.bp는 더 간결하고 이해하기 쉬운 문법을 사용하며, 더 빠르고 효율적인 빌드 시스템을 제공합니다.

Android.mk와 Android.bp의 공존

현재 AOSP는 Android.mk와 Android.bp 파일을 모두 지원하고 있습니다. 이는 Blueprint 빌드 시스템이 완전히 안정화되고, 모든 빌드 규칙이 Android.bp로 이전될 때까지 계속될 것입니다.

따라서, 개발자들은 Android.mk와 Android.bp 파일을 모두 이해하고, 각각의 장단점을 파악하는 것이 중요합니다.

.mk와 .bp의 문법

.mk와 .bp 파일은 AOSP 빌드 시스템에서 중요한 역할을 하는 파일입니다. 각각의 문법을 이해하는 것은 AOSP의 빌드 프로세스를 이해하는 데 매우 중요합니다.

Android.mk 문법

Android.mk 파일은 GNU Makefile의 문법을 따릅니다. 이 파일은 여러 개의 "변수 할당"과 "빌드 규칙"으로 구성되어 있습니다.

변수 할당은 "변수 := 값" 형태로 이루어지며, 빌드 규칙은 "목표: 의존성" 형태로 이루어집니다. 목표는 빌드 시스템이 생성하려는 파일을 나타내며, 의존성은 그 파일을 생성하기 위해 필요한 입력 파일을 나타냅니다.

Android.bp 문법

Android.bp 파일은 JSON과 비슷한 문법을 사용합니다. 이 파일은 하나 이상의 "모듈 정의"로 구성되어 있습니다.

각 모듈 정의는 "module_type { ... }" 형태로 이루어지며, module_type은 빌드 시스템이 어떻게 모듈을 빌드해야 하는지를 나타내는 키워드입니다. 모듈 정의 내부의 중괄호 { ... } 안에는 모듈의 속성들이 들어갑니다.

예를 들어, C++ 라이브러리를 정의하는 Android.bp 파일은 다음과 같습니다.

cc_library {
    name: "my_library",
    srcs: ["my_source.cpp"],
    cflags: ["-Wall", "-Werror"],
}

위의 예시에서 "cc_library"는 module_type이며, "name", "srcs", "cflags"는 모듈의 속성입니다.

.mk와 .bp 파일의 전환

Google은 Android의 빌드 시스템을 점진적으로 Android.mk에서 Android.bp로 전환하고 있습니다. 이는 빌드 시스템의 속도를 향상시키고, 빌드 규칙을 더 간결하고 이해하기 쉽게 만들기 위한 것입니다.

Android.mk 파일을 Android.bp 파일로 전환하는 과정은 일반적으로 다음과 같습니다:

  1. Android.mk 파일의 내용을 분석합니다.
  2. 각 Android.mk 모듈을 해당하는 Android.bp 모듈 타입으로 변환합니다.
  3. Android.mk 파일의 변수 할당을 Android.bp 파일의 속성 할당으로 변환합니다.
  4. 빌드 규칙을 Android.bp 파일의 모듈 정의로 변환합니다.

전환의 예시

예를 들어, 다음은 Android.mk 파일에서 Android.bp 파일로의 변환 예시입니다.

Android.mk:
include $(CLEAR_VARS)
LOCAL_MODULE := my_module
LOCAL_SRC_FILES := my_source.c
LOCAL_CFLAGS := -Wall -Werror
include $(BUILD_SHARED_LIBRARY)
Android.bp:
cc_library_shared {
    name: "my_module",
    srcs: ["my_source.c"],
    cflags: ["-Wall", "-Werror"],
}

위의 예시에서, "LOCAL_MODULE", "LOCAL_SRC_FILES", "LOCAL_CFLAGS" 변수는 각각 Android.bp의 "name", "srcs", "cflags" 속성으로 변환되었습니다. 또한, "include $(BUILD_SHARED_LIBRARY)"는 "cc_library_shared" 모듈 타입으로 변환되었습니다.

.mk와 .bp 파일 작성시 주의사항

.mk와 .bp 파일을 작성할 때는 몇 가지 주의사항을 기억해야 합니다. 이들 파일은 AOSP 빌드 시스템의 핵심 부분이므로, 정확하게 작성해야 빌드 프로세스가 올바르게 작동합니다.

Android.mk 주의사항

1. Android.mk 파일을 작성할 때는 GNU Makefile의 문법을 정확하게 이해해야 합니다. Makefile의 문법은 복잡하며, 잘못 사용하면 예상치 못한 결과를 초래할 수 있습니다.

2. Android.mk 파일에서는 각 변수 할당이 빌드 시스템에 어떤 영향을 미치는지 정확히 이해해야 합니다. 예를 들어, "LOCAL_MODULE" 변수는 생성되는 빌드 출력의 이름을 정의합니다.

Android.bp 주의사항

1. Android.bp 파일을 작성할 때는 JSON과 비슷한 문법을 정확하게 이해해야 합니다. 잘못된 문법을 사용하면 빌드 시스템이 파일을 올바르게 해석하지 못할 수 있습니다.

2. Android.bp 파일에서는 각 속성 할당이 빌드 시스템에 어떤 영향을 미치는지 정확히 이해해야 합니다. 예를 들어, "name" 속성은 생성되는 빌드 출력의 이름을 정의합니다.

일반적인 주의사항

1. .mk와 .bp 파일을 작성할 때는 항상 최신의 AOSP 빌드 문서를 참조해야 합니다. AOSP 빌드 시스템은 지속적으로 업데이트되므로, 최신 정보를 알고 있어야 합니다.

2. 빌드 규칙을 정의할 때는 가능한 한 간결하게 작성해야 합니다. 복잡한 빌드 규칙은 빌드 프로세스를 느리게 만들고, 오류를 발생시킬 수 있습니다.

테스트와 검증

3. .mk와 .bp 파일의 변경 사항은 항상 테스트해야 합니다. 빌드 규칙의 변경은 빌드 프로세스와 생성된 빌드 출력에 큰 영향을 미칠 수 있으므로, 변경 사항을 적용한 후 빌드 프로세스가 여전히 올바르게 작동하는지 확인해야 합니다.

4. 또한, 생성된 빌드 출력이 예상대로 작동하는지 검증해야 합니다. 이는 특히 빌드 규칙의 변경이 빌드 출력의 기능에 영향을 미칠 수 있는 경우에 중요합니다.

코드 리뷰

5. 가능한 경우, .mk와 .bp 파일의 변경 사항은 코드 리뷰를 거쳐야 합니다. 코드 리뷰는 잠재적인 문제를 발견하고, 코드 품질을 향상시키는 데 도움이 됩니다.

문서화

6. 마지막으로, .mk와 .bp 파일에 대한 변경 사항을 문서화해야 합니다. 이는 다른 개발자들이 이해하고, 필요한 경우 코드를 수정하는 데 도움이 됩니다.

결론

AOSP의 빌드 시스템은 .mk와 .bp 파일을 통해 프로젝트의 빌드 구성을 관리합니다. Android.mk는 전통적인 Makefile 문법을 사용하며, Android.bp는 간결하고 이해하기 쉬운 JSON과 비슷한 문법을 사용합니다.

Google은 현재 Android.mk에서 Android.bp로 빌드 시스템을 전환하고 있습니다. 이는 빌드 시스템의 속도를 향상시키고, 빌드 규칙을 더 간결하고 이해하기 쉽게 만들기 위한 것입니다.

.mk와 .bp 파일을 작성하거나 수정할 때는 해당 문법을 정확히 이해하고, 빌드 시스템에 미치는 영향을 파악해야 합니다. 또한, 변경 사항을 항상 테스트하고, 문서화하는 것이 중요합니다.

AOSP 빌드 시스템은 복잡하고 넓은 범위의 주제이므로, 이 문서에서 다루지 않은 많은 세부 사항들이 있습니다. 이러한 세부 사항을 이해하려면 AOSP의 공식 문서와 코드를 참조하는 것이 가장 좋습니다.

AOSP 빌드 시스템의 이해는 Android 운영체제를 수정하거나 맞춤화하는 데 있어 중요한 역할을 합니다. 이를 통해 개발자는 Android 운영체제를 자신의 요구에 맞게 효과적으로 조정할 수 있습니다.


0 개의 댓글:

Post a Comment