|
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