-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_all_examples.sh
More file actions
executable file
·117 lines (100 loc) · 4.38 KB
/
test_all_examples.sh
File metadata and controls
executable file
·117 lines (100 loc) · 4.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#!/usr/bin/env bash
set -e
# Declare an associative array
declare -A TARGETS
TARGETS=(
["Adder"]="$(pwd)/Examples/Adder"
["Address"]="$(pwd)/Examples/FeatureTests/Address"
["BondingCurve"]="$(pwd)/Examples/BondingCurve"
["BlockInfo"]="$(pwd)/Examples/FeatureTests/BlockInfo"
["CallbackNotExposed"]="$(pwd)/Examples/FeatureTests/CallbackNotExposed"
["CheckPause"]="$(pwd)/Examples/CheckPause"
["Codec"]="$(pwd)/Examples/FeatureTests/Codec"
["CrowdfundingEsdt"]="$(pwd)/Examples/CrowdfundingEsdt"
["CryptoBubbles"]="$(pwd)/Examples/CryptoBubbles"
["CryptoKittiesAuction"]="$(pwd)/Examples/CryptoKitties/Auction"
["CryptoKittiesGeneticAlg"]="$(pwd)/Examples/CryptoKitties/GeneticAlg"
["CryptoKittiesOwnership"]="$(pwd)/Examples/CryptoKitties/Ownership"
["DigitalCash"]="$(pwd)/Examples/DigitalCash"
["Empty"]="$(pwd)/Examples/Empty"
["EsdtTransferWithFee"]="$(pwd)/Examples/EsdtTransferWithFee"
["Factorial"]="$(pwd)/Examples/Factorial"
["Flip"]="$(pwd)/Examples/Flip"
["LotteryEsdt"]="$(pwd)/Examples/LotteryEsdt"
["MultiFile"]="$(pwd)/Examples/MultiFile"
["Multisig"]="$(pwd)/Examples/Multisig"
["NftMinter"]="$(pwd)/Examples/NftMinter"
["OrderBookPair"]="$(pwd)/Examples/OrderBookPair"
["PingPongEgld"]="$(pwd)/Examples/PingPongEgld"
["ProxyPause"]="$(pwd)/Examples/ProxyPause"
["SendTestsExample"]="$(pwd)/Examples/SendTests"
["TokenIdentifier"]="$(pwd)/Examples/FeatureTests/TokenIdentifier"
["TokenOperations"]="$(pwd)/Examples/FeatureTests/TokenOperations"
["TokenRelease"]="$(pwd)/Examples/TokenRelease"
# Add more targets as needed
)
# Detect OS and architecture
OS="$(uname -s)"
ARCH="$(uname -m)"
# Normalize ARM64 architecture naming
if [[ "$ARCH" == "aarch64" ]]; then
ARCH="arm64"
fi
# Determine the correct executable
if [[ "$OS" == "Darwin" && "$ARCH" == "arm64" ]]; then
EXECUTABLE="scenariostest_darwin_arm64"
elif [[ "$OS" == "Linux" && "$ARCH" == "arm64" ]]; then
EXECUTABLE="scenariostest_linux_arm64"
elif [[ "$OS" == "Linux" && "$ARCH" == "x86_64" ]]; then
EXECUTABLE="scenariostest_linux_amd64"
else
echo "❌ Error: Unsupported OS/architecture combination: $OS $ARCH"
exit 1
fi
SCENARIO_FOLDER="$(pwd)/Utils/Scenarios"
SCENARIO_JSON_EXECUTABLE="$SCENARIO_FOLDER/$EXECUTABLE"
MEMCPY_C_FILE_PATH="$(pwd)/Utils/Memory/memcpy.c"
MEMCPY_OBJECT_FILE_PATH="$(pwd)/Utils/Memory/memcpy.o"
INIT_C_FILE_PATH="$(pwd)/Utils/Stub/init.c"
INIT_OBJECT_FILE_PATH="$(pwd)/Utils/Stub/init.o"
WASM32_LIB_ARCHIVE_PATH="$(pwd)/Utils/Builtins/libclang_rt.builtins-wasm32.a"
clang --target=wasm32 -O3 -c -o "$MEMCPY_OBJECT_FILE_PATH" "$MEMCPY_C_FILE_PATH"
clang --target=wasm32 -O3 -c -o "$INIT_OBJECT_FILE_PATH" "$INIT_C_FILE_PATH"
# If arguments are provided, filter targets to only those specified
if [[ $# -gt 0 ]]; then
DECLARED_TARGETS=()
for ARG in "$@"; do
if [[ -n "${TARGETS[$ARG]}" ]]; then
DECLARED_TARGETS+=("$ARG")
else
echo "⚠️ Warning: Target '$ARG' not found, skipping."
fi
done
else
DECLARED_TARGETS=("${!TARGETS[@]}")
fi
# Build selected targets
for TARGET in "${DECLARED_TARGETS[@]}"; do
TARGET_PACKAGE_PATH="${TARGETS[$TARGET]}"
# Do not edit the below variables
TARGET_PACKAGE_OUTPUT_PATH="$TARGET_PACKAGE_PATH/Output"
OBJECT_FILE_PATH="$(pwd)/$TARGET.o"
WASM_BUILT_FILE_PATH="$(pwd)/$TARGET.wasm"
WASM_OPT_FILE_PATH="$(pwd)/$TARGET-opt.wasm"
WASM_DEST_FILE_PATH="$TARGET_PACKAGE_OUTPUT_PATH/$TARGET.wasm"
SWIFT_WASM=true swift build --target "$TARGET" --triple wasm32-unknown-none-wasm --disable-index-store -Xswiftc -Osize -Xswiftc -gnone
wasm-ld --no-entry --export init --allow-undefined "$OBJECT_FILE_PATH" "$WASM32_LIB_ARCHIVE_PATH" "$MEMCPY_OBJECT_FILE_PATH" "$INIT_OBJECT_FILE_PATH" -o "$WASM_BUILT_FILE_PATH"
wasm-opt -Os -o "$WASM_OPT_FILE_PATH" "$WASM_BUILT_FILE_PATH"
mkdir -p "$TARGET_PACKAGE_OUTPUT_PATH"
cp "$WASM_OPT_FILE_PATH" "$WASM_DEST_FILE_PATH"
done
# Test selected targets
for TARGET in "${DECLARED_TARGETS[@]}"; do
TARGET_PACKAGE_PATH="${TARGETS[$TARGET]}"
SCENARIOS_JSON_DIR="$TARGET_PACKAGE_PATH/Scenarios"
if [ -d "$SCENARIOS_JSON_DIR" ]; then
LD_LIBRARY_PATH=$SCENARIO_FOLDER "$SCENARIO_JSON_EXECUTABLE" run "$SCENARIOS_JSON_DIR"
else
echo "Skipping $TARGET: Scenarios folder not found at $SCENARIOS_JSON_DIR"
fi
done