Building Neovim - minsuk-jang/teamproject GitHub Wiki

  • μƒˆ λ²„μ „μœΌλ‘œ μ—…κ·Έλ ˆμ΄λ“œν•˜κΈ° 전에 ** λ‹€μŒ HEADλ₯Ό 항상 ν™•μΈν•˜μ‹­μ‹œμ˜€. **

λΉ λ₯Έ μ‹œμž‘

  1. λΉŒλ“œ μ „μ œ 쑰건이 μ„€μΉ˜λ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€.
  2. 볡제 neovim / neovim.
    • ** stable release ** :git checkout v0.2.0 (λ˜λŠ” κ°€μž₯ 졜근 νƒœκ·Έ)
  3. makeλ₯Ό μ‹€ν–‰ν•˜μ—¬ Neovim을 λΉŒλ“œν•˜μ‹­μ‹œμ˜€. (BSD μ‹œμŠ€ν…œμ—μ„œλŠ”gmake / GNU Makeλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.)
  • ** μ‚¬μš©μž μ •μ˜ μœ„μΉ˜μ— μ„€μΉ˜ν•˜λ €λ©΄ ** CMAKE_INSTALL_PREFIXλ₯Ό μ„€μ •ν•˜μ‹­μ‹œμ˜€ **. Neovim μ„€μΉ˜ν•˜κΈ°λ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

기타 μ°Έκ³  사항 :

  • 타사 쒅속성 (libuv, LuaJIT λ“±)은 μžλ™μœΌλ‘œ .deps /둜 λ‹€μš΄λ‘œλ“œ λ©λ‹ˆλ‹€. λ¬Έμ œκ°€ μžˆμ„ 경우 FAQλ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.
  • λΉŒλ“œν•˜μ§€ μ•Šκ³ Makefile을 μƒμ„±ν•˜λ €λ©΄ :make cmake
  • Neovim을 κ°œλ°œν•˜λ €λŠ” 경우 λΉ λ₯Έ λΉŒλ“œλ₯Ό μœ„ν•΄ ninjaλ₯Ό μ„€μΉ˜ν•˜μ‹­μ‹œμ˜€. μžλ™μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.

이제 쒅속성을 확인 ν–ˆμœΌλ―€λ‘œ μ•„λž˜μ—μ„œ μ„€λͺ…ν•˜λŠ” λ‹€λ₯Έ λΉŒλ“œ λŒ€μƒμ„ μ‹œλ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν…ŒμŠ€νŠΈ

λͺ¨λ“  non-legacy (unit + functional) ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•˜λ €λ©΄ λ‹€μŒμ„ μˆ˜ν–‰ν•˜μ‹­μ‹œμ˜€ :

LC_ALL=C make test

unit ν…ŒμŠ€νŠΈ 만 μ‹€ν–‰ν•˜λ €λ©΄ λ‹€μŒμ„ μˆ˜ν–‰ν•˜μ‹­μ‹œμ˜€ :

LC_ALL=C make unittest

functional tests 만 μ‹€ν–‰ν•˜λ €λ©΄ λ‹€μŒμ„ μˆ˜ν–‰ν•˜μ‹­μ‹œμ˜€ :

LC_ALL=C make functionaltest

fu 만 μ‹€ν–‰ν•˜λ €λ©΄ * νŠΉμ • * λ‹¨μœ„ ν…ŒμŠ€νŠΈ: nctional tests λ₯Ό μ‹€ν–‰ν•˜μ‹­μ‹œμ˜€ :

TEST_FILE=test/unit/foo.lua make unittest
  • νŠΉμ • * κΈ°λŠ₯ ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•˜λ €λ©΄ λ‹€μŒμ„ μˆ˜ν–‰ν•˜μ‹­μ‹œμ˜€ :

    TEST_FILE=test/functional/foo.lua make functionaltest

ν…ŒμŠ€νŠΈλ₯Ό μ—¬λŸ¬ 번 λ°˜λ³΅ν•˜λ €λ©΄ λ‹€μŒμ„ μˆ˜ν–‰ν•˜μ‹­μ‹œμ˜€ :

.deps/usr/bin/busted --filter 'foo' --repeat 1000 test/functional/ui/foo_spec.lua

λͺ¨λ“  λ ˆκ±°μ‹œ (Vim) 톡합 ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•˜λ €λ©΄ λ‹€μŒμ„ μˆ˜ν–‰ν•˜μ‹­μ‹œμ˜€ :

make oldtest
  • 단일 * λ ˆκ±°μ‹œ ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•˜λ €λ©΄TEST_FILE = test_name.res '둜make'λ₯Ό μ‹€ν–‰ν•˜μ‹­μ‹œμ˜€. 예 : test_syntax.vim을 μ‹€ν–‰ν•˜λ €λ©΄ :

    TEST_FILE=test_syntax.res make oldtest

  • .vm λŒ€μ‹ μ— .res ν™•μž₯μžκ°€ ν•„μš”ν•©λ‹ˆλ‹€.
  • 전체 κ²½λ‘œκ°€ μ•„λ‹Œ ν…ŒμŠ€νŠΈ 파일 이름 만 μ§€μ •ν•˜μ‹­μ‹œμ˜€.

κΈ°λŠ₯ ν…ŒμŠ€νŠΈ

$ GDBλŠ” gdbserverμ—μ„œ ν…ŒμŠ€νŠΈ μ‹€ν–‰μœΌλ‘œ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. $ VALGRIND도 μ„€μ •λ˜λ©΄ gdbserverλ₯Ό 직접 μ‹œμž‘ν•˜μ§€ μ•Šκ³  valgrind에 --vgdb = yes μ˜΅μ…˜μ„ μΆ”κ°€ν•©λ‹ˆλ‹€.

μ΅œμ ν™” 된 λΉŒλ“œ

rm -r build
make clean
make CMAKE_BUILD_TYPE=Release

κ°œλ°œμžμ™€ "κ°€μž₯자리" μ‚¬μš©μžμ˜ 경우, RelWithDebInfoλŠ” 디버그 정보λ₯Ό μƒμ„±ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— Release 보닀 ꢌμž₯λ©λ‹ˆλ‹€.

컴파일 ν›„ λΉŒλ“œ μœ ν˜•μ„ ν™•μΈν•˜λ €λ©΄ ./build/bin/nvim --version | grep ^ Build λ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€.

λΉŒλ“œ 디버그

nvim은 일뢀 라이브러리λ₯Ό μ •μ μœΌλ‘œ λ§ν¬ν•˜κΈ° λ•Œλ¬Έμ— μ΄λŸ¬ν•œ ν•¨μˆ˜ 쀑 일뢀λ₯Ό μ‚¬μš©ν•  수 있으렀면 디버그 μ •λ³΄λ‘œ μ»΄νŒŒμΌν•΄μ•Ό ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

make distclean
VERBOSE=1 DEBUG=1 make deps

ν˜„μ§€ν™”

ν˜„μ§€ν™” λΉŒλ“œ

일반 λΉŒλ“œλŠ”build / src / nvim / po에.mo νŒŒμΌμ„ λ§Œλ“­λ‹ˆλ‹€.

*msgfmt : command not foundκ°€ ν‘œμ‹œλ˜λ©΄ gettextλ₯Ό μ„€μΉ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ μ‹œμŠ€ν…œμ—μ„œ 이 νŒ¨ν‚€μ§€λŠ” gettext라고 ν•©λ‹ˆλ‹€.

ν˜„μ§€ν™” 확인

$ LANG에 λŒ€ν•œ λ²ˆμ—­μ„ ν™•μΈν•˜λ €λ©΄ make -C build check-po- $ LANG을 μ‹€ν–‰ν•˜μ‹­μ‹œμ˜€. 예 :

make -C build check-po-de
make -C build check-po-pt_BR
  • ν•΄λ‹Ήν•˜λŠ” 경우make 'λŒ€μ‹ ninja`λ₯Ό μ‚¬μš©ν•˜μ‹­μ‹œμ˜€.
  • check-po- $ LANG은 ./build/src/nvim/po/check- $ {LANG} .log에 μžμ„Έν•œ λ³΄κ³ μ„œλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. (λ³΄κ³ μ„œλŠ”nvim에 μ˜ν•΄ μƒμ„±λ˜κ³ msgfmt에 μ˜ν•΄ μƒμ„±λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.)

ν˜„μ§€ν™” μ—…λ°μ΄νŠΈ

src / nvim / po / $ LANG.po νŒŒμΌμ„ μ΅œμ‹  λ¬Έμžμ—΄λ‘œ μ—…λ°μ΄νŠΈ ν•˜λ €λ©΄ λ‹€μŒμ„ μ‹€ν–‰ν•˜μ‹­μ‹œμ˜€ :

make -C build update-po-$LANG
  • ν•΄λ‹Ήλ˜λŠ” 경우 make 'λ₯Ό ninja`둜 λŒ€μ²΄ν•˜μ‹­μ‹œμ˜€.
  • **주의 : ** μ—…λ°μ΄νŠΈ ν›„μ—λŠ”src / nvim / po / cleanup.vim을 μ‹€ν–‰ν•˜μ‹­μ‹œμ˜€.

컴파일러 μ˜΅μ…˜

includes의 체인을 보렀면 -H μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ‹­μ‹œμ˜€. (# 918).

echo '#include "./src/nvim/buffer.h"' | \
> clang -I.deps/usr/include -Isrc -std=c99 -P -E -H - 2>&1 >/dev/null | \
> grep -v /usr/
  • grep -v / usr /λŠ” μ‹œμŠ€ν…œ 헀더 νŒŒμΌμ„ 걸러 λ‚΄κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.
  • -save-tempsλŠ” ν™•μž₯ 된 맀크둜 λ‚˜ 주석 처리 된 μ–΄μ…ˆλΈ”λ¦¬λ₯Ό 보기 μœ„ν•΄ μΆ”κ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€.

Xcode 및 MSVC ν”„λ‘œμ νŠΈ 파일

CMakeλŠ” μ—¬λŸ¬ 개의 ν”„λ‘œμ νŠΈ 파일 ν˜•μ‹ 으둜 λ‚΄λ³΄λ‚΄λŠ” -G μ˜΅μ…˜μ„ κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€. (예 : Xcode 및 Visual Studio).

예λ₯Ό λ“€μ–΄ Xcode의 정적 뢄석 GUI (# 167)λ₯Ό μ‚¬μš©ν•˜λ €λ©΄ Neovim makefileμ—μ„œ Xcode ν”„λ‘œμ νŠΈ νŒŒμΌμ„ 생성해야 ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œ neovim /은 메인 Makefile을 ν¬ν•¨ν•˜λŠ” μ΅œμƒμœ„ λ„€μ˜€ 빌 μ†ŒμŠ€ μ½”λ“œ λ””λ ‰ν† λ¦¬μž…λ‹ˆλ‹€) :

cmake -G Xcode neovim

κ·Έ ν›„ Xcodeμ—μ„œ κ²°κ³Ό ν”„λ‘œμ νŠΈ νŒŒμΌμ„ μ—½λ‹ˆλ‹€.

μ‚¬μš©μž μ •μ˜ Makefile

메인 Makefile 맨 μœ„μ—μ„œ μ°Έμ‘°λ˜λŠ” local.mkλ₯Ό μƒμ„±ν•˜μ—¬ λΉŒλ“œ ν”„λ‘œμ„ΈμŠ€λ₯Ό 둜컬둜 λ§Œλ“€μˆ˜ μžˆμŠ΅λ‹ˆλ‹€. .gitignore에 λ‚˜μ—΄λ˜μ–΄ μžˆμœΌλ―€λ‘œ μ—¬λŸ¬ λΈŒλžœμΉ˜μ—μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. **local.mk의 μƒˆλ‘œμš΄ λͺ©ν‘œλŠ” κΈ°λ³Έ make-target보닀 μš°μ„ ν•©λ‹ˆλ‹€. **

λ‹€μŒμ€ local.mk μƒ˜ν”Œλ‘œ 재 ꡬ좕을 κ°•μ œν•˜κΈ° μœ„ν•œ νƒ€κ²Ÿμ„ μΆ”κ°€ν•˜μ§€λ§Œ default-target을 μ˜€λ²„λΌμ΄λ“œν•˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€ :

all:

rebuild:
	rm -rf build
	make

타사 쒅속성

# 1588을 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

CMakeλ₯Ό μ‚¬μš©ν•˜μ—¬ "bundled" μ˜μ‘΄μ„±μ„ λΉŒλ“œν•˜λ €λ©΄ :

mkdir .deps ; cd .deps
cmake ../third-party
make

기본적으둜 λΌμ΄λΈŒλŸ¬λ¦¬μ™€ ν—€λ”λŠ” .deps / usr에 μžˆμŠ΅λ‹ˆλ‹€. 이제 λ„€μ˜€ 빔을 λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

mkdir build ; cd build
cmake ..
make

"λ²ˆλ“€" 쒅속성없이 λΉŒλ“œν•˜λŠ” 방법

  1. λͺ¨λ“  쒅속성을 μˆ˜λ™μœΌλ‘œ μ„€μΉ˜ν•˜μ‹­μ‹œμ˜€.
  2. μ €μž₯μ†Œ λ£¨νŠΈμ— build 디렉토리λ₯Ό λ§Œλ“­λ‹ˆλ‹€.
  3. λͺ¨λ“  μ˜΅μ…˜κ³Ό ν™˜κ²½μ„ κ°€μ§€κ³  cmake ..λ₯Ό μ‹€ν–‰ν•˜μ‹­μ‹œμ˜€. 예 :
    • CC=clang CFLAGS=" -O0 -g " cmake .. -DMIN_LOG_LEVEL=0 -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$PWD/root -DCLANG_ASAN_UBSAN=ON
  4. makeλ₯Ό μ‹€ν–‰ν•˜μ‹­μ‹œμ˜€.

CMake에 λŒ€ν•˜μ—¬

  • cmake.org
  • cmake -LAHλŠ” λͺ¨λ“  λ³€μˆ˜ μ •μ˜λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.
  • build / CMakeCache.txtλŠ” CMakeκ°€ μ‚¬μš©ν•˜λŠ” λͺ¨λ“  λ³€μˆ˜μ˜ 해석 된 값을 ν¬ν•¨ν•©λ‹ˆλ‹€.
  • build / compile_commands.jsonλŠ” 각 λ²ˆμ—­ λ‹¨μœ„μ— λŒ€ν•œ μ™„μ „ν•œ 컴파일러 ν˜ΈμΆœμ„ λ³΄μ—¬μ€λ‹ˆλ‹€.

ν•„μˆ˜ ꡬ성 μš”μ†Œ μž‘μ„±

일반적인 μš”κ΅¬ 사항 (# 1469 μ°Έμ‘°) :

  • 졜근 λ²„μ „μ˜ Clang λ˜λŠ” GCC 버전 '4.4'이상
  • CMake 버전2.8.7 이상, TLS / SSL μ§€μ›μœΌλ‘œ ꡬ좕

ν”Œλž«νΌ 별 μš”κ΅¬ 사항은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

Ubuntu / Debian

sudo apt-get install libtool libtool-bin autoconf automake cmake g++ pkg-config unzip

μ°Έκ³  :libtool-bin은 Ubuntu 16.04 / Debian Jessie μ΄μƒμ—μ„œλ§Œ ν•„μš”ν•©λ‹ˆλ‹€.

CentOS / RHEL / Fedora

CentOS / RHEL 6을 μ‚¬μš©ν•˜λŠ” 경우 libuv μ˜μ‘΄μ„± μ»΄νŒŒμΌν•˜κΈ° μœ„ν•΄μ„  μ΅œμ†Œν•œ autoconf 버전 2.69κ°€ ν•„μš”ν•©λ‹ˆλ‹€. https://github.com/joyent/libuv/issues/1158을 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

sudo yum -y install libtool autoconf automake cmake gcc gcc-c++ make pkgconfig unzip

openSUSE

sudo zypper install libtool autoconf automake cmake gcc-c++ gettext-tools

Arch Linux

sudo pacman -S base-devel cmake unzip

Nix or NixOS

cd path/to/neovim
nix-shell '<nixpkgs>' -A neovim
patchPhase
cmakeConfigurePhase
buildPhase
installPhase

FreeBSD

sudo pkg install cmake gmake libtool sha automake pkgconf unzip wget

sha256sum λΆˆμΌμΉ˜μ— κ΄€ν•œ 였λ₯˜κ°€ λ°œμƒν•˜λ©΄ μ‹€μ œ sha256sum은 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855이고, 이것이 λ¬Έμ œμž…λ‹ˆλ‹€ (빈 파일의 sha256sumμž…λ‹ˆλ‹€). λ˜ν•œ wget이 μ„€μΉ˜λ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. LuaRocksλŠ” 적어도 FreeBSDμ—μ„œλŠ” cURL과의 μƒν˜Έ μž‘μš©μ΄ μ’‹μ§€ μ•ŠμœΌλ©° rockλ₯Ό μ„€μΉ˜ν•˜λ €κ³  ν•  λ•Œ LuaJIT의 PANICκ³Ό ν•¨κ»˜ 죽을 κ²ƒμž…λ‹ˆλ‹€.

OpenBSD

doas pkg_add gmake cmake libtool unzip autoconf-2.69p1 automake-1.15
export AUTOCONF_VERSION=2.69
export AUTOMAKE_VERSION=1.15

일뢀 제 3 자 ꡬ성 μš”μ†Œ # 2445-comment둜 인해 μ΅œμƒμœ„ Makefile을 μ‚¬μš©ν•  λ•Œ λΉŒλ“œκ°€ μ‹€νŒ¨ν•˜λŠ” κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒ 지침은 CMakeλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

mkdir .deps
cd .deps
cmake ../third-party/
gmake
cd ..
mkdir build
cd build
cmake ..
gmake

macOS

  • Xcode 및 Homebrew λ˜λŠ” MacPortsλ₯Ό μ„€μΉ˜ν•˜μ‹­μ‹œμ˜€.

  • Xcode λͺ…λ Ή ν–‰ 도ꡬ μ„€μΉ˜ xcode-select --install

  • λ‹€λ₯Έ 쒅속성 μ„€μΉ˜ :

    Via MacPorts:

    sudo port install libtool autoconf automake cmake pkgconfig gettext
    

    Via Homebrew:

    brew install libtool automake cmake pkg-config gettext
    
  • 이 후에 ν…ŒμŠ€νŠΈκ°€ μ‹€ν–‰λ˜κΈ° 전에 make distclean && makeλ₯Ό μ‹€ν–‰ν•΄μ•Ό ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

  • ** wget μΈμ¦μ„œ 였λ₯˜ **κ°€ ν‘œμ‹œλ˜λŠ” 경우 (OS X * 이전 버전 * 10.10 / Yosemite) :

    Via MacPorts:

    sudo port install curl-ca-bundle
    echo CA_CERTIFICATE=/opt/local/share/curl/curl-ca-bundle.crt >> ~/.wgetrc
    

    Via Homebrew:

    brew install curl-ca-bundle
    echo CA_CERTIFICATE=$(brew --prefix curl-ca-bundle)/share/ca-bundle.crt >> ~/.wgetrc
    

Windows / MSYS2

MSYS2 shellμ—μ„œ 이 νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•˜μ‹­μ‹œμ˜€ :

pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-libtool mingw-w64-x86_64-cmake \
mingw-w64-x86_64-make mingw-w64-x86_64-perl mingw-w64-x86_64-python2 \
mingw-w64-x86_64-pkg-config mingw-w64-x86_64-unibilium gperf

이제 Windows μ½˜μ†” (cmd.exe)μ—μ„œ PATHλ₯Ό μ„€μ •ν•˜κ³  λΉŒλ“œν•˜μ‹­μ‹œμ˜€.

set PATH=%PATH%;c:\msys64\mingw64\bin
set CC=gcc

MinGW Makefiles μƒμ„±μžλ₯Ό μ‚¬μš©ν•˜μ—¬ λΉŒλ“œν•˜κΈ°

mkdir .deps
cd .deps
cmake  -G "MinGW Makefiles" ..\third-party\
mingw32-make
cd ..
mkdir build
cd build
cmake -G "MinGW Makefiles" -DGPERF_PRG="C:\msys64\usr\bin\gperf.exe" ..
mingw32-make

32 λΉ„νŠΈ λΉŒλ“œμ˜ 경우 νŒ¨ν‚€μ§€ 이름과 경둜λ₯Ό 적절히 μ‘°μ •ν•˜μ‹­μ‹œμ˜€.

⚠️ **GitHub.com Fallback** ⚠️