|  | 
| 1 | 1 | use std::thread; | 
| 2 | 2 | 
 | 
|  | 3 | +use llvm::prebuilt_llvm_config; | 
|  | 4 | + | 
| 3 | 5 | use super::*; | 
| 4 | 6 | use crate::Flags; | 
| 5 | 7 | use crate::core::build_steps::doc::DocumentationFormat; | 
| @@ -954,3 +956,112 @@ fn test_test_coverage() { | 
| 954 | 956 |         assert_eq!(modes, expected); | 
| 955 | 957 |     } | 
| 956 | 958 | } | 
|  | 959 | + | 
|  | 960 | +#[test] | 
|  | 961 | +fn test_prebuilt_llvm_config_path_resolution() { | 
|  | 962 | +    fn configure(config: &str) -> Config { | 
|  | 963 | +        Config::parse_inner( | 
|  | 964 | +            Flags::parse(&[ | 
|  | 965 | +                "build".to_string(), | 
|  | 966 | +                "--dry-run".to_string(), | 
|  | 967 | +                "--config=/does/not/exist".to_string(), | 
|  | 968 | +            ]), | 
|  | 969 | +            |&_| toml::from_str(&config), | 
|  | 970 | +        ) | 
|  | 971 | +    } | 
|  | 972 | + | 
|  | 973 | +    // Removes Windows disk prefix if present | 
|  | 974 | +    fn drop_win_disk_prefix_if_present(path: PathBuf) -> PathBuf { | 
|  | 975 | +        let path_str = path.to_str().unwrap(); | 
|  | 976 | +        if let Some((_, without_prefix)) = path_str.split_once(":/") { | 
|  | 977 | +            return PathBuf::from(format!("/{}", without_prefix)); | 
|  | 978 | +        } | 
|  | 979 | + | 
|  | 980 | +        path | 
|  | 981 | +    } | 
|  | 982 | + | 
|  | 983 | +    let config = configure( | 
|  | 984 | +        r#" | 
|  | 985 | +            [llvm] | 
|  | 986 | +            download-ci-llvm = false | 
|  | 987 | +
 | 
|  | 988 | +            [build] | 
|  | 989 | +            build = "x86_64-unknown-linux-gnu" | 
|  | 990 | +            host = ["arm-unknown-linux-gnueabihf"] | 
|  | 991 | +            target = ["arm-unknown-linux-gnueabihf"] | 
|  | 992 | +
 | 
|  | 993 | +            [target.x86_64-unknown-linux-gnu] | 
|  | 994 | +            llvm-config = "/some/path/to/llvm-config" | 
|  | 995 | +
 | 
|  | 996 | +            [target.arm-unknown-linux-gnueabihf] | 
|  | 997 | +            cc = "arm-linux-gnueabihf-gcc" | 
|  | 998 | +            cxx = "arm-linux-gnueabihf-g++" | 
|  | 999 | +        "#, | 
|  | 1000 | +    ); | 
|  | 1001 | + | 
|  | 1002 | +    let build = Build::new(config); | 
|  | 1003 | +    let builder = Builder::new(&build); | 
|  | 1004 | + | 
|  | 1005 | +    let expected = PathBuf::from("/some/path/to/llvm-config"); | 
|  | 1006 | + | 
|  | 1007 | +    let actual = prebuilt_llvm_config( | 
|  | 1008 | +        &builder, | 
|  | 1009 | +        TargetSelection::from_user("arm-unknown-linux-gnueabihf"), | 
|  | 1010 | +        false, | 
|  | 1011 | +    ) | 
|  | 1012 | +    .llvm_result() | 
|  | 1013 | +    .llvm_config | 
|  | 1014 | +    .clone(); | 
|  | 1015 | +    let actual = drop_win_disk_prefix_if_present(actual); | 
|  | 1016 | +    assert_eq!(expected, actual); | 
|  | 1017 | + | 
|  | 1018 | +    let actual = prebuilt_llvm_config(&builder, builder.config.build, false) | 
|  | 1019 | +        .llvm_result() | 
|  | 1020 | +        .llvm_config | 
|  | 1021 | +        .clone(); | 
|  | 1022 | +    let actual = drop_win_disk_prefix_if_present(actual); | 
|  | 1023 | +    assert_eq!(expected, actual); | 
|  | 1024 | +    assert_eq!(expected, actual); | 
|  | 1025 | + | 
|  | 1026 | +    let config = configure( | 
|  | 1027 | +        r#" | 
|  | 1028 | +            [llvm] | 
|  | 1029 | +            download-ci-llvm = false | 
|  | 1030 | +        "#, | 
|  | 1031 | +    ); | 
|  | 1032 | + | 
|  | 1033 | +    let build = Build::new(config.clone()); | 
|  | 1034 | +    let builder = Builder::new(&build); | 
|  | 1035 | + | 
|  | 1036 | +    let actual = prebuilt_llvm_config(&builder, builder.config.build, false) | 
|  | 1037 | +        .llvm_result() | 
|  | 1038 | +        .llvm_config | 
|  | 1039 | +        .clone(); | 
|  | 1040 | +    let expected = builder | 
|  | 1041 | +        .out | 
|  | 1042 | +        .join(builder.config.build) | 
|  | 1043 | +        .join("llvm/bin") | 
|  | 1044 | +        .join(exe("llvm-config", builder.config.build)); | 
|  | 1045 | +    assert_eq!(expected, actual); | 
|  | 1046 | + | 
|  | 1047 | +    let config = configure( | 
|  | 1048 | +        r#" | 
|  | 1049 | +            [llvm] | 
|  | 1050 | +            download-ci-llvm = true | 
|  | 1051 | +        "#, | 
|  | 1052 | +    ); | 
|  | 1053 | + | 
|  | 1054 | +    let build = Build::new(config.clone()); | 
|  | 1055 | +    let builder = Builder::new(&build); | 
|  | 1056 | + | 
|  | 1057 | +    let actual = prebuilt_llvm_config(&builder, builder.config.build, false) | 
|  | 1058 | +        .llvm_result() | 
|  | 1059 | +        .llvm_config | 
|  | 1060 | +        .clone(); | 
|  | 1061 | +    let expected = builder | 
|  | 1062 | +        .out | 
|  | 1063 | +        .join(builder.config.build) | 
|  | 1064 | +        .join("ci-llvm/bin") | 
|  | 1065 | +        .join(exe("llvm-config", builder.config.build)); | 
|  | 1066 | +    assert_eq!(expected, actual); | 
|  | 1067 | +} | 
0 commit comments