Skip to content
This repository was archived by the owner on Feb 26, 2025. It is now read-only.

Commit da0d653

Browse files
committed
[Weekly]: Merge from branch main of upstream
1 parent 70d889b commit da0d653

26 files changed

+695
-78
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,7 @@ __pycache__
1111
# IDEs
1212
.vscode
1313
compile_commands.json
14+
15+
# Downloaded FVPs
16+
/fvp/download/
17+
/fvp/install/

CHANGELOG.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,32 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
66

77
## [Unreleased]
88

9+
### Added
10+
- Armv8.1-M PACBTI library variants (#489).
11+
12+
### Changed
13+
- -nostartfiles required when using crt0-semihosting (#460).
14+
15+
## [19.0.0]
16+
17+
### Added
18+
- AArch32 v8-A and v8-R can now be targeted (#484) (#486).
19+
- Experimental support for building llvm-libc overlay package (#452).
20+
- Additional library variants for Armv7 (#464) (#491) (#494).
21+
- Additional multilib mappings for v7ve and Thumb target triples (#479) (#481).
22+
- Omax and OmaxLTO config files (#454).
23+
924
### Changed
1025
- Use unstable libc++ ABI (#294).
26+
- Merge v7-M and v7E-M library variants (#482).
27+
- AArch64 A-profile library made distinct (#468).
28+
29+
## [18.0.0]
30+
31+
### Added
32+
33+
- Documentation for the newlib overlay package (#399).
34+
- Support for C++ exceptions and RTTI added in the standard libraries (#339).
1135

1236
## [17.0.0]
1337

CMakeLists.txt

Lines changed: 152 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,14 @@ option(
134134
the tools every time you update llvm-project."
135135
ON
136136
)
137-
137+
set(
138+
FVP_INSTALL_DIR
139+
"${CMAKE_CURRENT_SOURCE_DIR}/fvp/install" CACHE STRING
140+
"The directory in which the FVP models are installed. These are not
141+
included in this repository, but can be downloaded by the script
142+
fvp/get_fvps.sh"
143+
)
144+
set(FVP_CONFIG_DIR "${CMAKE_CURRENT_SOURCE_DIR}/fvp/config")
138145
set(LLVM_TOOLCHAIN_C_LIBRARY
139146
"picolibc" CACHE STRING
140147
"Which C library to use."
@@ -393,6 +400,19 @@ if(LLVM_TOOLCHAIN_C_LIBRARY STREQUAL llvmlibc)
393400
# find one for every libc type. We have no current setup to run the LLVM
394401
# libc test suite.
395402
add_custom_target(check-llvmlibc)
403+
404+
# LLVM libc lacks a configuration for AArch64, but the AArch32 one works
405+
# fine. However, setting the configuration for both architectures to the
406+
# arm config directory means the baremetal config.json is never loaded,
407+
# as it resides in the directory above. To ensure both are used, copy
408+
# them to the same location and point libc to that.
409+
set(LIBC_CFG_DIR ${CMAKE_BINARY_DIR}/llvmlibc-config)
410+
file(COPY
411+
${llvmproject_SOURCE_DIR}/libc/config/baremetal/config.json
412+
${llvmproject_SOURCE_DIR}/libc/config/baremetal/arm/.
413+
DESTINATION
414+
${LIBC_CFG_DIR}
415+
)
396416
endif()
397417

398418
add_subdirectory(
@@ -632,7 +652,7 @@ set(LLVM_DEFAULT_EXTERNAL_LIT "${LLVM_BINARY_DIR}/bin/llvm-lit")
632652

633653
add_custom_target(check-newlib) # FIXME: put things in this
634654

635-
function(get_test_executor_params target_triple qemu_machine qemu_cpu qemu_params)
655+
function(get_qemu_params target_triple qemu_machine qemu_cpu qemu_params)
636656
if(target_triple MATCHES "^aarch64")
637657
set(qemu_command "qemu-system-aarch64")
638658
else()
@@ -656,6 +676,24 @@ function(get_test_executor_params target_triple qemu_machine qemu_cpu qemu_param
656676
set(test_executor_params "${test_executor_params}" PARENT_SCOPE)
657677
endfunction()
658678

679+
function(get_fvp_params fvp_model fvp_config)
680+
set(
681+
test_executor_params
682+
--fvp-install-dir ${FVP_INSTALL_DIR}
683+
--fvp-config-dir ${FVP_CONFIG_DIR}
684+
--fvp-model ${fvp_model}
685+
)
686+
string(REPLACE " " ";" fvp_config_list ${fvp_config})
687+
foreach(cfg ${fvp_config_list})
688+
set(
689+
test_executor_params
690+
${test_executor_params}
691+
--fvp-config ${cfg}
692+
)
693+
endforeach()
694+
set(test_executor_params "${test_executor_params}" PARENT_SCOPE)
695+
endfunction()
696+
659697
function(
660698
add_picolibc
661699
directory
@@ -671,6 +709,7 @@ function(
671709
default_ram_addr
672710
default_ram_size
673711
default_stack_size
712+
run_tests
674713
)
675714
if(CMAKE_INSTALL_MESSAGE STREQUAL NEVER)
676715
set(MESON_INSTALL_QUIET "--quiet")
@@ -753,10 +792,12 @@ function(
753792
# only in tests step, otherwise, they would be built before install.
754793
ExternalProject_Add_StepDependencies(picolibc_${variant} test compiler_rt_${variant}-install)
755794

756-
add_custom_target(check-picolibc-${variant})
757-
add_dependencies(check-picolibc-${variant} picolibc_${variant}-test)
758-
add_dependencies(check-picolibc check-picolibc-${variant})
759-
add_dependencies(llvm-toolchain-runtimes picolibc_${variant})
795+
if(run_tests)
796+
add_custom_target(check-picolibc-${variant})
797+
add_dependencies(check-picolibc-${variant} picolibc_${variant}-test)
798+
add_dependencies(check-picolibc check-picolibc-${variant})
799+
add_dependencies(llvm-toolchain-runtimes picolibc_${variant})
800+
endif()
760801
endfunction()
761802

762803
function(
@@ -913,7 +954,7 @@ function(
913954
${common_cmake_args}
914955
-DLIBC_TARGET_TRIPLE=${target_triple}
915956
-DLIBC_HDRGEN_EXE=${LIBC_HDRGEN}
916-
-DLIBC_CONFIG_PATH=${llvmproject_SOURCE_DIR}/libc/config/baremetal/arm # llvmlibc has no AArch64 bare-metal configuration, but the AArch32 one is fine
957+
-DLIBC_CONFIG_PATH=${LIBC_CFG_DIR}
917958
-DLIBC_CONF_TIME_64BIT=ON
918959
-DLLVM_CMAKE_DIR=${LLVM_BINARY_DIR}/lib/cmake/llvm
919960
-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON
@@ -985,6 +1026,7 @@ macro(
9851026
default_ram_addr
9861027
default_ram_size
9871028
default_stack_size
1029+
run_tests
9881030
)
9891031
# It would be nice to just pass ${ARGN} to both the underlying functions,
9901032
# but that has the side effect of expanding any list arguments (e.g.
@@ -1006,6 +1048,7 @@ macro(
10061048
"${default_ram_addr}"
10071049
"${default_ram_size}"
10081050
"${default_stack_size}"
1051+
"${run_tests}"
10091052
)
10101053
elseif(LLVM_TOOLCHAIN_C_LIBRARY STREQUAL newlib)
10111054
add_newlib(
@@ -1317,9 +1360,12 @@ function(add_library_variant target_arch)
13171360
COMPILE_FLAGS
13181361
MULTILIB_FLAGS
13191362
PICOLIBC_BUILD_TYPE
1363+
EXECUTOR
13201364
QEMU_MACHINE
13211365
QEMU_CPU
13221366
QEMU_PARAMS
1367+
FVP_MODEL
1368+
FVP_CONFIG
13231369
BOOT_FLASH_ADDRESS
13241370
BOOT_FLASH_SIZE
13251371
FLASH_ADDRESS
@@ -1365,17 +1411,36 @@ function(add_library_variant target_arch)
13651411

13661412
set(directory "${TARGET_LIBRARIES_DIR}${library_subdir}/${parent_dir_name}/${variant}")
13671413
set(VARIANT_COMPILE_FLAGS "--target=${target_triple} ${VARIANT_COMPILE_FLAGS}")
1368-
get_test_executor_params(
1369-
"${target_triple}"
1370-
"${VARIANT_QEMU_MACHINE}"
1371-
"${VARIANT_QEMU_CPU}"
1372-
"${VARIANT_QEMU_PARAMS}"
1373-
)
1374-
set(
1375-
lit_test_executor
1376-
${CMAKE_CURRENT_SOURCE_DIR}/test-support/lit-exec-qemu.py
1377-
${test_executor_params}
1378-
)
1414+
1415+
if(VARIANT_EXECUTOR STREQUAL "fvp")
1416+
if(EXISTS "${FVP_INSTALL_DIR}")
1417+
get_fvp_params(
1418+
"${VARIANT_FVP_MODEL}"
1419+
"${VARIANT_FVP_CONFIG}"
1420+
)
1421+
set(
1422+
lit_test_executor
1423+
${CMAKE_CURRENT_SOURCE_DIR}/test-support/lit-exec-fvp.py
1424+
${test_executor_params}
1425+
)
1426+
set(have_executor TRUE)
1427+
else()
1428+
set(have_executor FALSE)
1429+
endif()
1430+
else()
1431+
get_qemu_params(
1432+
"${target_triple}"
1433+
"${VARIANT_QEMU_MACHINE}"
1434+
"${VARIANT_QEMU_CPU}"
1435+
"${VARIANT_QEMU_PARAMS}"
1436+
)
1437+
set(
1438+
lit_test_executor
1439+
${CMAKE_CURRENT_SOURCE_DIR}/test-support/lit-exec-qemu.py
1440+
${test_executor_params}
1441+
)
1442+
set(have_executor TRUE)
1443+
endif()
13791444
list(JOIN lit_test_executor " " lit_test_executor)
13801445
if(NOT PREBUILT_TARGET_LIBRARIES)
13811446
add_libc(
@@ -1392,6 +1457,7 @@ function(add_library_variant target_arch)
13921457
"${VARIANT_RAM_ADDRESS}"
13931458
"${VARIANT_RAM_SIZE}"
13941459
"${VARIANT_STACK_SIZE}"
1460+
"${have_executor}"
13951461
)
13961462
add_compiler_rt(
13971463
"${directory}"
@@ -1414,7 +1480,9 @@ function(add_library_variant target_arch)
14141480
${VARIANT_ENABLE_RTTI}
14151481
)
14161482
endif()
1417-
if(VARIANT_COMPILE_FLAGS MATCHES "-march=armv8")
1483+
if(NOT have_executor)
1484+
message("All library tests disabled for ${variant}, due to missing executor")
1485+
elseif(VARIANT_COMPILE_FLAGS MATCHES "-march=armv8")
14181486
message("C++ runtime libraries tests disabled for ${variant}")
14191487
else()
14201488
add_custom_target(check-llvm-toolchain-runtimes-${variant})
@@ -1443,16 +1511,39 @@ function(add_library_variant target_arch)
14431511
set(multilib_yaml_content "${multilib_yaml_content}" PARENT_SCOPE)
14441512
endfunction()
14451513

1514+
function(add_nonexistent_library_variant)
1515+
set(
1516+
one_value_args
1517+
MULTILIB_FLAGS
1518+
ERROR_MESSAGE
1519+
)
1520+
cmake_parse_arguments(ERR "" "${one_value_args}" "" ${ARGN})
1521+
1522+
string(APPEND multilib_yaml_content "- FatalError: \"${ERR_ERROR_MESSAGE}\"\n")
1523+
1524+
string(APPEND multilib_yaml_content " Flags:\n")
1525+
string(REPLACE " " ";" multilib_flags_list ${ERR_MULTILIB_FLAGS})
1526+
foreach(flag ${multilib_flags_list})
1527+
string(APPEND multilib_yaml_content " - ${flag}\n")
1528+
endforeach()
1529+
string(APPEND multilib_yaml_content " Group: stdlibs\n")
1530+
1531+
set(multilib_yaml_content "${multilib_yaml_content}" PARENT_SCOPE)
1532+
endfunction()
1533+
14461534
function(add_library_variants_for_cpu target_arch)
14471535
set(
14481536
one_value_args
14491537
SUFFIX
14501538
COMPILE_FLAGS
14511539
MULTILIB_FLAGS
14521540
PICOLIBC_BUILD_TYPE
1541+
EXECUTOR
14531542
QEMU_MACHINE
14541543
QEMU_CPU
14551544
QEMU_PARAMS
1545+
FVP_MODEL
1546+
FVP_CONFIG
14561547
BOOT_FLASH_ADDRESS
14571548
BOOT_FLASH_SIZE
14581549
FLASH_ADDRESS
@@ -1482,9 +1573,12 @@ function(add_library_variants_for_cpu target_arch)
14821573
COMPILE_FLAGS "${VARIANT_COMPILE_FLAGS}"
14831574
MULTILIB_FLAGS "${VARIANT_MULTILIB_FLAGS}"
14841575
PICOLIBC_BUILD_TYPE "${VARIANT_PICOLIBC_BUILD_TYPE}"
1576+
EXECUTOR "${VARIANT_EXECUTOR}"
14851577
QEMU_MACHINE "${VARIANT_QEMU_MACHINE}"
14861578
QEMU_CPU "${VARIANT_QEMU_CPU}"
14871579
QEMU_PARAMS "${VARIANT_QEMU_PARAMS}"
1580+
FVP_MODEL "${VARIANT_FVP_MODEL}"
1581+
FVP_CONFIG "${VARIANT_FVP_CONFIG}"
14881582
BOOT_FLASH_ADDRESS "${VARIANT_BOOT_FLASH_ADDRESS}"
14891583
BOOT_FLASH_SIZE "${VARIANT_BOOT_FLASH_SIZE}"
14901584
FLASH_ADDRESS "${VARIANT_FLASH_ADDRESS}"
@@ -1856,20 +1950,28 @@ add_library_variants_for_cpu(
18561950
RAM_SIZE 0x1000000
18571951
STACK_SIZE 4K
18581952
)
1859-
# FIXME: qemu currently has no support for PACBTI-M, so the branch protection
1860-
# variants below can't be fully tested in runtime. Since PACBTI-M instructions
1861-
# are NOP-compatible we can use the cortex-m55 CPU for now, but these should be
1862-
# updated to use a PACBTI-M enabled CPU once this is available.
1953+
add_nonexistent_library_variant(
1954+
# We don't build any MVE-capable libraries with the soft-float ABI.
1955+
# We do have Armv7-M soft-float libraries, but you can't fall back to
1956+
# using those, because MVE requires the FPSCR to be set up specially
1957+
# at startup time, and our v7-M soft-float libraries don't do that.
1958+
#
1959+
# So, rather than select one of those libraries and silently generate
1960+
# wrong MVE code, we force an error report instead.
1961+
MULTILIB_FLAGS "--target=thumbv8.1m.main-unknown-none-eabi -march=thumbv8.1m.main+mve"
1962+
ERROR_MESSAGE "No library available for MVE with soft-float ABI. Try -mfloat-abi=hard."
1963+
)
18631964
add_library_variants_for_cpu(
18641965
armv8.1m.main
18651966
SUFFIX soft_nofp_nomve_pacret_bti
1866-
COMPILE_FLAGS "-mfloat-abi=soft -march=armv8.1m.main+nomve -mfpu=none -mbranch-protection=standard"
1867-
MULTILIB_FLAGS "--target=thumbv8.1m.main-unknown-none-eabi -mfpu=none -mbranch-protection=standard"
1967+
COMPILE_FLAGS "-mfloat-abi=soft -march=armv8.1m.main+nomve+pacbti -mfpu=none -mbranch-protection=pac-ret+bti"
1968+
MULTILIB_FLAGS "--target=thumbv8.1m.main-unknown-none-eabi -mfpu=none -mbranch-protection=pac-ret+bti"
18681969
PICOLIBC_BUILD_TYPE "release"
1869-
QEMU_MACHINE "mps3-an547"
1870-
QEMU_CPU "cortex-m55"
1871-
BOOT_FLASH_ADDRESS 0x00000000
1872-
BOOT_FLASH_SIZE 512K
1970+
EXECUTOR fvp
1971+
FVP_MODEL corstone-310
1972+
FVP_CONFIG "cortex-m85 m-pacbti m-nofp mve-none"
1973+
BOOT_FLASH_ADDRESS 0x01000000
1974+
BOOT_FLASH_SIZE 2M
18731975
FLASH_ADDRESS 0x60000000
18741976
FLASH_SIZE 0x1000000
18751977
RAM_ADDRESS 0x61000000
@@ -1879,13 +1981,14 @@ add_library_variants_for_cpu(
18791981
add_library_variants_for_cpu(
18801982
armv8.1m.main
18811983
SUFFIX hard_fp_nomve_pacret_bti
1882-
COMPILE_FLAGS "-mfloat-abi=hard -march=armv8.1m.main+nomve -mfpu=fp-armv8-fullfp16-sp-d16 -mbranch-protection=standard"
1883-
MULTILIB_FLAGS "--target=thumbv8.1m.main-unknown-none-eabihf -march=thumbv8.1m.main+fp16 -mfpu=fp-armv8-fullfp16-sp-d16 -mbranch-protection=standard"
1984+
COMPILE_FLAGS "-mfloat-abi=hard -march=armv8.1m.main+nomve+pacbti -mfpu=fp-armv8-fullfp16-sp-d16 -mbranch-protection=pac-ret+bti"
1985+
MULTILIB_FLAGS "--target=thumbv8.1m.main-unknown-none-eabihf -march=thumbv8.1m.main+fp16 -mfpu=fp-armv8-fullfp16-sp-d16 -mbranch-protection=pac-ret+bti"
18841986
PICOLIBC_BUILD_TYPE "release"
1885-
QEMU_MACHINE "mps3-an547"
1886-
QEMU_CPU "cortex-m55"
1887-
BOOT_FLASH_ADDRESS 0x00000000
1888-
BOOT_FLASH_SIZE 512K
1987+
EXECUTOR fvp
1988+
FVP_MODEL corstone-310
1989+
FVP_CONFIG "cortex-m85 m-pacbti m-fp mve-none"
1990+
BOOT_FLASH_ADDRESS 0x01000000
1991+
BOOT_FLASH_SIZE 2M
18891992
FLASH_ADDRESS 0x60000000
18901993
FLASH_SIZE 0x1000000
18911994
RAM_ADDRESS 0x61000000
@@ -1895,13 +1998,14 @@ add_library_variants_for_cpu(
18951998
add_library_variants_for_cpu(
18961999
armv8.1m.main
18972000
SUFFIX hard_fpdp_nomve_pacret_bti
1898-
COMPILE_FLAGS "-mfloat-abi=hard -march=armv8.1m.main+nomve -mfpu=fp-armv8-fullfp16-d16 -mbranch-protection=standard"
1899-
MULTILIB_FLAGS "--target=thumbv8.1m.main-unknown-none-eabihf -march=thumbv8.1m.main+fp16 -mfpu=fp-armv8-fullfp16-d16 -mbranch-protection=standard"
2001+
COMPILE_FLAGS "-mfloat-abi=hard -march=armv8.1m.main+nomve+pacbti -mfpu=fp-armv8-fullfp16-d16 -mbranch-protection=pac-ret+bti"
2002+
MULTILIB_FLAGS "--target=thumbv8.1m.main-unknown-none-eabihf -march=thumbv8.1m.main+fp16 -mfpu=fp-armv8-fullfp16-d16 -mbranch-protection=pac-ret+bti"
19002003
PICOLIBC_BUILD_TYPE "release"
1901-
QEMU_MACHINE "mps3-an547"
1902-
QEMU_CPU "cortex-m55"
1903-
BOOT_FLASH_ADDRESS 0x00000000
1904-
BOOT_FLASH_SIZE 512K
2004+
EXECUTOR fvp
2005+
FVP_MODEL corstone-310
2006+
FVP_CONFIG "cortex-m85 m-pacbti m-fp mve-none"
2007+
BOOT_FLASH_ADDRESS 0x01000000
2008+
BOOT_FLASH_SIZE 2M
19052009
FLASH_ADDRESS 0x60000000
19062010
FLASH_SIZE 0x1000000
19072011
RAM_ADDRESS 0x61000000
@@ -1911,13 +2015,14 @@ add_library_variants_for_cpu(
19112015
add_library_variants_for_cpu(
19122016
armv8.1m.main
19132017
SUFFIX hard_nofp_mve_pacret_bti
1914-
COMPILE_FLAGS "-mfloat-abi=hard -march=armv8.1m.main+mve -mfpu=none -mbranch-protection=standard"
1915-
MULTILIB_FLAGS "--target=thumbv8.1m.main-unknown-none-eabihf -march=thumbv8.1m.main+mve -mfpu=none -mbranch-protection=standard"
2018+
COMPILE_FLAGS "-mfloat-abi=hard -march=armv8.1m.main+mve+pacbti -mfpu=none -mbranch-protection=pac-ret+bti"
2019+
MULTILIB_FLAGS "--target=thumbv8.1m.main-unknown-none-eabihf -march=thumbv8.1m.main+mve -mfpu=none -mbranch-protection=pac-ret+bti"
19162020
PICOLIBC_BUILD_TYPE "release"
1917-
QEMU_MACHINE "mps3-an547"
1918-
QEMU_CPU "cortex-m55"
1919-
BOOT_FLASH_ADDRESS 0x00000000
1920-
BOOT_FLASH_SIZE 512K
2021+
EXECUTOR fvp
2022+
FVP_MODEL corstone-310
2023+
FVP_CONFIG "cortex-m85 m-pacbti m-nofp mve-int"
2024+
BOOT_FLASH_ADDRESS 0x01000000
2025+
BOOT_FLASH_SIZE 2M
19212026
FLASH_ADDRESS 0x60000000
19222027
FLASH_SIZE 0x1000000
19232028
RAM_ADDRESS 0x61000000

0 commit comments

Comments
 (0)