Gereksinimler
Çalışan bir C ve C++ derleme ortamı oluşturabilmeniz için derleyici ve azılım geliştirme kitlerine ihtiyacınız olacak. Öncelikle build-essential meta paketini kurmanız gerekli:
sudo apt install build-essential
Paketin içeriği
Bu meta pakette GCC (şu anda depodaki versiyon 8), binutils, libc (header), libstdc++ (header) ve make gibi alt paketler yer alıyor. Bunların ne olduklarını İnternet’te araştırırsanız belki daha fazla bilgi bulabilirsiniz.
-
gcc
paketinde GNU C compiler, g++
paketinde de GNU C++ compiler yer alıyor.
-
binutils
içerisinde de başlıca GNU ld ve gold (linker, derlenmiş nesneleri bağlayan araç), GNU as (assembler, assembly dili derleyicisi), ELF (Linux’ta çalıştırılabilir dosya) araçları yer alıyor. binutils paketinde başka araçlar da bulunuyor.
-
libc-dev
içerisinde C standard kütüphanesini kullanmanıza olanak sağlayacak diğer kütüphaneler ve header dosyaları yer alıyor. C kütüphanesinin kendisi (glibc) zaten kurulu.
-
libstdc++-dev
içerisinde C++ standard kütüphanesinin GNU tarafından gerçekleştirilmiş sürümünü kullanmanıza olanak sağlayan paket. C++ standard kütüphanesinin kendisi büyük ihtimalle kuruludur (libstdc++). Ayrıca C++ standard kütüphanesi C standard kütüphanesinden gelen header dosyalarına bağımlıdır.
-
make
derleme işlemini otomatize etmeye yarayan bir araç. Makefile isminde dosyaları okuyup içerisindeki kurallara göre belirtilen hedefleri derliyor. Size yukarıda bahsettiğim ninja da bunun benzeri bir araç ama daha modern ve hızlı, fakat içeriği Makefile’dan farklı.
Bunlar dışında gerekli olacak araçlar arasında autotools (autoconf, automake) ve CMake var.
C ve C++ ile geliştirilmiş açık kaynak kodlu yazılımların çoğu bu ikisinden birisi (bazen her ikisiyle de) yayınlanır. Kendi derleme sistemlerini kullanan yada bahsetmediğim başka yöntemleri kullananlar da olabilir (mesela meson, scons).
Genel inşa adımları
Açık kaynak kodlu projelerin içerisinde nasıl inşa edileceğine dair bilgi genelde yer alır. “building”, “install.txt”, “readme.md” dosyaları gibi yada “docs” dizini altında başka dokümanlarda, yada projenin Wiki’sinde anlatılır.
Autotools
Eğer bulduğunuz projenin içerisinde configure isminde bir script varsa, ./configure --help
ile yardım çıktısına bakın ve istediğiniz seçenkler varsa, bunları ./configure
scriptine sağlayın.
configure --varsa-argümanlar
make
make install
autotools kısaca derlemeye çalıştığınız koda sisteminizin uygun olup olmadığını ve uygun olduğu durumda da konfigürasyonu üretip sonunda da Makefile üreten bir sistem. En son 2012 yılında aktif olarak kullandığım için nasıl çalıştığına dair detayları hatırlamıyorum.
CMake
CMake iki adımda gerçekleşecek; bir configure bir de generate aşaması var. Generate aşaması derleme yapmaz, sadece derlemeyi otomatize edecek olan inşa sistemi için proje/Makefile çıktısını oluşturur. Eğer bulduğunuz projenin içerisinde CMakeLists.txt varsa, CMake ile configure ve ardından generate edip yine cmake ile inşa işlemini tamamlayın. Kurulum için sudo cmake --build dizin-adı --target install --config Release
kullanabilirsiniz.
- Configure adımı aşağıdakilerden birisiyle yapılır:
1.1 cmake -DOPSIYON=DEGER
(bu kullanım aynı configure ve generate adımılarını art arda yapar)
1.2 ccmake
1.3 cmake-gui
- Generate
- İnşa:
cmake --build dizin-adı
- Kurulum:
cmake --build dizin-adı --target install
CMake te autotools benzeri bir araç. Birden fazla platformda çalışıyor ve Makefile dışında da (mesela ninja Microsoft Visual Studio ve Apple Xcode) derleme otomasyonu/proje çeşidini destekliyor. CMake’in kendi dili var.
autotools ve cmake kurulumu
sudo apt install automake autoconf libtool cmake cmake-gui
Kurulum gerekli mi?
Bazen kurulum adımı opsiyonel de olabilir; kurmadan da çalıştırabileceğiniz yazılımlar var.
Deneysel depolardan son sürümler
Derleyicilerin bazıları “testing” yada “deneysel” depolarda bulunabiliyor. Ben kullandığım Ubuntu’ya gcc’yi testing deposundan kurdum. Pardus’un deneysel deposunda gcc’nin yada clang’in son sürümleri yok. Clang’in son sürümünü LLVM’in deposundan temin edebilirsiniz. Derleyicinizi kendininizin derlemesi değerli bir tecrübe olabilir.
GCC mi clang mi?
Clang te GCC’nin C ve C++ derleyicileri gibi C ailesi dilleri için bir derleyici (aslında derleyiciden daha fazlası). Clang CMake yardımıyla inşa ediliyor ve bilgisayarınızda hali hazırda bir C++ derleyicisi olması gerekiyor. Onu inşa etmek te oldukça basit. Bence GCC’den başlayın, clang te sonra denersiniz.
GCC’yi derleme
GCC projesinin kendisi autotools kullanıyor. Denemek için büyük bir proje, ama bence derleyicinin kendisi de işinize yarayabilir. O yüzden gcc derlemenizi tavsiye ediyorum.
Gereksinimler
GCC derlemek için gerekli kütüphaneler GCC’nin sayfasında özetlenmiş. GCC kaynak kodunun yanında bağımlı olduğu kütüphaneleri indiren bir script te var. Onu kullanmak bu aşamada daha kolay olabilir. Yada kendiniz bu gereksinimleri depodan kurabilirsiniz (isl kütüphanesi depoda yok galiba). Sistemdeki zlib’i kullanmak için onun geliştirme paketini kurmanız gerekiyor.
sudo apt install zlib1g-dev
Derleme işlemi
Güncel bir GCC sürümünü (dilediğiniz versiyonu) resmi sayfası üzerinden bilgisayarınıza indirin. GCC derlemeye geçin (arşivi coğrafi olarak Türkiye’ye daha yakın bir yerden de indirebilirsiniz). Aşağıda 10.2 sürümünün koduna ait arşivi ~/gcc-src dizinine indirip açıyorum:
mkdir ~/gcc-src
cd ~/gcc-src
wget ftp://ftp.nluug.nl/mirror/languages/gcc/releases/gcc-10.2.0/gcc-10.2.0.tar.gz
tar -xf gcc-10.2.0.tar.gz
mkdir build
cd build
GCC, kodun bulunduğu dizinde configure
çalıştırmayı desteklemiyor. Dolayısıyla build
isminde bir dizinin içerisinde derleyeceğiz. configure
sizin bazı derleme ayarlarını yapmanızı sağlayacak, sisteminizin projeyi derlemeye ve çalıştırmaya uygun olup olmadığını inceleyecek. configure kullanan projelerin size sunduğu seçenekleri görmek için ./configure --help
yazmanız gerekekir. Eğer her şey yolunda giderse, configure
sonrasında elinizde bir Makefile olacaktır. Bu da projenin inşa ve kurulum aşaması için gerekli otomasyonun nasıl olacağını tanımlayan bir dosya.
../gcc-10.2.0/configure --enable-languages=c,c++ --program-suffix="-10" --enable-nls --enable-threads=posix --with-system-zlib --disable-multilib
configure
için verilen opsiyonların anlamlarını bu sayfada görebilirsiniz. Burada sadece C ve C++ derleyicilerini derlemek istiyorum, bütün derleyicileri değil. @sulincix multilib desteğini kapatmayın demiş, ama ben açık tutmanın bir faydası olacağını düşünmüyorum, çünkü bu derleyici sistem derleyicisi olmayacak ve hali hazırda sisteminizde multilib çalışma ortamı var mı, bilmiyorum. Multilib’i açmanız durumunda bazı multilib dev paketlerini de kurmanız gerekebilir. Belki benim bilmediğim bir sebeple multilib kurulması gerekiyordur. Program suffix ekini de tavsiye ediyorum. Böylece sizin ürettiğiniz gcc ile dağıtımın sağladığı gcc birbirlerinden farklı isimlere sahip olacaktır.
Yukarıdaki configure
başarılı olursa, sırasıyla make -j$(nproc)
ve make DESTDIR=$HOME/gcc-10.2 install
yapın. İşlemler başarıyla biterse, ~/gcc-10.2/usr/local/bin/gcc-10
çalışan bir GCC 10.2 derleyicisi olarak kullanılabilecek. Arada make -j$(nproc)
başarısız olursa, sadece make
olarak deneyin. Eğer make
başarısız olursa, zaten devam edemezsiniz. Benim sanal makinemdeki derlemem sonunda aşağıdaki şekilde çalıştı:
~/gcc-10.2/usr/local/bin/gcc-10 --version
gcc-10 (GCC) 10.2.0
Copyright © 2020 Free Software Foundation, Inc.
Bu bir serbest yazılımdır; kopyalama koşulları için kaynak koduna bakınız.
Hiçbir garantisi yoktur; hatta SATILABiLiRLiĞi veya ŞAHSi KULLANIMINIZA
UYGUNLUĞU için bile garanti verilmez.
Bu derleyici başarıyla çalışırsa, isterseniz sonra /usr/local’a kurabilirsiniz ve Blender yada benzeri programları derleyebilirsiniz. /usr/local’a kurmadan da yapabilirsiniz, ama kullanması zor olacaktır.
Deneme derlemesi
Yeni inşa ettiğiniz derleyiciyle deneme derlmesi yapacağız. Bu derleyicinin kurduğu kütüphaneler çalışma-zamanı bağlayıcısının bildiği dizinlerde olmayacak. Dolayısıyla RPATH ile kütüphanelerin yerini belirtebilir yada çalışma öncesinde LD_LIBRARY_PATH ile gcc kütüphanelerinin bulunduğu dizinini belirtebiliriz.
LD_LIBRARY_PATH ile ilgili tahminen Türkçe kaynak bulabilirsiniz. Bu çevre değişkeni, çalışma-zamanı bağlayıcısına dinamik/paylaşılan nesnelerin sırayla hangi dizinlerde aranacağını söylüyor.
RPATH te LD_LIBRARY_PATH ile aynı bilgiyi içeriyor, ama bir farkı var; RPATH ile bu bilgi çalışan dosyanın içerisine kaydediliyor.
RPATH’i kullanmanız bu aşamada zor olabilir. Dolayısıyla LD_LIBRARY_PATH ile devam etmenizi tavsiye ediyorum. libstdc++.so’nun nerede olduğunu bulmamız gerekecek (zaten biliyoruz, ama doğru olan şekilde yapalım). Bunu da GCC’ye soracağız.
C++ kullanarak bir deneme yapalım. Aşağıdaki kodu, mesela kullanıcı dizininize listdir.cpp isminde, bir dosyaya kaydedin:
#include <algorithm>
#include <cstdlib>
#include <filesystem>
#include <iostream>
#include <string>
int main(int argc, const char *argv[]) {
namespace fs = std::filesystem;
const auto dir = argc == 2 ? fs::path{argv[1]} : fs::current_path();
if (!fs::is_directory(dir)) {
std::cerr << "belirtilen yer '" << argv[1] << "' bir dizin degil\n";
return EXIT_FAILURE;
}
std::ranges::for_each(fs::directory_iterator(dir), [](const auto &dir_entry) {
std::cout << dir_entry.path().filename().string() << "\n";
});
}
Derlemek için de şu komut satırını kullanabilirsiniz:
~/gcc-10.2/usr/local/bin/g++-10 -std=c++20 -o /tmp/listdir ~/listdir.cpp
Şimdi /tmp/listdir
şeklinde çalıştırdığınızda, çalışmaması gerekiyor.
/tmp/listdir: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by /tmp/listdir)
Çalıştırma aşamasında LD_LIBRARY_PATH çevre değişkenini belirtmemiz gerekecek.
LD_LIBRARY_PATH=$(dirname $(~/gcc-10.2/usr/local/bin/g++-10 --print-file-name=libstdc++.so)) /tmp/listdir
ile çalıştırabilirsiniz. Bulunduğunuz dizinin içeriğini listeler. Program isminin yanına bir dizin belirtirseniz, onun içeriğini listeler: örneğin /tmp/listdir /tmp
.
GCC’ye --print-file-name
ile libstdc++.so kütüphanesinin nerede olduğunu sorduk. Sonra dirname
ile bunun bir üst dizinini bulduk. Bu sonucu da LD_LIBRARY_PATH çevre değişkenine atadık. Böylece çalışma-zamanı bağlayıcısı aradığı libstdc++.so.6 isimki nesneyi buldu.
Burada amacımız, doğru libstdc++ kütüphanesini yükleyip yükleyemediğimizi kontrol etmek. C++17’de eklenen “filesystem library” kullanıyoruz. Bu sayede filesystem için gerekli sembollerle bağlanacağız. Bu semboller de sadece yeni libstdc++ kütüphanelerinde var (galiba GCC 9.1’den sonra). Sizin bilgisayarınızda Pardus depodan kurduğunuz gcc 8’de yok. Bu sebeple de LD_LIBRARY_PATH belirtmediğiniz ilk denemede uygulama çalışmadı. Ayrıca C++20’de eklenen ranges özelliklerini kullanıyoruz, fakat bunun kütüphaneyle doğrudan ilişkisi yok. Bu örneğin “hello world” örneğinden de biraz daha ilginç olduğunu düşündüm. Zaten “hello world” ile deneseydik inşa ettiğimiz GCC’nin doğru kütüphaneyle çalışıp çalışmadığını anlayamazdık.
GCC sistem kurulumu
Eğer listdir
başarıyla çalışıp dosyaları listelerse, GCC’yi /usr/local dizinine kurabilirsiniz. Bunun için gcc’yi derlediğiniz build dizininde sudo make install
yapabilirsiniz (arada DESTDIR yok). Bu kurulumdan sonra doğrudan gcc-10
ile yeni C derleyinizi, g++-10
ile de yeni C++ derleyicinizi çalıştırabilirsiniz. Eğer çalışmazsa, kullanıcı profilinizdeki PATH çevre değişkenine /usr/local/bin’i ekleyin. PATH ile ilgili Türkçe kaynak bulacağınıza eminim. Forumda da olabilir.
Yeni kurduğunuz GCC’nin kütüphanelerinin yerini çalışma-zamanı bağlayıcısına tanıtmamız gerekecek. /etc/ld.so.conf.d altındaki konfigürasyon dosyaları ldconfig tarafından okunacak. Aşağıda göreceğiniz ilk satırda GCC’nin kütüphane dizinini yeni bir konfigürasyon dosyasına ekliyoruz. İkinci satırda da ldconfig’i yeniden çalıştırıyoruz ki cache güncellensin.
realpath $(dirname $(g++-10 --print-file-name=libstdc++.so)) | sudo tee -a /etc/ld.so.conf.d/g++-10.conf
sudo ldconfig
Bu işlemin ardından yukarıda deneme amaçlı derlediğiniz /tmp/listdir uygulamasını doğrudan, başında LD_LIBRARY_PATH olmadan çalıştırabilirsiniz.
Clang’i derleme
(clang derlemek istemezseniz bu bölümü atlayın.)
Clang kodunu klonlamak için git
kurmanız gerekli. Hızlı ve modern bir inşa sistemi olan ninja da tavsiye ediyorum. CMake’in kullanıcı arabirimini de beraberinde kurun:
sudo apt install git ninja-build cmake-qt-gui
ardından da kodu tercih ettiğiniz bir yere klonlayın (git’e verilen argümanları İnternet’te bulabilirsiniz):
git clone -b release/11.x --depth=1 https://github.com/llvm/llvm-project.git ~/llvm-project
İşlem bitince cmake ile configure yapmayı deneyin. İşi terminal üzerinden yapmak isterseniz, ccmake diye bir seçeneğiniz var; kullanıcı arabirimi ama terminalde çalışacak. İşi grafik arayüzünden yapmak isterseniz de cmake-gui var. Parametreleri önceden biliyorsanız, doğrudan CMake kullanabilirsiniz. Grafik arayüzünü de terminalden açmanız gerekecek gibi duruyor çünkü Türkçe dille ilgili bir sorun sebebiyle configure aşaması başarısız oluyor. Grafik ortamınızda terminal açıp LC_ALL=C cmake-gui
şeklinde çalıştırırsanız, sorun çıkmayacaktır.
“Where is the source code” yerinde LLVM’i klonladığınız dizini bulun. Mesela /home/kullanıcı/llvm-project. Ardından onun da içinden llvm dizinini seçin. Bu alana vereceğiniz dizin içerisinde projenin ana CMakeLists.txt dosyası olmak zorunda. Normalde klonladığınız projenin ana dizininde bir CMakeLists.txt olur. Ancak LLVM’de durum biraz karışık. LLVM eskiden ayrı projelerden oluşuyordu, sonradan tek Git deposuna taşındı ve ana CMakeLists.txt dosyası llvm alt dizininde kaldı. Bu durumda, mesela, /home/kullanıcı/llvm-project/llvm olacak (siz doğru yeri bilgisaayarınızda seçin).
“Where to build the binaries” yerinde de mesela /home/kullanıcı/llvm-build olabilir, yada istediğiniz başka bir yer. Derleme için kullanılacak CMake cache, üretilen proje/Makefile/build.ninja ve derlenmiş nesne dosyaları bu dizine yerleştirilecek.
Ardından “Configure” butonuna basın ve configure başlasın. Bu adımlar sadece cache dizini boşsa yapılır. İlk çalıştığında, dizinin olmadığını söyleyecek. Dizini oluşturmasını söyleyin. Ardından da size hangi inşa aracını kullanacağınızı soracak. Ninja’yı seçin. Unix Makefile da seçebilirsiniz. İnşa için de cmake kullanırsanız, iki seçeneğin çok farkı olmaz. Derleyiciyle ilgili seçenekler varsayılan haliyle kalabilir. Yanlış enerator seçtiyseniz yada herhangi bir sebeple cache’i silmek isterseniz “Where to build binaries” alanında belirtilen cache dizinini silebilirsiniz ve yeniden configure edebilirsiniz. File menüsünde “Delete cache” seçeneği de var.
İşlemin başarısız olma olasılığı yüksek. Karşılaşacağınız hatalarla ilgili önce İnternet’te arama yapın.
Configure başarılı olursa, oldukça uzun bir liste göreceksiniz. Bu liste LLVM’in derleme aşamasında sunduğu ayarlar/seçeneklerdir. Bazılarını configure sırasında CMake belirlerken bazılarını da siz atayabiliyorsunuz. Fare imlecini seçeneklerin üzerinde beklettiğinizde bazılarının açıklamalarını görebilirsiniz. LLVM sayfası inşa aşamasında kullanılabilecek seçenekleri açıklıyor.
“Search” kutusuna CMAKE_BUILD_TYPE yazıp arayın ve değerini Release yada RelWithDebInfo olarak atayın. Debug sizin için sadece yavaş olur ve yer kaplar.
/usr/local yerine farklı bir yere kurmak isterseniz CMAKE_INSTALL_PREFIX seçeneğinde hedef dizini belirtin.
LLVM_ENABLE_PROJECTS girdisini bulup karşısına clang yazın.
LLVM_TARGETS_TO_BUILD girdisine de X86 yazın.
Configure butonuna basın. Eğer sonunda “Configuring done” yazarsa, işlem başarıyla bitti demektir. Eksik kütüphaneden şikayet ederse, kütüphaneyi kurup tekrar configure edebilirsiniz. Configure aşaması çok defa çalıştırılabilir. Seçeneklerinizden memnun olana yada bu adım başarıya ulaşana kadar configure yapabilirsiniz.
Sonra Generate’e basın. Ardından terminalden, “Where to build the binaries” alanında belirttiğiniz dizinde cmake ile inşa işlemini başlatın (örneğin ~/llvm-build).
cmake --build ~/llvm-build
İşlem bittiğinde ~/llvm-build/bin/clang
oluşacak.
Yukarıda gcc için yaptğımız deneme işlemin aynısını clang ile de deneyin:
rm -f /tmp/listdir
~/llvm-build/bin/clang++ -std=c++20 -o /tmp/listdir ~/listdir.cpp
ardından inşallah /tmp/listdir çalıştırmayı denediğinizde çalışacaktır. (Eğer yukarıda GCC’yi sudo make install
ile kurduysanız LD_LIBRARY_PATH kullanmanıza gerek kalmadan çalışması lazım)
Kafa karışıklığı
Bütün bu yazdıklarım kafanızı karıştırmış olabilir. Wiki gibi bir düzenli bir ortamdan bu bilgiyi alıp uygulamanız daha rahat olabilirdi, ancak herşey bir forum cevabına ve benim kısıtlı boş vaktimin arasına sıkıştı. Bir kaç defa tekrar ederseniz yada başa projeler denerseniz, alışırsınız. Bilmediklerinizi İnternet’te arayarak hem merak ettiğiniz konuyla ilgili, hem de ilişkili soruların çözümlerini görebilirsiniz. Yüzlerce açık kaynak kodlu proje var. Onları da indirip derleyebilirsiniz. GCC ve Clang biraz orta-büyük ölçekli, karışık ve çok seçenek sunan projeler olduğu için korkutabilir. Karşılaşacağınız sorunların aslında birer öğrenme fırsatı olduğunu unutmayın.
Blender derlemesi
Blender CMake kullandığı için cmake-gui yardımıyla sisteminizde nelerin bulunduğunu yada eksik olduğunu görebilir, bazı seçenekleri de değiştirebilirsiniz. GPU rendering için CUDA yada Optix istiyor galiba. Building Blender/CUDA - Blender Developer Wiki ve CMake seçenekleri için de Building Blender/Options - Blender Developer Wiki bazı şeyleri açıklıyor.
Normalde CMake projelerine CMAKE_C_COMPILER ve CMAKE_CXX_COMPILER seçenekleri üzerinden yeni derleyicinizi tanıtabilirsiniz. Ben de kısa süre önce öğrendim ki CMake te CC ve CXX çevre değişkenlerini kabul ediyormuş. @sulincix 'in de mesajında gösterdiği üzere terminalde derleme yapmadan önce:
export CC=/usr/local/bin/gcc-10
export CXX=/usr/local/bin/g++-10
şeklinde çevre değişlenlerini belirtmeyi unutmayın. Ne yaptığınızı bilmiyorsanız yada sonuçlarını öngöremiyorsanız, sistem derleyicileriniz olan /usr/bin/cc ve /usr/bin/c++'ı değiştirmeyin. Bunun ardından Blender’ı derleme işlemine başlayabilirsiniz.
Gereksinimler
Blender web sitesinde anlatılan şekilde gereksinimleri kurun:
sudo apt-get install build-essential git subversion cmake libx11-dev libxxf86vm-dev libxcursor-dev libxi-dev libxrandr-dev libxinerama-dev libglew-dev
Kodu klonlayın:
mkdir ~/blender-git
cd ~/blender-git
git clone --recursive https://git.blender.org/blender.git
Ardından “Advanced Setup” kısmındaki işlemi gerçekleştirin:
cd ~/blender-git
./blender/build_files/build_environment/install_deps.sh --build-all --skip-llvm
Blender’ın bağımlı olduğu bütün kütüphaneleri bu şekilde derleyin. Bu adım bittikten sonra bazı notlar gösteriyor. Oradaki opsiyonları, değiştirmek istediğiniz diğer ayarlarla birlikte CMake’e belirtmeniz gerekiyor. GPU sürücülerini kullanmaktan bahsetmişsiniz. Bu adımda belirtilen ayarların yanına CUDA için gerekli opsiyonları da ekleyeceksiniz.
LLVM ile statik bağlanmak istiyordu. Bu da soruna sebep oldu. O yüzden atladım. Belki LLVM ile statik bağlanmaması sağlanabilir, ama vakit ayıramadım. Bende bir sebeple OpenColorIO projesi derlenmedi. Onu ayrıca derledim ve kurdum:
cmake --build ~/src/blender-deps/OpenColorIO-2.0.0/build --config Release --target install
Son olarak ta Intel Embree indirin: https://www.embree.org/downloads.html
Bunun sonunda, hoşuma gitmese de, şunu yapmayı daha kolay buldum; arşivi tar ile açtıktan sonra embree dizinine (embree-3.12.2.x86_64.linux) girin ve aşağıdaki kopyalamayı yapın:
sudo cp -R lib include share /opt/
Blender derleme
Building Blender/CUDA - Blender Developer Wiki sayfasında bahsedilen opsiyonları bir önceki adımda görüntülenen CMake opsiyonlarıyla birleştirip derlemeyi deneyin.
Elimdeki seçeneklerle CMake çalıştırırsam (siz CUDA ayarlarını da ekleyebilirsiniz):
cd ~/blender-git
cmake blender -B build \
-D WITH_CODEC_SNDFILE=ON \
-D PYTHON_VERSION=3.9 \
-D PYTHON_ROOT_DIR=/opt/lib/python-3.9 \
-D BOOST_ROOT=/opt/lib/boost \
-D Boost_NO_SYSTEM_PATHS=ON \
-D Boost_NO_BOOST_CMAKE=ON \
-D TBB_ROOT_DIR=/opt/lib/tbb \
-D WITH_OPENCOLORIO=ON \
-D OPENCOLORIO_ROOT_DIR=/opt/lib/ocio \
-D OPENEXR_ROOT_DIR=/opt/lib/openexr \
-D WITH_OPENIMAGEIO=ON \
-D OPENIMAGEIO_ROOT_DIR=/opt/lib/oiio \
-D WITH_CYCLES_OSL=OFF \
-D WITH_LLVM=OFF \
-D WITH_OPENSUBDIV=ON \
-D OPENSUBDIV_ROOT_DIR=/opt/lib/osd \
-D WITH_OPENVDB=ON \
-D WITH_OPENVDB_BLOSC=ON \
-D OPENVDB_ROOT_DIR=/opt/lib/openvdb \
-D BLOSC_ROOT_DIR=/opt/lib/blosc \
-D WITH_ALEMBIC=ON \
-D ALEMBIC_ROOT_DIR=/opt/lib/alembic \
-D WITH_USD=ON \
-D USD_ROOT_DIR=/opt/lib/usd \
-D WITH_CODEC_FFMPEG=ON \
-D FFMPEG_LIBRARIES='avformat;avcodec;avutil;avdevice;swscale;swresample;lzma;rt;theora;theoradec;theoraenc;vorbis;vorbisenc;vorbisfile;ogg;x264;openjp2' \
-D FFMPEG=/opt/lib/ffmpeg \
-D WITH_XR_OPENXR=ON \
-D XR_OPENXR_SDK_ROOT_DIR=/opt/lib/xr-openxr-sdk \
-D WITH_INSTALL_PORTABLE=OFF \
-D CMAKE_INSTALL_RPATH=$(find /opt -name *.so -printf "%h\n" | sort | uniq | tr "\n" ";") \
-D CMAKE_BUILD_WITH_INSTALL_RPATH=ON
Derlenmiş blender dosyasının içine aradığı kütüphaneleri nerede bulacağını RPATH ile kayıt etmek istiyoruz ki çalıştırmamız kolay olsun.
İnşa öncesi seçenekleri görüntüleme
Bütün seçenekleri görmek için ccmake yada cmake-gui kullanmanızı tavsiye ederim. O durumda LC_ALL=C cmake-gui
ile çalıştırıp Blender proje dizinini ve bir de inşa dizinini seçin.
Ardından Configure butonuna basın ve generator seçin. Varsayılan değerleri kabul edip ilerleyebilirsiniz. Derleme işlemi o pencereden değil yine bir terminalden olacak. Seçeneklerinizden memnunsanız ve generate aşaması başarıyla bittiyse, CMake’i kapatıp terminale dönün.
Derleme
cmake --build build --config Release --target install
ile derlemeyi ve kısmi başlatabilirsiniz. --build
ten sonra belirttiğimiz isim, bir dizin ismi. Ben build olarak seçtim. Siz başka bir isim seçebilirsiniz (Release seçen de var). İşlem bittiğinde build/bin/blender
çalışabilir bir blender olacak. Eğer başka bir yere kurmak isterseniz (mesela /usr/local):
cmake -B build -DCMAKE_INSTALL_PREFIX=/usr/local -P build/cmake_install.cmake
İnşallah her şey yolunda gider!