Genel bakış
Bazel'ın derleyiciyi doğru seçeneklerle çağırmak için derleyicinin dahili bileşenleri hakkında dizin ve önemli işaretler ekleme gibi bazı bilgilere ihtiyacı vardır. Başka bir deyişle, Bazel'in çalışmalarını anlamak için derleyicinin basitleştirilmiş bir modeline ihtiyacı vardır.
Bazel'in şunları bilmesi gerekiyor:
- Derleyicinin thinLTO, modüller, dinamik bağlantı veya PIC'yi (konumdan bağımsız kod) destekleyip desteklemediği.
- gcc, ld, ar, objcopy gibi gerekli araçlara giden yollar.
- Yerleşik sistem dizinler içerir. Bazel, kaynak dosyaya dahil edilen tüm üst bilgilerin
BUILD
dosyasında doğru bir şekilde tanımlandığını doğrulamak için bunlara ihtiyaç duyar. - Varsayılan sysroot.
- Derleme, bağlantı oluşturma, arşivleme için kullanılacak işaretler.
- Desteklenen derleme modları (opt, dbg, fastbuild) için kullanılacak flag'ler.
- Derleyici tarafından özellikle gerekli kılınan değişkenleri oluşturun.
Derleyici birden çok mimariyi destekliyorsa Bazel'in bunları ayrı olarak yapılandırması gerekir.
CcToolchainConfigInfo
, Bazel'in C++ kurallarının davranışını yapılandırmak için gereken ayrıntı düzeyini sağlayan bir sağlayıcıdır. Bazel, varsayılan olarak derlemeniz için CcToolchainConfigInfo
politikasını otomatik olarak yapılandırır ancak dilerseniz bu ayarı 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.
cc_common.create_cc_toolchain_config_info()
yöntemini çağırarak CcToolchainConfigInfo
oluşturabilirsiniz.
Bu süreçte ihtiyaç duyacağınız tüm struct'lar için Starlark kurucularını @rules_cc//cc:cc_toolchain_config_lib.bzl
içinde bulabilirsiniz.
Bir C++ hedefi analiz aşamasına girdiğinde, Bazel BUILD
dosyasına uygun cc_toolchain
hedefini seçer ve cc_toolchain.toolchain_config
özelliğinde belirtilen hedeften CcToolchainConfigInfo
sağlayıcısını alır. cc_toolchain
hedefi, bu bilgileri bir CcToolchainProvider
aracılığıyla C++ hedefine iletir.
Örneğin, cc_binary
veya cc_library
gibi bir kuralla somutlaşan bir derleme veya bağlantı işlemi için aşağıdaki bilgiler gerekir:
- Kullanılacak derleyici veya bağlayıcı
- Derleyici/bağlayıcı için komut satırı işaretleri
--copt/--linkopt
seçenekleri üzerinden geçirilen yapılandırma işaretleri- Ortam değişkenleri
- İşlemin yürütüldüğü korumalı alanda gereken yapılar
Korumalı alan için gerekli yapılar hariç yukarıdaki tüm bilgiler, cc_toolchain
öğesinin işaret ettiği Starlark hedefinde belirtilir.
Korumalı alana gönderilecek yapılar cc_toolchain
hedefinde bildirilir. Örneğin, cc_toolchain.linker_files
özelliğiyle korumalı alana gönderilecek bağlayıcı ikili programı ve araç zinciri kitaplıklarını belirtebilirsiniz.
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'ı hedefe yönlendirir.cc_toolchain_suite
hedefi birden fazla araç zincirine referans veriyor.--cpu
ve--compiler
işaretlerinin değerleri, bu araç zincirlerinden hangisinin seçileceğini yalnızca--cpu
işaret değerine veya ortak--cpu | --compiler
değerine göre belirler. Seçim süreci şu şekildedir:--compiler
seçeneği belirtilirse Bazel,--cpu | --compiler
ilecc_toolchain_suite.toolchains
özelliğinden ilgili girişi seçer. Bazel karşılık gelen bir giriş bulamazsa hata verir.--compiler
seçeneği belirtilmemişse Bazel yalnızca--cpu
ilecc_toolchain_suite.toolchains
özelliğinden ilgili girişi seçer.İşaret belirtilmemişse Bazel ana makine sistemini inceler ve bulgularına dayanarak bir
--cpu
değeri seçer. İnceleme mekanizması kodunu inceleyin.
Bir araç zinciri seçildikten sonra, Starlark kuralında karşılık gelen feature
ve action_config
nesneleri derlemenin yapılandırmasını (yani daha sonra açıklanan öğeleri) yönetir. Bu mesajlar, Bazel ikili programını değiştirilmeden tam donanımlı C++ özelliklerinin Bazel'de uygulanmasına olanak tanır. C++ kuralları, Bazel kaynak kodunda ayrıntılı olarak açıklanan birden çok benzersiz işlemi destekler.
Özellikler
Komut satırı işaretleri, işlemler, yürütme ortamı üzerindeki kısıtlamalar veya bağımlılık değişiklikleri gerektiren varlıklara özellik denir. Özellik, BUILD
dosyalarının treat_warnings_as_errors
gibi işaret yapılandırmalarını seçmesine veya C++ kurallarıyla etkileşime girip derlemeye header_modules
ya da thin_lto
gibi yeni derleme işlemleri ve girişleri dahil etmesine izin vermek gibi basit bir şey olabilir.
İdeal olarak, CcToolchainConfigInfo
bir özellik listesi içerir. Bu listede her özellik, her biri belirli Bazel işlemleri için geçerli olan işaret listesini tanımlayan bir veya daha fazla işaret grubundan oluşur.
Özellik, Starlark kural yapılandırmasının Bazel sürümlerinden tamamen ayrıştırılmasını sağlayan ada göre belirtilir. Diğer bir deyişle, Bazel sürümü,
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 yollardan biriyle etkinleştirilir:
- Özelliğin
enabled
alanıtrue
olarak ayarlanmıştır. - Bazel veya kural sahibi bunu açıkça etkinleştirir.
- Kullanıcı,
--feature
Bazel seçeneği veyafeatures
kural özelliği aracılığıyla bu özelliği etkinleştirir.
Özelliklerin birbirine bağımlılığı olabilir, komut satırı işaretlerine, BUILD
dosya ayarlarına ve diğer değişkenlere bağlıdır.
Özellik ilişkileri
Bağımlılıklar genellikle doğrudan Bazel ile yönetilir. Bazel sadece gereksinimleri uygular ve derlemede tanımlanan özelliklerin doğasından gelen çatışmaları yönetir. Araç zinciri spesifikasyonu, özellik desteği ve genişletmeyi yöneten Starlark kuralında doğrudan kullanım için 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üzeyi. Bu özellik, yalnızca belirtilen gerekli özellikler etkinse desteklenir. Örneğin, bir özellik yalnızca belirli derleme modlarında (opt , dbg veya fastbuild ) desteklendiğini belirtir. "requires" birden fazla "feature_set" öğesi içeriyorsa, "feature_set"lerden herhangi biri karşılandığında (belirtilen tüm özellikler etkinleştirildiğinde) özellik desteklenir.
|
implies = ['feature'] |
Özellik düzeyi. Bu özellik, belirtilen özellikleri ima eder. Bir özelliğin etkinleştirilmesi, ima edilen tüm özellikleri de dolaylı olarak etkinleştirir (yani, yinelemeli olarak çalışır). Ayrıca, temizleyicilerin sık kullanılan parçaları gibi bir dizi özellikte işlevlerin yaygın alt kümelerini de hesaba katma olanağı sağlar. Dolaylı özellikler devre dışı bırakılamaz. |
provides = ['feature'] |
Özellik düzeyi. Bu özelliğin, birbirini dışlayan birkaç alternatif özellikten biri olduğunu belirtir. Örneğin, tüm temizleyiciler Bu özellik, kullanıcı aynı anda iki veya daha fazla birbirini dışlayan özellik isterse alternatiflerin listelenerek hata giderme sürecini iyileştirir. |
with_features = [ with_feature_set( features = ['feature-1'], not_features = ['feature-2'], ), ] |
İşaretleme ayarı düzeyi. Bir özellik, birden çok işaret grubu belirtebilir.
with_features belirtildiğinde, işaret grubu yalnızca belirtilen features grubundaki tüm özelliklerin etkinleştirilmiş olduğu ve not_features grubunda belirtilen tüm özelliklerin devre dışı bırakıldığı en az bir with_feature_set varsa derleme komutuna genişletilir.
with_features belirtilmezse ayarlanan işaret, belirtilen her işlem için koşulsuz olarak uygulanır.
|
İşlemler
Eylemler, bir işlemin nasıl yürütüleceğini varsayarak yürütüldüğü koşulları değiştirme esnekliği sağlar. action_config
, bir işlemin çağırdığı araç ikili programını belirtir. feature
ise işlem çağrıldığında aracın nasıl davranacağını belirleyen yapılandırmayı (işaretler) belirtir.
Özellikler, işlemler Bazel eylem grafiğini değiştirebileceğinden, hangi Bazel işlemlerini etkilediklerini belirtmek için işlemlere referans verir. CcToolchainConfigInfo
sağlayıcısı, ilişkili bayraklar ve araçlar olan işlemleri (ör. c++-compile
) içerir. Her işleme, bunları bir özellikle ilişkilendirerek
bayraklar atanır.
Her işlem adı, Bazel tarafından gerçekleştirilen tek bir işlem türünü (ör. derleme veya bağlantı oluşturma) temsil eder. Bununla birlikte, eylemler ile Bazel işlem türleri arasında çoka-bir ilişki vardır. Burada Bazel işlem türü, bir işlemi (CppCompileAction
gibi) uygulayan Java sınıfını ifade eder. Özellikle, aşağıdaki tabloda verilen "derleyici işlemleri" ve "derleyici işlemleri", CppCompileAction
, bağlantı işlemleri ise CppLinkAction
şeklindedir.
Derleyici işlemleri
İşlem | Açıklama |
preprocess-assemble
|
Ön işleme yöntemini kullanarak birleştirin. Normalde .S dosya için.
|
assemble
|
Ön işleme yapmadan monte edin. Normalde .s dosya için.
|
Derleyici işlemleri
İşlem | Açıklama |
cc-flags-make-variable
|
CC_FLAGS öğesini genellere yayar.
|
c-compile
|
C olarak derleyin. |
c++-compile
|
C++ olarak derleyin. |
c++-header-parsing
|
Üstbilginin bağımsız olduğundan emin olmak için derleyicinin ayrıştırıcısını bir başlık dosyasında çalıştırın, aksi takdirde derleme hataları ortaya çıkar. Yalnızca modülleri destekleyen araç zincirleri için geçerlidir. |
Bağlantı işlemleri
İşlem | Açıklama |
c++-link-dynamic-library
|
Tüm bağımlılıklarını içeren paylaşılan bir kitaplığa bağlantı oluşturun. |
c++-link-nodeps-dynamic-library
|
Yalnızca cc_library kaynak içeren paylaşılan bir kitaplığı bağlayın.
|
c++-link-executable
|
Çalıştırmaya hazır son bir 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
dosya) birleştirir ve bazı anlamları ada kodlar.
İşlem | Açıklama |
c++-link-static-library
|
Statik kitaplık (arşiv) oluşturun. |
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 kullanma
action_config
, işlem sırasında çağrılacak aracı (iki bileşenli) ve özellikler tarafından tanımlanan işaret gruplarını belirterek bir Bazel işlemini tanımlayan bir Starlark yapısıdır. Bu işaretler, işlemin yürütülmesine kısıtlamalar uygular.
action_config()
oluşturucusu aşağıdaki parametrelere sahiptir:
Özellik | Açıklama |
action_name
|
Bu işlemin karşılık geldiği Bazel işlemi. Bazel, işlem başına aracı ve yürütme gereksinimlerini keşfetmek için bu özelliği kullanır. |
tools
|
Çağrılacak yürütülebilir dosya. İşleme uygulanan araç, listedeki özellik yapılandırmasıyla eşleşen bir özellik grubuna sahip ilk araç olur. Varsayılan değer sağlanmalıdır. |
flag_sets
|
Bir işlem grubu için geçerli olan işaretlerin listesi. Bu durum bir özellik için de geçerlidir. |
env_sets
|
Bir işlem grubu için geçerli olan ortam kısıtlamalarının listesi. Bu durum bir özellik için de geçerlidir. |
action_config
, daha önce açıklanan özellik ilişkileri tarafından belirtildiği şekilde diğer özellikleri ve action_config
'leri zorunlu kılabilir ve ima edebilir. Bu davranış, bir özelliğin davranışına benzer.
Son iki özellik, özelliklerde karşılık gelen ö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
çiftlerinden kaçınmak olduğu için dahil edilmiştir. Genellikle tek bir özelliğin birden fazla action_config
ile paylaşılması tercih edilir.
Aynı araç zincirinde aynı action_name
değerine sahip birden fazla action_config
tanımlayamazsınız. Bu, araç yollarındaki belirsizliği önler ve bir işlemin özelliklerinin araç zincirinde tek bir yerde net bir şekilde açıklanmasını sağlayan action_config
amacını zorunlu kılar.
Araç oluşturucuyu kullanma
action_config
, tools
parametresi aracılığıyla bir araç grubunu belirtebilir.
tool()
oluşturucu şu parametreleri alır:
Alan | Açıklama |
tool_path
|
Söz konusu aracın yolu (mevcut konuma göre). |
with_features
|
Bir özellik listesi, bu aracın uygulanabilmesi için en az birinin karşılanması gereken özellikleri belirler. |
Belirli bir action_config
için yalnızca tek bir tool
, araç yolunu ve yürütme gereksinimlerini Bazel işlemine uygular. Bir araç, özellik yapılandırmasıyla eşleşen with_feature
kümesine sahip bir araç bulunana kadar action_config
öğesinde tools
özelliği iterasyon yapılarak seçilir (daha fazla bilgi için bu sayfada daha önceki özellik ilişkileri bölümüne bakın). Araç listelerinizi, boş özellik yapılandırmasına karşılık gelen
varsayılan bir araçla sonlandırmanız gerekir.
Örnek kullanım
Özellikler ve işlemler, platformlar arası çeşitli anlamlar içeren Bazel eylemlerini uygulamak için birlikte kullanılabilir. Örneğin, macOS'te hata ayıklama sembolü oluşturma işlemi, derleme işleminde semboller oluşturmayı, ardından bağlantı işlemi sırasında sıkıştırılmış dsym arşivi oluşturmak için özel bir aracın çağrılmasını ve ardından bu arşivin sıkıştırılarak Xcode tarafından tüketilebilecek uygulama paketini ve .plist
dosyalarını üretmek için arşivin açılmasını gerektirir.
Bunun yerine, 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 (
config_name = ACTION_NAMES.cpp_link_executable,
action_name = ACTION_NAMES.cpp_link_executable,
tools = [
tool(
with_features = [
with_feature(features=["generate-debug-symbols"]),
],
tool_path = "toolchain/mac/ld-with-dsym-packaging",
),
tool (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"],
),
]
Bu özellik, fission
kullanan Linux veya .pdb
dosyaları üreten Windows için tamamen farklı uygulanabilir. Örneğin, fission
tabanlı hata ayıklama sembolü oluşturma uygulaması aşağıdaki gibi görünebilir:
load("@rules_cc//cc:defs.bzl", "ACTION_NAMES")
action_configs = [
action_config (
name = ACTION_NAMES.cpp_compile,
tools = [
tool(
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"],
),
],
),
],
),
]
İşaretleme grupları
CcToolchainConfigInfo
, işaretleri belirli bir amaca hizmet eden gruplar halinde gruplandırmanıza olanak tanır. İşaret değeri içindeki önceden tanımlanmış değişkenleri kullanarak bir işaret belirtebilirsiniz. Bu değişkenler, derleme komutuna derleyici tarafından eklenirken derleyici tarafından genişletilir. Örneğin:
flag_group (
flags = ["%{output_file_path}"],
)
Bu durumda, işaretin içeriği, işlemin çıkış dosyası yoluyla değiştirilir.
İşaretleme grupları, derleme komutuna, listede göründükleri sırayla, yukarıdan aşağıya, soldan sağa olacak şekilde 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>
değerine genişler. İşaretleme grubu beyanının gövdesindeki 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>
değerine 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}"],
)
şuna 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 adım sıraları içerebilir. Ad çakışmalarını önlemek ve adın açık olmasını sağlamak 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 değişkenin alanı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şkenlerine, özelliklere ve C++ kurallarını başarıyla yapılandırmak için gereken diğer bilgilere dair bir referans sunulmaktadır.
CcToolchainConfigInfo derleme değişkenleri
Aşağıda CcToolchainConfigInfo
derleme değişkenlerine referans verilmiştir.
Değişken | İşlem | Açıklama |
source_file
|
compile | Derlenecek kaynak dosya. |
input_file
|
şerit | Çıkarılacak yapı. |
output_file
|
compile | Derleme çıktısı. |
output_assembly_file
|
compile | Yayınlanan derleme dosyası. Yalnızca compile işlemi derleme metni yayınladığında, genellikle --save_temps işareti kullanıldığında geçerli olur. İçerik, output_file ile aynıdır.
|
output_preprocess_file
|
compile | Ön işlenmiş çıkış. Yalnızca kaynak dosyaları önceden işleyen (genellikle --save_temps işaretini kullanırken) işlemleri derlemek için geçerlidir. İçerik, output_file ile aynıdır.
|
includes
|
compile | Derleyicinin, derlenen kaynağa koşulsuz olarak dahil etmesi gereken dosyaların sırasıdır. |
include_paths
|
compile | Derleyicinin, #include<foo.h> ve #include "foo.h" kullanılarak eklenen başlıkları aradığı sıra dizinleri.
|
quote_include_paths
|
compile | -iquote dizisi, derleyicinin #include "foo.h" kullanarak eklenen başlıkları aradığı dizinleri içerir.
|
system_include_paths
|
compile | -isystem dizisi, derleyicinin #include <foo.h> kullanarak eklenen başlıkları aradığı dizinleri içerir.
|
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ı.
|
stripotps
|
şerit | stripopts dizisi.
|
legacy_compile_flags
|
compile | compiler_flag , optional_compiler_flag , cxx_flag ve optional_cxx_flag gibi eski CROSSTOOL alanlarındaki işaret dizisi.
|
user_compile_flags
|
compile | copt kural özelliğinden veya --copt , --cxxopt ve --conlyopt işaretlerinden gelen işaret dizisi.
|
unfiltered_compile_flags
|
compile | unfiltered_cxx_flag eski CROSSTOOL alanından veya unfiltered_compile_flags özelliğinden gelen işaretler dizisi. Bunlar nocopts kural özelliğine göre filtrelenmez.
|
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şaretiyle ayarlanır).
|
libraries_to_link
|
bağlantı | Bağlayıcı çağrısında giriş olarak bağlanacak dosyaları sağlayan işaretler. |
def_file_path
|
bağlantı | Windows'da MSVC ile kullanılan geçersiz dosyanın konumu. |
linker_param_file
|
bağlantı | Komut satırı uzunluk 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ın yürütme yolu. |
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şturma 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şturma aracını kullanarak 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ğlayıcı işaretleri.
|
symbol_counts_output
|
bağlantı | Sembol sayılacak yol. |
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şturulması gerektiğini gösterir (Bazel seçeneği "--force_pic" iletildi). |
strip_debug_symbols
|
bağlantı | Bu değişkenin varlığı, hata ayıklama sembollerinin kaldırılması gerektiğini gösterir. |
is_cc_test
|
bağlantı | Mevcut işlem cc_test bağlantı işlemi olduğunda doğru, aksi takdirde yanlış değerini alır.
|
is_using_fission
|
derleme, bağlantı | Bu değişkenin varlığı, fisyonun (nesne başına hata ayıklama bilgisi) etkinleştirildiğini gösterir. Hata ayıklama bilgileri .o dosyaları yerine .dwo dosyalarında bulunur ve derleyici ile bağlayıcının bunu bilmesi gerekir.
|
fdo_instrument_path
|
derleme, bağlantı | FDO araçları profilini depolayan dizine giden yol. |
fdo_profile_path
|
compile | FDO profiline giden yol. |
fdo_prefetch_hints_path
|
compile | Önbellek önceden getirme profilinin yolu. |
csfdo_instrument_path
|
derleme, bağlantı | Bağlama duyarlı FDO araçları profilini depolayan dizine giden yol. |
İyi bilinen özellikler
Aşağıda, özelliklere ve bunların etkinleştirme koşullarına referans verilmiştir.
Özellik | Belgeler |
opt | dbg | fastbuild
|
Derleme moduna göre varsayılan olarak etkinleştirilir. |
static_linking_mode | dynamic_linking_mode
|
Bağlantı moduna göre varsayılan olarak etkinleştirilir. |
per_object_debug_info
|
supports_fission özelliği belirtilip etkinleştirildiyse ve mevcut derleme modu --fission işaretinde belirtiliyorsa etkinleştirilir.
|
supports_start_end_lib
|
Politika etkinleştirilirse (ve --start_end_lib seçeneği ayarlanırsa) Bazel statik kitaplıklara bağlantı vermez. Bunun yerine, nesnelere doğrudan bağlantı oluşturmak için --start-lib/--end-lib bağlayıcı seçeneklerini kullanır. Bazel'in statik kitaplıklar derlemesi gerekmediğinden bu işlem, derlemeyi hızlandırır.
|
supports_interface_shared_libraries
|
Politika etkinleştirilirse (ve --interface_shared_objects seçeneği ayarlanırsa) Bazel, linkstatic değeri Yanlış (varsayılan olarak cc_test ) değerine ayarlanmış hedefleri arayüz paylaşılan kitaplıklara bağlar. Bu, artımlı yeniden bağlamayı hızlandırır.
|
supports_dynamic_linker
|
Etkinleştirilirse C++ kuralları, araç zincirinin paylaşılan kitaplıklar oluşturabileceğini bilir. |
static_link_cpp_runtimes
|
Etkinleştirilirse Bazel, C++ çalışma zamanını statik olarak ve dinamik bağlantı modunda dinamik olarak bağlar. cc_toolchain.static_runtime_lib veya cc_toolchain.dynamic_runtime_lib özelliğinde belirtilen yapılar (bağlantı moduna bağlı olarak) bağlantı işlemlerine eklenir.
|
supports_pic
|
Etkinleştirilirse araç zinciri, dinamik kitaplıklar için PIC nesnelerini kullanmayı bilir. PIC derlemesi gerektiğinde "pic" değişkeni mevcuttur. Varsayılan olarak etkinleştirilmemişse ve "--force_pic" iletilirse, Bazel "supports_pic" isteğinde bulunur ve özelliğin etkinleştirildiğini doğrular. Özellik eksikse veya etkinleştirilemediyse "--force_pic" kullanılamaz. |
static_linking_mode | dynamic_linking_mode
|
Bağlantı moduna göre varsayılan olarak etkinleştirilir. |
no_legacy_features
|
Mevcut olduğunda Bazel'ın eski özellikleri C++ yapılandırmasına eklemesini engeller. Özelliklerin tam listesini aşağıda bulabilirsiniz. |
Eski özelliklerde yama uygulama mantığı
Bazel, geriye dönük uyumluluk için araç zincirinin özelliklerine 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şır- Araç zincirinin en üstüne
dependency_file
(varsa) özelliğini ekler - Araç zincirinin en üstüne
pic
(varsa) özelliğini ekler - Araç zincirinin en üstüne
per_object_debug_info
(varsa) özelliğini ekler - Araç zincirinin en üstüne
preprocessor_defines
(varsa) özelliğini ekler - Araç zincirinin en üstüne
includes
(varsa) özelliğini ekler - Araç zincirinin en üstüne
include_paths
(varsa) özelliğini ekler - Araç zincirinin en üstüne
fdo_instrument
(varsa) özelliğini ekler - Araç zincirinin en üstüne
fdo_optimize
(varsa) özelliğini ekler - Araç zincirinin en üstüne
cs_fdo_instrument
(varsa) özelliğini ekler - Araç zincirinin en üstüne
cs_fdo_optimize
(varsa) özelliğini ekler - Araç zincirinin en üstüne
fdo_prefetch_hints
(varsa) özelliğini ekler - Araç zincirinin en üstüne
autofdo
(varsa) özelliğini ekler - Araç zincirinin en üstüne
build_interface_libraries
(varsa) özelliğini ekler - Araç zincirinin en üstüne
dynamic_library_linker_tool
(varsa) özelliğini ekler - Araç zincirinin en üstüne
symbol_counts
(varsa) özelliğini ekler - Araç zincirinin en üstüne
shared_flag
(varsa) özelliğini ekler - Araç zincirinin en üstüne
linkstamps
(varsa) özelliğini ekler - Araç zincirinin en üstüne
output_execpath_flags
(varsa) özelliğini ekler - Araç zincirinin en üstüne
runtime_library_search_directories
(varsa) özelliğini ekler - Araç zincirinin en üstüne
library_search_directories
(varsa) özelliğini ekler - Araç zincirinin en üstüne
archiver_flags
(varsa) özelliğini ekler - Araç zincirinin en üstüne
libraries_to_link
(varsa) özelliğini ekler - Araç zincirinin en üstüne
force_pic_flags
(varsa) özelliğini ekler - Araç zincirinin en üstüne
user_link_flags
(varsa) özelliğini ekler - Araç zincirinin en üstüne
legacy_link_flags
(varsa) özelliğini ekler - Araç zincirinin en üstüne
static_libgcc
(varsa) özelliğini ekler - Araç zincirinin en üstüne
fission_support
(varsa) özelliğini ekler - Araç zincirinin en üstüne
strip_debug_symbols
(varsa) özelliğini ekler - Araç zincirinin en üstüne
coverage
(varsa) özelliğini ekler - Araç zincirinin en üstüne
llvm_coverage_map_format
(varsa) özelliğini ekler - Araç zincirinin en üstüne
gcc_coverage_map_format
(varsa) özelliğini ekler - Araç zincirinin alt kısmına
fully_static_link
(varsa) özelliğini ekler - Araç zincirinin alt kısmına
user_compile_flags
(varsa) özelliğini ekler - Araç zincirinin alt kısmına
sysroot
(varsa) özelliğini ekler - Araç zincirinin alt kısmına
unfiltered_compile_flags
(varsa) özelliğini ekler - Araç zincirinin alt kısmına
linker_param_file
(varsa) özelliğini ekler - Araç zincirinin alt kısmına
compiler_input_flags
(varsa) özelliğini ekler - Araç zincirinin alt kısmına
compiler_output_flags
(varsa) özelliğini ekler
Bu, uzun bir özellik listesidir. Planınız, Starlark'taki Crosstool aracı tamamlandığında onlardan kurtulmak. Meraklı okuyucular için CppActionConfigs içindeki uygulamaya bakın. Üretim araç zincirleri ise araç zincirini daha bağımsız hale getirmek için no_legacy_features
eklemeyi düşünün.