5151OS_NAME=${OS_NAME:- " linux" }
5252TAR_NAME=${TAR_NAME:- " atfl-${ATFL_VERSION} -${OS_NAME} -$( uname -m) .tar.gz" }
5353ATFL_ASSERTIONS=${ATFL_ASSERTIONS:- " ON" }
54+ ATFL_BOLTED=${ATFL_BOLTED:- " OFF" }
5455ATFL_TARGET_TRIPLE=${ATFL_TARGET_TRIPLE:- " $( uname -m) -unknown-linux-gnu" }
5556ARM_TOOLCHAIN_ID=$( cmake -DLLVM_TOOLCHAIN_PROJECT_CODE=L -P " ${SOURCES_DIR} " /arm-software/shared/cmake/generate_toolchain_id.cmake)
5657PROCESSOR_COUNT=$( getconf _NPROCESSORS_ONLN)
@@ -63,6 +64,7 @@ STAGES=(
6364 " static_libomp_build"
6465)
6566ZLIB_STATIC_PATH=${ZLIB_STATIC_PATH:- " /usr/lib/$( uname -m) -linux-gnu/libz.a" }
67+ RELOCS_LINKER_FLAGS=" -Wl,--emit-relocs,-znow"
6668COMMON_LINKER_FLAGS=" -Wl,--build-id"
6769
6870# Safe to use by all stages
@@ -285,6 +287,8 @@ Environment Variables:
285287 (default: ${PARALLEL_JOBS} )
286288 ATFL_ASSERTIONS Enable assertions in the build ON/OFF
287289 (default: ${ATFL_ASSERTIONS} )
290+ ATFL_BOLTED Specify whether the clang and flang compilers should be bolted
291+ (default: ${ATFL_BOLTED} )
288292 ATFL_VERSION Specify the version string
289293 (default: ${ATFL_VERSION} )
290294 ATFL_TARGET_TRIPLE Specify the default target triple
@@ -416,7 +420,7 @@ libcpp_build() {
416420 print_forced_cmake_flags_cache " LIBUNWIND_NOSHARED_CMAKE_FLAGS"
417421 } > flags.cmake
418422
419- local libs=" -rtlib=compiler-rt -unwindlib=libunwind -Wl,--as-needed ${COMMON_LINKER_FLAGS} "
423+ local libs=" -rtlib=compiler-rt -unwindlib=libunwind -Wl,--as-needed ${COMMON_LINKER_FLAGS} ${RELOCS_LINKER_FLAGS} "
420424 run_command cmake " ${CMAKE_ARGS[@]} " -G Ninja " ${SOURCES_DIR} /runtimes" \
421425 -C flags.cmake \
422426 -DBUILD_SHARED_LIBS=False \
@@ -454,6 +458,33 @@ product_build() {
454458 cd " ${BUILD_DIR} /stage/product_build"
455459 bootstrap_compiler_default_config
456460
461+ local libs=" -L${ATFL_DIR} /lib -rtlib=compiler-rt -unwindlib=libunwind -Wl,--as-needed -stdlib=libc++ ${COMMON_LINKER_FLAGS} "
462+ local cmake_caches=" ${BUILD_DIR} /stage/product_build/cmake_caches"
463+
464+ mkdir -p " ${cmake_caches} "
465+ cp " ${SOURCES_DIR} /flang/cmake/caches/BOLT.cmake" " ${cmake_caches} "
466+ { print_forced_cmake_flags_cache " COMMON_CMAKE_FLAGS"
467+ print_forced_cmake_flags_cache " USE_RPATH_CMAKE_FLAGS"
468+ print_forced_cmake_flags_cache " COMPILER_CMAKE_FLAGS"
469+ print_forced_cmake_flags_cache " COMPILER_RT_CMAKE_FLAGS"
470+ print_forced_cmake_flags_cache " FLANG_RT_CMAKE_FLAGS"
471+ print_forced_cmake_flags_cache " LIBOMP_SHARED_CMAKE_FLAGS"
472+ print_forced_cmake_flags_cache " LIBUNWIND_SHARED_CMAKE_FLAGS"
473+ print_forced_cached_flag " CMAKE_EXE_LINKER_FLAGS:STRING" " \" ${libs} ${RELOCS_LINKER_FLAGS} \" "
474+ print_forced_cached_flag " CMAKE_MODULE_LINKER_FLAGS:STRING" " \" ${libs} ${RELOCS_LINKER_FLAGS} \" "
475+ print_forced_cached_flag " CMAKE_SHARED_LINKER_FLAGS:STRING" " \" ${libs} ${RELOCS_LINKER_FLAGS} \" "
476+ print_forced_cached_flag " LLVM_ENABLE_RUNTIMES:STRING" " \" compiler-rt;flang-rt;libunwind;openmp\" "
477+ print_forced_cached_flag " RUNTIMES_CMAKE_ARGS:STRING" " \" -DCMAKE_C_COMPILER=${ATFL_DIR} /bin/clang;-DCMAKE_CXX_COMPILER=${ATFL_DIR} /bin/clang++;-DCMAKE_Fortran_COMPILER=${ATFL_DIR} /bin/flang;-DCMAKE_CXX_FLAGS=-stdlib++-isystem${ATFL_DIR} /include/c++/v1 -D_LIBCPP_VERBOSE_ABORT_NOT_NOEXCEPT;-DCMAKE_EXE_LINKER_FLAGS=${libs} ;-DCMAKE_MODULE_LINKER_FLAGS=${libs} ;-DCMAKE_SHARED_LINKER_FLAGS=${libs} \" "
478+ } >> ${cmake_caches} /BOLT.cmake
479+
480+ if [[ " ${RELEASE_FLAGS} " == " true" ]]; then
481+ print_forced_cached_flag " LLVM_APPEND_VC_REV:BOOL" OFF >> ${cmake_caches} /BOLT.cmake
482+ else
483+ print_forced_cached_flag " LLVM_APPEND_VC_REV:BOOL" ON >> ${cmake_caches} /BOLT.cmake
484+ fi
485+ mkdir -p tools/clang/stage2-instrumented-bins/lib
486+ cp -d " ${BUILD_DIR} " /stage/libcpp_build/lib/lib* tools/clang/stage2-instrumented-bins/lib
487+
457488 { print_forced_cmake_flags_cache " COMMON_CMAKE_FLAGS"
458489 print_forced_cmake_flags_cache " USE_BOOTSTRAP_CMAKE_FLAGS"
459490 print_forced_cmake_flags_cache " USE_RPATH_CMAKE_FLAGS"
@@ -465,8 +496,9 @@ product_build() {
465496 print_forced_cmake_flags_cache " BOLT_CMAKE_FLAGS"
466497 } > flags.cmake
467498
468- local libs=" -L${ATFL_DIR} /lib -rtlib=compiler-rt -unwindlib=libunwind -Wl,--as-needed -stdlib=libc++ ${COMMON_LINKER_FLAGS} "
469499 run_command cmake " ${CMAKE_ARGS[@]} " -G Ninja " ${SOURCES_DIR} /llvm" \
500+ -DPGO_BUILD_CONFIGURATION=" ${cmake_caches} /BOLT.cmake" \
501+ -C " ${SOURCES_DIR} /flang/cmake/caches/BOLT-PGO.cmake" \
470502 -C flags.cmake \
471503 -DBUILD_SHARED_LIBS=False \
472504 -DCMAKE_BUILD_TYPE=Release \
@@ -484,8 +516,22 @@ product_build() {
484516 run_command cmake --install . 2>&1 | tee -a " ${LOGS_DIR} /product.txt"
485517 cp -d " ${ATFL_DIR} " /lib/clang/* /lib/" ${ATFL_TARGET_TRIPLE} " /libflang_rt* \
486518 " ${ATFL_DIR} /lib/${ATFL_TARGET_TRIPLE} "
519+ if [[ " ${ATFL_BOLTED} " == " ON" ]]; then
520+ run_command ninja stage2-flang-bolt 2>&1 | tee " ${LOGS_DIR} /product-bolted.txt"
521+ fi
487522 echo " -Wl,-rpath=${ATFL_DIR} /lib" >> " ${BUILD_DIR} " /bootstrap_compiler/bin/clang++.cfg
488523 run_test_command " ${LOGS_DIR} /product_check_all.xml" " ${LOGS_DIR} /product.txt" check-all
524+ if [[ " ${ATFL_BOLTED} " == " ON" ]]; then
525+ run_test_command " ${LOGS_DIR} /product_bolted_check_flang.xml" " ${LOGS_DIR} /product-bolted.txt" stage2-check-flang
526+ run_test_command " ${LOGS_DIR} /product_bolted_check_clang.xml" " ${LOGS_DIR} /product-bolted.txt" stage2-check-clang
527+ # We insist that clang and flang are symlinks. This should fail if they are not.
528+ local clang_name=" $( readlink " ${ATFL_DIR} /bin/clang" ) "
529+ local flang_name=" $( readlink " ${ATFL_DIR} /bin/flang" ) "
530+ mv " ${ATFL_DIR} /bin/${clang_name} " " ${ATFL_DIR} /bin/${clang_name} .not_bolted"
531+ mv " ${ATFL_DIR} /bin/${flang_name} " " ${ATFL_DIR} /bin/${flang_name} .not_bolted"
532+ cp " ${BUILD_DIR} /stage/product_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/bin/${clang_name} " " ${ATFL_DIR} /bin"
533+ cp " ${BUILD_DIR} /stage/product_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/bin/${flang_name} " " ${ATFL_DIR} /bin"
534+ fi
489535
490536 bootstrap_compiler_default_config
491537}
@@ -542,6 +588,12 @@ check_lit_xml_results() {
542588 # OpenMP tests do not get executed currently
543589 # "${LOGS_DIR}/check_openmp.xml"
544590 )
591+ if [[ " ${ATFL_BOLTED} " == " ON" ]]; then
592+ result_files+=(
593+ " ${LOGS_DIR} /product_bolted_check_flang.xml"
594+ " ${LOGS_DIR} /product_bolted_check_clang.xml"
595+ )
596+ fi
545597
546598 echo_bold " Checking lit XML test results...."
547599 for result_file in " ${result_files[@]} " ; do
0 commit comments