|  | 
| 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; | 
| @@ -861,3 +863,104 @@ fn test_test_coverage() { | 
| 861 | 863 |         assert_eq!(modes, expected); | 
| 862 | 864 |     } | 
| 863 | 865 | } | 
|  | 866 | + | 
|  | 867 | +#[test] | 
|  | 868 | +fn test_prebuilt_llvm_config_path_resolution() { | 
|  | 869 | +    fn configure(config: &str) -> Config { | 
|  | 870 | +        Config::parse_inner( | 
|  | 871 | +            Flags::parse(&[ | 
|  | 872 | +                "build".to_string(), | 
|  | 873 | +                "--dry-run".to_string(), | 
|  | 874 | +                "--config=/does/not/exist".to_string(), | 
|  | 875 | +            ]), | 
|  | 876 | +            |&_| toml::from_str(&config), | 
|  | 877 | +        ) | 
|  | 878 | +    } | 
|  | 879 | + | 
|  | 880 | +    // Removes Windows disk prefix if present | 
|  | 881 | +    fn drop_win_disk_prefix_if_present(path: PathBuf) -> PathBuf { | 
|  | 882 | +        let path_str = path.to_str().unwrap(); | 
|  | 883 | +        if let Some((_, without_prefix)) = path_str.split_once(":/") { | 
|  | 884 | +            return PathBuf::from(format!("/{}", without_prefix)); | 
|  | 885 | +        } | 
|  | 886 | + | 
|  | 887 | +        path | 
|  | 888 | +    } | 
|  | 889 | + | 
|  | 890 | +    let config = configure( | 
|  | 891 | +        r#" | 
|  | 892 | +            [llvm] | 
|  | 893 | +            download-ci-llvm = false | 
|  | 894 | +
 | 
|  | 895 | +            [build] | 
|  | 896 | +            build = "x86_64-unknown-linux-gnu" | 
|  | 897 | +            host = ["arm-unknown-linux-gnueabihf"] | 
|  | 898 | +            target = ["arm-unknown-linux-gnueabihf"] | 
|  | 899 | +
 | 
|  | 900 | +            [target.x86_64-unknown-linux-gnu] | 
|  | 901 | +            llvm-config = "/some/path/to/llvm-config" | 
|  | 902 | +
 | 
|  | 903 | +            [target.arm-unknown-linux-gnueabihf] | 
|  | 904 | +            cc = "arm-linux-gnueabihf-gcc" | 
|  | 905 | +            cxx = "arm-linux-gnueabihf-g++" | 
|  | 906 | +        "#, | 
|  | 907 | +    ); | 
|  | 908 | + | 
|  | 909 | +    let build = Build::new(config); | 
|  | 910 | +    let builder = Builder::new(&build); | 
|  | 911 | + | 
|  | 912 | +    let expected = PathBuf::from("/some/path/to/llvm-config"); | 
|  | 913 | + | 
|  | 914 | +    let actual = prebuilt_llvm_config( | 
|  | 915 | +        &builder, | 
|  | 916 | +        TargetSelection::from_user("arm-unknown-linux-gnueabihf"), | 
|  | 917 | +        false, | 
|  | 918 | +    ) | 
|  | 919 | +    .llvm_result() | 
|  | 920 | +    .llvm_config | 
|  | 921 | +    .clone(); | 
|  | 922 | +    let actual = drop_win_disk_prefix_if_present(actual); | 
|  | 923 | +    assert_eq!(expected, actual); | 
|  | 924 | + | 
|  | 925 | +    let actual = prebuilt_llvm_config(&builder, builder.config.build, false) | 
|  | 926 | +        .llvm_result() | 
|  | 927 | +        .llvm_config | 
|  | 928 | +        .clone(); | 
|  | 929 | +    let actual = drop_win_disk_prefix_if_present(actual); | 
|  | 930 | +    assert_eq!(expected, actual); | 
|  | 931 | +    assert_eq!(expected, actual); | 
|  | 932 | + | 
|  | 933 | +    let config = configure( | 
|  | 934 | +        r#" | 
|  | 935 | +            [llvm] | 
|  | 936 | +            download-ci-llvm = false | 
|  | 937 | +        "#, | 
|  | 938 | +    ); | 
|  | 939 | + | 
|  | 940 | +    let build = Build::new(config.clone()); | 
|  | 941 | +    let builder = Builder::new(&build); | 
|  | 942 | + | 
|  | 943 | +    let actual = prebuilt_llvm_config(&builder, builder.config.build, false) | 
|  | 944 | +        .llvm_result() | 
|  | 945 | +        .llvm_config | 
|  | 946 | +        .clone(); | 
|  | 947 | +    let expected = builder.out.join(builder.config.build).join("llvm/bin/llvm-config"); | 
|  | 948 | +    assert_eq!(expected, actual); | 
|  | 949 | + | 
|  | 950 | +    let config = configure( | 
|  | 951 | +        r#" | 
|  | 952 | +            [llvm] | 
|  | 953 | +            download-ci-llvm = true | 
|  | 954 | +        "#, | 
|  | 955 | +    ); | 
|  | 956 | + | 
|  | 957 | +    let build = Build::new(config.clone()); | 
|  | 958 | +    let builder = Builder::new(&build); | 
|  | 959 | + | 
|  | 960 | +    let actual = prebuilt_llvm_config(&builder, builder.config.build, false) | 
|  | 961 | +        .llvm_result() | 
|  | 962 | +        .llvm_config | 
|  | 963 | +        .clone(); | 
|  | 964 | +    let expected = builder.out.join(builder.config.build).join("ci-llvm/bin/llvm-config"); | 
|  | 965 | +    assert_eq!(expected, actual); | 
|  | 966 | +} | 
0 commit comments