Genel Bakış
Derleyiciyi doğru seçeneklerle çağırmak için Bazel'in bazı bilgilere ihtiyacı var. dizinleri ve önemli işaretleri dahil edin. Diğer bir deyişle, Bazel'in çalışma şeklini anlamak için derleyicinin basitleştirilmiş bir modeline ihtiyacı vardır.
Bazel'ın şunları bilmesi gerekiyor:
- Derleyicinin thinLTO, modül, dinamik bağlantı veya PIC'yi destekleyip desteklemediği (konumdan bağımsız kod) girin.
- gcc, ld, ar, objcopy gibi gerekli araçların yolları.
- Yerleşik sistemde dizinler bulunur. 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 özel olarak gerekli olan değişkenler oluşturun.
Derleyici birden fazla mimariyi destekliyorsa Bazel'in oluşturabilirsiniz.
CcToolchainConfigInfo
, Bazel'in C++ kurallarının davranışını yapılandırma için gerekli düzeyde ayrıntı sunan bir sağlayıcıdır. Bazel, varsayılan olarak CcToolchainConfigInfo
'ü derlemeniz için otomatik olarak yapılandırır ancak manuel olarak yapılandırabilirsiniz. Bunun için bir Starlark kuralına ihtiyacınız var
CcToolchainConfigInfo
sağlayan ve
öğesinin toolchain_config
özelliği
Kuralınıza cc_toolchain
ekleyin.
cc_common.create_cc_toolchain_config_info()
numaralı telefonu arayarak CcToolchainConfigInfo
öğesini oluşturabilirsiniz.
İş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
üzerinden C++ hedefine iletir.
Örneğin, cc_binary
veya cc_library
gibi bir kural tarafından örneklendirilen bir derleme veya bağlantı işlemi için aşağıdaki bilgiler gerekir:
- Kullanılacak derleyici veya bağlayıcı
- Derleyici/bağlantılayıcı için komut satırı işaretleri
--copt/--linkopt
seçenekleri üzerinden iletilen yapılandırma işaretleri- Ortam değişkenleri
- İşlemin yürütüldüğü korumalı alanda gereken yapı taşları
Korumalı alanda gerekli olan yapı taşları dışındaki tüm bilgiler, 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çlar zinciri seçimi
Araç zinciri seçim mantığı aşağıdaki şekilde çalışır:
Kullanıcı,
BUILD
dosyasında bircc_toolchain_suite
hedefi belirtir ve--crosstool_top
seçeneğini kullanarak Bazeli 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 şöyle olur:--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 Bazelcc_toolchain_suite.toolchains
özelliğine yalnızca--cpu
ile ulaşabilirsiniz.Herhangi bir işaret belirtilmezse Bazel, ana sistemi inceler ve bulgularına göre bir
--cpu
değeri seçer. Bkz. inceleme mekanizması kodu ile değiştirin.
Bir araç zinciri seçildikten sonra, Starlark kuralındaki ilgili feature
ve action_config
nesneleri derlemenin yapılandırmasını (yani daha sonra açıklanan öğeleri) yönetir. Bu mesajlar, Bazel ikili dosyasında değişiklik yapmadan Bazel'de tam teşekküllü C++ özelliklerinin uygulanmasına olanak tanır. C++ kuralları, ayrıntılı olarak belgelenen birden çok benzersiz işlemi destekler
Bazel kaynak koduna ekleyin.
Ö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. Bir özellik, BUILD
dosyalarının treat_warnings_as_errors
gibi işaret yapılandırmalarını seçmesine veya C++ kurallarıyla etkileşime girmesine ve derlemeye yeni derleme işlemleri ve girişler (ör. header_modules
veya thin_lto
) eklemesine izin vermek kadar basit olabilir.
İdeal olarak CcToolchainConfigInfo
, her bir özelliğin her birinin
özellik, her biri bir işaret listesi tanımlayan bir veya daha fazla işaret grubundan oluşur
seçenekleri vardır.
Özellikler adlarıyla belirtilir. Bu sayede Starlark kural yapılandırması, Bazel sürümlerinden tamamen ayrılabilir. Başka bir deyişle, bir Bazel sürümü
olduğu sürece CcToolchainConfigInfo
yapılandırmalarının davranışını
yapılandırmaları yeni özelliklerin kullanılmasını gerektirmez.
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. Bu da özelliklerin doğası gereği çatışmaları yönetir ve oluşturmamıza yardımcı olur. Araç zinciri spesifikasyonu, daha ayrıntılı doğrudan Starlark kuralında yer alan ve ilgili özelliği düzenleyen destek ve genişleme. 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, birbirini dışlayan birkaç alternatif özellikten biri olduğunu gösterir. Örneğin tüm dezenfektanların
Bu sayede, kullanıcı sorarsa alternatifler listeleyerek hata işleme sürecini iyileştirir. birbirini dışlayan iki özellik kullanabilirsiniz. |
with_features = [ with_feature_set( features = ['feature-1'], not_features = ['feature-2'], ), ] |
İşaret grubu 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 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 bayrak grubu şu şekilde olur:
koşulsuz olarak uygulanır.
|
İşlemler
İşlemler, bir işlemin nasıl çalışacağını varsaymadan işlemin yürütüleceği koşulları değiştirme esnekliği sağlar.
action_config
, bir işlemin çağırdığı araç ikili programını belirtirken bir diğer yandan
feature
, bu aracın
işlem çağrıldığında davranır.
İşlemler Bazel işlem grafiğini değiştirebileceğinden özellikler, hangi Bazel işlemlerini etkilediklerini belirtmek için işlemlere referans verir. İ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
). İşaretler, bir özellikle ilişkilendirilerek her işleme atanır.
Her işlem adı, Bazel tarafından gerçekleştirilen tek bir işlem türünü temsil eder. Örneğin:
derleme veya bağlama. Bununla birlikte, işlemler ile Bazel işlem türleri arasında bire çok ilişki vardır. Bazel işlem türü, bir işlemi uygulayan Java sınıfını (CppCompileAction
gibi) ifade eder. Özellikle, aşağıdaki tablodaki "toplayıcı işlemleri" ve "derleyici işlemleri" CppCompileAction
iken bağlantı işlemleri CppLinkAction
'dur.
Derleyici işlemleri
İşlem | Açıklama |
preprocess-assemble
|
Ön işleme ile birleştirin. Genellikle .S dosyaları için.
|
assemble
|
Ön işlemeden derleyin. Genellikle .s dosyaları için.
|
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
|
Başlığın bağımsız olur, aksi takdirde derleme hatalarına neden olur. Yalnızca modülleri destekleyen toolchain'ler 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ığı bağlayın. |
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, ar
aracılığıyla nesne dosyalarını arşiv kitaplıklarında (.a
dosya) birleştirir
ve ada birtakım anlamlar kodlayın.
İş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 nesnelerde derleyen ThinLTO işlemi. |
lto-index
|
Global dizin oluşturan ThinLTO işlemi. |
action_config parametresini kullanma
action_config
, bir Bazel işlemini tanımlayan bir Starlark yapısıdır. Bu yapı, işlem sırasında çağrılacak aracı (ikili) ve özellikler tarafından tanımlanan işaret gruplarını belirtir. Bu flag'ler, işlemin
çok önemlidir.
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ç, özellik yapılandırmasıyla eşleşen bir özellik kümesine sahip listedeki ilk araç olur. 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. |
Bir action_config
, daha önce açıklanan özellik ilişkilerine göre diğer özellikleri ve action_config
'leri gerektirebilir ve ima edebilir. Bu davranış, bir özelliğe 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ı araç zincirinde aynı action_name
ile birden fazla action_config
tanımlayamazsınız. Bu, araç yollarında belirsizliği önler ve action_config
'ün amacını (bir işlemin özelliklerinin araç zincirindeki tek bir yerde net bir şekilde açıklanması) destekler.
Araç oluşturucuyu kullanma
Bir action_config
, tools
parametresi aracılığıyla bir araç grubu belirtebilir.
tool()
kurucusu aşağıdaki parametreleri alır:
Alan | Açıklama |
path
|
Söz konusu aracın yolu (geçerli 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
, araç yolunu ve yürütme koşullarını Bazel işlemine uygular. Bir araç seçildi
action_config
üzerinde tools
özelliği aracılığıyla bir araç
özellik yapılandırmasıyla eşleşen bir with_feature
grubu bulundu
(bu sayfanın önceki Özellik ilişkileri bölümüne bakın
bakın). Araç listelerinizi varsayılan bir
aracını da kullanabilirsiniz.
Örnek kullanım
Bazel işlemlerini farklı platformlar arası semantiklerle uygulamak için özellikler ve işlemler birlikte kullanılabilir. Örneğin, macOS'te hata ayıklama sembolü oluşturma işlemi için derleme işleminde sembollerin oluşturulması, 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ı ve ardından uygulama paketini ve Xcode tarafından kullanılabilen .plist
dosyalarını oluşturmak için bu arşivin sıkıştırmasının kaldırılması gerekir.
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"],
),
]
Bu özellik, farklı bir uygulama paketi kullanan Linux için
fission
veya .pdb
dosya oluşturan Windows için. Ö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. Önceden tanımlanmış değişkenleri kullanarak
içindeki "bayrak" değerine; derleyici, işareti
derleme komutudur. Örneğin:
flag_group (
flags = ["%{output_execpath}"],
)
Bu durumda, işaretin içeriği çıkış dosyası yoluyla değiştirilir eyleme dönüşebilir.
İş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>
değerine 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.
Değişkenler 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 ve açıkça belirtmek için alanların tam yolunu 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, özellikleri ve C++ kurallarını başarıyla yapılandırmak için gereken bilgileri içerir.
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, çıkarma | Derleme çıktısı. |
output_assembly_file
|
compile | Yayınlanan derleme dosyası. Yalnızca compile işlemi, genellikle --save_temps işaretçisi kullanılırken derleme metni yayınladığında geçerlidir. İçerik
output_file
|
output_preprocess_file
|
compile | Önceden işlenmiş çıkış. Yalnızca derlemek için geçerlidir
yalnızca kaynak dosyaları ön işlemden geçiren işlemler (genellikle
--save_temps işareti. İç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, derleyicinin #include "foo.h" kullanılarak dahil edilen başlıkları aradığı dizinleri içerir.
|
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ındaki veya unfiltered_compile_flags özelliğindeki 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ş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ı | Windows'da MSVC ile 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ğlantılayıcının çıkışının Execpath değeri. |
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ına giden yol. |
interface_library_input_path
|
bağlantı | Arayüz kitaplığı ifso oluşturucu aracı için giriş.
|
interface_library_output_path
|
bağlantı | ifso oluşturma 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 uygulamasından gelen bağlayıcı işaretleri
veya linkopts özelliğini gönderin.
|
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 simgelerinin kaldırılması gerektiğini gösterir. |
is_cc_test
|
bağlantı | Mevcut işlem cc_test olduğunda güven ver
bağlantı oluşturma işlemi, aksi takdirde false (yanlış) değerini alır.
|
is_using_fission
|
derleme, bağlantı | Bu değişkenin varlığı, fisyonun (nesne başına hata ayıklama bilgisi) olduğunu gösterir
etkinleştirilir. 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
|
derle, bağlantı oluştur, derle, 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
|
derleme, bağlantı | Bağlama duyarlı FDO enstrümantasyon profilini depolayan dizinin yolu. |
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ştirilmişse (ve --start_end_lib seçeneği ayarlanmışsa) Bazel
statik kitaplıklara bağlantı oluşturmaz, bunun yerine
Nesnelere karşı bağlantı oluşturmak için --start-lib/--end-lib bağlayıcı seçeneği
doğrudan ekleyebilirsiniz. Böylece, Bazel'in yeni bir web sitesi için çözüm
olması gerekir.
|
supports_interface_shared_libraries
|
Etkinleştirilirse (ve --interface_shared_objects seçeneği ayarlanırsa) Bazel, linkstatic değerinin Yanlış (varsayılan olarak cc_test ) olarak ayarlandığı hedefleri arayüz paylaşılan kitaplıklarına bağlar. Bu sayede artımlı yeniden bağlantı işlemi daha hızlı gerçekleşir.
|
supports_dynamic_linker
|
Etkinleştirilirse C++ kuralları, araç zincirinin paylaşılan veriler kitaplıklar. |
static_link_cpp_runtimes
|
Etkinleştirilirse Bazel, C++ çalışma zamanını statik bağlantıda statik olarak bağlar.
ve dinamik olarak bağlantı kurabilirsiniz. Yapılar
cc_toolchain.static_runtime_lib veya
cc_toolchain.dynamic_runtime_lib özelliği (
bağlantı modu) bağlantı işlemlerine eklenir.
|
supports_pic
|
Etkinleştirilirse araç seti, dinamik kitaplıklar için PIC nesnelerini kullanacağını bilir. PIC derlemesi gerektiğinde "pic" değişkeni mevcuttur. Etkin değilse "--force_pic" geçilirse Bazel "supports_pic" hem de "supports_pic" öğesini ister ve özelliğin etkinleştirildiğinden emin olun. Özellik yoksa veya yapılamıyorsa `--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. Özelliklerin tam listesini aşağıda bulabilirsiniz. |
Eski özelliklerde yama uygulama 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 ekler- Araç zincirinin en üstüne
pic
(mevcut değilse) özelliği ekler per_object_debug_info
(varsa) özelliğini araç zincirinin en üstüne ekler- Araç zincirinin en üstüne
preprocessor_defines
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
includes
(mevcut değilse) özelliği ekler include_paths
(varsa) özelliğini araç zincirinin en üstüne 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 ekler- Araç zincirinin en üstüne
cs_fdo_optimize
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
fdo_prefetch_hints
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
autofdo
(mevcut değilse) özelliği 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 ekler- Araç zincirinin en üstüne
linkstamps
(mevcut değilse) özelliği ekler output_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 archiver_flags
(varsa) özelliğini araç zincirinin en üstüne eklerlibraries_to_link
(varsa) özelliğini araç zincirinin en üstüne ekler- Araç zincirinin en üstüne
force_pic_flags
(mevcut değilse) özelliği ekler user_link_flags
(varsa) özelliğini araç zincirinin en üstüne eklerlegacy_link_flags
(varsa) özelliğini araç zincirinin en üstüne eklerstatic_libgcc
(varsa) özelliğini araç zincirinin en üstüne eklerfission_support
(varsa) özelliğini araç zincirinin en üstüne eklerstrip_debug_symbols
(varsa) özelliğini araç zincirinin en üstüne eklercoverage
(varsa) özelliğini araç zincirinin en üstüne ekler- Araç zincirinin en üstüne
llvm_coverage_map_format
(mevcut değilse) özelliği ekler gcc_coverage_map_format
(varsa) özelliğini araç zincirinin en üstüne eklerfully_static_link
(varsa) özelliğini araç zincirinin alt kısmına ekleruser_compile_flags
(varsa) özelliğini araç zincirinin alt kısmına ekler- Araç zincirinin en altına
sysroot
(mevcut değilse) özelliği ekler - Araç zincirinin en altına
unfiltered_compile_flags
(mevcut değilse) özelliği ekler - Araç zincirinin en altına
linker_param_file
(mevcut değilse) özelliği ekler - Araç zincirinin en altına
compiler_input_flags
(mevcut değilse) özelliği ekler compiler_output_flags
(varsa) özelliğini araç zincirinin alt kısmına ekler
Bu, uzun bir özellik listesidir. Plan, onlardan bir kez kurtulmak
Starlark'taki Crosstool:
tamamlandı. Merak eden okuyucular CppActionConfigs'deki uygulamayı inceleyebilir. Üretim araç zincirlerinde ise araç zincirinin daha bağımsız olması için no_legacy_features
ekleyebilirsiniz.