@@ -19,20 +19,43 @@ PREFIX := /usr
19
19
SBINDIR := $(PREFIX ) /sbin
20
20
SLIBDIR := $(PREFIX ) /lib
21
21
DESTDIR :=
22
+ CARGO_BUILD_ENV :=
22
23
SMARTDNS_SRC_DIR =../../src
23
-
24
+
24
25
ifeq ($(origin CC ) , environment)
25
- ARCH_TARGET: =$(shell $(CC ) -dumpmachine | sed 's/-[^-]* -linux-/-linux-/')
26
- ARCH =$(shell echo $(ARCH_TARGET ) | cut -d - -f 1)
27
- ABI =$(shell echo $(ARCH_TARGET ) | cut -d - -f 3)
28
- ifneq ($(ABI),)
29
- RUST_ARCH_TARGET: =$(shell rustc --print target-list | grep $(ARCH ) | grep linux | grep $(ABI ) | head -n 1)
26
+ ifeq ($(CARGO_BUILD_ARGS),)
27
+ # find default target by compiler
28
+ ARCH_TARGET: =$(shell $(CC ) -dumpmachine)
29
+ RUST_ARCH_TARGET: =$(shell rustc --print target-list | grep $(ARCH_TARGET ) | head -n 1)
30
+
31
+ ifeq ($(RUST_ARCH_TARGET),)
32
+ # not found, try to find target by compiler
33
+ ARCH_TARGET: =$(shell $(CC ) -dumpmachine | sed 's/-[^-]* -linux-/-linux-/')
34
+ ARCH =$(shell echo $(ARCH_TARGET ) | cut -d - -f 1)
35
+ ABI =$(shell echo $(ARCH_TARGET ) | cut -d - -f 3)
36
+ ifneq ($(ABI),)
37
+ # force set target to $(ARCH)-unknown-linux-$(ABI)
38
+ RUST_ARCH_TARGET: =$(shell rustc --print target-list | grep $(ARCH ) | grep linux | grep $(ABI ) | grep unknown | head -n 1)
39
+ endif
40
+ endif
41
+
42
+ ifneq ($(RUST_ARCH_TARGET),)
43
+ ARCH_TARGET_PATH =$(RUST_ARCH_TARGET ) /
44
+ override CARGO_RUSTFLAGS =-C linker=$(CC )
45
+ CARGO_BUILD_ARGS +=--target=$(RUST_ARCH_TARGET )
46
+ endif
30
47
endif
31
48
32
- ifneq ($(RUST_ARCH_TARGET),)
33
- ARCH_TARGET_PATH =$(RUST_ARCH_TARGET ) /
34
- override CARGO_RUSTFLAGS =-C linker=$(CC )
35
- CARGO_BUILD_ARGS +=--target=$(RUST_ARCH_TARGET )
49
+ # find sysroot
50
+ SYSROOT: =$(shell $(CC ) -print-sysroot)
51
+ ifeq ($(SYSROOT),)
52
+ # if sysroot is not set, try find sysroot from compiler default include path
53
+ SYSROOT: =$(shell $(CC ) -xc /dev/null -E -Wp,-v 2>&1 | sed -n 's,^ ,,p' | head -n 1)
54
+ ifneq ($(SYSROOT),)
55
+ # find sysroot, add sysroot to BINDGEN_EXTRA_CLANG_ARGS
56
+ SYSROOT: =$(SYSROOT ) /..
57
+ override CARGO_BUILD_ENV += BINDGEN_EXTRA_CLANG_ARGS="--sysroot=$(SYSROOT ) "
58
+ endif
36
59
endif
37
60
endif
38
61
@@ -64,7 +87,7 @@ test-prepare:
64
87
$(MAKE ) -C $(SMARTDNS_SRC_DIR ) libsmartdns-test.a
65
88
66
89
$(BIN ) :
67
- MAKEFLAGS= RUSTFLAGS=" $( CARGO_RUSTFLAGS) $( RUSTFLAGS) " cargo build $(CARGO_BUILD_ARGS ) --features " build-release"
90
+ MAKEFLAGS= RUSTFLAGS=" $( CARGO_RUSTFLAGS) $( RUSTFLAGS) " $( CARGO_BUILD_ENV ) cargo build $(CARGO_BUILD_ARGS ) --features " build-release"
68
91
cp $(CARGO_BUILD_PATH ) /libsmartdns_ui.so target/
69
92
70
93
install : $(BIN )
0 commit comments