본문 바로가기

macOS에서 gccemacs 설치하기(feat. emacs-plus)

기술적인 이야기/이맥스 2021. 1. 11.
반응형

과연 제대로 설치된 것인지 모르겠지만 첫 화면

Homebrew를 통해 설치할 수 있는 이맥스(Emacs) 중 몇 안 되는 GUI가 제대로 돌아가는(?) 프로젝트인 emacs-plus에서 오랜 시간 동안 native-comp 즉 gccemacs를 지원하기 위한 논의와 개발이 있었다. 한참을 지켜보다 잠깐 모니터링을 깜빡한 사이 기쁘게도 이 기능이 어느 정도 동작하는지 코드에 반영이 되어 있었다. 그래서 당장 설치를 시도해봤다.

참고로 gccemacs는 이름에서 느낄 수 있듯이 Emacs Lisp 네이티브 컴파일을 지원하는 이맥스다.

전제 조건으로 Emacs 28.x 버전만 지원된다는 단점이 있다. 이 버전은 개발 중인 불안정 버전인 만큼 실 업무에 사용하기에는 주의가 필요할 것 같다.

설치 커맨드는 아래와 같다.

brew install emacs-plus@28 --with-native-comp

의존성에 gcc와 libgccjit 그리고 llvm이라는 거대한 패키지가 포함되어 있어서 빌드에 굉장히 오랜 시간이 걸릴 수도 있다. 미리 각오하고 설치를 시작하자. 맥북에서 배터리 상태로 빌드하기엔 좀 무모할 수도 있으니 전원도 연결해두자.

728x90

빌드 에러

설치 과정에서 아래와 같은 문제가 생기며 빌드에 실패하는 수도 있다.

ld: library not found for -lSystem

아마도 gcc나 libgccjit를 기존에 설치했던 적이 있다면 발생할 수 있는데, 다행히도 해결 방법은 쉽다. 그저 기존에 설치된 gcc와 libgccjit를 소스로 재설치(재컴파일) 하면 된다.

brew uninstall gcc libgccjit
brew install gcc
brew install libgccjit -s

개인적으로는 미리 gcc와 libgccjit를 새로 설치해뒀기 때문에 이 문제를 겪지 않고 설치에 성공하였다.

Doom Emacs와의 호환성

기존에 Doom Emacs를 사용 중이었다면 스크립트 빌드를 새로 해야 된다. 하지만 거의 새로 설치하는 수준이기 때문에 중요한 캐시가 없다면 그냥 새로 설치하는 편이 더 쉽다.

다만 gccemacs의 경우 바이트 컴파일 대신 네이티브 컴파일을 하기 때문에 설치가 더 오래 걸린다는 것을 유념하자.

첫 실행은 굉장히 느리다. 터미널에서 emacs -Q 명령으로 수 차례 순수 이맥스를 몇 번 기동 했더니 이상하게 조금씩 빨라지기는 했다. 초기 30초 넘게 걸리던 Doom Emacs 로딩 시간이 지금은 6초 이내로 빨라졌다. 왜 그런지는 여전히 모르겠지만 말이다.

그 외에 실행은 되는데 상황에 따라 아마도 오류가 날 수도 있다. 개인적으로는 아래와 같은 오류를 겪고 있다.

dart와 관련된 문제는 안내되는 대로 하면 해결이 되는데 나머지 두 문제, 즉 org-capture와 org-agenda는 아직 해결 방법을 모르고 있다. 즉 이 두 기능은 못 쓰고 있다. 기본 설정 상태에서는 아마도 이런 오류가 나지 않을 것 같지만 확인해보지는 않았다. 개인적으로 자주 쓰지는 않는 기능이라 당장 쓰는데 무리는 없지만 혹시나 필수로 사용해야 한다면 참고하자.

업데이트: 현재는 해결된 것 같다. 업데이트 후 빌드를 새로해준 뒤 더이상 문제가 발생하지 않고 있다.

~/.emacs.d/bin/doom up
~/.emacs.d/bin/doom build

결론

Org Mode를 쓰는 것 자체는 큰 무리는 없었다. 하지만 Agenda를 못 쓰는 건 일부 사람들에겐 좀 치명적인 것 같다. 개인적으로 사용하는 Org 문서를 웹사이트로 출력하는 스크립트도 오류를 뿜고 있어서 난감한데 이게 원인일지도 모르겠다. 아마도 해결 방법은 있을 거라 생각되지만 많은 삽질이 필요할 것 같다.

어쨌든 Org Mode의 일부 기능 외에는 대체로 잘 동작하고 있는 것을 확인하였다.

가장 중요한 것을 빼먹었다. 퍼포먼스 면에서 제법 빨라진 것 같은 느낌은 든다. 이맥스의 특징이 비동기 구조가 아니기 때문에 각 명령어 수행에서 딜레이가 걸려서 UI가 멈칫하는 경우가 많은데 이 딜레이를 많이 줄여주는 것 같다. 하지만 이런 딜레이 개선을 제외하고는 별 차이를 느낄 수 없었다. 물론 이는 이맥스 설계 상의 한계라서 문제 삼기는 힘들다. 미래에는 어떻게 바뀔지도 모르고 말이다.

관련 링크

 

gccemacs

Emacs with Native Compilation Support

seorenn.github.io

 

gccemacs

This section applies to the (few) functions exposed to the gcc, namely: car, cdr, setcar, setcdr, 1+, 1-, - (Fnegate). At comp-speed 3 type checks will not be emitted if the propagation has proved the type to be the expected one for the called function.

akrl.sdf.org

 

d12frosted/homebrew-emacs-plus

Emacs Plus formulae for the Homebrew package manager - d12frosted/homebrew-emacs-plus

github.com

728x90
반응형

댓글