3
3
set -e
4
4
set -x
5
5
6
- if [ ! -d " $1 /lightning" -o " $2 " != " true" -a " $2 " != " false" ]; then
6
+ if [ ! -d " $1 /lightning" ] || [ " $2 " != " true" ] && [ " $2 " != " false" ]; then
7
7
echo " USAGE: $0 path-to-rust-lightning allow-std"
8
8
echo " allow-std must be either 'true' or 'false' to indicate if we should be built relying on time and pthread support"
9
9
exit 1
12
12
SKIP_TESTS_ARGUMENT=$3
13
13
RUN_CPP_TESTS=true
14
14
15
- if [ ! -z " $SKIP_TESTS_ARGUMENT " ]; then
15
+ if [ -n " $SKIP_TESTS_ARGUMENT " ]; then
16
16
if [ " $SKIP_TESTS_ARGUMENT " != " skip-tests" ]; then
17
17
echo " To skip tests, usage must be: $0 path-to-rust-lightning allow-std skip-tests"
18
18
exit 1
@@ -34,12 +34,14 @@ cd "$ORIG_PWD"
34
34
35
35
# First we set various compiler flags...
36
36
HOST_PLATFORM=" $( rustc --version --verbose | grep " host:" | awk ' { print $2 }' ) "
37
- ENV_TARGET=$( echo $ HOST_PLATFORM | sed ' s/ -/_/g ' )
37
+ ENV_TARGET=${ HOST_PLATFORM// -/ _}
38
38
39
39
# Set path to include our rustc wrapper as well as cbindgen
40
- export LDK_RUSTC_PATH=" $( which rustc) "
41
- export RUSTC=" $( pwd) /deterministic-build-wrappers/rustc"
42
- PATH=" $PATH :~/.cargo/bin"
40
+ LDK_RUSTC_PATH=" $( which rustc) "
41
+ export LDK_RUSTC_PATH
42
+ RUSTC=" $( pwd) /deterministic-build-wrappers/rustc"
43
+ export RUSTC
44
+ PATH=" $PATH :$HOME /.cargo/bin"
43
45
44
46
# Set up CFLAGS and RUSTFLAGS vars appropriately for building libsecp256k1 and demo apps...
45
47
BASE_CFLAGS=" " # CFLAGS for libsecp256k1
@@ -50,7 +52,7 @@ BASE_RUSTFLAGS="--cfg=c_bindings --remap-path-prefix $LIGHTNING_PATH=rust-lightn
50
52
51
53
# If the C compiler supports it, also set -ffile-prefix-map
52
54
echo " int main() {}" > genbindings_path_map_test_file.c
53
- clang -o /dev/null -ffile-prefix-map=$HOME /.cargo= genbindings_path_map_test_file.c > /dev/null 2>&1 &&
55
+ clang -o /dev/null -ffile-prefix-map=" $HOME " /.cargo= genbindings_path_map_test_file.c > /dev/null 2>&1 &&
54
56
export BASE_CFLAGS=" -ffile-prefix-map=$HOME /.cargo="
55
57
56
58
BASE_CFLAGS=" $BASE_CFLAGS -frandom-seed=42"
65
67
66
68
BASE_HOST_CFLAGS=" $BASE_CFLAGS "
67
69
68
- if [ " $MACOS_SDK " = " " -a " $HOST_OSX " = " true" ]; then
70
+ if [ " $MACOS_SDK " = " " ] && [ " $HOST_OSX " = " true" ]; then
69
71
MACOS_SDK=" $( xcrun --show-sdk-path) "
70
72
[ " $MACOS_SDK " = " " ] && exit 1
71
73
fi
@@ -87,18 +89,18 @@ case "$ENV_TARGET" in
87
89
" x86_64" * )
88
90
export RUSTFLAGS=" $BASE_RUSTFLAGS -C target-cpu=sandybridge"
89
91
export BASE_HOST_CFLAGS=" $BASE_HOST_CFLAGS -march=sandybridge -mtune=sandybridge"
90
- export CFLAGS_$ENV_TARGET =" $BASE_HOST_CFLAGS "
92
+ export " CFLAGS_$ENV_TARGET " =" $BASE_HOST_CFLAGS "
91
93
;;
92
94
" aarch64_apple_darwin" )
93
95
export RUSTFLAGS=" $BASE_RUSTFLAGS -C target-cpu=apple-a14"
94
96
export BASE_HOST_CFLAGS=" $BASE_HOST_CFLAGS -mcpu=apple-a14"
95
- export CFLAGS_$ENV_TARGET =" $BASE_HOST_CFLAGS "
97
+ export " CFLAGS_$ENV_TARGET " =" $BASE_HOST_CFLAGS "
96
98
;;
97
99
* )
98
100
# Assume this isn't targeted at another host and build for the host's CPU.
99
101
export RUSTFLAGS=" $BASE_RUSTFLAGS -C target-cpu=native"
100
102
export BASE_HOST_CFLAGS=" $BASE_HOST_CFLAGS -march=native -mtune=native"
101
- export CFLAGS_$ENV_TARGET =" $BASE_HOST_CFLAGS "
103
+ export " CFLAGS_$ENV_TARGET " =" $BASE_HOST_CFLAGS "
102
104
;;
103
105
esac
104
106
@@ -168,32 +170,32 @@ function is_gnu_sed(){
168
170
169
171
function add_crate() {
170
172
pushd " $LIGHTNING_PATH /$1 "
171
- RUSTC_BOOTSTRAP=1 cargo rustc --profile=check -Z avoid-dev-deps --no-default-features $3 -- --cfg=c_bindings -Zunpretty=expanded > /tmp/$1 -crate-source.txt
173
+ RUSTC_BOOTSTRAP=1 cargo rustc --profile=check -Z avoid-dev-deps --no-default-features " $3 " -- --cfg=c_bindings -Zunpretty=expanded > " /tmp/$1 -crate-source.txt"
172
174
popd
173
175
if [ " $HOST_OSX " = " true" ]; then
174
176
sed -i" .original" " 1i\\
175
177
pub mod $2 {
176
- " /tmp/$1 -crate-source.txt
178
+ " " /tmp/$1 -crate-source.txt"
177
179
else
178
- sed -i " 1ipub mod $2 {\n" /tmp/$1 -crate-source.txt
180
+ sed -i " 1ipub mod $2 {\n" " /tmp/$1 -crate-source.txt"
179
181
fi
180
- echo " }" >> /tmp/$1 -crate-source.txt
181
- cat /tmp/$1 -crate-source.txt >> /tmp/crate-source.txt
182
- rm /tmp/$1 -crate-source.txt
182
+ echo " }" >> " /tmp/$1 -crate-source.txt"
183
+ cat " /tmp/$1 -crate-source.txt" >> /tmp/crate-source.txt
184
+ rm " /tmp/$1 -crate-source.txt"
183
185
if is_gnu_sed; then
184
- sed -E -i ' s|#*' $1 ' = \{ .*|' $1 ' = \{ path = "' " $LIGHTNING_PATH " ' /' $1 ' ", default-features = false }|' lightning-c-bindings/Cargo.toml
186
+ sed -E -i ' s|#*' " $1 " ' = \{ .*|' " $1 " ' = \{ path = "' " $LIGHTNING_PATH " ' /' " $1 " ' ", default-features = false }|' lightning-c-bindings/Cargo.toml
185
187
else
186
188
# OSX sed is for some reason not compatible with GNU sed
187
- sed -E -i ' ' ' s|#*' $1 ' = \{ .*|' $1 ' = \{ path = "' " $LIGHTNING_PATH " ' /' $1 ' ", default-features = false }|' lightning-c-bindings/Cargo.toml
189
+ sed -E -i ' ' ' s|#*' " $1 " ' = \{ .*|' " $1 " ' = \{ path = "' " $LIGHTNING_PATH " ' /' " $1 " ' ", default-features = false }|' lightning-c-bindings/Cargo.toml
188
190
fi
189
191
}
190
192
191
193
function drop_crate() {
192
194
if is_gnu_sed; then
193
- sed -E -i ' s|' $1 ' = \{ (.*)|#' $1 ' = \{ \1|' lightning-c-bindings/Cargo.toml
195
+ sed -E -i ' s|' " $1 " ' = \{ (.*)|#' " $1 " ' = \{ \1|' lightning-c-bindings/Cargo.toml
194
196
else
195
197
# OSX sed is for some reason not compatible with GNU sed
196
- sed -E -i ' ' ' s|' $1 ' = \{ (.*)|#' $1 ' = \{ \1|' lightning-c-bindings/Cargo.toml
198
+ sed -E -i ' ' ' s|' " $1 " ' = \{ (.*)|#' " $1 " ' = \{ \1|' lightning-c-bindings/Cargo.toml
197
199
fi
198
200
}
199
201
232
234
cd lightning-c-bindings
233
235
234
236
RUSTFLAGS=" $RUSTFLAGS --cfg=test_mod_pointers" cargo build $CARGO_BUILD_ARGS
235
- if [ " $CFLAGS_aarch64_apple_darwin " != " " -a " $HOST_OSX " = " true" ]; then
237
+ if [ " $CFLAGS_aarch64_apple_darwin " != " " ] && [ " $HOST_OSX " = " true" ]; then
236
238
RUSTFLAGS=" $BASE_RUSTFLAGS -C target-cpu=apple-a14" cargo build $CARGO_BUILD_ARGS --target aarch64-apple-darwin
237
239
fi
238
240
cbindgen -v --config cbindgen.toml -o include/lightning.h > /dev/null 2>&1
@@ -266,14 +268,16 @@ echo "Updating C++ header, this may take some time, especially on macOS"
266
268
set +x # Echoing every command is very verbose here
267
269
OLD_IFS=" $IFS "
268
270
export IFS=' '
269
- echo ' #include <string.h>' > include/lightningpp_new.hpp
270
- echo ' namespace LDK {' >> include/lightningpp_new.hpp
271
- echo ' // Forward declarations' >> include/lightningpp_new.hpp
271
+ {
272
+ echo ' #include <string.h>'
273
+ echo ' namespace LDK {'
274
+ echo ' // Forward declarations'
275
+ } > include/lightningpp_new.hpp
272
276
cat include/lightningpp.hpp | sed -n ' s/class \(.*\) {/class \1;/p' >> include/lightningpp_new.hpp
273
277
echo ' ' >> include/lightningpp_new.hpp
274
278
275
279
DECLS=" "
276
- while read LINE; do
280
+ while read -r LINE; do
277
281
case " $LINE " in
278
282
" #include <string.h>" )
279
283
# We already printed this above.
@@ -311,7 +315,7 @@ while read LINE; do
311
315
312
316
IFS=' ,' ; for PARAM in $PARAMS ; do
313
317
DECLS=" $DECLS , "
314
- DECLS=" $DECLS $( echo $PARAM | sed ' s/.* (*\**\([a-zA-Z0-9_]*\)\()[\[0-9\]*]\)*/\1/' ) "
318
+ DECLS=" $DECLS $( echo " $PARAM " | sed ' s/.* (*\**\([a-zA-Z0-9_]*\)\()[\[0-9\]*]\)*/\1/' ) "
315
319
done
316
320
IFS=' '
317
321
@@ -333,21 +337,21 @@ mv include/lightningpp_new.hpp include/lightningpp.hpp
333
337
if $RUN_CPP_TESTS ; then
334
338
# Finally, sanity-check the generated C and C++ bindings with demo apps:
335
339
# Naively run the C demo app:
336
- gcc $LOCAL_CFLAGS -Wall -g -pthread demo.c target/debug/libldk.a -ldl -lm
340
+ gcc " $LOCAL_CFLAGS " -Wall -g -pthread demo.c target/debug/libldk.a -ldl -lm
337
341
./a.out
338
342
339
343
# And run the C++ demo app
340
344
if [ " $2 " = " true" ]; then
341
- g++ $LOCAL_CFLAGS -std=c++11 -Wall -g -pthread demo.cpp -Ltarget/debug/ -lldk -ldl
345
+ g++ " $LOCAL_CFLAGS " -std=c++11 -Wall -g -pthread demo.cpp -Ltarget/debug/ -lldk -ldl
342
346
LD_LIBRARY_PATH=target/debug/ ./a.out > /dev/null
343
347
fi
344
348
345
349
# Finally, run the C++ demo app with our native networking library
346
350
# in valgrind to test memory model correctness and lack of leaks.
347
- gcc $LOCAL_CFLAGS -fPIC -std=c99 -Wall -g -pthread -I../ldk-net ../ldk-net/ldk_net.c -c -o ldk_net.o
351
+ gcc " $LOCAL_CFLAGS " -fPIC -std=c99 -Wall -g -pthread -I../ldk-net ../ldk-net/ldk_net.c -c -o ldk_net.o
348
352
if [ " $2 " = " true" ]; then
349
- g++ $LOCAL_CFLAGS -std=c++11 -Wall -g -pthread -DREAL_NET -I../ldk-net ldk_net.o demo.cpp target/debug/libldk.a -ldl -lm
350
- if [ -x " ` which valgrind` " -a " $( uname -m) " != " ppc64le" ]; then
353
+ g++ " $LOCAL_CFLAGS " -std=c++11 -Wall -g -pthread -DREAL_NET -I../ldk-net ldk_net.o demo.cpp target/debug/libldk.a -ldl -lm
354
+ if [ -x " $( which valgrind) " ] && [ " $( uname -m) " != " ppc64le" ]; then
351
355
valgrind --error-exitcode=4 --memcheck:leak-check=full --show-leak-kinds=all ./a.out
352
356
echo
353
357
else
@@ -360,7 +364,7 @@ if $RUN_CPP_TESTS; then
360
364
# Test a statically-linked C++ version, tracking the resulting binary size and runtime
361
365
# across debug, LTO, and cross-language LTO builds (using the same compiler each time).
362
366
if [ " $2 " = " true" ]; then
363
- clang++ $LOCAL_CFLAGS -std=c++11 demo.cpp target/debug/libldk.a -ldl
367
+ clang++ " $LOCAL_CFLAGS " -std=c++11 demo.cpp target/debug/libldk.a -ldl
364
368
strip ./a.out
365
369
time ./a.out
366
370
echo " C++ Bin size and runtime w/o optimization:"
@@ -385,8 +389,12 @@ function REALLY_PIN_CC {
385
389
# registry and build --offline to avoid it using the latest version.
386
390
NEW_CC_DEP=" $CARGO_HOME "
387
391
[ " $NEW_CC_DEP " = " " ] && NEW_CC_DEP=" $HOME "
388
- [ -d " $NEW_CC_DEP /.cargo/registry/cache/" github.com-* ] && CARGO_REGISTRY_CACHE=" $( echo " $NEW_CC_DEP /.cargo/registry/cache/" github.com-* ) "
389
- [ -d " $NEW_CC_DEP /.cargo/registry/cache/" index.crates.io-* ] && CARGO_REGISTRY_CACHE=" $( echo " $NEW_CC_DEP /.cargo/registry/cache/" index.crates.io-* ) "
392
+ for dir in " $NEW_CC_DEP /.cargo/registry/cache/" github.com-* ; do
393
+ CARGO_REGISTRY_CACHE=" $dir "
394
+ done
395
+ for dir in " $NEW_CC_DEP /.cargo/registry/cache/" index.crates.io-* ; do
396
+ CARGO_REGISTRY_CACHE=" $dir "
397
+ done
390
398
if [ -d " $CARGO_REGISTRY_CACHE " ]; then
391
399
if [ -f " $CARGO_REGISTRY_CACHE /compiler_builtins-0.1.109.crate" ]; then
392
400
mv " $CARGO_REGISTRY_CACHE /compiler_builtins-0.1.109.crate" ./
@@ -407,11 +415,11 @@ function REALLY_PIN_CC {
407
415
if [ " $HOST_PLATFORM " = " x86_64-unknown-linux-gnu" ]; then
408
416
if cargo +nightly --version > /dev/null 2>&1 ; then
409
417
LLVM_V=$( rustc +nightly --version --verbose | grep " LLVM version" | awk ' { print substr($3, 0, 2); }' )
410
- if [ -x " $( which clang-$LLVM_V ) " ]; then
418
+ if [ -x " $( which clang-" $LLVM_V " ) " ]; then
411
419
cargo +nightly clean
412
420
413
421
REALLY_PIN_CC
414
- cargo +nightly rustc --offline $CARGO_BUILD_ARGS -Zbuild-std=std,panic_abort --target x86_64-unknown-linux-gnu -v -- -Zsanitizer=memory -Zsanitizer-memory-track-origins -Cforce-frame-pointers=yes
422
+ cargo +nightly rustc --offline " $CARGO_BUILD_ARGS " -Zbuild-std=std,panic_abort --target x86_64-unknown-linux-gnu -v -- -Zsanitizer=memory -Zsanitizer-memory-track-origins -Cforce-frame-pointers=yes
415
423
mv target/x86_64-unknown-linux-gnu/debug/libldk.* target/debug/
416
424
417
425
# Sadly, std doesn't seem to compile into something that is memsan-safe as of Aug 2020,
@@ -420,17 +428,17 @@ if [ "$HOST_PLATFORM" = "x86_64-unknown-linux-gnu" ]; then
420
428
set +e
421
429
422
430
# First the C demo app...
423
- clang-$LLVM_V $LOCAL_CFLAGS -fsanitize=memory -fsanitize-memory-track-origins -g demo.c target/debug/libldk.a -ldl
431
+ " clang-$LLVM_V " " $LOCAL_CFLAGS " -fsanitize=memory -fsanitize-memory-track-origins -g demo.c target/debug/libldk.a -ldl
424
432
./a.out
425
433
426
434
if [ " $2 " = " true" ]; then
427
435
# ...then the C++ demo app
428
- clang++-$LLVM_V $LOCAL_CFLAGS -std=c++11 -fsanitize=memory -fsanitize-memory-track-origins -g demo.cpp target/debug/libldk.a -ldl
436
+ " clang++-$LLVM_V " " $LOCAL_CFLAGS " -std=c++11 -fsanitize=memory -fsanitize-memory-track-origins -g demo.cpp target/debug/libldk.a -ldl
429
437
./a.out > /dev/null
430
438
431
439
# ...then the C++ demo app with the ldk_net network implementation
432
- clang-$LLVM_V $LOCAL_CFLAGS -std=c99 -fsanitize=memory -fsanitize-memory-track-origins -g -I../ldk-net ../ldk-net/ldk_net.c -c -o ldk_net.o
433
- clang++-$LLVM_V $LOCAL_CFLAGS -std=c++11 -fsanitize=memory -fsanitize-memory-track-origins -g -DREAL_NET -I../ldk-net ldk_net.o demo.cpp target/debug/libldk.a -ldl
440
+ " clang-$LLVM_V " " $LOCAL_CFLAGS " -std=c99 -fsanitize=memory -fsanitize-memory-track-origins -g -I../ldk-net ../ldk-net/ldk_net.c -c -o ldk_net.o
441
+ " clang++-$LLVM_V " " $LOCAL_CFLAGS " -std=c++11 -fsanitize=memory -fsanitize-memory-track-origins -g -DREAL_NET -I../ldk-net ldk_net.o demo.cpp target/debug/libldk.a -ldl
434
442
./a.out > /dev/null
435
443
fi
436
444
@@ -481,22 +489,22 @@ if [ "$CLANG_LLVM_V" = "$RUSTC_LLVM_V" ]; then
481
489
if [ " $LLD_LLVM_V " = " $CLANG_LLVM_V " ]; then
482
490
LLD=lld
483
491
fi
484
- elif [ -x " $( which clang-$RUSTC_LLVM_V ) " ]; then
485
- CLANG=" $( which clang-$RUSTC_LLVM_V ) "
486
- CLANGPP=" $( which clang++-$RUSTC_LLVM_V || echo clang++) "
492
+ elif [ -x " $( which " clang-$RUSTC_LLVM_V " ) " ]; then
493
+ CLANG=" $( which " clang-$RUSTC_LLVM_V " ) "
494
+ CLANGPP=" $( which " clang++-$RUSTC_LLVM_V " || echo clang++) "
487
495
if [ " $( $CLANG --version) " != " $( $CLANGPP --version) " ]; then
488
496
echo " $CLANG and $CLANGPP are not the same version of clang!"
489
497
unset CLANG
490
498
unset CLANGPP
491
499
fi
492
500
if [ " $LLD_LLVM_V " != " $RUSTC_LLVM_V " ]; then
493
501
LLD=" lld"
494
- [ -x " $( which lld-$RUSTC_LLVM_V ) " ] && LLD=" lld-$RUSTC_LLVM_V "
495
- LLD_LLVM_V=" $( ld.lld-$RUSTC_LLVM_V --version | awk ' { print $2; }' ) "
502
+ [ -x " $( which " lld-$RUSTC_LLVM_V " ) " ] && LLD=" lld-$RUSTC_LLVM_V "
503
+ LLD_LLVM_V=" $( " ld.lld-$RUSTC_LLVM_V " --version | awk ' { print $2; }' ) "
496
504
if [ " $LLD_LLVM_V " = " LLD" ]; then # eg if the output is "Debian LLD ..."
497
- LLD_LLVM_V=" $( ld.lld-$RUSTC_LLVM_V --version | awk ' { print substr($3, 0, 2); }' ) "
505
+ LLD_LLVM_V=" $( " ld.lld-$RUSTC_LLVM_V " --version | awk ' { print substr($3, 0, 2); }' ) "
498
506
else
499
- LLD_LLVM_V=" $( ld.lld-$RUSTC_LLVM_V --version | awk ' { print substr($2, 0, 2); }' ) "
507
+ LLD_LLVM_V=" $( " ld.lld-$RUSTC_LLVM_V " --version | awk ' { print substr($2, 0, 2); }' ) "
500
508
fi
501
509
if [ " $LLD_LLVM_V " != " $RUSTC_LLVM_V " ]; then
502
510
echo " Could not find a workable version of lld, not using cross-language LTO"
@@ -505,9 +513,9 @@ elif [ -x "$(which clang-$RUSTC_LLVM_V)" ]; then
505
513
fi
506
514
fi
507
515
508
- if [ " $CLANG " != " " -a " $CLANGPP " = " " ]; then
516
+ if [ " $CLANG " != " " ] && [ " $CLANGPP " = " " ]; then
509
517
echo " WARNING: It appears you have a clang-$RUSTC_LLVM_V but not clang++-$RUSTC_LLVM_V . This is common, but leaves us unable to compile C++ with LLVM $RUSTC_LLVM_V "
510
- echo " You should create a symlink called clang++-$RUSTC_LLVM_V pointing to $CLANG in $( dirname $CLANG ) "
518
+ echo " You should create a symlink called clang++-$RUSTC_LLVM_V pointing to $CLANG in $( dirname " $CLANG " ) "
511
519
fi
512
520
513
521
# Finally, if we're on Linux, build the final debug binary with address sanitizer (and leave it there)
550
558
# Now build with LTO on on both C++ and rust, but without cross-language LTO:
551
559
# Clear stale release build artifacts from previous runs
552
560
cargo clean --release
553
- CARGO_PROFILE_RELEASE_LTO=true RUSTFLAGS=" $RUSTFLAGS -C embed-bitcode=yes -C lto" cargo build $CARGO_BUILD_ARGS -v --release
561
+ CARGO_PROFILE_RELEASE_LTO=true RUSTFLAGS=" $RUSTFLAGS -C embed-bitcode=yes -C lto" cargo build " $CARGO_BUILD_ARGS " -v --release
554
562
if [ " $2 " = " true" ]; then
555
- clang++ $LOCAL_CFLAGS -std=c++11 -O2 demo.cpp target/release/libldk.a -ldl
563
+ clang++ " $LOCAL_CFLAGS " -std=c++11 -O2 demo.cpp target/release/libldk.a -ldl
556
564
fi
557
565
558
566
strip ./a.out
@@ -566,17 +574,17 @@ if [ "$CLANGPP" != "" ]; then
566
574
# The cc-rs crate tries to force -fdata-sections and -ffunction-sections on, which
567
575
# breaks -fembed-bitcode, so we turn off cc-rs' default flags and specify exactly
568
576
# what we want here.
569
- export CFLAGS_$ENV_TARGET =" $BASE_HOST_CFLAGS -fPIC -fembed-bitcode"
577
+ export " CFLAGS_$ENV_TARGET " =" $BASE_HOST_CFLAGS -fPIC -fembed-bitcode"
570
578
export CRATE_CC_NO_DEFAULTS=true
571
579
fi
572
580
573
- if [ " $2 " = " false" -a " $( rustc --print target-list | grep wasm32-wasi) " != " " ]; then
581
+ if [ " $2 " = " false" ] && [ " $( rustc --print target-list | grep wasm32-wasi) " != " " ]; then
574
582
# Test to see if clang supports wasm32 as a target (which is needed to build rust-secp256k1)
575
583
echo " int main() {}" > genbindings_wasm_test_file.c
576
584
if clang -nostdlib -o /dev/null --target=wasm32-wasi -Wl,--no-entry genbindings_wasm_test_file.c > /dev/null 2>&1 ; then
577
585
# And if it does, build a WASM binary without capturing errors
578
586
export CFLAGS_wasm32_wasi=" $BASE_CFLAGS -target wasm32-wasi -O1"
579
- RUSTFLAGS=" $BASE_RUSTFLAGS -C opt-level=1 --cfg=test_mod_pointers" cargo build $CARGO_BUILD_ARGS -v --target=wasm32-wasi
587
+ RUSTFLAGS=" $BASE_RUSTFLAGS -C opt-level=1 --cfg=test_mod_pointers" cargo build " $CARGO_BUILD_ARGS " -v --target=wasm32-wasi
580
588
export CFLAGS_wasm32_wasi=" $BASE_CFLAGS -fembed-bitcode -target wasm32-wasi -Oz"
581
589
RUSTFLAGS=" $BASE_RUSTFLAGS -C embed-bitcode=yes -C opt-level=z -C linker-plugin-lto -C lto" CARGO_PROFILE_RELEASE_LTO=true cargo build $CARGO_BUILD_ARGS -v --release --target=wasm32-wasi
582
590
else
@@ -585,41 +593,43 @@ if [ "$2" = "false" -a "$(rustc --print target-list | grep wasm32-wasi)" != "" ]
585
593
rm genbindings_wasm_test_file.c
586
594
fi
587
595
588
- EXTRA_TARGETS=( $LDK_C_BINDINGS_EXTRA_TARGETS )
589
- EXTRA_CCS=( $LDK_C_BINDINGS_EXTRA_TARGET_CCS )
590
- EXTRA_LINK_LTO=( $LDK_C_BINDINGS_EXTRA_TARGET_LINK_LTO )
596
+ EXTRA_TARGETS=( " $LDK_C_BINDINGS_EXTRA_TARGETS " )
597
+ EXTRA_CCS=( " $LDK_C_BINDINGS_EXTRA_TARGET_CCS " )
598
+ EXTRA_LINK_LTO=( " $LDK_C_BINDINGS_EXTRA_TARGET_LINK_LTO " )
591
599
592
600
if [ ${# EXTRA_TARGETS[@]} != ${# EXTRA_CCS[@]} ]; then
593
601
echo " LDK_C_BINDINGS_EXTRA_TARGETS and LDK_C_BINDINGS_EXTRA_TARGET_CCS didn't have the same number of elements!"
594
602
exit 1
595
603
fi
596
604
597
- for IDX in ${! EXTRA_TARGETS[@]} ; do
598
- EXTRA_ENV_TARGET=$( echo " ${EXTRA_TARGETS[$IDX]} " | sed ' s/ -/_/g ' )
599
- export CFLAGS_$EXTRA_ENV_TARGET =" $BASE_CFLAGS "
600
- export CC_$EXTRA_ENV_TARGET = ${EXTRA_CCS[$IDX]}
605
+ for IDX in " ${! EXTRA_TARGETS[@]} " ; do
606
+ EXTRA_ENV_TARGET=" ${EXTRA_TARGETS[$IDX]// -/ _} "
607
+ export " CFLAGS_$EXTRA_ENV_TARGET " =" $BASE_CFLAGS "
608
+ export " CC_$EXTRA_ENV_TARGET " = " ${EXTRA_CCS[$IDX]} "
601
609
EXTRA_RUSTFLAGS=" "
602
610
case " $EXTRA_ENV_TARGET " in
603
611
" x86_64" * )
604
- export CFLAGS_$EXTRA_ENV_TARGET =" $BASE_CFLAGS -march=sandybridge -mtune=sandybridge"
612
+ export " CFLAGS_$EXTRA_ENV_TARGET " =" $BASE_CFLAGS -march=sandybridge -mtune=sandybridge"
605
613
EXTRA_RUSTFLAGS=" -C target-cpu=sandybridge"
606
614
;;
607
615
esac
608
616
[ " ${EXTRA_LINK_LTO[$IDX]} " != " " ] && EXTRA_RUSTFLAGS=" -C linker-plugin-lto"
609
617
RUSTFLAGS=" $BASE_RUSTFLAGS -C embed-bitcode=yes -C lto -C linker=${EXTRA_CCS[$IDX]} $EXTRA_RUSTFLAGS " CARGO_PROFILE_RELEASE_LTO=true cargo build $CARGO_BUILD_ARGS -v --release --target " ${EXTRA_TARGETS[$IDX]} "
610
618
done
611
619
612
- if [ " $CLANGPP " != " " -a " $LLD " != " " ]; then
620
+ if [ " $CLANGPP " != " " ] && [ " $LLD " != " " ]; then
613
621
# Finally, test cross-language LTO. Note that this will fail if rustc and clang++
614
622
# build against different versions of LLVM (eg when rustc is installed via rustup
615
623
# or Ubuntu packages). This should work fine on Distros which do more involved
616
624
# packaging than simply shipping the rustup binaries (eg Debian should Just Work
617
625
# here).
618
626
LINK_ARG_FLAGS=" -C link-arg=-fuse-ld=$LLD "
619
- export LDK_CLANG_PATH=$( which $CLANG )
627
+ LDK_CLANG_PATH=$( which " $CLANG " )
628
+ export LDK_CLANG_PATH
620
629
if [ " $MACOS_SDK " != " " ]; then
621
630
REALLY_PIN_CC
622
- export CLANG=" $( pwd) /../deterministic-build-wrappers/clang-lto-link-osx"
631
+ CLANG=" $( pwd) /../deterministic-build-wrappers/clang-lto-link-osx"
632
+ export CLANG
623
633
for ARG in $CFLAGS_aarch64_apple_darwin ; do
624
634
MANUAL_LINK_CFLAGS=" $MANUAL_LINK_CFLAGS -C link-arg=$ARG "
625
635
done
@@ -638,14 +648,14 @@ if [ "$CLANGPP" != "" -a "$LLD" != "" ]; then
638
648
# If we're on an M1 don't bother building X86 binaries
639
649
if [ " $HOST_PLATFORM " != " aarch64-apple-darwin" ]; then
640
650
[ " $HOST_OSX " != " true" ] && export CLANG=" $LDK_CLANG_PATH "
641
- export CFLAGS_$ENV_TARGET =" $BASE_HOST_CFLAGS -O3 -fPIC -fembed-bitcode"
651
+ export " CFLAGS_$ENV_TARGET " =" $BASE_HOST_CFLAGS -O3 -fPIC -fembed-bitcode"
642
652
# Rust doesn't recognize CFLAGS changes, so we need to clean build artifacts
643
653
cargo clean --release
644
654
CARGO_PROFILE_RELEASE_LTO=true RUSTFLAGS=" $RUSTFLAGS -C embed-bitcode=yes -C linker-plugin-lto -C lto -C linker=$CLANG $LINK_ARG_FLAGS -C link-arg=-march=sandybridge -C link-arg=-mtune=sandybridge" cargo build $CARGO_BUILD_ARGS -v --release
645
655
646
656
if [ " $2 " = " true" ]; then
647
- $CLANGPP $LOCAL_CFLAGS -flto -fuse-ld=$LLD -O2 -c demo.cpp -o demo.o
648
- $CLANGPP $LOCAL_CFLAGS -flto -fuse-ld=$LLD -Wl,--lto-O2 -Wl,-O2 -O2 demo.o target/release/libldk.a -ldl
657
+ " $CLANGPP " " $LOCAL_CFLAGS " -flto -fuse-ld=" $LLD " -O2 -c demo.cpp -o demo.o
658
+ " $CLANGPP " " $LOCAL_CFLAGS " -flto -fuse-ld=" $LLD " -Wl,--lto-O2 -Wl,-O2 -O2 demo.o target/release/libldk.a -ldl
649
659
strip ./a.out
650
660
time ./a.out
651
661
echo " C++ Bin size and runtime with cross-language LTO:"
0 commit comments