From 6d8d78851eed1e0f7a93c07d53dd3f6965f23bb5 Mon Sep 17 00:00:00 2001 From: Avril Date: Sat, 21 Nov 2020 01:46:35 +0000 Subject: [PATCH] rework build system --- Cargo.toml | 3 +++ Makefile | 12 ++++++------ build.rs | 24 ++++++++++++++++++++++++ cli/build/kana-hash-release | Bin 14424 -> 0 bytes cli/obj/src/main.o | Bin 23680 -> 0 bytes 5 files changed, 33 insertions(+), 6 deletions(-) create mode 100644 build.rs delete mode 100755 cli/build/kana-hash-release delete mode 100644 cli/obj/src/main.o diff --git a/Cargo.toml b/Cargo.toml index 6821f21..963846d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,3 +28,6 @@ libc = "0.2" crc = "1.8" hex-literal = "0.2" getrandom = "0.1" + +[build-dependencies] +rustc_version = "0.2" diff --git a/Makefile b/Makefile index 16f7fb2..02e8c43 100644 --- a/Makefile +++ b/Makefile @@ -5,11 +5,8 @@ CLI:= cli PROJECT=khash -BUILD:=./target/release -DEBUG:=./target/debug - -.PHONY: $(PROJECT) -$(PROJECT): release +BUILD =target/release +DEBUG =target/debug .PHONY: release release: $(BUILD)/lib$(PROJECT).so @@ -17,6 +14,9 @@ release: $(BUILD)/lib$(PROJECT).so .PHONY: debug debug: $(DEBUG)/lib$(PROJECT).so +.PHONY: $(PROJECT) +$(PROJECT): $(BUILD)/lib$(PROJECT).so + $(BUILD)/lib$(PROJECT).so: RUSTFLAGS?= -C target-cpu=native $(BUILD)/lib$(PROJECT).so: RUSTFLAGS="$(RUSTFLAGS)" cargo build --release @@ -39,7 +39,7 @@ test: | clean cd $(CLI) && $(MAKE) test clean: - rm -f $(BUILD)/lib + rm -f {$(BUILD),$(DEBUG)}/lib* cd $(CLI) && make clean install: diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..6399463 --- /dev/null +++ b/build.rs @@ -0,0 +1,24 @@ + +extern crate rustc_version; +use rustc_version::{version, version_meta, Channel}; + +fn main() { + // Assert we haven't travelled back in time + assert!(version().unwrap().major >= 1); + + // Set cfg flags depending on release channel + match version_meta().unwrap().channel { + Channel::Stable => { + println!("cargo:rustc-cfg=stable"); + } + Channel::Beta => { + println!("cargo:rustc-cfg=beta"); + } + Channel::Nightly => { + println!("cargo:rustc-cfg=nightly"); + } + Channel::Dev => { + println!("cargo:rustc-cfg=dev"); + } + } +} diff --git a/cli/build/kana-hash-release b/cli/build/kana-hash-release deleted file mode 100755 index 317cb11b8e7a4cfcd930fa6525497ab6fd6dd933..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14424 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 E2QHd|r2qf` diff --git a/cli/obj/src/main.o b/cli/obj/src/main.o deleted file mode 100644 index cc95e7c857004fc9ee69b2820ded2e1eb52d514a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23680 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