@@ -117,13 +117,15 @@ BUILT_SOURCES += rust/RustBridge.h rust/RustBridge.cpp
117117stellar_core_SOURCES += rust/RustBridge.h rust/RustBridge.cpp
118118
119119RUST_TOOLCHAIN_FILE =$(top_srcdir ) /rust-toolchain.toml
120- RUST_TOOLCHAIN_CHANNEL =$(shell sed -n 's/channel * = * "\([^"]* \) "/\1/p' $(RUST_TOOLCHAIN_FILE ) )
120+ RUST_TOOLCHAIN_FILE_CHANNEL =$(shell sed -n 's/channel * = * "\([^"]* \) "/\1/p' $(RUST_TOOLCHAIN_FILE ) )
121+ RUST_TOOLCHAIN_CHANNEL =$(if $(findstring sanitize,$(CXXFLAGS ) ) ,nightly,$(RUST_TOOLCHAIN_FILE_CHANNEL ) )
121122CARGO =cargo +$(RUST_TOOLCHAIN_CHANNEL )
122123
123124# we pass RUST_TOOLCHAIN_CHANNEL by environment variable
124125# to tests since they can't take command-line arguments.
125126export RUST_TOOLCHAIN_CHANNEL
126127
128+ RUST_TARGET =$(shell rustc -vV | sed -n 's/host: //p')
127129RUST_BUILD_DIR =$(top_builddir ) /src/rust
128130RUST_BIN_DIR =$(RUST_BUILD_DIR ) /bin
129131RUST_TARGET_DIR =$(top_builddir ) /target
@@ -132,7 +134,7 @@ RUST_PROFILE=release
132134RUST_DEP_TREE_STAMP =$(RUST_BUILD_DIR ) /src/dep-trees/equal-trees.stamp
133135SOROBAN_LIBS_STAMP =$(RUST_BUILD_DIR ) /soroban/soroban-libs.stamp
134136RUST_HOST_DEPFILES =rust/Cargo.toml $(top_srcdir ) /Cargo.toml $(top_srcdir ) /Cargo.lock $(RUST_DEP_TREE_STAMP )
135- LIBRUST_STELLAR_CORE =$(RUST_TARGET_DIR ) /$(RUST_PROFILE ) /librust_stellar_core.a
137+ LIBRUST_STELLAR_CORE =$(RUST_TARGET_DIR ) /$(RUST_TARGET ) / $( RUST_PROFILE ) /librust_stellar_core.a
136138stellar_core_LDADD += $(LIBRUST_STELLAR_CORE ) -ldl
137139
138140SOROBAN_BUILD_DIR =$(abspath $(RUST_BUILD_DIR ) ) /soroban
@@ -178,7 +180,7 @@ endif
178180SOROBAN_MAX_PROTOCOL =$(lastword $(sort $(ALL_SOROBAN_PROTOCOLS ) ) )
179181
180182define soroban_lib_dir
181- $(shell printf '$(SOROBAN_BUILD_DIR ) /% s/target/$(RUST_PROFILE ) ' $(1 ) )
183+ $(shell printf '$(SOROBAN_BUILD_DIR ) /% s/target/$(RUST_TARGET ) / $( RUST_PROFILE ) ' $(1 ) )
182184endef
183185
184186define soroban_rlib
@@ -232,6 +234,32 @@ $(RUST_DEP_TREE_STAMP): $(wildcard rust/soroban/*/Cargo.*) Makefile $(RUST_TOOLC
232234# So we have to derive a new variable here.
233235RUST_PROFILE_ARG := $(if $(findstring release,$(RUST_PROFILE ) ) ,--release,)
234236
237+ RUSTFLAGS_ASAN := $(if $(findstring -fsanitize=address,$(CXXFLAGS ) ) ,-Zsanitizer=address,)
238+ RUSTFLAGS_TSAN := $(if $(findstring -fsanitize=thread,$(CXXFLAGS ) ) ,-Zsanitizer=thread,)
239+ RUSTFLAGS_SANI := $(RUSTFLAGS_ASAN ) $(RUSTFLAGS_TSAN )
240+ CARGOFLAGS_BUILDSTD := $(if $(findstring sanitizer,$(RUSTFLAGS_SANI ) ) ,-Zbuild-std,)
241+ RUSTFLAGS_CFGS := $(if $(findstring sanitizer,$(RUSTFLAGS_SANI ) ) ,--cfg curve25519_dalek_backend=\"serial\",)
242+
243+ if UNIFIED_RUST
244+
245+ $(LIBRUST_STELLAR_CORE ) : $(RUST_HOST_DEPFILES ) $(SRC_RUST_FILES ) Makefile $(RUST_TOOLCHAIN_FILE )
246+ rm -rf $(abspath $(RUST_TARGET_DIR ) )
247+ CC=" $( CC) " CXX=" $( CXX) " LD=" $( LD) " CFLAGS=" $( CFLAGS) " CXXFLAGS=" $( CXXFLAGS) " CXXSTDLIB=" $( CXXSTDLIB) " LDFLAGS=" $( LDFLAGS) " \
248+ RUSTFLAGS=" $( RUSTFLAGS_SANI) $( RUSTFLAGS_CFGS) " \
249+ CARGO_NET_GIT_FETCH_WITH_CLI=true \
250+ $(CARGO ) rustc \
251+ $(CARGOFLAGS_BUILDSTD ) \
252+ --package stellar-core \
253+ --target $(RUST_TARGET ) \
254+ --features unified \
255+ $(RUST_PROFILE_ARG ) \
256+ --locked \
257+ --target-dir $(abspath $(RUST_TARGET_DIR ) ) \
258+ $(CARGO_FEATURE_TRACY ) $(CARGO_FEATURE_NEXT ) $(CARGO_FEATURE_TESTUTILS )
259+ ranlib $@
260+
261+ else # !UNIFIED_RUST
262+
235263# This next build command looks a little weird but it's necessary. We have to
236264# provide an auxiliary metadata string (using RUSTFLAGS=-Cmetadata=$*)
237265# essentially manually marking-as-different the separate dependency trees
@@ -292,10 +320,11 @@ $(SOROBAN_LIBS_STAMP): $(wildcard rust/soroban/p*/Cargo.lock) Makefile $(RUST_DE
292320 esac ; \
293321 cd $(abspath $(RUST_BUILD_DIR ) ) /soroban/$$ proto && \
294322 CC=" $( CC) " CXX=" $( CXX) " LD=" $( LD) " CFLAGS=" $( CFLAGS) " CXXFLAGS=" $( CXXFLAGS) " CXXSTDLIB=" $( CXXSTDLIB) " LDFLAGS=" $( LDFLAGS) " \
295- RUSTFLAGS=" -Cmetadata=$$ proto $( RUSTFLAGS_ASAN ) " \
323+ RUSTFLAGS=" -Cmetadata=$$ proto" \
296324 CARGO_NET_GIT_FETCH_WITH_CLI=true \
297325 $(CARGO ) build \
298326 --package soroban-env-host \
327+ --target $(RUST_TARGET ) \
299328 $(RUST_PROFILE_ARG ) \
300329 --locked \
301330 $$ FEATURE_FLAGS \
@@ -319,10 +348,10 @@ $(SOROBAN_LIBS_STAMP): $(wildcard rust/soroban/p*/Cargo.lock) Makefile $(RUST_DE
319348$(LIBRUST_STELLAR_CORE ) : $(RUST_HOST_DEPFILES ) $(SRC_RUST_FILES ) Makefile $(SOROBAN_LIBS_STAMP ) $(RUST_TOOLCHAIN_FILE )
320349 rm -rf $(abspath $(RUST_TARGET_DIR ) )
321350 CC=" $( CC) " CXX=" $( CXX) " LD=" $( LD) " CFLAGS=" $( CFLAGS) " CXXFLAGS=" $( CXXFLAGS) " CXXSTDLIB=" $( CXXSTDLIB) " LDFLAGS=" $( LDFLAGS) " \
322- RUSTFLAGS=" $( RUSTFLAGS_ASAN) " \
323351 CARGO_NET_GIT_FETCH_WITH_CLI=true \
324352 $(CARGO ) rustc \
325353 --package stellar-core \
354+ --target $(RUST_TARGET ) \
326355 $(RUST_PROFILE_ARG ) \
327356 --locked \
328357 --target-dir $(abspath $(RUST_TARGET_DIR ) ) \
@@ -332,6 +361,8 @@ $(LIBRUST_STELLAR_CORE): $(RUST_HOST_DEPFILES) $(SRC_RUST_FILES) Makefile $(SORO
332361 $(ALL_SOROBAN_DEPEND_ARGS )
333362 ranlib $@
334363
364+ endif # UNIFIED_RUST
365+
335366$(srcdir ) /src.mk : $(top_srcdir ) /make-mks
336367 cd $(top_srcdir ) && ./make-mks
337368
0 commit comments