Clang을 사용하여 Linux 커널을 컴파일하는 방법은 무엇입니까? [폐쇄]

Clang을 사용하여 Linux 커널을 컴파일하는 방법은 무엇입니까? [폐쇄]

호기심 때문에 다음 두 가지 방법을 사용하여 Linux 커널을 컴파일하는 데 관심이 있습니다.그 소리그리고자프케한 번에 하나씩 컴파일러.

따라갈 가이드를 찾을 수 없습니다. Linux 커널을 컴파일하는 데는 GCC만 사용됩니다.

다른 컴파일러를 사용하여 Linux 커널을 컴파일하는 방법은 무엇입니까?

답변1

커널 빌드를 사용하면 사용할 도구를 지정할 수 있습니다. 예를 들어 C 컴파일러를 지정하고 CCHOSTCC변수를 설정합니다.

make CC=clang HOSTCC=clang

이 빌드는 GCC에서만 성공할 것으로 예상되는데 관심 있는 사람이 있습니다.대신 Clang을 사용하세요, 어떤 경우에는 작동하는 것으로 알려져 있습니다(일부 Android 커널은 Clang으로 빌드됨).

답변2

답변을 주신 Stephen Kitt에게 감사드립니다. Clang을 사용하여 Linux 커널을 컴파일할 수 있습니다. 하지만 Clang v9.0이 필요합니다.

구성

Arch Linux를 사용하는 경우 v9.0을 직접 컴파일하지 않고도 clang할 수 있는 좋은 방법이 있습니다.

# Enable the testing repository (if not already enabled):
echo -e "[testing]\nInclude = /etc/pacman.d/mirrorlist" | sudo tee -a /etc/pacman.conf

# Update the database and install clang, llvm, llvm-libs
sudo pacman -Sy testing/clang testing/llvm testing/llvm-libs

# Check if you have clang-9:
clang --version

참고: 향후 clang 버전 9에 대한 추가 리포지토리가 추가되면 설치할 수 있습니다..

clang-9.0이 있으면 다음에서 원하는 커널을 다운로드하세요.여기.

별칭 make를 사용하여 커널을 컴파일하면 됩니다.

alias make="make CC=clang HOSTCC=clang -j `nproc`"

설치 과정을 계속하세요.

완료되면 시스템을 재부팅합니다. 그런 다음 다음을 입력하십시오.

cat /proc/version

위의 코드는 몇 가지 추가 세부 정보와 함께 커널 버전을 보여줍니다. 예를 들어 내 /proc/version 파일은 다음과 같습니다.

Linux version 5.4.0-rc1 (sourav@archlinux-pc) (clang version 9.0.0 (tags/RELEASE_900/final)) #1 SMP PREEMPT Sun Oct 6 18:02:41 IST 2019

성능

이것이 진정한 위약인지는 모르겠지만 GCC 컴파일 버전보다 조금 더 빠르게 실행됩니다. 나는 또한 clang9와 zapcc를 사용하여 Xonotic과 같은 게임을 컴파일했는데, 여기서 clang-9의 성능은 zapcc-7.0과 gcc 9.1.0보다 좋습니다.

결론적으로

clang 9로 커널을 컴파일하는 것이 좋은 생각이라고 생각합니다. 하지만 zapcc는 아직 이것을 할 수 없습니다. zapcc 버전 7.0 및 clang 버전 8.0.1(제가 시도한)에 따르면:

scripts/kconfig/conf  --syncconfig Kconfig
Compiler lacks asm-goto support.

도움이 되었기를 바랍니다!

관련 정보