Genel Bakış
Derleyiciyi doğru seçeneklerle çağırmak için Bazel'in dahili bileşenleri hakkında daha fazla bilgi edinin. Başka bir deyişle, Bazel'in derleyicinin basitleştirilmiş bir modelini kullanarak çalışma şekli.
Bazel'ın aşağıdakileri bilmesi gerekir:
- 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çlara giden 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ğlantı oluşturma, 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 oluşturabilirsiniz.
CcToolchainConfigInfo
, ihtiyacınız olan ek düzeyde
ayrıntı düzeyini kontrol eder. Varsayılan olarak
Bazel, derlemeniz için CcToolchainConfigInfo
uygulamasını otomatik olarak yapılandırır ancak
manuel olarak yapılandırma seçeneğiniz vardır. Bunun için bir Starlark kuralına ihtiyacınız var
CcToolchainConfigInfo
sağlayan ve
Kuralınıza cc_toolchain
öğesinin toolchain_config
özelliğini ekleyin.
Ş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
üzerinden C++ hedefine iletir.
Örneğin,
cc_binary
veya cc_library
için şu bilgiler gerekiyor:
- Kullanılacak derleyici veya bağlayıcı
- Derleyici/bağ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ü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ılar cc_toolchain
içinde beyan edilir
hedefi belirleyebilirsiniz. Ö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 Şunu kullanarak:--crosstool_top
seçeneği.cc_toolchain_suite
hedefi birden fazla araç zincirine referans veriyor. İlgili içeriği oluşturmak için kullanılan--cpu
ve--compiler
işaretlerinin değerleri, bunlardan hangisinin Araç zincirleri yalnızca--cpu
işaret değerine göre seçilir veya--cpu | --compiler
değerine göre. Seçim süreci şöyle olur:--compiler
seçeneği belirtilirse Bazel,cc_toolchain_suite.toolchains
içinden ilgili giriş özelliğini--cpu | --compiler
ile değiştirin. 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 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ı, ayrıntılı olarak belgelenen birden çok benzersiz işlemi destekler
Bazel kaynak koduna bakın.
Ö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 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.
Bir özellik, Starlark'ın tamamen ayrıştırılmasına olanak tanıyan adla belirtilmiştir
kural yapılandırması oluşturun. 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ış. - Bazel veya kural sahibi bu özelliği açıkça etkinleştirir.
- 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
özellikleri etkinleştirebilirsiniz. Ö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 belirtir. Bir özelliğin etkinleştirilmesi, içerdiği tüm özelliklerin de dolaylı olarak etkinleştirilmesini sağlar (yinelemeli olarak çalışır). Ayrıca, işlevselliklerinin yaygın alt kümelerini dezenfektanların ortak parçaları gibi özellikler bulunur. İma ediliyor özellikleri 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ı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üzeyinde. Bir özellik, birden çok işaret grubu belirtebilir.
with_features belirtildiğinde, ayarlanan işaret yalnızca genişletilir
(en az bir with_feature_set varsa derleme komutuna ekleme)
belirtilen features özelliklerindeki tüm özellikler
ve not_features sayfasında belirtilen tüm özellikler etkin durumda olmalıdır.
devre dışı bırakıldı.
with_features belirtilmezse bayrak grubu şu şekilde olur:
koşulsuz olarak uygulanır.
|
İşlemler
Eylemler, söz konusu koşulların sözleşmeye uygun olarak değiştirilmesine
Bu eylem, eylemin nasıl gerçekleştirileceği kabul edilmeden yürütülür.
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.
Ö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ü temsil eder. Örneğin:
derleme veya bağlama. 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çindir.
|
assemble
|
Ön işlemeden derleyin. Genellikle .s dosyaları içindir.
|
Derleyici işlemleri
İşlem | Açıklama |
cc-flags-make-variable
|
CC_FLAGS öğesini Genrules'a yayar.
|
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. 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ını içeren paylaşılan bir kitaplığı bağlayın. |
c++-link-nodeps-dynamic-library
|
Yalnızca cc_library kaynak içeren paylaşılan bir kitaplığı bağlayın.
|
c++-link-executable
|
Çalıştırılmaya hazır son bir kitaplık 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'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. Şununla aynıdır: özelliğini kullanabilirsiniz. |
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,
özellikleridir ve bazı Bazel işlemleri için belirli işaretlemeler veya
amaç, gereksiz action_config
+feature
çiftler. Tek bir özelliğin birden fazla action_config
üzerinden paylaşılması genellikle
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
(bir işlemin mülklerinin) mantığını yerine getirir.
araç zincirinde tek bir yerde net bir şekilde açıklanmalıdır.
Araç oluşturucu kullanma
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 (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
geçerlidir
Bazel eylemi için gereken araç yolu ve yürütme gereksinimlerini. 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
Ö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"],
),
]
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şaretlemeleri
bir amaca hizmet eder. Ö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.
İşaretleme grupları, gösterildikleri sırayla derleme komutuna genişletilir yukarıdan aşağıya, soldan sağa.
Derlemeye eklendiğinde farklı değerlerle tekrarlanması gereken işaretler için
komutuna dahil etmek 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. Tümü
bayrak grubu bildiriminin gövdesindeki flag'ler (veya flag_group
'ler)
oluşturabilirsiniz. Ö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}"],
)
ş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
İşaretleme grupları, belirli bir öğenin varlığına göre koşullu genişletmeyi destekler
değişkeninin veya alanının expand_if_available
, expand_if_not_available
expand_if_true
, expand_if_false
veya expand_if_equal
özellikleri. Ö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 | Çıkarılacak yapı. |
output_file
|
compile | Derleme çıktısı. |
output_assembly_file
|
compile | Yayınlanan derleme dosyası. Yalnızca
compile işlemi, genellikle
--save_temps işareti. İç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
|
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ı.
|
stripotps
|
şerit | stripopts dizisi.
|
legacy_compile_flags
|
compile | Eski işaretler dizisi
CROSSTOOL alanları (ör. compiler_flag ,
optional_compiler_flag , cxx_flag ve
optional_cxx_flag .
|
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ğ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ı | Bazel tarafından komut satırı uzunluk sınırını aştığını gösterir. |
output_execpath
|
bağlantı | Bağlayıcı çıktısını yürütme. |
generate_interface_library
|
bağlantı | Arayüz kitaplığının gerekip gerekmediğine bağlı olarak "yes" veya "no"
oluşturabilirsiniz.
|
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şturma 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şturulmalıdır (Bazel seçeneği "--force_pic" geçti). |
strip_debug_symbols
|
bağlantı | Bu değişkenin varlığı, hata ayıklama işleminin simgelerinin kaldırılması gerekir. |
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
|
derle, bağlantı oluştur, derle, 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 bunun yerine .dwo dosyasında olacak
(.o dosya) ve derleyici ile bağlayıcının bunu bilmesi gerekir.
|
fdo_instrument_path
|
derle, bağlantı oluştur, derle, bağlantı | FDO araç profilinin depolandığı dizinin yolu. |
fdo_profile_path
|
compile | FDO profilinin yolu. |
fdo_prefetch_hints_path
|
compile | Önbellek önceden getirme profilinin yolu. |
csfdo_instrument_path
|
derle, bağlantı oluştur, derle, bağlantı | Bağlama duyarlı FDO'yu depolayan dizine giden yol ödeme profili oluşturun. |
İyi bilinen özellikler
Aşağıda özelliklere ve bunların etkinleştirilmesine ilişkin referans verilmiştir koşullar.
Ö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 belirtilirse ve
etkin derleme modudur ve mevcut derleme modu
--fission işareti.
|
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. 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ı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ç zinciri, dinamik kitaplıklar için PIC nesnelerini kullanacağını bilir. PIC derlemesi gerektiğinde "pic" değişkeni mevcuttur. Etkin değilse varsayılan olarak ve "--force_pic" geçildiğinde Bazel, "supports_pic" değeri için istekte bulunur 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 göre varsayılan olarak etkindir. |
no_legacy_features
|
Bazel'in C++ yapılandırmasını devre dışı bırakır. Şu listenin daha fazla bilgi edineceksiniz. |
Eski özelliklere yama uygulama mantığı
Bazel, geriye dönük adımlar için araç zincirinin özelliklerinde aşağıdaki değişiklikleri uygular: uyumluluk:
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
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
pic
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
per_object_debug_info
(mevcut değilse) özelliği 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 - 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 - Araç zincirinin en üstüne
fdo_optimize
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
cs_fdo_instrument
(mevcut değilse) özelliği 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 - Araç zincirinin en üstüne
shared_flag
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
linkstamps
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
output_execpath_flags
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
runtime_library_search_directories
(mevcut değilse) özelliği 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 - Araç zincirinin en üstüne
force_pic_flags
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
user_link_flags
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
legacy_link_flags
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
static_libgcc
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
fission_support
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
strip_debug_symbols
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
coverage
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
llvm_coverage_map_format
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
gcc_coverage_map_format
(mevcut değilse) özelliği ekler - Araç zincirinin en altına
fully_static_link
(mevcut değilse) özelliği ekler - Araç zincirinin en altına
user_compile_flags
(mevcut değilse) özelliği 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 - Araç zincirinin en altına
compiler_output_flags
(mevcut değilse) özelliği ekler
Bu, uzun bir özellik listesidir. Plan, onlardan bir kez kurtulmak
Starlark'taki Crosstool:
tamamlandı. Meraklı okuyucular için uygulamayı şuradan görebilirsiniz:
CppActionConfigs,
Üretim araç zincirleri için de
no_legacy_features
araç zincirini daha
bağımsız hale getiriyor.