mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-15 21:45:19 +00:00
322 lines
11 KiB
Python
322 lines
11 KiB
Python
load("//Config:utils.bzl",
|
|
"library_configs",
|
|
"dynamic_library_configs",
|
|
)
|
|
|
|
text_section_items = [
|
|
"__text",
|
|
]
|
|
|
|
text_section_rename_linker_flags = [] #["-Wl,-rename_section,__TEXT,%s,__MEXT,%s" % (name, name) for name in text_section_items] + ["-Wl,-segprot,__MEXT,rx,rx"]
|
|
|
|
section_rename_linker_flags = text_section_rename_linker_flags
|
|
|
|
def apple_lib(
|
|
name,
|
|
visibility = ["PUBLIC"],
|
|
srcs = [],
|
|
headers = [],
|
|
exported_headers = [],
|
|
extra_xcode_files = [],
|
|
deps = [],
|
|
exported_deps = [],
|
|
additional_linker_flags = None,
|
|
exported_preprocessor_flags = [],
|
|
exported_linker_flags = [],
|
|
frameworks = [],
|
|
weak_frameworks = [],
|
|
swift_version = None,
|
|
modular = True,
|
|
compiler_flags = None,
|
|
platform_compiler_flags = None,
|
|
swift_compiler_flags = None,
|
|
warning_as_error = False,
|
|
suppress_warnings = False,
|
|
has_cpp = False,
|
|
framework = False):
|
|
swift_version = swift_version or native.read_config('swift', 'version')
|
|
swift_compiler_flags = swift_compiler_flags or []
|
|
|
|
resolved_frameworks = frameworks
|
|
|
|
if native.read_config("xcode", "beta") == "True":
|
|
warning_as_error = False
|
|
|
|
if platform_compiler_flags != None:
|
|
if compiler_flags != None:
|
|
fail("compiler_flags and platform_compiler_flags are mutually exclusive")
|
|
compiler_flags = []
|
|
for i in range(len(platform_compiler_flags)):
|
|
if warning_as_error:
|
|
platform_compiler_flags[i][1].append("-Werror")
|
|
elif suppress_warnings:
|
|
platform_compiler_flags[i][1].append("-w")
|
|
else:
|
|
compiler_flags = compiler_flags or []
|
|
if warning_as_error:
|
|
compiler_flags.append("-Werror")
|
|
elif suppress_warnings:
|
|
compiler_flags.append("-w")
|
|
|
|
if warning_as_error:
|
|
swift_compiler_flags.append("-warnings-as-errors")
|
|
elif suppress_warnings:
|
|
swift_compiler_flags.append("-suppress-warnings")
|
|
|
|
if framework:
|
|
additional_linker_flags = additional_linker_flags or []
|
|
if has_cpp:
|
|
linker_flags = [
|
|
"-lc++",
|
|
"-lz"
|
|
]
|
|
else:
|
|
linker_flags = []
|
|
|
|
if native.read_config("custom", "mode") == "project":
|
|
resolved_linker_flags = linker_flags + additional_linker_flags + ["-Wl,-install_name,@rpath/lib%s.dylib" % (name)]
|
|
resolved_frameworks = resolved_frameworks + ["$SDKROOT/System/Library/Frameworks/%s.framework" % x for x in weak_frameworks]
|
|
else:
|
|
resolved_linker_flags = linker_flags + additional_linker_flags + ["-Wl,-install_name,@rpath/%s.framework/%s" % (name, name)]
|
|
for framework in weak_frameworks:
|
|
resolved_linker_flags = resolved_linker_flags + ["-Wl,-weak_framework,%s" % framework]
|
|
|
|
resolved_linker_flags = resolved_linker_flags + section_rename_linker_flags
|
|
|
|
native.apple_library(
|
|
name = name + "",
|
|
srcs = srcs,
|
|
header_namespace = name,
|
|
module_name = name,
|
|
soname = "lib" + name + ".dylib",
|
|
headers = headers,
|
|
exported_headers = exported_headers,
|
|
deps = deps,
|
|
exported_deps = exported_deps,
|
|
extra_xcode_files = extra_xcode_files,
|
|
frameworks = resolved_frameworks,
|
|
visibility = visibility,
|
|
swift_version = swift_version,
|
|
configs = dynamic_library_configs(),
|
|
modular = modular,
|
|
compiler_flags = compiler_flags,
|
|
platform_compiler_flags = platform_compiler_flags,
|
|
swift_compiler_flags = swift_compiler_flags,
|
|
preferred_linkage = "shared",
|
|
#link_style = "static",
|
|
linker_flags = resolved_linker_flags,
|
|
)
|
|
else:
|
|
additional_linker_flags = additional_linker_flags or []
|
|
if has_cpp:
|
|
linker_flags = [
|
|
"-lc++",
|
|
"-lz"
|
|
]
|
|
else:
|
|
linker_flags = []
|
|
|
|
resolved_exported_linker_flags = exported_linker_flags + linker_flags + additional_linker_flags
|
|
|
|
if native.read_config("custom", "mode") == "project":
|
|
resolved_frameworks = resolved_frameworks + ["$SDKROOT/System/Library/Frameworks/%s.framework" % x for x in weak_frameworks]
|
|
else:
|
|
for framework in weak_frameworks:
|
|
resolved_exported_linker_flags = resolved_exported_linker_flags + ["-Wl,-weak_framework,%s" % framework]
|
|
|
|
native.apple_library(
|
|
name = name,
|
|
srcs = srcs,
|
|
headers = headers,
|
|
exported_headers = exported_headers,
|
|
deps = deps,
|
|
exported_deps = exported_deps,
|
|
exported_linker_flags = resolved_exported_linker_flags,
|
|
extra_xcode_files = extra_xcode_files,
|
|
frameworks = resolved_frameworks,
|
|
visibility = visibility,
|
|
swift_version = swift_version,
|
|
configs = library_configs(),
|
|
modular = modular,
|
|
compiler_flags = compiler_flags,
|
|
platform_compiler_flags = platform_compiler_flags,
|
|
swift_compiler_flags = swift_compiler_flags,
|
|
preferred_linkage = "static",
|
|
exported_preprocessor_flags = exported_preprocessor_flags,
|
|
)
|
|
|
|
def static_library(
|
|
name,
|
|
visibility = ["PUBLIC"],
|
|
has_cpp = False,
|
|
srcs = [],
|
|
headers = [],
|
|
exported_headers = [],
|
|
extra_xcode_files = [],
|
|
deps = [],
|
|
additional_linker_flags = None,
|
|
exported_preprocessor_flags = [],
|
|
exported_linker_flags = [],
|
|
frameworks = [],
|
|
weak_frameworks = [],
|
|
info_plist = None,
|
|
info_plist_substitutions = {},
|
|
modular = True,
|
|
compiler_flags = None,
|
|
platform_compiler_flags = None,
|
|
swift_compiler_flags = None,
|
|
warning_as_error = False,
|
|
suppress_warnings = True
|
|
):
|
|
apple_lib(
|
|
name = name,
|
|
srcs = srcs,
|
|
has_cpp = has_cpp,
|
|
exported_headers = exported_headers,
|
|
headers = headers,
|
|
modular = modular,
|
|
compiler_flags = compiler_flags,
|
|
platform_compiler_flags = platform_compiler_flags,
|
|
swift_compiler_flags = swift_compiler_flags,
|
|
extra_xcode_files = extra_xcode_files,
|
|
deps = deps,
|
|
additional_linker_flags = additional_linker_flags,
|
|
exported_preprocessor_flags = exported_preprocessor_flags,
|
|
exported_linker_flags = exported_linker_flags,
|
|
frameworks = frameworks,
|
|
weak_frameworks = weak_frameworks,
|
|
warning_as_error = warning_as_error,
|
|
suppress_warnings = suppress_warnings
|
|
)
|
|
|
|
def framework(
|
|
name,
|
|
visibility = ["PUBLIC"],
|
|
has_cpp = False,
|
|
srcs = [],
|
|
headers = [],
|
|
exported_headers = [],
|
|
extra_xcode_files = [],
|
|
deps = [],
|
|
exported_deps = [],
|
|
additional_linker_flags = None,
|
|
frameworks = [],
|
|
weak_frameworks = [],
|
|
info_plist = None,
|
|
info_plist_substitutions = {},
|
|
modular = True,
|
|
compiler_flags = None,
|
|
platform_compiler_flags = None,
|
|
swift_compiler_flags = None,
|
|
warning_as_error = False,
|
|
suppress_warnings = True):
|
|
apple_lib(
|
|
name = name,
|
|
srcs = srcs,
|
|
has_cpp = has_cpp,
|
|
exported_headers = exported_headers,
|
|
headers = headers,
|
|
modular = modular,
|
|
compiler_flags = compiler_flags,
|
|
platform_compiler_flags = platform_compiler_flags,
|
|
swift_compiler_flags = swift_compiler_flags,
|
|
extra_xcode_files = extra_xcode_files,
|
|
deps = deps,
|
|
exported_deps = exported_deps,
|
|
additional_linker_flags = additional_linker_flags,
|
|
frameworks = frameworks,
|
|
weak_frameworks = weak_frameworks,
|
|
warning_as_error = warning_as_error,
|
|
suppress_warnings = suppress_warnings,
|
|
framework = True
|
|
)
|
|
|
|
|
|
CXX_SRC_EXT = ["mm", "cpp", "S"]
|
|
def apple_cxx_lib(
|
|
srcs = [],
|
|
additional_exported_linker_flags = [],
|
|
**kwargs):
|
|
c_srcs, cxx_srcs = [], []
|
|
|
|
cxx_compile_flags = native.read_config("cxx", "cxxflags").split(" ")
|
|
cxx_compile_flags.append("-w")
|
|
|
|
for file_ in srcs:
|
|
if file_.split(".")[-1] in CXX_SRC_EXT:
|
|
cxx_srcs.append((file_, cxx_compile_flags))
|
|
else:
|
|
c_srcs.append(file_)
|
|
apple_lib(
|
|
srcs = c_srcs + cxx_srcs,
|
|
exported_linker_flags = [
|
|
"-lc++",
|
|
"-lz"
|
|
] + additional_exported_linker_flags,
|
|
**kwargs
|
|
)
|
|
|
|
def framework_binary_dependencies(names):
|
|
result = []
|
|
for name in names:
|
|
result.append(name + "#shared")
|
|
return result
|
|
|
|
def framework_bundle_dependencies(names):
|
|
result = []
|
|
if native.read_config("custom", "mode") == "project":
|
|
for name in names:
|
|
pass
|
|
else:
|
|
for name in names:
|
|
result.append(name + "#shared")
|
|
return result
|
|
|
|
def gen_header_targets(header_paths, prefix, flavor, source_rule, source_path):
|
|
result = dict()
|
|
for header_path in header_paths:
|
|
name = prefix + header_path.replace('/', '_sub_')
|
|
native.genrule(
|
|
name = name + flavor,
|
|
cmd = 'cp $(location :' + source_rule + ')/' + source_path + '/' + header_path + ' $OUT',
|
|
out = name,
|
|
)
|
|
result[header_path] = ':' + name + flavor
|
|
return result
|
|
|
|
def merge_maps(dicts):
|
|
result = dict()
|
|
for d in dicts:
|
|
for key in d:
|
|
if key in result and result[key] != d[key]:
|
|
fail(
|
|
"Conflicting files in file search paths. " +
|
|
"\"%s\" maps to both \"%s\" and \"%s\"." %
|
|
(key, result[key], d[key]),
|
|
)
|
|
result.update(d)
|
|
return result
|
|
|
|
def basename(p):
|
|
return p.rpartition("/")[-1]
|
|
|
|
def glob_map(glob_results):
|
|
result = dict()
|
|
for path in glob_results:
|
|
file_name = basename(path)
|
|
if file_name in result:
|
|
fail('\"%s\" maps to both \"%s\" and \"%s\"' % (file_name, result[file_name], path))
|
|
result[file_name] = path
|
|
return result
|
|
|
|
def glob_sub_map(prefix, glob_specs, exclude = []):
|
|
result = dict()
|
|
for path in native.glob(glob_specs, exclude = exclude):
|
|
if not path.startswith(prefix):
|
|
fail('\"%s\" does not start with \"%s\"' % (path, prefix))
|
|
file_key = path[len(prefix):]
|
|
if file_key in result:
|
|
fail('\"%s\" maps to both \"%s\" and \"%s\"' % (file_key, result[file_key], path))
|
|
result[file_key] = path
|
|
return result
|