Skip to content

Commit 929539b

Browse files
Merge branch 'master' into remove-strideable-closed-range-operator
2 parents c599749 + 1db29e7 commit 929539b

File tree

1,632 files changed

+26272
-17845
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,632 files changed

+26272
-17845
lines changed

CMakeLists.txt

Lines changed: 110 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,10 @@ option(SWIFT_FORCE_OPTIMIZED_TYPECHECKER "Override the optimization setting of
176176
the type checker so that it always compiles with optimization. This eases
177177
debugging after type checking occurs by speeding up type checking" FALSE)
178178

179+
option(SWIFT_ENABLE_PARSEABLE_MODULE_INTERFACES
180+
"Generate .swiftinterface files alongside .swiftmodule files"
181+
TRUE)
182+
179183
#
180184
# User-configurable Android specific options.
181185
#
@@ -395,23 +399,37 @@ endif()
395399

396400
precondition(CMAKE_SYSTEM_NAME)
397401
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
402+
set(SWIFT_BUILD_SYNTAXPARSERLIB_default TRUE)
398403
set(SWIFT_BUILD_SOURCEKIT_default TRUE)
399404
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
400405
if(EXISTS ${SWIFT_PATH_TO_LIBDISPATCH_SOURCE})
406+
set(SWIFT_BUILD_SYNTAXPARSERLIB_default TRUE)
401407
set(SWIFT_BUILD_SOURCEKIT_default TRUE)
402408
else()
409+
set(SWIFT_BUILD_SYNTAXPARSERLIB_default FALSE)
403410
set(SWIFT_BUILD_SOURCEKIT_default FALSE)
404411
endif()
405412
else()
413+
set(SWIFT_BUILD_SYNTAXPARSERLIB_default FALSE)
406414
set(SWIFT_BUILD_SOURCEKIT_default FALSE)
407415
endif()
416+
option(SWIFT_BUILD_SYNTAXPARSERLIB
417+
"Build the Swift Syntax Parser library"
418+
${SWIFT_BUILD_SYNTAXPARSERLIB_default})
408419
option(SWIFT_BUILD_SOURCEKIT
409420
"Build SourceKit"
410421
${SWIFT_BUILD_SOURCEKIT_default})
411422
option(SWIFT_ENABLE_SOURCEKIT_TESTS
412423
"Enable running SourceKit tests"
413424
${SWIFT_BUILD_SOURCEKIT_default})
414425

426+
if(NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin" AND
427+
(SWIFT_BUILD_SYNTAXPARSERLIB OR SWIFT_BUILD_SOURCEKIT))
428+
set(SWIFT_NEED_EXPLICIT_LIBDISPATCH TRUE)
429+
else()
430+
set(SWIFT_NEED_EXPLICIT_LIBDISPATCH FALSE)
431+
endif()
432+
415433
#
416434
# Assume a new enough ar to generate the index at construction time. This avoids
417435
# having to invoke ranlib as a secondary command.
@@ -876,6 +894,96 @@ if (LLVM_ENABLE_DOXYGEN)
876894
message(STATUS "Doxygen: enabled")
877895
endif()
878896

897+
if(SWIFT_NEED_EXPLICIT_LIBDISPATCH)
898+
if(CMAKE_C_COMPILER_ID STREQUAL Clang AND
899+
CMAKE_C_COMPILER_VERSION VERSION_GREATER 3.8
900+
OR LLVM_USE_SANITIZER)
901+
set(SWIFT_LIBDISPATCH_C_COMPILER ${CMAKE_C_COMPILER})
902+
set(SWIFT_LIBDISPATCH_CXX_COMPILER ${CMAKE_CXX_COMPILER})
903+
elseif(${CMAKE_SYSTEM_NAME} STREQUAL ${CMAKE_HOST_SYSTEM_NAME})
904+
set(SWIFT_LIBDISPATCH_C_COMPILER ${PATH_TO_CLANG_BUILD}/bin/clang)
905+
set(SWIFT_LIBDISPATCH_CXX_COMPILER ${PATH_TO_CLANG_BUILD}/bin/clang++)
906+
else()
907+
message(SEND_ERROR "libdispatch requires a newer clang compiler (${CMAKE_C_COMPILER_VERSION} < 3.9)")
908+
endif()
909+
910+
include(ExternalProject)
911+
ExternalProject_Add(libdispatch
912+
SOURCE_DIR
913+
"${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}"
914+
CMAKE_ARGS
915+
-DCMAKE_AR=${CMAKE_AR}
916+
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
917+
-DCMAKE_C_COMPILER=${SWIFT_LIBDISPATCH_C_COMPILER}
918+
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
919+
-DCMAKE_CXX_COMPILER=${SWIFT_LIBDISPATCH_CXX_COMPILER}
920+
-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
921+
-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
922+
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
923+
-DCMAKE_LINKER=${CMAKE_LINKER}
924+
-DCMAKE_RANLIB=${CMAKE_RANLIB}
925+
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
926+
-DENABLE_SWIFT=NO
927+
-DENABLE_TESTING=NO
928+
INSTALL_COMMAND
929+
# NOTE(compnerd) provide a custom install command to
930+
# ensure that we strip out the DESTDIR environment
931+
# from the sub-build
932+
${CMAKE_COMMAND} -E env --unset=DESTDIR ${CMAKE_COMMAND} --build . --target install
933+
STEP_TARGETS
934+
install
935+
BUILD_BYPRODUCTS
936+
<INSTALL_DIR>/lib/${CMAKE_SHARED_LIBRARY_PREFIX}dispatch${CMAKE_SHARED_LIBRARY_SUFFIX}
937+
<INSTALL_DIR>/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}dispatch${CMAKE_IMPORT_LIBRARY_SUFFIX}
938+
<INSTALL_DIR>/lib/${CMAKE_SHARED_LIBRARY_PREFIX}BlocksRuntime${CMAKE_SHARED_LIBRARY_SUFFIX}
939+
<INSTALL_DIR>/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}BlocksRuntime${CMAKE_IMPORT_LIBRARY_SUFFIX}
940+
BUILD_ALWAYS
941+
1)
942+
943+
ExternalProject_Get_Property(libdispatch install_dir)
944+
945+
# CMake does not like the addition of INTERFACE_INCLUDE_DIRECTORIES without
946+
# the directory existing. Just create the location which will be populated
947+
# during the installation.
948+
file(MAKE_DIRECTORY ${install_dir}/include)
949+
950+
add_library(dispatch SHARED IMPORTED)
951+
set_target_properties(dispatch
952+
PROPERTIES
953+
IMPORTED_LOCATION
954+
${install_dir}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}dispatch${CMAKE_SHARED_LIBRARY_SUFFIX}
955+
IMPORTED_IMPLIB
956+
${install_dir}/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}dispatch${CMAKE_IMPORT_LIBRARY_SUFFIX}
957+
INTERFACE_INCLUDE_DIRECTORIES
958+
${install_dir}/include)
959+
960+
add_library(BlocksRuntime SHARED IMPORTED)
961+
set_target_properties(BlocksRuntime
962+
PROPERTIES
963+
IMPORTED_LOCATION
964+
${install_dir}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}BlocksRuntime${CMAKE_SHARED_LIBRARY_SUFFIX}
965+
IMPORTED_IMPLIB
966+
${install_dir}/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}BlocksRuntime${CMAKE_IMPORT_LIBRARY_SUFFIX}
967+
INTERFACE_INCLUDE_DIRECTORIES
968+
${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime)
969+
970+
add_dependencies(dispatch libdispatch-install)
971+
add_dependencies(BlocksRuntime libdispatch-install)
972+
973+
swift_install_in_component(sourcekit-inproc
974+
FILES
975+
$<TARGET_FILE:dispatch>
976+
$<TARGET_FILE:BlocksRuntime>
977+
DESTINATION
978+
lib${LLVM_LIBDIR_SUFFIX})
979+
980+
# FIXME(compnerd) this should be taken care of by the
981+
# INTERFACE_INCLUDE_DIRECTORIES above
982+
include_directories(AFTER
983+
${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime
984+
${SWIFT_PATH_TO_LIBDISPATCH_SOURCE})
985+
endif()
986+
879987
#
880988
# Set up global CMake variables for API notes.
881989
#
@@ -908,8 +1016,9 @@ endif()
9081016
# https://bugs.swift.org/browse/SR-5975
9091017
add_subdirectory(stdlib)
9101018

1019+
add_subdirectory(include)
1020+
9111021
if(SWIFT_INCLUDE_TOOLS)
912-
add_subdirectory(include)
9131022
add_subdirectory(lib)
9141023

9151024
# Always include this after including stdlib/!
@@ -920,10 +1029,6 @@ endif()
9201029

9211030
add_subdirectory(utils)
9221031

923-
if(SWIFT_BUILD_DYNAMIC_STDLIB AND SWIFT_INCLUDE_TESTS)
924-
add_subdirectory(tools/swift-reflection-test)
925-
endif()
926-
9271032
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
9281033
if(SWIFT_BUILD_PERF_TESTSUITE)
9291034
add_subdirectory(benchmark)

benchmark/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ set(SWIFT_BENCH_MODULES
4242
single-source/BinaryFloatingPointConversionFromBinaryInteger
4343
single-source/BinaryFloatingPointProperties
4444
single-source/BitCount
45+
single-source/Breadcrumbs
4546
single-source/ByteSwap
4647
single-source/COWTree
4748
single-source/COWArrayGuaranteedParameterOverhead
@@ -55,6 +56,7 @@ set(SWIFT_BENCH_MODULES
5556
single-source/CharacterProperties
5657
single-source/Chars
5758
single-source/ClassArrayGetter
59+
single-source/Codable
5860
single-source/Combos
5961
single-source/CountAlgo
6062
single-source/DataBenchmarks

benchmark/scripts/Benchmark_Driver

Lines changed: 57 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,51 @@ class LoggingReportFormatter(logging.Formatter):
261261
'{0} {1}{2}'.format(record.levelname, category, msg))
262262

263263

264+
class MarkdownReportHandler(logging.StreamHandler):
265+
r"""Write custom formatted messages from BenchmarkDoctor to the stream.
266+
267+
It works around StreamHandler's hardcoded '\n' and handles the custom
268+
level and category formatting for BenchmarkDoctor's check report.
269+
"""
270+
271+
def __init__(self, stream):
272+
"""Initialize the handler and write a Markdown table header."""
273+
super(MarkdownReportHandler, self).__init__(stream)
274+
self.setLevel(logging.INFO)
275+
self.stream.write('\n✅ | Benchmark Check Report\n---|---')
276+
self.stream.flush()
277+
278+
levels = {logging.WARNING: '\n⚠️', logging.ERROR: '\n⛔️',
279+
logging.INFO: ' <br><sub> '}
280+
categories = {'naming': '🔤', 'runtime': '⏱', 'memory': 'Ⓜ️'}
281+
quotes_re = re.compile("'")
282+
283+
def format(self, record):
284+
msg = super(MarkdownReportHandler, self).format(record)
285+
return (self.levels.get(record.levelno, '') +
286+
('' if record.levelno == logging.INFO else
287+
self.categories.get(record.name.split('.')[-1], '') + ' | ') +
288+
self.quotes_re.sub('`', msg))
289+
290+
def emit(self, record):
291+
msg = self.format(record)
292+
stream = self.stream
293+
try:
294+
if (isinstance(msg, unicode) and
295+
getattr(stream, 'encoding', None)):
296+
stream.write(msg.encode(stream.encoding))
297+
else:
298+
stream.write(msg)
299+
except UnicodeError:
300+
stream.write(msg.encode("UTF-8"))
301+
self.flush()
302+
303+
def close(self):
304+
self.stream.write('\n\n')
305+
self.stream.flush()
306+
super(MarkdownReportHandler, self).close()
307+
308+
264309
class BenchmarkDoctor(object):
265310
"""Checks that the benchmark conforms to the standard set of requirements.
266311
@@ -302,8 +347,9 @@ class BenchmarkDoctor(object):
302347
]
303348

304349
def __del__(self):
305-
"""Unregister handler on exit."""
306-
self.log.removeHandler(self.console_handler)
350+
"""Close log handlers on exit."""
351+
for handler in list(self.log.handlers):
352+
handler.close()
307353

308354
capital_words_re = re.compile('[A-Z][a-zA-Z0-9]+')
309355

@@ -407,20 +453,25 @@ class BenchmarkDoctor(object):
407453
range_i1, range_i2 = max_i1 - min_i1, max_i2 - min_i2
408454
normal_range = 15 # pages
409455
name = measurements['name']
456+
more_info = False
410457

411458
if abs(min_i1 - min_i2) > max(range_i1, range_i2, normal_range):
459+
more_info = True
412460
BenchmarkDoctor.log_memory.error(
413461
"'%s' varies the memory footprint of the base "
414462
"workload depending on the `num-iters`.", name)
415463

416464
if max(range_i1, range_i2) > normal_range:
465+
more_info = True
417466
BenchmarkDoctor.log_memory.warning(
418467
"'%s' has very wide range of memory used between "
419468
"independent, repeated measurements.", name)
420469

421-
BenchmarkDoctor.log_memory.debug(
422-
"%s mem_pages [i1, i2]: min=[%d, %d] 𝚫=%d R=[%d, %d]", name,
423-
*[min_i1, min_i2, abs(min_i1 - min_i2), range_i1, range_i2])
470+
if more_info:
471+
BenchmarkDoctor.log_memory.info(
472+
"'%s' mem_pages [i1, i2]: min=[%d, %d] 𝚫=%d R=[%d, %d]",
473+
name,
474+
*[min_i1, min_i2, abs(min_i1 - min_i2), range_i1, range_i2])
424475

425476
@staticmethod
426477
def _adjusted_1s_samples(runtime):
@@ -445,7 +496,7 @@ class BenchmarkDoctor(object):
445496
num_samples = self._adjusted_1s_samples(r.samples.min)
446497

447498
def capped(s):
448-
return min(s, 2048)
499+
return min(s, 200)
449500
run_args = [(capped(num_samples), 1), (capped(num_samples / 2), 2)]
450501
opts = self.driver.args.optimization
451502
opts = opts if isinstance(opts, list) else [opts]

benchmark/scripts/bench_code_size.py

Lines changed: 0 additions & 111 deletions
This file was deleted.

0 commit comments

Comments
 (0)