Add main.rs and make usage a little nicer
This commit is contained in:
		
							parent
							
								
									8d8d6ac336
								
							
						
					
					
						commit
						3a5766186a
					
				
							
								
								
									
										302
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										302
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							| @ -17,12 +17,59 @@ version = "2.0.1" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" | checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "android-tzdata" | ||||||
|  | version = "0.1.1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "android_system_properties" | ||||||
|  | version = "0.1.5" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" | ||||||
|  | dependencies = [ | ||||||
|  |  "libc", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "anyhow" | name = "anyhow" | ||||||
| version = "1.0.98" | version = "1.0.98" | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" | checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "argh" | ||||||
|  | version = "0.1.13" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "34ff18325c8a36b82f992e533ece1ec9f9a9db446bd1c14d4f936bac88fcd240" | ||||||
|  | dependencies = [ | ||||||
|  |  "argh_derive", | ||||||
|  |  "argh_shared", | ||||||
|  |  "rust-fuzzy-search", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "argh_derive" | ||||||
|  | version = "0.1.13" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "adb7b2b83a50d329d5d8ccc620f5c7064028828538bdf5646acd60dc1f767803" | ||||||
|  | dependencies = [ | ||||||
|  |  "argh_shared", | ||||||
|  |  "proc-macro2", | ||||||
|  |  "quote", | ||||||
|  |  "syn", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "argh_shared" | ||||||
|  | version = "0.1.13" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "a464143cc82dedcdc3928737445362466b7674b5db4e2eb8e869846d6d84f4f6" | ||||||
|  | dependencies = [ | ||||||
|  |  "serde", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "async-trait" | name = "async-trait" | ||||||
| version = "0.1.88" | version = "0.1.88" | ||||||
| @ -78,6 +125,12 @@ version = "2.9.1" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" | checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "bumpalo" | ||||||
|  | version = "3.19.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "bytes" | name = "bytes" | ||||||
| version = "1.10.1" | version = "1.10.1" | ||||||
| @ -99,6 +152,20 @@ version = "1.0.1" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" | checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "chrono" | ||||||
|  | version = "0.4.41" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" | ||||||
|  | dependencies = [ | ||||||
|  |  "android-tzdata", | ||||||
|  |  "iana-time-zone", | ||||||
|  |  "js-sys", | ||||||
|  |  "num-traits", | ||||||
|  |  "wasm-bindgen", | ||||||
|  |  "windows-link", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "colored" | name = "colored" | ||||||
| version = "3.0.0" | version = "3.0.0" | ||||||
| @ -108,6 +175,12 @@ dependencies = [ | |||||||
|  "windows-sys", |  "windows-sys", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "core-foundation-sys" | ||||||
|  | version = "0.8.7" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "crossbeam-utils" | name = "crossbeam-utils" | ||||||
| version = "0.8.21" | version = "0.8.21" | ||||||
| @ -250,12 +323,42 @@ version = "0.14.5" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "hermit-abi" | ||||||
|  | version = "0.5.2" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "httparse" | name = "httparse" | ||||||
| version = "1.10.1" | version = "1.10.1" | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" | checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "iana-time-zone" | ||||||
|  | version = "0.1.63" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" | ||||||
|  | dependencies = [ | ||||||
|  |  "android_system_properties", | ||||||
|  |  "core-foundation-sys", | ||||||
|  |  "iana-time-zone-haiku", | ||||||
|  |  "js-sys", | ||||||
|  |  "log", | ||||||
|  |  "wasm-bindgen", | ||||||
|  |  "windows-core", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "iana-time-zone-haiku" | ||||||
|  | version = "0.1.2" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" | ||||||
|  | dependencies = [ | ||||||
|  |  "cc", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "icu_collections" | name = "icu_collections" | ||||||
| version = "2.0.0" | version = "2.0.0" | ||||||
| @ -374,12 +477,33 @@ dependencies = [ | |||||||
|  "libc", |  "libc", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "is-terminal" | ||||||
|  | version = "0.4.16" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" | ||||||
|  | dependencies = [ | ||||||
|  |  "hermit-abi", | ||||||
|  |  "libc", | ||||||
|  |  "windows-sys", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "itoa" | name = "itoa" | ||||||
| version = "1.0.15" | version = "1.0.15" | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" | checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "js-sys" | ||||||
|  | version = "0.3.77" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" | ||||||
|  | dependencies = [ | ||||||
|  |  "once_cell", | ||||||
|  |  "wasm-bindgen", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "lazy_static" | name = "lazy_static" | ||||||
| version = "1.5.0" | version = "1.5.0" | ||||||
| @ -422,6 +546,12 @@ dependencies = [ | |||||||
|  "scopeguard", |  "scopeguard", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "log" | ||||||
|  | version = "0.4.27" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "lsp-types" | name = "lsp-types" | ||||||
| version = "0.94.1" | version = "0.94.1" | ||||||
| @ -656,8 +786,11 @@ checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" | |||||||
| name = "reid" | name = "reid" | ||||||
| version = "1.0.0-beta.4" | version = "1.0.0-beta.4" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  |  "argh", | ||||||
|  "colored", |  "colored", | ||||||
|  |  "log", | ||||||
|  "reid-lib", |  "reid-lib", | ||||||
|  |  "stderrlog", | ||||||
|  "thiserror", |  "thiserror", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| @ -682,12 +815,24 @@ dependencies = [ | |||||||
|  "thiserror", |  "thiserror", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "rust-fuzzy-search" | ||||||
|  | version = "0.1.1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "a157657054ffe556d8858504af8a672a054a6e0bd9e8ee531059100c0fa11bb2" | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "rustc-demangle" | name = "rustc-demangle" | ||||||
| version = "0.1.26" | version = "0.1.26" | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" | checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "rustversion" | ||||||
|  | version = "1.0.22" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "ryu" | name = "ryu" | ||||||
| version = "1.0.20" | version = "1.0.20" | ||||||
| @ -802,6 +947,19 @@ version = "1.2.0" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "stderrlog" | ||||||
|  | version = "0.6.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "61c910772f992ab17d32d6760e167d2353f4130ed50e796752689556af07dc6b" | ||||||
|  | dependencies = [ | ||||||
|  |  "chrono", | ||||||
|  |  "is-terminal", | ||||||
|  |  "log", | ||||||
|  |  "termcolor", | ||||||
|  |  "thread_local", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "syn" | name = "syn" | ||||||
| version = "2.0.104" | version = "2.0.104" | ||||||
| @ -824,6 +982,15 @@ dependencies = [ | |||||||
|  "syn", |  "syn", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "termcolor" | ||||||
|  | version = "1.1.3" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" | ||||||
|  | dependencies = [ | ||||||
|  |  "winapi-util", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "thiserror" | name = "thiserror" | ||||||
| version = "1.0.69" | version = "1.0.69" | ||||||
| @ -844,6 +1011,15 @@ dependencies = [ | |||||||
|  "syn", |  "syn", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "thread_local" | ||||||
|  | version = "1.1.9" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" | ||||||
|  | dependencies = [ | ||||||
|  |  "cfg-if", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "tinystr" | name = "tinystr" | ||||||
| version = "0.8.1" | version = "0.8.1" | ||||||
| @ -1019,6 +1195,132 @@ version = "0.11.1+wasi-snapshot-preview1" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" | checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "wasm-bindgen" | ||||||
|  | version = "0.2.100" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" | ||||||
|  | dependencies = [ | ||||||
|  |  "cfg-if", | ||||||
|  |  "once_cell", | ||||||
|  |  "rustversion", | ||||||
|  |  "wasm-bindgen-macro", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "wasm-bindgen-backend" | ||||||
|  | version = "0.2.100" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" | ||||||
|  | dependencies = [ | ||||||
|  |  "bumpalo", | ||||||
|  |  "log", | ||||||
|  |  "proc-macro2", | ||||||
|  |  "quote", | ||||||
|  |  "syn", | ||||||
|  |  "wasm-bindgen-shared", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "wasm-bindgen-macro" | ||||||
|  | version = "0.2.100" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" | ||||||
|  | dependencies = [ | ||||||
|  |  "quote", | ||||||
|  |  "wasm-bindgen-macro-support", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "wasm-bindgen-macro-support" | ||||||
|  | version = "0.2.100" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" | ||||||
|  | dependencies = [ | ||||||
|  |  "proc-macro2", | ||||||
|  |  "quote", | ||||||
|  |  "syn", | ||||||
|  |  "wasm-bindgen-backend", | ||||||
|  |  "wasm-bindgen-shared", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "wasm-bindgen-shared" | ||||||
|  | version = "0.2.100" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" | ||||||
|  | dependencies = [ | ||||||
|  |  "unicode-ident", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "winapi-util" | ||||||
|  | version = "0.1.9" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" | ||||||
|  | dependencies = [ | ||||||
|  |  "windows-sys", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "windows-core" | ||||||
|  | version = "0.61.2" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" | ||||||
|  | dependencies = [ | ||||||
|  |  "windows-implement", | ||||||
|  |  "windows-interface", | ||||||
|  |  "windows-link", | ||||||
|  |  "windows-result", | ||||||
|  |  "windows-strings", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "windows-implement" | ||||||
|  | version = "0.60.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" | ||||||
|  | dependencies = [ | ||||||
|  |  "proc-macro2", | ||||||
|  |  "quote", | ||||||
|  |  "syn", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "windows-interface" | ||||||
|  | version = "0.59.1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" | ||||||
|  | dependencies = [ | ||||||
|  |  "proc-macro2", | ||||||
|  |  "quote", | ||||||
|  |  "syn", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "windows-link" | ||||||
|  | version = "0.1.3" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "windows-result" | ||||||
|  | version = "0.3.4" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" | ||||||
|  | dependencies = [ | ||||||
|  |  "windows-link", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "windows-strings" | ||||||
|  | version = "0.4.2" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" | ||||||
|  | dependencies = [ | ||||||
|  |  "windows-link", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "windows-sys" | name = "windows-sys" | ||||||
| version = "0.59.0" | version = "0.59.0" | ||||||
|  | |||||||
| @ -16,7 +16,7 @@ BINARY="$(echo $1 | cut -d'.' -f1)"".out" | |||||||
| 
 | 
 | ||||||
| echo $1 | echo $1 | ||||||
| 
 | 
 | ||||||
| cargo run --example cli $@ && \ | cargo run -p reid $@ && \ | ||||||
| ./$BINARY ; echo "Return value: ""$?" | ./$BINARY ; echo "Return value: ""$?" | ||||||
| 
 | 
 | ||||||
| ## Command from: clang -v hello.o -o test | ## Command from: clang -v hello.o -o test | ||||||
|  | |||||||
| @ -74,5 +74,19 @@ | |||||||
|     "indentationRules": { |     "indentationRules": { | ||||||
|         "increaseIndentPattern": "^((?!\\/\\/).)*(\\{[^}\"'`]*|\\([^)\"'`]*|\\[[^\\]\"'`]*)$", |         "increaseIndentPattern": "^((?!\\/\\/).)*(\\{[^}\"'`]*|\\([^)\"'`]*|\\[[^\\]\"'`]*)$", | ||||||
|         "decreaseIndentPattern": "^((?!.*?\\/\\*).*\\*/)?\\s*[\\)\\}\\]].*$" |         "decreaseIndentPattern": "^((?!.*?\\/\\*).*\\*/)?\\s*[\\)\\}\\]].*$" | ||||||
|     } |     }, | ||||||
|  |     "colorizedBracketPairs": [ | ||||||
|  |         [ | ||||||
|  |             "(", | ||||||
|  |             ")" | ||||||
|  |         ], | ||||||
|  |         [ | ||||||
|  |             "[", | ||||||
|  |             "]" | ||||||
|  |         ], | ||||||
|  |         [ | ||||||
|  |             "{", | ||||||
|  |             "}" | ||||||
|  |         ] | ||||||
|  |     ] | ||||||
| } | } | ||||||
| @ -7,9 +7,10 @@ edition = "2021" | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| [features] | [features] | ||||||
| default = ["color"] | default = ["color", "cli"] | ||||||
| 
 | 
 | ||||||
| color = ["colored"] | color = ["colored"] | ||||||
|  | cli = ["argh", "stderrlog"] | ||||||
| log_output = [] | log_output = [] | ||||||
| context_debug = [] | context_debug = [] | ||||||
| 
 | 
 | ||||||
| @ -18,4 +19,7 @@ context_debug = [] | |||||||
| thiserror = "1.0.44" | thiserror = "1.0.44" | ||||||
| reid-lib = { path = "../reid-llvm-lib", version = "1.0.0-beta.4", registry="gitea-teascade" } | reid-lib = { path = "../reid-llvm-lib", version = "1.0.0-beta.4", registry="gitea-teascade" } | ||||||
| 
 | 
 | ||||||
| colored = {version = "3.0.0", optional = true} | argh = { version = "0.1.13", optional = true } | ||||||
|  | stderrlog = { version = "0.6.0", optional = true } | ||||||
|  | log = "*" | ||||||
|  | colored = { version = "3.0.0", optional = true } | ||||||
| @ -1,4 +1,9 @@ | |||||||
| use std::{path::PathBuf, process::Command, thread, time::Duration}; | use std::{ | ||||||
|  |     path::PathBuf, | ||||||
|  |     process::{Command, Stdio}, | ||||||
|  |     thread, | ||||||
|  |     time::Duration, | ||||||
|  | }; | ||||||
| 
 | 
 | ||||||
| pub struct LDRunner { | pub struct LDRunner { | ||||||
|     command: String, |     command: String, | ||||||
| @ -26,8 +31,7 @@ impl LDRunner { | |||||||
|         let dyn_linker_path = find_objectfile(&self.dynamic_linker); |         let dyn_linker_path = find_objectfile(&self.dynamic_linker); | ||||||
|         let crt1_path = find_objectfile("crt1.o"); |         let crt1_path = find_objectfile("crt1.o"); | ||||||
| 
 | 
 | ||||||
|         #[cfg(feature = "log_output")] |         log::debug!("LDRunner: Using dynamic linker at: {:?}", dyn_linker_path); | ||||||
|         println!("LDRunner: Using dynamic linker at: {:?}", dyn_linker_path); |  | ||||||
| 
 | 
 | ||||||
|         let mut ld = Command::new(&self.command); |         let mut ld = Command::new(&self.command); | ||||||
|         ld.arg("-dynamic-linker").arg(dyn_linker_path).arg(crt1_path); |         ld.arg("-dynamic-linker").arg(dyn_linker_path).arg(crt1_path); | ||||||
| @ -40,21 +44,38 @@ impl LDRunner { | |||||||
|             .arg("-o") |             .arg("-o") | ||||||
|             .arg(out_path.to_str().unwrap()); |             .arg(out_path.to_str().unwrap()); | ||||||
| 
 | 
 | ||||||
|         #[cfg(feature = "log_output")] |         log::debug!( | ||||||
|         println!( |  | ||||||
|             "LDRunner: Executing linker to objfile at {:?} => {:?}", |             "LDRunner: Executing linker to objfile at {:?} => {:?}", | ||||||
|             input_path, out_path |             input_path, | ||||||
|  |             out_path | ||||||
|         ); |         ); | ||||||
|         #[cfg(feature = "log_output")] |         #[cfg(feature = "log_output")] | ||||||
|         dbg!(&ld); |         dbg!(&ld); | ||||||
| 
 | 
 | ||||||
|         ld.spawn().expect("Unable to execute ld!"); |         let ld_output = ld.output().expect("Unable to execute ld!"); | ||||||
|  |         if !ld_output.status.success() { | ||||||
|  |             let code = ld_output.status.code().unwrap_or(255); | ||||||
|  |             log::error!("LD exited with code {code}"); | ||||||
|  |             println!("{}", unsafe { String::from_utf8_unchecked(ld_output.stderr) }); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
| 
 | 
 | ||||||
|         thread::sleep(Duration::from_millis(100)); |         thread::sleep(Duration::from_millis(100)); | ||||||
| 
 | 
 | ||||||
|         #[cfg(feature = "log_output")] |         log::debug!("Setting executable bit to {:?}..", out_path); | ||||||
|         println!("Setting executable bit to {:?}..", out_path); | 
 | ||||||
|         Command::new("chmod").arg("+x").arg(out_path).spawn().unwrap(); |         let chmod_output = Command::new("chmod") | ||||||
|  |             .arg("+x") | ||||||
|  |             .arg(out_path) | ||||||
|  |             .output() | ||||||
|  |             .expect("Unable to execute ld!"); | ||||||
|  | 
 | ||||||
|  |         if !chmod_output.status.success() { | ||||||
|  |             let code = chmod_output.status.code().unwrap_or(255); | ||||||
|  |             log::error!("chmod exited with code {code}"); | ||||||
|  |             println!("{}", unsafe { String::from_utf8_unchecked(chmod_output.stderr) }); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|         thread::sleep(Duration::from_millis(100)); |         thread::sleep(Duration::from_millis(100)); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -64,6 +85,12 @@ fn find_objectfile(name: &str) -> String { | |||||||
|         .arg(&name) |         .arg(&name) | ||||||
|         .output() |         .output() | ||||||
|         .expect("Unable to execute whereis"); |         .expect("Unable to execute whereis"); | ||||||
|  |     if !whereis.status.success() { | ||||||
|  |         let code = whereis.status.code().unwrap_or(255); | ||||||
|  |         log::error!("whereis exited with code {code}"); | ||||||
|  |         println!("{}", unsafe { String::from_utf8_unchecked(whereis.stderr) }); | ||||||
|  |         panic!(); | ||||||
|  |     } | ||||||
|     let whereis_output = String::from_utf8(whereis.stdout).unwrap(); |     let whereis_output = String::from_utf8(whereis.stdout).unwrap(); | ||||||
| 
 | 
 | ||||||
|     whereis_output |     whereis_output | ||||||
|  | |||||||
							
								
								
									
										193
									
								
								reid/src/main.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										193
									
								
								reid/src/main.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,193 @@ | |||||||
|  | use std::{env, fs, path::PathBuf}; | ||||||
|  | 
 | ||||||
|  | use argh::FromArgs; | ||||||
|  | use log::*; | ||||||
|  | use reid::{compile_simple, ld::LDRunner, CustomIRs}; | ||||||
|  | use reid_lib::compile::CompileOutput; | ||||||
|  | 
 | ||||||
|  | #[derive(FromArgs, PartialEq, Debug)] | ||||||
|  | /// Compile or run a Reid (.reid) file
 | ||||||
|  | #[argh(help_triggers("-h", "--help", "help"))] | ||||||
|  | struct Options { | ||||||
|  |     #[argh(option, short = 'l', default = "log::Level::Info")] | ||||||
|  |     /// log level
 | ||||||
|  |     log_level: log::Level, | ||||||
|  |     #[argh(subcommand)] | ||||||
|  |     command: Command, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[derive(FromArgs, PartialEq, Debug)] | ||||||
|  | #[argh(subcommand)] | ||||||
|  | enum Command { | ||||||
|  |     Build(BuildOpts), | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[derive(FromArgs, PartialEq, Debug)] | ||||||
|  | /// Build an executable file without running it
 | ||||||
|  | #[argh(subcommand, name = "build")] | ||||||
|  | struct BuildOpts { | ||||||
|  |     #[argh(option, long = "lib", short = 'l')] | ||||||
|  |     /// asd
 | ||||||
|  |     libraries: Vec<String>, | ||||||
|  |     #[argh(positional)] | ||||||
|  |     path: PathBuf, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | fn main() { | ||||||
|  |     let options: Options = argh::from_env(); | ||||||
|  |     let mut errlog = stderrlog::new(); | ||||||
|  |     errlog.module(module_path!()).verbosity(options.log_level); | ||||||
|  |     if options.log_level as u8 > 3 { | ||||||
|  |         errlog.timestamp(stderrlog::Timestamp::Second); | ||||||
|  |     } | ||||||
|  |     errlog.init().unwrap(); | ||||||
|  | 
 | ||||||
|  |     match options.command { | ||||||
|  |         Command::Build(build) => { | ||||||
|  |             let cpu = std::env::var("CPU").unwrap_or("generic".to_owned()); | ||||||
|  |             let features = std::env::var("REIDFLAGS").unwrap_or("".to_owned()); | ||||||
|  | 
 | ||||||
|  |             let path = match build.path.canonicalize() { | ||||||
|  |                 Ok(path) => path, | ||||||
|  |                 Err(e) => { | ||||||
|  |                     error!("{e}"); | ||||||
|  |                     return; | ||||||
|  |                 } | ||||||
|  |             }; | ||||||
|  | 
 | ||||||
|  |             let parent = path.with_extension(""); | ||||||
|  |             let llvm_ir_path = parent.with_extension("ll"); | ||||||
|  |             let object_path = parent.with_extension("o"); | ||||||
|  |             let llir_path = parent.with_extension("llir"); | ||||||
|  |             let mir_path = parent.with_extension("mir"); | ||||||
|  |             let asm_path = parent.with_extension("asm"); | ||||||
|  | 
 | ||||||
|  |             let before = std::time::SystemTime::now(); | ||||||
|  | 
 | ||||||
|  |             let text = match fs::read_to_string(&path) { | ||||||
|  |                 Ok(text) => text, | ||||||
|  |                 Err(e) => { | ||||||
|  |                     error!("Could not read file: {e}"); | ||||||
|  |                     return; | ||||||
|  |                 } | ||||||
|  |             }; | ||||||
|  | 
 | ||||||
|  |             match compile_simple(&text, PathBuf::from(&path), Some(cpu), vec![features]) { | ||||||
|  |                 Ok(( | ||||||
|  |                     CompileOutput { | ||||||
|  |                         triple: _triple, | ||||||
|  |                         assembly, | ||||||
|  |                         obj_buffer, | ||||||
|  |                         llvm_ir: _llvm_ir, | ||||||
|  |                     }, | ||||||
|  |                     CustomIRs { llir, mir }, | ||||||
|  |                 )) => { | ||||||
|  |                     #[cfg(feature = "log_output")] | ||||||
|  |                     { | ||||||
|  |                         println!("{}", _llvm_ir); | ||||||
|  |                         println!("Compiled with triple: {}\n", &_triple); | ||||||
|  |                         println!("Output LLVM IR to {:?}", llvm_ir_path); | ||||||
|  |                         println!("Output Assembly to {:?}", asm_path); | ||||||
|  |                         println!("Output Object-file to {:?}\n", object_path); | ||||||
|  |                         println!("Output LLIR-file to {:?}\n", llir_path); | ||||||
|  |                         println!("Output MIR-file to {:?}\n", mir_path); | ||||||
|  |                     } | ||||||
|  | 
 | ||||||
|  |                     fs::write(&llvm_ir_path, &_llvm_ir).expect("Could not write LLVM IR -file!"); | ||||||
|  |                     fs::write(&asm_path, &assembly).expect("Could not write Assembly-file!"); | ||||||
|  |                     fs::write(&object_path, &obj_buffer).expect("Could not write Object-file!"); | ||||||
|  |                     fs::write(&llir_path, &llir).expect("Could not write LLIR-file!"); | ||||||
|  |                     fs::write(&mir_path, &mir).expect("Could not write MIR-file!"); | ||||||
|  |                     let after = std::time::SystemTime::now(); | ||||||
|  |                     println!( | ||||||
|  |                         "Compilation took: {:.2}ms\n", | ||||||
|  |                         (after.duration_since(before).unwrap().as_micros() as f32) / 1000. | ||||||
|  |                     ); | ||||||
|  | 
 | ||||||
|  |                     println!("Linking {:?}", &object_path); | ||||||
|  | 
 | ||||||
|  |                     let linker = std::env::var("LD").unwrap_or("ld".to_owned()); | ||||||
|  |                     let mut linker = LDRunner::from_command(&linker).with_library("c").with_library("m"); | ||||||
|  |                     for library in build.libraries { | ||||||
|  |                         linker = linker.with_library(&library); | ||||||
|  |                     } | ||||||
|  |                     linker.invoke(&object_path, &object_path.with_extension("out")); | ||||||
|  |                 } | ||||||
|  |                 Err(e) => panic!("{}", e), | ||||||
|  |             }; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // fn main() -> Result<(), std::io::Error> {
 | ||||||
|  | //     let args: Vec<String> = env::args().collect();
 | ||||||
|  | //     let mut iter = args.into_iter().skip(1);
 | ||||||
|  | //     if let Some(filename) = iter.next() {
 | ||||||
|  | //         let mut libraries = Vec::new();
 | ||||||
|  | //         while let Some(libname) = iter.next() {
 | ||||||
|  | //             libraries.push(libname);
 | ||||||
|  | //         }
 | ||||||
|  | 
 | ||||||
|  | //         let path = PathBuf::from(filename).canonicalize().unwrap();
 | ||||||
|  | //         let parent = path.with_extension("");
 | ||||||
|  | //         let llvm_ir_path = parent.with_extension("ll");
 | ||||||
|  | //         let object_path = parent.with_extension("o");
 | ||||||
|  | //         let llir_path = parent.with_extension("llir");
 | ||||||
|  | //         let mir_path = parent.with_extension("mir");
 | ||||||
|  | //         let asm_path = parent.with_extension("asm");
 | ||||||
|  | 
 | ||||||
|  | //         let before = std::time::SystemTime::now();
 | ||||||
|  | 
 | ||||||
|  | //         let text = fs::read_to_string(&path)?;
 | ||||||
|  | 
 | ||||||
|  | //         let cpu = std::env::var("CPU").unwrap_or("generic".to_owned());
 | ||||||
|  | //         let features = std::env::var("REIDFLAGS").unwrap_or("".to_owned());
 | ||||||
|  | 
 | ||||||
|  | //         match compile_simple(&text, PathBuf::from(&path), Some(cpu), vec![features]) {
 | ||||||
|  | //             Ok((
 | ||||||
|  | //                 CompileOutput {
 | ||||||
|  | //                     triple: _triple,
 | ||||||
|  | //                     assembly,
 | ||||||
|  | //                     obj_buffer,
 | ||||||
|  | //                     llvm_ir: _llvm_ir,
 | ||||||
|  | //                 },
 | ||||||
|  | //                 CustomIRs { llir, mir },
 | ||||||
|  | //             )) => {
 | ||||||
|  | //                 #[cfg(feature = "log_output")]
 | ||||||
|  | //                 {
 | ||||||
|  | //                     println!("{}", _llvm_ir);
 | ||||||
|  | //                     println!("Compiled with triple: {}\n", &_triple);
 | ||||||
|  | //                     println!("Output LLVM IR to {:?}", llvm_ir_path);
 | ||||||
|  | //                     println!("Output Assembly to {:?}", asm_path);
 | ||||||
|  | //                     println!("Output Object-file to {:?}\n", object_path);
 | ||||||
|  | //                     println!("Output LLIR-file to {:?}\n", llir_path);
 | ||||||
|  | //                     println!("Output MIR-file to {:?}\n", mir_path);
 | ||||||
|  | //                 }
 | ||||||
|  | 
 | ||||||
|  | //                 fs::write(&llvm_ir_path, &_llvm_ir).expect("Could not write LLVM IR -file!");
 | ||||||
|  | //                 fs::write(&asm_path, &assembly).expect("Could not write Assembly-file!");
 | ||||||
|  | //                 fs::write(&object_path, &obj_buffer).expect("Could not write Object-file!");
 | ||||||
|  | //                 fs::write(&llir_path, &llir).expect("Could not write LLIR-file!");
 | ||||||
|  | //                 fs::write(&mir_path, &mir).expect("Could not write MIR-file!");
 | ||||||
|  | //                 let after = std::time::SystemTime::now();
 | ||||||
|  | //                 println!(
 | ||||||
|  | //                     "Compilation took: {:.2}ms\n",
 | ||||||
|  | //                     (after.duration_since(before).unwrap().as_micros() as f32) / 1000.
 | ||||||
|  | //                 );
 | ||||||
|  | 
 | ||||||
|  | //                 println!("Linking {:?}", &object_path);
 | ||||||
|  | 
 | ||||||
|  | //                 let linker = std::env::var("LD").unwrap_or("ld".to_owned());
 | ||||||
|  | //                 let mut linker = LDRunner::from_command(&linker).with_library("c").with_library("m");
 | ||||||
|  | //                 for library in libraries {
 | ||||||
|  | //                     linker = linker.with_library(&library);
 | ||||||
|  | //                 }
 | ||||||
|  | //                 linker.invoke(&object_path, &object_path.with_extension("out"));
 | ||||||
|  | //             }
 | ||||||
|  | //             Err(e) => panic!("{}", e),
 | ||||||
|  | //         };
 | ||||||
|  | //     } else {
 | ||||||
|  | //         println!("Please input compiled file path!")
 | ||||||
|  | //     }
 | ||||||
|  | //     Ok(())
 | ||||||
|  | // }
 | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user