Genel Bakış
Derleyiciyi doğru seçeneklerle çağırmak için Bazel'in derleyicinin dahil edilen dizinleri ve önemli işaretçileri gibi dahili özellikleri hakkında bilgi sahibi olması gerekir. Diğer bir deyişle, Bazel'in çalışma şeklini anlamak için derleyicinin basitleştirilmiş bir modeline ihtiyacı vardır.
Bazel'in bilmesi gerekenler:
- Derleyicinin ince LTO'yu, modülleri, dinamik bağlantıyı veya PIC'yi (konumdan bağımsız kod) destekleyip desteklemediği.
- gcc, ld, ar, objcopy vb. gerekli araçların yolları.
- Yerleşik sistem dizinleri içerir. Bazel'in bunları doğrulamak için
kaynak dosyada yer alan tüm üstbilgilerin gerektiği gibi
BUILD
dosyası. - Varsayılan sysroot.
- Derleme, bağlama, arşivleme için kullanılacak işaretler.
- Desteklenen derleme modları (opt, dbg, fastbuild) için kullanılacak işaretler.
- Derleyici tarafından özellikle gerekli kılınan değişkenleri yapın.
Derleyici birden fazla mimariyi destekliyorsa Bazel'in bunları ayrı ayrı yapılandırması gerekir.
CcToolchainConfigInfo
, ihtiyacınız olan ek düzeyde
ayrıntı düzeyini artırır. Bazel, varsayılan olarak CcToolchainConfigInfo
'ü derlemeniz için otomatik olarak yapılandırır ancak manuel olarak yapılandırabilirsiniz. Bunun için CcToolchainConfigInfo
sağlayan bir Starlark kuralına ihtiyacınız vardır ve cc_toolchain
öğesinin toolchain_config
özelliğini kuralınıza yönlendirmeniz gerekir.
Şu numarayı arayarak CcToolchainConfigInfo
oluşturabilirsiniz:
cc_common.create_cc_toolchain_config_info()
İşlemde ihtiyacınız olacak tüm struct'lar için Starlark oluşturucularını
@rules_cc//cc:cc_toolchain_config_lib.bzl
.
C++ hedefi analiz aşamasına geçtiğinde, Bazel uygun
BUILD
dosyasını temel alarak cc_toolchain
hedefini belirler ve
Şurada belirtilen hedeften CcToolchainConfigInfo
sağlayıcı:
cc_toolchain.toolchain_config
özelliği için geçerlidir. cc_toolchain
hedefi, bu bilgileri bir CcToolchainProvider
aracılığıyla C++ hedefine iletir.
Örneğin,
cc_binary
veya cc_library
için şu bilgiler gerekiyor:
- Kullanılacak derleyici veya bağlayıcı
- Derleyici/bağlantılayıcı için komut satırı işaretleri
--copt/--linkopt
seçenekleri aracılığıyla iletilen yapılandırma işaretleri- Ortam değişkenleri
- İşlemin yürütüleceği korumalı alanda gereken yapılar
Korumalı alanda gerekli olan yapılar hariç yukarıdaki bilgilerin tümü
cc_toolchain
öğesinin işaret ettiği Starlark hedefinde belirtilir.
Korumalı alana gönderilecek yapı taşları cc_toolchain
hedefinde belirtilir. Örneğin, cc_toolchain.linker_files
özelliğiyle şunları yapabilirsiniz:
korumalı alana gönderilecek bağlayıcı ikili programı ve araç zinciri kitaplıklarını belirtir.
Araç zinciri seçimi
Araç zinciri seçim mantığı aşağıdaki gibi çalışır:
Kullanıcı,
BUILD
dosyasında bircc_toolchain_suite
hedefi belirtir ve--crosstool_top
seçeneğini kullanarak Bazel'i hedefe yönlendirir.cc_toolchain_suite
hedefi birden fazla araç zincirine referans veriyor.--cpu
ve--compiler
işaretlerinin değerleri, yalnızca--cpu
işareti değerine veya ortak bir--cpu | --compiler
değerine göre bu araç takımlarından hangisinin seçileceğini belirler. Seçim süreci aşağıdaki gibidir:--compiler
seçeneği belirtilirse Bazel,--cpu | --compiler
ilecc_toolchain_suite.toolchains
özelliğindeki ilgili girişi seçer. Bazel giriş yaparsa hata verir.--compiler
seçeneği belirtilmezse Bazel,cc_toolchain_suite.toolchains
özelliğindeki ilgili girişi yalnızca--cpu
ile seçer.Herhangi bir işaret belirtilmezse Bazel, ana makine sistemini inceler ve bir seçim
--cpu
değeri. Bkz. inceleme mekanizması kodu ekleyin.
Bir araç zinciri seçildikten sonra karşılık gelen feature
ve action_config
Starlark kuralındaki nesneler, yapının (yani
öğeler için de ekleyebilirsiniz. Bu mesajlar,
hiçbir değişiklik yapmadan Bazel'deki tam C++ özelliklerini
Bazel ikili programı. C++ kuralları, Bazel kaynak kodunda ayrıntılı olarak açıklanan birden fazla benzersiz işlemi destekler.
Özellikler
Özellik, komut satırı işaretleri, işlemler ve işlemler gerektiren bir varlıktır.
ya da bağımlılık değişiklikleri olabilir. Özellik
BUILD
dosyalarının şu yapılandırmaları seçmesine izin vermek kadar basit bir şey olabilir:
treat_warnings_as_errors
gibi) işaretlemelerini veya C++ kuralları ile etkileşimde bulunmalarını
gibi yeni derleme işlemlerini ve girişlerini dahil etme:
header_modules
veya thin_lto
.
İdeal olarak CcToolchainConfigInfo
, her biri belirli Bazel işlemleri için geçerli işaretlerin listesini tanımlayan bir veya daha fazla işaret grubundan oluşan bir özellik listesi içerir.
Bir özellik, Starlark'ın tamamen ayrıştırılmasına olanak tanıyan adla belirtilmiştir
kural yapılandırması oluşturun. Diğer bir deyişle, Bazel sürümü, bu yapılandırmalar yeni özelliklerin kullanılmasını gerektirmediği sürece CcToolchainConfigInfo
yapılandırmalarının davranışını etkilemez.
Bir özellik aşağıdaki yöntemlerden biriyle etkinleştirilir:
- Özelliğin
enabled
alanıtrue
olarak ayarlanmıştır. - Bazel veya kural sahibi tarafından açıkça etkinleştirilmelidir.
- Kullanıcı, bu özelliği
--feature
Bazel seçeneği veyafeatures
kuralıyla etkinleştirir. özelliğini gönderin.
Özelliklerin birbirine bağımlılıkları olabilir. Komut satırı bayraklarına bağlı olarak BUILD
dosyası kullanabilirsiniz.
ayarları ve diğer değişkenleri içerir.
Özellik ilişkileri
Bağımlılıklar genellikle doğrudan Bazel ile yönetilir. Bazel, yalnızca gereksinimleri uygular ve derlemede tanımlanan özelliklerin doğasına özgü anlaşmazlıkları yönetir. Araç zinciri spesifikasyonu, doğrudan özellik desteğini ve genişletmesini yöneten Starlark kuralında kullanılmak üzere daha ayrıntılı kısıtlamalara olanak tanır. Desteklenen biçimler şunlardır:
Kısıtlama | Açıklama |
requires = [ feature_set (features = [ 'feature-name-1', 'feature-name-2' ]), ] |
Özellik düzeyinde. Bu özellik yalnızca belirtilen gerekli özelliklerin etkinleştirilmesi durumunda desteklenir. Örneğin, bir özellik yalnızca
belirli derleme modları (opt , dbg veya
fastbuild ). "requires", birden fazla "feature_set" içeriyorsa
"feature_set"ten herhangi biri karşılanırsa özellik desteklenir
(belirtilen tüm özellikler etkinleştirildiğinde).
|
implies = ['feature'] |
Özellik düzeyinde. Bu özellik, belirtilen özellikleri ifade eder. Bir özelliğin etkinleştirilmesi, bu özelliğin ima ettiği tüm özellikleri de dolaylı olarak etkinleştirir (yani yinelemeli olarak çalışır). Ayrıca, işlevselliklerinin yaygın alt kümelerini dezenfektanların ortak parçaları gibi özellikler bulunur. Varsayılan özellikler devre dışı bırakılamaz. |
provides = ['feature'] |
Özellik düzeyinde. Bu özelliğin, birlikte çalışan birkaç özellikten biri olduğunu
benzersiz alternatif özellikler. Örneğin, tüm dezenfektanlar Bu, kullanıcının aynı anda birbirini dışlayan iki veya daha fazla özellik istediğinde alternatifleri listeleyerek hata yönetimini iyileştirir. |
with_features = [ with_feature_set( features = ['feature-1'], not_features = ['feature-2'], ), ] |
İşaret grubu düzeyinde. Bir özellik, birden çok işaret grubu belirtebilir.
with_features belirtildiğinde, işaret grubu yalnızca belirtilen features grubundaki tüm özelliklerin etkin olduğu ve not_features grubunda belirtilen tüm özelliklerin devre dışı olduğu en az bir with_feature_set varsa derleme komutuna genişletilir.
with_features belirtilmezse işaret grubu, belirtilen her işleme koşulsuz olarak uygulanır.
|
İşlemler
Eylemler, belirtilen şartlarda koşulları değiştirme esnekliği sağlar.
Bu eylem, eylemin nasıl gerçekleştirileceği kabul edilmeden yürütülür. action_config
, bir işlemin çağırdığı araç ikilisini belirtir. feature
ise işlem çağrıldığında söz konusu aracın nasıl davranacağını belirleyen yapılandırmayı (işaretler) belirtir.
Özellikler, hangi Bazel işlemlerini belirtmek için işlemlere referans verir
Eylemler Bazel eylem grafiğini değiştirebildiği için onlar da etkilenir. İlgili içeriği oluşturmak için kullanılan
CcToolchainConfigInfo
sağlayıcıda bayraklar ve araçlar olan işlemler var
bunlarla ilişkili (örneğin, c++-compile
). Her işleme işaret atanır
bir özellikle ilişkilendirebilirsiniz.
Her işlem adı, Bazel tarafından gerçekleştirilen tek bir işlem türünü (ör. derleme veya bağlama) temsil eder. Bununla birlikte, Çevik projeler ile
arasında bir birden çok
işlemleri ve Bazel işlem türleri (Bazel işlem türü bir Java sınıfını belirtir)
(CppCompileAction
gibi). Özellikle,
"derleyici işlemleri" ve "derleyici işlemleri" aşağıdaki tabloda görebilirsiniz:
CppCompileAction
, bağlantı işlemleri ise CppLinkAction
.
Derleyici işlemleri
İşlem | Açıklama |
preprocess-assemble
|
Ön işleme özelliğiyle birleştirin. Genellikle .S dosyaları için.
|
assemble
|
Ön işlemeden derleyin. Genellikle .s dosyaları içindir.
|
Derleyici işlemleri
İşlem | Açıklama |
cc-flags-make-variable
|
CC_FLAGS öğesini genrules öğesine iletir.
|
c-compile
|
C olarak derleyin. |
c++-compile
|
C++ olarak derleyin. |
c++-header-parsing
|
Aksi takdirde derleme hataları oluşacağından, derleyicinin ayrıştırıcısını bir başlık dosyasında çalıştırarak başlığın kendi kendine yeterli olduğundan emin olun. Geçerli yalnızca modülleri destekleyen araç zincirlerine izin verir. |
Bağlantı işlemleri
İşlem | Açıklama |
c++-link-dynamic-library
|
Tüm bağımlılıkları içeren bir paylaşılan kitaplığın bağlantısını ekleyin. |
c++-link-nodeps-dynamic-library
|
Yalnızca cc_library kaynakları içeren bir paylaşılan kitaplığı bağlayın.
|
c++-link-executable
|
Son çalıştırılmaya hazır kitaplığı bağlayın. |
Artırılmış gerçeklik (AR) işlemleri
AR işlemleri, nesne dosyalarını ar
aracılığıyla arşiv kitaplıklarında (.a
dosyaları) bir araya getirir ve bazı anlamları isme kodlar.
İşlem | Açıklama |
c++-link-static-library
|
Statik kitaplık oluşturun (arşiv). |
LTO işlemleri
İşlem | Açıklama |
lto-backend
|
Bit kodlarını yerel nesnelere derleyen ThinLTO işlemi. |
lto-index
|
Global dizin oluşturan ThinLTO işlemi. |
action_config'i kullanma
action_config
, bir Bazel'i tanımlayan bir Starlark yapısıdır
eylem sırasında çağırılacak aracı (ikili) belirterek eylemin
işaret eder. Bu flag'ler, işlemin
birkaç adım var.
action_config()
kurucusu aşağıdaki parametrelere sahiptir:
Özellik | Açıklama |
action_name
|
Bu eylemin karşılık geldiği Bazel eylemi. Bazel bu özelliği, işlem başına aracı ve yürütme yöntemini keşfetmek için kullanır. gereksinimlerini karşılayın. |
tools
|
Çağrılacak yürütülebilir dosya. İşleme uygulanan araç, Listede, özellik ile eşleşen bir özellik kümesine sahip ilk araç yapılandırma. Varsayılan değer sağlanmalıdır. |
flag_sets
|
Bir işlem grubu için geçerli olan işaretleme listesi. Bir özellik için |
env_sets
|
Bir işlem grubu için geçerli olan ortam kısıtlamalarının listesi. Özellik için kullanılır. |
action_config
, başka özellikler ve
action_config
tarafından belirlenen
özellik ilişkilerine değineceğiz. Bu davranış
bir özelliğinkine benzer.
Son iki özellik, özelliklerdeki ilgili özelliklere göre gereksizdir ve bazı Bazel işlemleri belirli işaretler veya ortam değişkenleri gerektirdiği ve amaç gereksiz action_config
+feature
çiftlerini önlemek olduğu için dahil edilmiştir. Genellikle tek bir özelliği birden fazla action_config
ile paylaşmak tercih edilir.
Aynı action_name
ile birden fazla action_config
tanımlayamazsınız
aynı araç zincirinin içinde olup olmadığını sorun. Bu, araç yollarında belirsizliği önler ve action_config
'ün amacını (bir işlemin özelliklerinin araç zincirindeki tek bir yerde açıkça açıklanması) destekler.
Araç oluşturucu kullanma
Bir action_config
, tools
parametresi aracılığıyla bir araç grubu belirtebilir.
tool()
oluşturucusu, aşağıdaki parametreleri alır:
Alan | Açıklama |
path
|
Söz konusu aracın yolu (mevcut konuma göre). |
with_features
|
En az birinin yerine getirilmesi gereken özelliklerin listesi bu aracı kullanabilirsiniz. |
Belirli bir action_config
için yalnızca tek bir tool
geçerlidir
Bazel eylemi için gereken araç yolu ve yürütme gereksinimlerini. Bir action_config
öğesindeki tools
özelliğinde iterasyon yapılarak özellik yapılandırmasıyla eşleşen bir with_feature
kümesi içeren bir araç bulunana kadar araç seçilir (daha fazla bilgi için bu sayfanın başlarındaki Özellik ilişkileri bölümüne bakın). Araç listelerinizi boş bir özellik yapılandırmasına karşılık gelen varsayılan bir araçla bitirmeniz gerekir.
Örnek kullanım
Özellikler ve işlemler, Bazel işlemlerini uygulamak için birlikte kullanılabilir
farklı anlamlara sahip olabiliyor. Örneğin, şurada hata ayıklama simgesi oluşturma:
macOS, derleme işleminde simge oluşturmayı ve ardından
bağlantı işlemi sırasında özel bir araç kullanarak sıkıştırılmış dsym arşivini oluşturabilir ve
ardından bu arşivin sıkıştırılmış sürümünü açarak uygulama paketini ve .plist
'ı oluşturun.
dosyaları Xcode tarafından kullanılabilir.
Bazel ile bu işlem aşağıdaki gibi uygulanabilir:
unbundle-debuginfo
bir Bazel işlemidir:
load("@rules_cc//cc:defs.bzl", "ACTION_NAMES")
action_configs = [
action_config (
action_name = ACTION_NAMES.cpp_link_executable,
tools = [
tool(
with_features = [
with_feature(features=["generate-debug-symbols"]),
],
path = "toolchain/mac/ld-with-dsym-packaging",
),
tool (path = "toolchain/mac/ld"),
],
),
]
features = [
feature(
name = "generate-debug-symbols",
flag_sets = [
flag_set (
actions = [
ACTION_NAMES.c_compile,
ACTION_NAMES.cpp_compile
],
flag_groups = [
flag_group(
flags = ["-g"],
),
],
)
],
implies = ["unbundle-debuginfo"],
),
]
Aynı özellik, fission
kullanan Linux için veya .pdb
dosyaları oluşturan Windows için tamamen farklı şekilde uygulanabilir. Örneğin,
fission
tabanlı hata ayıklama sembolü oluşturma uygulaması aşağıdaki gibi görünebilir:
şöyle olur:
load("@rules_cc//cc:defs.bzl", "ACTION_NAMES")
action_configs = [
action_config (
name = ACTION_NAMES.cpp_compile,
tools = [
tool(
path = "toolchain/bin/gcc",
),
],
),
]
features = [
feature (
name = "generate-debug-symbols",
requires = [with_feature_set(features = ["dbg"])],
flag_sets = [
flag_set(
actions = [ACTION_NAMES.cpp_compile],
flag_groups = [
flag_group(
flags = ["-gsplit-dwarf"],
),
],
),
flag_set(
actions = [ACTION_NAMES.cpp_link_executable],
flag_groups = [
flag_group(
flags = ["-Wl", "--gdb-index"],
),
],
),
],
),
]
İşaret grupları
CcToolchainConfigInfo
, işaretleri belirli bir amaca hizmet eden gruplar halinde toplamanıza olanak tanır. İşaretçi değeri içinde önceden tanımlanmış değişkenler kullanarak bir işaretçi belirtebilirsiniz. Derleyici, işaretçiyi derleme komutuna eklerken bu değişkenleri genişletir. Örneğin:
flag_group (
flags = ["%{output_execpath}"],
)
Bu durumda, işaretin içeriği işlemin çıkış dosyası yoluyla değiştirilir.
İşaret grupları, listede göründükleri sırayla (yukarıdan aşağıya, soldan sağa) derleme komutuna genişletilir.
Derleme komutuna eklendiğinde farklı değerlerle tekrarlanması gereken işaretler için işaret grubu, list
türündeki değişkenleri yineleyebilir. Örneğin,
list
türündeki include_path
değişkeni:
flag_group (
iterate_over = "include_paths",
flags = ["-I%{include_paths}"],
)
include_paths
listesindeki her yol öğesi için -I<path>
olarak genişler. Bir işaret grubu beyanının gövdesinde bulunan tüm işaretler (veya flag_group
'ler) bir birim olarak genişletilir. Örneğin:
flag_group (
iterate_over = "include_paths",
flags = ["-I", "%{include_paths}"],
)
include_paths
listesindeki her yol öğesi için -I <path>
olarak genişler.
Bir değişken birden çok kez tekrarlanabilir. Örneğin:
flag_group (
iterate_over = "include_paths",
flags = ["-iprefix=%{include_paths}", "-isystem=%{include_paths}"],
)
şu şekilde genişler:
-iprefix=<inc0> -isystem=<inc0> -iprefix=<inc1> -isystem=<inc1>
Değişkenler, nokta gösterimi kullanılarak erişilebilen yapılara karşılık gelebilir. Örneğin:
flag_group (
flags = ["-l%{libraries_to_link.name}"],
)
Yapılar iç içe yerleştirilebilir ve sıralar da içerebilir. Ad çakışmalarını önlemek için ve açık olmak için alanlarda tam yolu belirtmeniz gerekir. Örneğin:
flag_group (
iterate_over = "libraries_to_link",
flag_groups = [
flag_group (
iterate_over = "libraries_to_link.shared_libraries",
flags = ["-l%{libraries_to_link.shared_libraries.name}"],
),
],
)
Koşullu genişletme
İşaret grupları, expand_if_available
, expand_if_not_available
, expand_if_true
, expand_if_false
veya expand_if_equal
özelliklerini kullanarak belirli bir değişkenin veya alanının varlığına dayalı koşullu genişletmeyi destekler. Örneğin:
flag_group (
iterate_over = "libraries_to_link",
flag_groups = [
flag_group (
iterate_over = "libraries_to_link.shared_libraries",
flag_groups = [
flag_group (
expand_if_available = "libraries_to_link.shared_libraries.is_whole_archive",
flags = ["--whole_archive"],
),
flag_group (
flags = ["-l%{libraries_to_link.shared_libraries.name}"],
),
flag_group (
expand_if_available = "libraries_to_link.shared_libraries.is_whole_archive",
flags = ["--no_whole_archive"],
),
],
),
],
)
CcToolchainConfigInfo referansı
Bu bölümde, derleme değişkenleri, özellikler ve C++ kurallarını başarıyla yapılandırmak için gereken diğer bilgilere referans verilmektedir.
CcToolchainConfigInfo derleme değişkenleri
Aşağıda, CcToolchainConfigInfo
derleme değişkenine referans verilmiştir.
Değişken | İşlem | Açıklama |
source_file
|
compile | Derlenecek kaynak dosya. |
input_file
|
şerit | Kaldırılacak yapı. |
output_file
|
derleme, sarma | Derleme çıktısı. |
output_assembly_file
|
compile | Yayınlanan derleme dosyası. Yalnızca compile işlemi, genellikle --save_temps işareti kullanılırken derleme metni yayınladığında geçerlidir. İçerik
output_file
|
output_preprocess_file
|
compile | Önceden işlenmiş çıkış. Yalnızca kaynak dosyalara ön işlem uygulayan derleme işlemleri için geçerlidir (genellikle --save_temps işareti kullanılır). İçerik, output_file ile aynıdır.
|
includes
|
compile | Derleyicinin kullanması gereken dosya sırası koşulsuz olarak derlenen kaynağa ekleyin. |
include_paths
|
compile | Derleyicinin içinde yer aldığı sıra dizinleri
#include<foo.h> kullanılarak eklenen başlıkları arar
ve #include "foo.h" .
|
quote_include_paths
|
compile | -iquote dizisi şunları içerir:
derleyicinin,
#include "foo.h" .
|
system_include_paths
|
compile | -isystem dizisi şunları içerir:
derleyicinin,
#include <foo.h> .
|
dependency_file
|
compile | Derleyici tarafından oluşturulan .d bağımlılık dosyası.
|
preprocessor_defines
|
compile | defines dizisi, ör. --DDEBUG .
|
pic
|
compile | Çıkışı konumdan bağımsız kod olarak derler. |
gcov_gcno_file
|
compile | gcov kapsam dosyası.
|
per_object_debug_info_file
|
compile | Nesne başına hata ayıklama bilgileri (.dwp ) dosyası.
|
stripopts
|
şerit | stripopts dizisi.
|
legacy_compile_flags
|
compile | compiler_flag , optional_compiler_flag , cxx_flag ve optional_cxx_flag gibi eski CROSSTOOL alanlarından gelen işaretler dizisi.
|
user_compile_flags
|
compile |
copt kural özelliğini veya --copt ,
--cxxopt ve --conlyopt işaretleri.
|
unfiltered_compile_flags
|
compile |
unfiltered_cxx_flag eski CROSSTOOL alanı veya
unfiltered_compile_flags özelliği. Bunlar şu ölçüte göre filtrelenmez:
nocopts kural özelliğine sahiptir.
|
sysroot
|
sysroot
|
|
runtime_library_search_directories
|
bağlantı | Bağlayıcı çalışma zamanı arama yolundaki girişler (genellikle
-rpath işaretiyle ayarlanır).
|
library_search_directories
|
bağlantı | Bağlayıcı arama yolundaki girişler (genellikle
-L işaretini kullanın).
|
libraries_to_link
|
bağlantı | Bağlantılayıcı çağrısında giriş olarak bağlanacak dosyaları sağlayan işaretler. |
def_file_path
|
bağlantı | MSVC ile Windows'ta kullanılan def dosyasının konumu. |
linker_param_file
|
bağlantı | Komut satırı uzunluğu sınırını aşmak için bazel tarafından oluşturulan bağlayıcı parametre dosyasının konumu. |
output_execpath
|
bağlantı | Bağlayıcı çıktısını yürütme. |
generate_interface_library
|
bağlantı | Arayüz kitaplığının oluşturulup oluşturulmayacağına bağlı olarak "yes" veya "no" .
|
interface_library_builder_path
|
bağlantı | Arayüz kitaplığı oluşturucu aracının yolu. |
interface_library_input_path
|
bağlantı | Arayüz kitaplığı ifso oluşturma aracı için giriş.
|
interface_library_output_path
|
bağlantı | ifso Oluşturucu aracı kullanılarak arayüz kitaplığının oluşturulacağı yol.
|
legacy_link_flags
|
bağlantı | Eski CROSSTOOL alanlarından gelen bağlayıcı işaretleri.
|
user_link_flags
|
bağlantı | --linkopt veya linkopts özelliğinden gelen bağlantı işaretçileri.
|
linkstamp_paths
|
bağlantı | Bağlantı damgası yolları veren bir derleme değişkeni. |
force_pic
|
bağlantı | Bu değişkenin varlığı, PIC/PIE kodunun oluşturulmalıdır (Bazel seçeneği "--force_pic" geçti). |
strip_debug_symbols
|
bağlantı | Bu değişkenin varlığı, hata ayıklama simgelerinin kaldırılması gerektiğini gösterir. |
is_cc_test
|
bağlantı | Mevcut işlem bir cc_test
ilişkilendirme işlemiyse doğru, aksi takdirde yanlış değerini döndürür.
|
is_using_fission
|
derleme, bağlantı | Bu değişkenin varlığı, fission'un (nesne başına hata ayıklama bilgileri) etkin olduğunu gösterir. Hata ayıklama bilgileri .o dosyaları yerine .dwo dosyalarında yer alır ve derleyici ile bağlayıcının bunu bilmesi gerekir.
|
fdo_instrument_path
|
derleme, bağlantı | FDO enstrümantasyon profilini depolayan dizinin yolu. |
fdo_profile_path
|
compile | FDO profilinin yolu. |
fdo_prefetch_hints_path
|
compile | Önbelleğe önceden getirme profilinin yolu. |
cs_fdo_instrument_path
|
derle, bağlantı oluştur, derle, bağlantı | Bağlama duyarlı FDO enstrümantasyon profilini depolayan dizinin yolu. |
İyi bilinen özellikler
Aşağıda, özelliklerin ve etkinleştirme koşullarının referansı verilmiştir.
Özellik | Belgeler |
opt | dbg | fastbuild
|
Derleme moduna göre varsayılan olarak etkindir. |
static_linking_mode | dynamic_linking_mode
|
Bağlantı moduna göre varsayılan olarak etkindir. |
per_object_debug_info
|
supports_fission özelliği belirtilip etkinleştirildiyse ve mevcut derleme modu --fission işaretinde belirtilmişse etkinleştirilir.
|
supports_start_end_lib
|
Etkinleştirilirse (ve --start_end_lib seçeneği ayarlanırsa) Bazel, statik kitaplıklarla bağlantı kurmaz. Bunun yerine, doğrudan nesnelerle bağlantı kurmak için --start-lib/--end-lib bağlayıcı seçeneklerini kullanır. Bazel'in derleme yapması gerekmeyeceği için derlemeyi hızlandırır
olması gerekir.
|
supports_interface_shared_libraries
|
Etkinleştirilmişse (ve --interface_shared_objects seçeneği etkinse
ayarlanacaksa, Bazel, linkstatic değeri şu şekilde ayarlanmış hedefleri bağlayacaktır:
Paylaşılan arayüze karşı Yanlış (varsayılan olarak cc_test sn)
kitaplıklar. Bu, artımlı yeniden bağlama işlemini hızlandırır.
|
supports_dynamic_linker
|
Etkinleştirilirse C++ kuralları, araç zincirinin paylaşılan veri kitaplıklar. |
static_link_cpp_runtimes
|
Etkinleştirilirse Bazel, C++ çalışma zamanını statik bağlantı modunda statik olarak ve dinamik bağlantı modunda dinamik olarak bağlar. cc_toolchain.static_runtime_lib veya cc_toolchain.dynamic_runtime_lib özelliğinde (bağlantı moduna bağlı olarak) belirtilen yapı taşları, bağlantı işlemlerine eklenir.
|
supports_pic
|
Etkinleştirilirse araç zinciri, dinamik kitaplıklar için PIC nesnelerini kullanacağını bilir. PIC derlemesi gerektiğinde "pic" değişkeni mevcuttur. Varsayılan olarak etkinleştirilmezse ve `--force_pic` parametresi iletilirse Bazel, "supports_pic" parametresini ister ve özelliğin etkin olduğunu doğrular. Özellik yoksa veya etkinleştirilemediyse `--force_pic` kullanılamaz. |
static_linking_mode | dynamic_linking_mode
|
Bağlantı moduna bağlı olarak varsayılan olarak etkindir. |
no_legacy_features
|
Bazel'in, mevcut olduğunda C++ yapılandırmasına eski özellikleri eklemesini engeller. Şu listenin daha fazla bilgi edineceksiniz. |
Eski özellikler için yamalar mantığı
Bazel, geriye dönük uyumluluk için araç zincirinin özelliklerinde aşağıdaki değişiklikleri uygular:
legacy_compile_flags
özelliğini araç zincirinin en üstüne taşırdefault_compile_flags
özelliğini araç zincirinin en üstüne taşırdependency_file
(varsa) özelliğini araç zincirinin en üstüne eklerpic
(varsa) özelliğini araç zincirinin başına ekler- Araç zincirinin en üstüne
per_object_debug_info
(mevcut değilse) özelliği ekler preprocessor_defines
(varsa) özelliğini araç zincirinin en üstüne ekler- Araç zincirinin en üstüne
includes
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
include_paths
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
fdo_instrument
(mevcut değilse) özelliği ekler fdo_optimize
(varsa) özelliğini araç zincirinin en üstüne eklercs_fdo_instrument
(varsa) özelliğini araç zincirinin en üstüne eklercs_fdo_optimize
(varsa) özelliğini araç zincirinin en üstüne eklerfdo_prefetch_hints
(varsa) özelliğini araç zincirinin en üstüne eklerautofdo
(varsa) özelliğini araç zincirinin en üstüne ekler- Araç zincirinin en üstüne
build_interface_libraries
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
dynamic_library_linker_tool
(mevcut değilse) özelliği ekler shared_flag
(varsa) özelliğini araç zincirinin en üstüne eklerlinkstamps
(varsa) özelliğini araç zincirinin en üstüne ekleroutput_execpath_flags
(varsa) özelliğini araç zincirinin en üstüne eklerruntime_library_search_directories
(varsa) özelliğini araç zincirinin en üstüne ekler- Araç zincirinin en üstüne
library_search_directories
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
archiver_flags
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
libraries_to_link
(mevcut değilse) özelliği ekler force_pic_flags
(varsa) özelliğini araç zincirinin en üstüne ekleruser_link_flags
(varsa) özelliğini araç zincirinin en üstüne ekler- Araç zincirinin en üstüne
legacy_link_flags
(mevcut değilse) özelliği ekler static_libgcc
(varsa) özelliğini araç zincirinin başına ekler- Araç zincirinin en üstüne
fission_support
(mevcut değilse) özelliği ekler strip_debug_symbols
(varsa) özelliğini araç zincirinin en üstüne eklercoverage
(varsa) özelliğini araç zincirinin en üstüne eklerllvm_coverage_map_format
(varsa) özelliğini araç zincirinin en üstüne eklergcc_coverage_map_format
(varsa) özelliğini araç zincirinin en üstüne ekler- Araç zincirinin en altına
fully_static_link
(mevcut değilse) özelliği ekler user_compile_flags
(varsa) özelliğini araç zincirinin alt kısmına eklersysroot
(varsa) özelliğini araç zincirinin alt kısmına ekler- Araç zincirinin en altına
unfiltered_compile_flags
(mevcut değilse) özelliği ekler linker_param_file
(varsa) özelliğini araç zincirinin alt kısmına ekler- Araç zincirinin en altına
compiler_input_flags
(mevcut değilse) özelliği ekler - Araç zincirinin en altına
compiler_output_flags
(mevcut değilse) özelliği ekler
Bu, uzun bir özellik listesidir. Starlark'ta Crosstool tamamlandıktan sonra bunları kaldırmayı planlıyoruz. Merak eden okuyucular CppActionConfigs'deki uygulamayı inceleyebilir. Üretim araç zincirlerinde ise araç zincirinin daha bağımsız olması için no_legacy_features
ekleyebilirsiniz.