Skip to content

Commit 27556f0

Browse files
committed
[ATfL][build.sh] Have the clang and flang binaries bolted
This feature is turned OFF by default. Some preparations on the CI side may be required.
1 parent cb56cbe commit 27556f0

2 files changed

Lines changed: 56 additions & 2 deletions

File tree

arm-software/linux/build.sh

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ fi
5151
OS_NAME=${OS_NAME:-"linux"}
5252
TAR_NAME=${TAR_NAME:-"atfl-${ATFL_VERSION}-${OS_NAME}-$(uname -m).tar.gz"}
5353
ATFL_ASSERTIONS=${ATFL_ASSERTIONS:-"ON"}
54+
ATFL_BOLTED=${ATFL_BOLTED:-"OFF"}
5455
ATFL_TARGET_TRIPLE=${ATFL_TARGET_TRIPLE:-"$(uname -m)-unknown-linux-gnu"}
5556
ARM_TOOLCHAIN_ID=$(cmake -DLLVM_TOOLCHAIN_PROJECT_CODE=L -P "${SOURCES_DIR}"/arm-software/shared/cmake/generate_toolchain_id.cmake)
5657
PROCESSOR_COUNT=$(getconf _NPROCESSORS_ONLN)
@@ -63,6 +64,7 @@ STAGES=(
6364
"static_libomp_build"
6465
)
6566
ZLIB_STATIC_PATH=${ZLIB_STATIC_PATH:-"/usr/lib/$(uname -m)-linux-gnu/libz.a"}
67+
RELOCS_LINKER_FLAGS="-Wl,--emit-relocs,-znow"
6668
COMMON_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

arm-software/linux/build.sh-HOWTO.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,8 @@ The `build.sh` script reads the following environment variables:
165165
(default: number of the available CPU cores)
166166
- `ATFL_ASSERTIONS` - Enable assertions in the build ON/OFF
167167
(default: ON), set this to `OFF` when doing a proper release (not nightly) build
168+
- `ATFL_BOLTED` - Specify whether the clang and flang compilers should be bolted
169+
(default: OFF), set this to `ON` when doing a proper release (not nightly) build
168170
- `ATFL_TARGET_TRIPLE` - Specify the default target triple
169171
(default: aarch64-unknown-linux-gnu), Set it to aarch64-amazon-linux when building for Amazon Linux
170172
- `OS_NAME` - Specify the OS name

0 commit comments

Comments
 (0)