Repository navigation
Expand file tree
/
Copy patheosiocpp.in
More file actions
executable file
·154 lines (134 loc) · 4.51 KB
/
Copy patheosiocpp.in
File metadata and controls
executable file
·154 lines (134 loc) · 4.51 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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#!/bin/bash
EOSIO_BIN_INSTALL_DIR=`dirname $0`
if [ "${EOSIO_BIN_INSTALL_DIR}" == "." ]; then
EOSIO_BIN_INSTALL_DIR=`pwd`
fi
EOSIO_INSTALL_DIR=`dirname ${EOSIO_BIN_INSTALL_DIR}`
ABIGEN=${EOSIO_INSTALL_DIR}/bin/eosio-abigen
BOOST_INCLUDE_DIR=@Boost_INCLUDE_DIR@
function copy_skeleton {
set -e
cp -r "${EOSIO_INSTALL_DIR}/share/eosio/skeleton/." $newname
for file in $(find ./$newname -name 'skeleton.*')
do
newfile=`echo $file | sed 's/skeleton\./'"$newname"'./'`
# echo mv "${file}" "${newfile}"
mv "${file}" "${newfile}"
exp=s/skeleton/${newname}/g
# echo sed -i ${exp} ${newfile}
sed ${exp} ${newfile} > ${newfile}1
mv ${newfile}1 ${newfile}
done
echo "created $newname from skeleton"
set +e
}
function build_contract {
set -e
workdir=`mktemp -d`
# echo mkdir $workdir/built
mkdir $workdir/built
if [[ ${VERBOSE} == "1" ]]; then
PRINT_CMDS="set -x"
fi
for file in $@; do
name=`basename $file`
filePath=`dirname $file`
($PRINT_CMDS; @WASM_CLANG@ -emit-llvm -O3 --std=c++14 --target=wasm32 -nostdinc \
-nostdlib -nostdlibinc -ffreestanding -nostdlib -fno-threadsafe-statics -fno-rtti \
-fno-exceptions -I ${EOSIO_INSTALL_DIR}/include \
-I${EOSIO_INSTALL_DIR}/include/libc++/upstream/include \
-I${EOSIO_INSTALL_DIR}/include/musl/upstream/include \
-I${BOOST_INCLUDE_DIR} \
-I $filePath \
-c $file -o $workdir/built/$name
)
done
($PRINT_CMDS; @WASM_LLVM_LINK@ -only-needed -o $workdir/linked.bc $workdir/built/* \
${EOSIO_INSTALL_DIR}/usr/share/eosio/contractsdk/lib/libc.bc \
${EOSIO_INSTALL_DIR}/usr/share/eosio/contractsdk/lib/libc++.bc \
${EOSIO_INSTALL_DIR}/usr/share/eosio/contractsdk/lib/eosiolib.bc
)
($PRINT_CMDS; @WASM_LLC@ -thread-model=single --asm-verbose=false -o $workdir/assembly.s $workdir/linked.bc)
($PRINT_CMDS; ${EOSIO_INSTALL_DIR}/bin/eosio-s2wasm -o $outname -s 16384 $workdir/assembly.s)
# echo rm -rf $workdir
rm -rf $workdir
set +e
}
function generate_abi {
if [[ ! -e "$1" ]]; then
echo "You must specify a file"
exit 1
fi
context_folder=$(cd "$(dirname "$1")" ; pwd -P)
${ABIGEN} -extra-arg=-c -extra-arg=--std=c++14 -extra-arg=--target=wasm32 \
-extra-arg=-nostdinc -extra-arg=-nostdinc++ -extra-arg=-DABIGEN \
-extra-arg=-I${EOSIO_INSTALL_DIR}/include/libc++/upstream/include \
-extra-arg=-I${EOSIO_INSTALL_DIR}/include/musl/upstream/include \
-extra-arg=-I${BOOST_INCLUDE_DIR} \
-extra-arg=-I${EOSIO_INSTALL_DIR}/include -extra-arg=-I$context_folder \
-extra-arg=-fparse-all-comments -destination-file=${outname} -verbose=0 \
-context=$context_folder $1 --
if [ "$?" -ne 0 ]; then
exit 1
fi
echo "Generated ${outname} ..."
}
function print_help {
echo "Usage: $0 -o output.wast contract.cpp [other.cpp ...]"
echo " OR"
echo " $0 -n mycontract"
echo " OR"
echo " $0 -g contract.abi types.hpp"
echo
echo "Options:"
echo " -n | --newcontract [name]"
echo " Create a new contract in the [name] folder, based on the example contract"
echo " OR"
echo " -o | --outname [output.wast] [input.cpp ...]"
echo " Generate the wast output file based on input cpp files"
echo " OR"
echo " -g | --genabi contract.abi types.hpp"
echo " Generate the ABI specification file [EXPERIMENTAL]"
}
command=""
while [[ $# -gt 1 ]]
do
key="$1"
case $key in
-h|--help)
print_help
break;
;;
-n|--newcontract)
newname="$2"
command="newcontract"
shift 2
break
;;
-o|--outname)
outname="$2"
command="outname"
shift 2
break
;;
-g|--genabi)
outname="$2"
command="genabi"
shift 2
;;
*)
echo "Unrecognized option: $1"
exit 1
;;
esac
done
if [[ "outname" == "$command" ]]; then
build_contract $@
elif [[ "newcontract" == "$command" ]]; then
copy_skeleton
elif [[ "genabi" == "$command" ]]; then
generate_abi $@
else
print_help
exit 1
fi