Skip to content

Commit 55e617a

Browse files
authored
Merge branch 'ARM-software:main' into switch-to-use-fvp
2 parents 262eb55 + dca45e7 commit 55e617a

11 files changed

+164
-129
lines changed

CMakeLists.txt

Lines changed: 117 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,10 @@ option(
150150
"During checkout, apply optional downstream patches to
151151
llvm-project to improve performance."
152152
)
153+
option(
154+
ENABLE_FVP_TESTING
155+
"Tests using FVP need to be explictly enabled."
156+
)
153157
set(
154158
FVP_INSTALL_DIR
155159
"${CMAKE_CURRENT_SOURCE_DIR}/fvp/install" CACHE STRING
@@ -516,17 +520,10 @@ add_dependencies(
516520
version_txt
517521
)
518522

519-
if(LIBS_DEPEND_ON_TOOLS)
520-
set(lib_tool_dependencies
521-
clang
522-
lld
523-
llvm-ar
524-
llvm-config
525-
llvm-nm
526-
llvm-ranlib
527-
llvm-strip
528-
)
529-
endif()
523+
# Set LLVM_DEFAULT_EXTERNAL_LIT to the directory of clang
524+
# which was build in previous step. This path is not exported
525+
# by add_subdirectory of llvm project
526+
set(LLVM_DEFAULT_EXTERNAL_LIT "${LLVM_BINARY_DIR}/bin/llvm-lit")
530527

531528
add_custom_target(check-llvm-toolchain-runtimes)
532529
add_custom_target(check-${LLVM_TOOLCHAIN_C_LIBRARY})
@@ -535,116 +532,138 @@ add_custom_target(check-cxx)
535532
add_custom_target(check-cxxabi)
536533
add_custom_target(check-unwind)
537534

538-
add_dependencies(
539-
check-llvm-toolchain-runtimes
540-
check-${LLVM_TOOLCHAIN_C_LIBRARY}
541-
check-compiler-rt
542-
check-cxx
543-
check-cxxabi
544-
check-unwind
545-
)
535+
if(NOT PREBUILT_TARGET_LIBRARIES)
536+
if(LIBS_DEPEND_ON_TOOLS)
537+
set(lib_tool_dependencies
538+
clang
539+
lld
540+
llvm-ar
541+
llvm-config
542+
llvm-nm
543+
llvm-ranlib
544+
llvm-strip
545+
)
546+
endif()
546547

547-
if(LLVM_TOOLCHAIN_LIBRARY_OVERLAY_INSTALL)
548-
# If we're building a non-default libc with the intention of
549-
# installing it as an overlay on the main package archive, then
550-
# all of its includes, libraries and multilib.yaml go in a
551-
# subdirectory of lib/clang-runtimes. Configuration files in the
552-
# bin directory will make it easy to reset the sysroot to point at
553-
# that subdir.
554-
set(library_subdir "/${LLVM_TOOLCHAIN_C_LIBRARY}")
555-
else()
556-
set(library_subdir "")
557-
endif()
558548

559-
if(LIBS_USE_COMPILER_LAUNCHER)
560-
if(CMAKE_C_COMPILER_LAUNCHER)
561-
list(APPEND compiler_launcher_cmake_args "-DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER}")
549+
add_dependencies(
550+
check-llvm-toolchain-runtimes
551+
check-${LLVM_TOOLCHAIN_C_LIBRARY}
552+
check-compiler-rt
553+
check-cxx
554+
check-cxxabi
555+
check-unwind
556+
)
557+
558+
if(LLVM_TOOLCHAIN_LIBRARY_OVERLAY_INSTALL)
559+
# If we're building a non-default libc with the intention of
560+
# installing it as an overlay on the main package archive, then
561+
# all of its includes, libraries and multilib.yaml go in a
562+
# subdirectory of lib/clang-runtimes. Configuration files in the
563+
# bin directory will make it easy to reset the sysroot to point at
564+
# that subdir.
565+
set(library_subdir "/${LLVM_TOOLCHAIN_C_LIBRARY}")
566+
else()
567+
set(library_subdir "")
562568
endif()
563-
if(CMAKE_CXX_COMPILER_LAUNCHER)
564-
list(APPEND compiler_launcher_cmake_args "-DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER}")
569+
570+
if(LIBS_USE_COMPILER_LAUNCHER)
571+
if(CMAKE_C_COMPILER_LAUNCHER)
572+
list(APPEND compiler_launcher_cmake_args "-DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER}")
573+
endif()
574+
if(CMAKE_CXX_COMPILER_LAUNCHER)
575+
list(APPEND compiler_launcher_cmake_args "-DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER}")
576+
endif()
565577
endif()
566-
endif()
567578

568-
ExternalProject_Add(
569-
multilib-${LLVM_TOOLCHAIN_C_LIBRARY}
570-
PREFIX ${CMAKE_BINARY_DIR}/multilib-builds
571-
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/arm-multilib
572-
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/llvm/${TARGET_LIBRARIES_DIR}${library_subdir}
573-
DEPENDS ${lib_tool_dependencies}
574-
CMAKE_ARGS
575-
${compiler_launcher_cmake_args}
576-
-DC_LIBRARY=${LLVM_TOOLCHAIN_C_LIBRARY}
577-
-DLLVM_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}/llvm
578-
-DMULTILIB_JSON=${LLVM_TOOLCHAIN_MULTILIB_JSON}
579-
-DENABLE_VARIANTS=${LLVM_TOOLCHAIN_LIBRARY_VARIANTS}
580-
-DLIBC_HDRGEN=${LIBC_HDRGEN}
581-
-DFVP_INSTALL_DIR=${FVP_INSTALL_DIR}
582-
-DFVP_CONFIG_DIR=${CMAKE_CURRENT_SOURCE_DIR}/fvp/config
583-
-DFETCHCONTENT_SOURCE_DIR_LLVMPROJECT=${FETCHCONTENT_SOURCE_DIR_LLVMPROJECT}
584-
-DFETCHCONTENT_SOURCE_DIR_PICOLIBC=${FETCHCONTENT_SOURCE_DIR_PICOLIBC}
585-
-DFETCHCONTENT_SOURCE_DIR_NEWLIB=${FETCHCONTENT_SOURCE_DIR_NEWLIB}
586-
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
587-
USES_TERMINAL_CONFIGURE FALSE
588-
USES_TERMINAL_BUILD TRUE
589-
USES_TERMINAL_TEST TRUE
590-
LIST_SEPARATOR ,
591-
CONFIGURE_HANDLED_BY_BUILD TRUE
592-
TEST_EXCLUDE_FROM_MAIN TRUE
593-
STEP_TARGETS build install
594-
)
579+
# ENABLE_VARIANTS expects a semi-colon separated list.
580+
# To prevent CMake expanding it automatically while passing it
581+
# down, switch to comma separated. Enabling the ExternalProject
582+
# LIST_SEPARATOR option will handle switching it back.
583+
string(REPLACE ";" "," ENABLE_VARIANTS_PASSTHROUGH "${LLVM_TOOLCHAIN_LIBRARY_VARIANTS}")
595584

596-
add_dependencies(
597-
llvm-toolchain-runtimes
598-
multilib-${LLVM_TOOLCHAIN_C_LIBRARY}-install
599-
)
600-
601-
foreach(check_target check-${LLVM_TOOLCHAIN_C_LIBRARY} check-compiler-rt check-cxx check-cxxabi check-unwind)
602-
ExternalProject_Add_Step(
585+
ExternalProject_Add(
603586
multilib-${LLVM_TOOLCHAIN_C_LIBRARY}
604-
${check_target}
605-
COMMAND "${CMAKE_COMMAND}" --build <BINARY_DIR> --target ${check_target}
606-
USES_TERMINAL TRUE
607-
EXCLUDE_FROM_MAIN TRUE
608-
ALWAYS TRUE
587+
PREFIX ${CMAKE_BINARY_DIR}/multilib-builds
588+
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/arm-multilib
589+
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/llvm/${TARGET_LIBRARIES_DIR}${library_subdir}
590+
DEPENDS ${lib_tool_dependencies}
591+
CMAKE_ARGS
592+
${compiler_launcher_cmake_args}
593+
-DC_LIBRARY=${LLVM_TOOLCHAIN_C_LIBRARY}
594+
-DLLVM_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}/llvm
595+
-DMULTILIB_JSON=${LLVM_TOOLCHAIN_MULTILIB_JSON}
596+
-DENABLE_VARIANTS=${ENABLE_VARIANTS_PASSTHROUGH}
597+
-DLIBC_HDRGEN=${LIBC_HDRGEN}
598+
-DFVP_INSTALL_DIR=${FVP_INSTALL_DIR}
599+
-DENABLE_FVP_TESTING=${ENABLE_FVP_TESTING}
600+
-DFVP_CONFIG_DIR=${CMAKE_CURRENT_SOURCE_DIR}/fvp/config
601+
-DFETCHCONTENT_SOURCE_DIR_LLVMPROJECT=${FETCHCONTENT_SOURCE_DIR_LLVMPROJECT}
602+
-DFETCHCONTENT_SOURCE_DIR_PICOLIBC=${FETCHCONTENT_SOURCE_DIR_PICOLIBC}
603+
-DFETCHCONTENT_SOURCE_DIR_NEWLIB=${FETCHCONTENT_SOURCE_DIR_NEWLIB}
604+
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
605+
USES_TERMINAL_CONFIGURE FALSE
606+
USES_TERMINAL_BUILD TRUE
607+
USES_TERMINAL_TEST TRUE
608+
LIST_SEPARATOR ,
609+
CONFIGURE_HANDLED_BY_BUILD TRUE
610+
TEST_EXCLUDE_FROM_MAIN TRUE
611+
STEP_TARGETS build install
609612
)
610-
ExternalProject_Add_StepTargets(multilib-${LLVM_TOOLCHAIN_C_LIBRARY} ${check_target})
611-
ExternalProject_Add_StepDependencies(
612-
multilib-${LLVM_TOOLCHAIN_C_LIBRARY}
613-
${check_target}
613+
614+
add_dependencies(
615+
llvm-toolchain-runtimes
614616
multilib-${LLVM_TOOLCHAIN_C_LIBRARY}-install
615617
)
616-
add_dependencies(${check_target} multilib-${LLVM_TOOLCHAIN_C_LIBRARY}-${check_target})
617-
endforeach()
618-
619-
# Read the json to generate variant specific target names for convenience.
620-
file(READ ${LLVM_TOOLCHAIN_MULTILIB_JSON} multilib_json_str)
621-
string(JSON multilib_defs GET ${multilib_json_str} "libs")
622618

623-
string(JSON lib_count LENGTH ${multilib_defs})
624-
math(EXPR lib_count_dec "${lib_count} - 1")
625-
626-
foreach(lib_idx RANGE ${lib_count_dec})
627-
string(JSON lib_def GET ${multilib_defs} ${lib_idx})
628-
string(JSON variant GET ${lib_def} "variant")
629619
foreach(check_target check-${LLVM_TOOLCHAIN_C_LIBRARY} check-compiler-rt check-cxx check-cxxabi check-unwind)
630620
ExternalProject_Add_Step(
631621
multilib-${LLVM_TOOLCHAIN_C_LIBRARY}
632-
${check_target}-${variant}
633-
COMMAND "${CMAKE_COMMAND}" --build <BINARY_DIR> --target ${check_target}-${variant}
622+
${check_target}
623+
COMMAND "${CMAKE_COMMAND}" --build <BINARY_DIR> --target ${check_target}
634624
USES_TERMINAL TRUE
635625
EXCLUDE_FROM_MAIN TRUE
636626
ALWAYS TRUE
637627
)
638-
ExternalProject_Add_StepTargets(multilib-${LLVM_TOOLCHAIN_C_LIBRARY} ${check_target}-${variant})
628+
ExternalProject_Add_StepTargets(multilib-${LLVM_TOOLCHAIN_C_LIBRARY} ${check_target})
639629
ExternalProject_Add_StepDependencies(
640630
multilib-${LLVM_TOOLCHAIN_C_LIBRARY}
641-
${check_target}-${variant}
631+
${check_target}
642632
multilib-${LLVM_TOOLCHAIN_C_LIBRARY}-install
643633
)
644-
add_custom_target(${check_target}-${variant})
645-
add_dependencies(${check_target}-${variant} multilib-${LLVM_TOOLCHAIN_C_LIBRARY}-${check_target}-${variant})
634+
add_dependencies(${check_target} multilib-${LLVM_TOOLCHAIN_C_LIBRARY}-${check_target})
646635
endforeach()
647-
endforeach()
636+
637+
# Read the json to generate variant specific target names for convenience.
638+
file(READ ${LLVM_TOOLCHAIN_MULTILIB_JSON} multilib_json_str)
639+
string(JSON multilib_defs GET ${multilib_json_str} "libs")
640+
641+
string(JSON lib_count LENGTH ${multilib_defs})
642+
math(EXPR lib_count_dec "${lib_count} - 1")
643+
644+
foreach(lib_idx RANGE ${lib_count_dec})
645+
string(JSON lib_def GET ${multilib_defs} ${lib_idx})
646+
string(JSON variant GET ${lib_def} "variant")
647+
foreach(check_target check-${LLVM_TOOLCHAIN_C_LIBRARY} check-compiler-rt check-cxx check-cxxabi check-unwind)
648+
ExternalProject_Add_Step(
649+
multilib-${LLVM_TOOLCHAIN_C_LIBRARY}
650+
${check_target}-${variant}
651+
COMMAND "${CMAKE_COMMAND}" --build <BINARY_DIR> --target ${check_target}-${variant}
652+
USES_TERMINAL TRUE
653+
EXCLUDE_FROM_MAIN TRUE
654+
ALWAYS TRUE
655+
)
656+
ExternalProject_Add_StepTargets(multilib-${LLVM_TOOLCHAIN_C_LIBRARY} ${check_target}-${variant})
657+
ExternalProject_Add_StepDependencies(
658+
multilib-${LLVM_TOOLCHAIN_C_LIBRARY}
659+
${check_target}-${variant}
660+
multilib-${LLVM_TOOLCHAIN_C_LIBRARY}-install
661+
)
662+
add_custom_target(${check_target}-${variant})
663+
add_dependencies(${check_target}-${variant} multilib-${LLVM_TOOLCHAIN_C_LIBRARY}-${check_target}-${variant})
664+
endforeach()
665+
endforeach()
666+
endif()
648667

649668
install(
650669
DIRECTORY ${LLVM_BINARY_DIR}/${TARGET_LIBRARIES_DIR}/.

arm-multilib/CMakeLists.txt

Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ set(C_LIBRARY "picolibc" CACHE STRING "Which C library to use.")
3333
set_property(CACHE C_LIBRARY PROPERTY STRINGS picolibc newlib llvmlibc)
3434
set(LLVM_BINARY_DIR "" CACHE PATH "Path to LLVM toolchain build or install root.")
3535
set(LIBC_HDRGEN "" CACHE PATH "Path to prebuilt lbc-hdrgen if not included in LLVM binaries set by LLVM_BINARY_DIR")
36+
option(
37+
ENABLE_FVP_TESTING
38+
"Tests using FVP need to be explictly enabled."
39+
)
3640
set(
3741
FVP_INSTALL_DIR
3842
"" CACHE STRING
@@ -151,6 +155,34 @@ foreach(lib_idx RANGE ${lib_count_dec})
151155
)
152156
set(variant_json_file ${CMAKE_CURRENT_SOURCE_DIR}/json/variants/${variant_json})
153157

158+
# Read info from the variant specific json.
159+
file(READ ${variant_json_file} variant_json_str)
160+
string(JSON test_executor GET ${variant_json_str} "args" "common" "TEST_EXECUTOR")
161+
162+
# FVP testing should default to off, so override any
163+
# settings from the JSON.
164+
if(test_executor STREQUAL "fvp" AND NOT ${ENABLE_FVP_TESTING})
165+
set(additional_cmake_args "-DENABLE_LIBC_TESTS=OFF" "-DENABLE_COMPILER_RT_TESTS=OFF" "-DENABLE_LIBCXX_TESTS=OFF")
166+
set(read_ENABLE_LIBC_TESTS "OFF")
167+
set(read_ENABLE_COMPILER_RT_TESTS "OFF")
168+
set(read_ENABLE_LIBCXX_TESTS "OFF")
169+
else()
170+
# From the json, check which tests are enabled.
171+
foreach(test_enable_var
172+
ENABLE_LIBC_TESTS
173+
ENABLE_COMPILER_RT_TESTS
174+
ENABLE_LIBCXX_TESTS
175+
)
176+
string(JSON read_${test_enable_var} ERROR_VARIABLE json_error GET ${variant_json_str} "args" ${C_LIBRARY} ${test_enable_var})
177+
if(read_${test_enable_var} STREQUAL "json-NOTFOUND")
178+
string(JSON read_${test_enable_var} ERROR_VARIABLE json_error GET ${variant_json_str} "args" "common" ${test_enable_var})
179+
if(read_${test_enable_var} STREQUAL "json-NOTFOUND")
180+
set(read_${test_enable_var} "OFF")
181+
endif()
182+
endif()
183+
endforeach()
184+
endif()
185+
154186
ExternalProject_Add(
155187
runtimes-${variant}
156188
PREFIX ${CMAKE_BINARY_DIR}/lib-builds
@@ -160,6 +192,7 @@ foreach(lib_idx RANGE ${lib_count_dec})
160192
CMAKE_ARGS
161193
${compiler_launcher_cmake_args}
162194
${passthrough_dirs}
195+
${additional_cmake_args}
163196
-DVARIANT_JSON=${variant_json_file}
164197
-DC_LIBRARY=${C_LIBRARY}
165198
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
@@ -171,23 +204,6 @@ foreach(lib_idx RANGE ${lib_count_dec})
171204
CONFIGURE_HANDLED_BY_BUILD TRUE
172205
TEST_EXCLUDE_FROM_MAIN TRUE
173206
)
174-
175-
# Read info from the variant specific json.
176-
# From the json, check which tests are enabled.
177-
file(READ ${variant_json_file} variant_json_str)
178-
foreach(test_enable_var
179-
ENABLE_LIBC_TESTS
180-
ENABLE_COMPILER_RT_TESTS
181-
ENABLE_LIBCXX_TESTS
182-
)
183-
string(JSON read_${test_enable_var} ERROR_VARIABLE json_error GET ${variant_json_str} "args" ${C_LIBRARY} ${test_enable_var})
184-
if(read_${test_enable_var} STREQUAL "json-NOTFOUND")
185-
string(JSON read_${test_enable_var} ERROR_VARIABLE json_error GET ${variant_json_str} "args" "common" ${test_enable_var})
186-
if(read_${test_enable_var} STREQUAL "json-NOTFOUND")
187-
set(read_${test_enable_var} "OFF")
188-
endif()
189-
endif()
190-
endforeach()
191207
set(check_targets "")
192208
if(read_ENABLE_LIBC_TESTS)
193209
list(APPEND check_targets check-${C_LIBRARY})

arm-multilib/json/variants/armv8.1m.main_hard_fp_nomve_pacret_bti.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
"picolibc": {
2121
"PICOLIBC_BUILD_TYPE": "release",
2222
"ENABLE_CXX_LIBS": "ON",
23-
"ENABLE_LIBC_TESTS": "OFF",
23+
"ENABLE_LIBC_TESTS": "ON",
2424
"ENABLE_COMPILER_RT_TESTS": "OFF",
2525
"ENABLE_LIBCXX_TESTS": "OFF"
2626
},

arm-multilib/json/variants/armv8.1m.main_hard_fp_nomve_pacret_bti_exn_rtti.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
"picolibc": {
2121
"PICOLIBC_BUILD_TYPE": "release",
2222
"ENABLE_CXX_LIBS": "ON",
23-
"ENABLE_LIBC_TESTS": "OFF",
23+
"ENABLE_LIBC_TESTS": "ON",
2424
"ENABLE_COMPILER_RT_TESTS": "OFF",
2525
"ENABLE_LIBCXX_TESTS": "OFF"
2626
},

arm-multilib/json/variants/armv8.1m.main_hard_fpdp_nomve_pacret_bti.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
"picolibc": {
2121
"PICOLIBC_BUILD_TYPE": "release",
2222
"ENABLE_CXX_LIBS": "ON",
23-
"ENABLE_LIBC_TESTS": "OFF",
23+
"ENABLE_LIBC_TESTS": "ON",
2424
"ENABLE_COMPILER_RT_TESTS": "OFF",
2525
"ENABLE_LIBCXX_TESTS": "OFF"
2626
},

arm-multilib/json/variants/armv8.1m.main_hard_fpdp_nomve_pacret_bti_exn_rtti.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
"picolibc": {
2121
"PICOLIBC_BUILD_TYPE": "release",
2222
"ENABLE_CXX_LIBS": "ON",
23-
"ENABLE_LIBC_TESTS": "OFF",
23+
"ENABLE_LIBC_TESTS": "ON",
2424
"ENABLE_COMPILER_RT_TESTS": "OFF",
2525
"ENABLE_LIBCXX_TESTS": "OFF"
2626
},

arm-multilib/json/variants/armv8.1m.main_hard_nofp_mve_pacret_bti.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
"picolibc": {
2121
"PICOLIBC_BUILD_TYPE": "release",
2222
"ENABLE_CXX_LIBS": "ON",
23-
"ENABLE_LIBC_TESTS": "OFF",
23+
"ENABLE_LIBC_TESTS": "ON",
2424
"ENABLE_COMPILER_RT_TESTS": "OFF",
2525
"ENABLE_LIBCXX_TESTS": "OFF"
2626
},

arm-multilib/json/variants/armv8.1m.main_hard_nofp_mve_pacret_bti_exn_rtti.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
"picolibc": {
2121
"PICOLIBC_BUILD_TYPE": "release",
2222
"ENABLE_CXX_LIBS": "ON",
23-
"ENABLE_LIBC_TESTS": "OFF",
23+
"ENABLE_LIBC_TESTS": "ON",
2424
"ENABLE_COMPILER_RT_TESTS": "OFF",
2525
"ENABLE_LIBCXX_TESTS": "OFF"
2626
},

arm-multilib/json/variants/armv8.1m.main_soft_nofp_nomve_pacret_bti.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
"picolibc": {
2121
"PICOLIBC_BUILD_TYPE": "release",
2222
"ENABLE_CXX_LIBS": "ON",
23-
"ENABLE_LIBC_TESTS": "OFF",
23+
"ENABLE_LIBC_TESTS": "ON",
2424
"ENABLE_COMPILER_RT_TESTS": "OFF",
2525
"ENABLE_LIBCXX_TESTS": "OFF"
2626
},

0 commit comments

Comments
 (0)