@@ -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+ )
153157set (
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
531528add_custom_target (check-llvm-toolchain-runtimes)
532529add_custom_target (check-${LLVM_TOOLCHAIN_C_LIBRARY} )
@@ -535,116 +532,138 @@ add_custom_target(check-cxx)
535532add_custom_target (check-cxxabi)
536533add_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
649668install (
650669 DIRECTORY ${LLVM_BINARY_DIR} /${TARGET_LIBRARIES_DIR} /.
0 commit comments