blob: a38d2ff91f4a2aaf928c3effc7fb71139f92b5fe [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001#!/bin/sh
2
3# build-swig-Python.sh
4
Caroline Tice9dbe7172010-06-16 19:26:52 +00005# SRC_ROOT is the root of the lldb source tree.
6# TARGET_DIR is where the lldb framework/shared library gets put.
7# CONFIG_BUILD_DIR is where the build-swig-Python-LLDB.sh shell script
8# put the lldb.py file it was generated from running SWIG.
9# PREFIX is the root directory used to determine where third-party modules
10# for scripting languages should be installed.
11# debug_flag (optional) determines whether or not this script outputs
12# additional information when running.
Chris Lattner24943d22010-06-08 16:52:24 +000013
Caroline Tice9dbe7172010-06-16 19:26:52 +000014SRC_ROOT=$1
15TARGET_DIR=$2
16CONFIG_BUILD_DIR=$3
17PYTHON_INSTALL_DIR=$4
18debug_flag=$5
Jim Ingham2396b9f2011-03-01 01:39:04 +000019SWIG=$6
Caroline Tice9dbe7172010-06-16 19:26:52 +000020
Filipe Cabecinhas4bb4f302012-09-14 17:09:15 +000021os_name=`uname -s`
Jason Molendae2801e12012-09-27 21:26:57 +000022if [ "$os_name" = "Darwin" ]
Filipe Cabecinhas4bb4f302012-09-14 17:09:15 +000023then
24 swig_output_file=${SRC_ROOT}/source/LLDBWrapPython.cpp
25else
26 swig_output_file=${TARGET_DIR}/LLDBWrapPython.cpp
27fi
Caroline Tice9dbe7172010-06-16 19:26:52 +000028swig_input_file=${SRC_ROOT}/scripts/lldb.swig
Johnny Chenf530bfe2011-08-22 22:10:57 +000029swig_python_extensions=${SRC_ROOT}/scripts/Python/python-extensions.swig
30swig_python_wrapper=${SRC_ROOT}/scripts/Python/python-wrapper.swig
Enrico Granatab62d4c62012-02-02 17:26:00 +000031swig_python_typemaps=${SRC_ROOT}/scripts/Python/python-typemaps.swig
Chris Lattner24943d22010-06-08 16:52:24 +000032
Filipe Cabecinhas4bb4f302012-09-14 17:09:15 +000033if [ "$LLDB_DISABLE_PYTHON" = "1" ] ; then
Jim Inghamf4ec2ea2012-05-26 00:23:52 +000034 # We don't want Python for this build, but touch the output file so we don't have to
35 # conditionalize the build on this as well.
36 # Note, at present iOS doesn't have Python, so if you're building for iOS be sure to
37 # set LLDB_DISABLE_PYTHON to 1.
Jim Inghamb7e62f82012-05-24 01:16:09 +000038 rm -rf ${swig_output_file}
39 touch ${swig_output_file}
40
41else
Greg Clayton3e4238d2011-11-04 03:34:56 +000042
Jason Molendae2801e12012-09-27 21:26:57 +000043if [ -n "$debug_flag" -a "$debug_flag" = "-debug" ]
Chris Lattner24943d22010-06-08 16:52:24 +000044then
45 Debug=1
46else
47 Debug=0
48fi
49
Jason Molendac48ca822012-02-21 05:33:55 +000050# If this project is being built with LLDB_DISABLE_PYTHON defined,
51# don't bother generating Python swig bindings -- we don't have
52# Python available.
53
54if echo $GCC_PREPROCESSOR_DEFINITIONS | grep LLDB_DISABLE_PYTHON
55then
56 echo "" > "${swig_output_file}"
57 exit 0
58fi
Chris Lattner24943d22010-06-08 16:52:24 +000059
Greg Claytonb3448432011-03-24 21:19:54 +000060HEADER_FILES="${SRC_ROOT}/include/lldb/lldb.h"\
Caroline Ticec8b0e902010-10-18 23:00:51 +000061" ${SRC_ROOT}/include/lldb/lldb-defines.h"\
62" ${SRC_ROOT}/include/lldb/lldb-enumerations.h"\
63" ${SRC_ROOT}/include/lldb/lldb-forward.h"\
64" ${SRC_ROOT}/include/lldb/lldb-forward-rtti.h"\
65" ${SRC_ROOT}/include/lldb/lldb-types.h"\
Caroline Tice9dbe7172010-06-16 19:26:52 +000066" ${SRC_ROOT}/include/lldb/API/SBAddress.h"\
67" ${SRC_ROOT}/include/lldb/API/SBBlock.h"\
68" ${SRC_ROOT}/include/lldb/API/SBBreakpoint.h"\
69" ${SRC_ROOT}/include/lldb/API/SBBreakpointLocation.h"\
70" ${SRC_ROOT}/include/lldb/API/SBBroadcaster.h"\
Caroline Tice9dbe7172010-06-16 19:26:52 +000071" ${SRC_ROOT}/include/lldb/API/SBCommandInterpreter.h"\
72" ${SRC_ROOT}/include/lldb/API/SBCommandReturnObject.h"\
Greg Claytond8c62532010-10-07 04:19:01 +000073" ${SRC_ROOT}/include/lldb/API/SBCommunication.h"\
Caroline Tice9dbe7172010-06-16 19:26:52 +000074" ${SRC_ROOT}/include/lldb/API/SBCompileUnit.h"\
Enrico Granata91544802011-09-06 19:20:51 +000075" ${SRC_ROOT}/include/lldb/API/SBData.h"\
Caroline Tice9dbe7172010-06-16 19:26:52 +000076" ${SRC_ROOT}/include/lldb/API/SBDebugger.h"\
77" ${SRC_ROOT}/include/lldb/API/SBError.h"\
78" ${SRC_ROOT}/include/lldb/API/SBEvent.h"\
Johnny Chen4ead2e92010-08-27 22:35:26 +000079" ${SRC_ROOT}/include/lldb/API/SBFileSpec.h"\
Caroline Tice9dbe7172010-06-16 19:26:52 +000080" ${SRC_ROOT}/include/lldb/API/SBFrame.h"\
81" ${SRC_ROOT}/include/lldb/API/SBFunction.h"\
Greg Claytond8c62532010-10-07 04:19:01 +000082" ${SRC_ROOT}/include/lldb/API/SBHostOS.h"\
83" ${SRC_ROOT}/include/lldb/API/SBInputReader.h"\
Greg Clayton5c4c7462010-10-06 03:09:58 +000084" ${SRC_ROOT}/include/lldb/API/SBInstruction.h"\
85" ${SRC_ROOT}/include/lldb/API/SBInstructionList.h"\
Caroline Tice9dbe7172010-06-16 19:26:52 +000086" ${SRC_ROOT}/include/lldb/API/SBLineEntry.h"\
87" ${SRC_ROOT}/include/lldb/API/SBListener.h"\
88" ${SRC_ROOT}/include/lldb/API/SBModule.h"\
89" ${SRC_ROOT}/include/lldb/API/SBProcess.h"\
90" ${SRC_ROOT}/include/lldb/API/SBSourceManager.h"\
Caroline Tice1ca48b02010-09-22 16:41:52 +000091" ${SRC_ROOT}/include/lldb/API/SBStream.h"\
Caroline Tice9dbe7172010-06-16 19:26:52 +000092" ${SRC_ROOT}/include/lldb/API/SBStringList.h"\
93" ${SRC_ROOT}/include/lldb/API/SBSymbol.h"\
94" ${SRC_ROOT}/include/lldb/API/SBSymbolContext.h"\
Greg Claytond8c62532010-10-07 04:19:01 +000095" ${SRC_ROOT}/include/lldb/API/SBSymbolContextList.h"\
Caroline Tice9dbe7172010-06-16 19:26:52 +000096" ${SRC_ROOT}/include/lldb/API/SBTarget.h"\
97" ${SRC_ROOT}/include/lldb/API/SBThread.h"\
98" ${SRC_ROOT}/include/lldb/API/SBType.h"\
Enrico Granata16376ed2012-02-15 02:34:21 +000099" ${SRC_ROOT}/include/lldb/API/SBTypeCategory.h"\
100" ${SRC_ROOT}/include/lldb/API/SBTypeFilter.h"\
101" ${SRC_ROOT}/include/lldb/API/SBTypeFormat.h"\
102" ${SRC_ROOT}/include/lldb/API/SBTypeNameSpecifier.h"\
103" ${SRC_ROOT}/include/lldb/API/SBTypeSummary.h"\
104" ${SRC_ROOT}/include/lldb/API/SBTypeSynthetic.h"\
Caroline Tice1ca48b02010-09-22 16:41:52 +0000105" ${SRC_ROOT}/include/lldb/API/SBValue.h"\
Johnny Chen092bd152011-09-27 01:19:20 +0000106" ${SRC_ROOT}/include/lldb/API/SBValueList.h"\
Enrico Granata6d101882012-09-28 23:57:51 +0000107" ${SRC_ROOT}/include/lldb/API/SBWatchpoint.h"
Chris Lattner24943d22010-06-08 16:52:24 +0000108
Johnny Chenc39793d2011-09-09 17:37:06 +0000109INTERFACE_FILES="${SRC_ROOT}/scripts/Python/interface/SBAddress.i"\
110" ${SRC_ROOT}/scripts/Python/interface/SBBlock.i"\
111" ${SRC_ROOT}/scripts/Python/interface/SBBreakpoint.i"\
112" ${SRC_ROOT}/scripts/Python/interface/SBBreakpointLocation.i"\
113" ${SRC_ROOT}/scripts/Python/interface/SBBroadcaster.i"\
114" ${SRC_ROOT}/scripts/Python/interface/SBCommandInterpreter.i"\
115" ${SRC_ROOT}/scripts/Python/interface/SBCommandReturnObject.i"\
116" ${SRC_ROOT}/scripts/Python/interface/SBCommunication.i"\
117" ${SRC_ROOT}/scripts/Python/interface/SBCompileUnit.i"\
118" ${SRC_ROOT}/scripts/Python/interface/SBData.i"\
119" ${SRC_ROOT}/scripts/Python/interface/SBDebugger.i"\
Enrico Granata49306142012-10-10 22:54:17 +0000120" ${SRC_ROOT}/scripts/Python/interface/SBDeclaration.i"\
Johnny Chenc39793d2011-09-09 17:37:06 +0000121" ${SRC_ROOT}/scripts/Python/interface/SBError.i"\
122" ${SRC_ROOT}/scripts/Python/interface/SBEvent.i"\
123" ${SRC_ROOT}/scripts/Python/interface/SBFileSpec.i"\
124" ${SRC_ROOT}/scripts/Python/interface/SBFrame.i"\
125" ${SRC_ROOT}/scripts/Python/interface/SBFunction.i"\
126" ${SRC_ROOT}/scripts/Python/interface/SBHostOS.i"\
127" ${SRC_ROOT}/scripts/Python/interface/SBInputReader.i"\
128" ${SRC_ROOT}/scripts/Python/interface/SBInstruction.i"\
129" ${SRC_ROOT}/scripts/Python/interface/SBInstructionList.i"\
130" ${SRC_ROOT}/scripts/Python/interface/SBLineEntry.i"\
131" ${SRC_ROOT}/scripts/Python/interface/SBListener.i"\
132" ${SRC_ROOT}/scripts/Python/interface/SBModule.i"\
133" ${SRC_ROOT}/scripts/Python/interface/SBProcess.i"\
134" ${SRC_ROOT}/scripts/Python/interface/SBSourceManager.i"\
135" ${SRC_ROOT}/scripts/Python/interface/SBStream.i"\
136" ${SRC_ROOT}/scripts/Python/interface/SBStringList.i"\
137" ${SRC_ROOT}/scripts/Python/interface/SBSymbol.i"\
138" ${SRC_ROOT}/scripts/Python/interface/SBSymbolContext.i"\
139" ${SRC_ROOT}/scripts/Python/interface/SBTarget.i"\
140" ${SRC_ROOT}/scripts/Python/interface/SBThread.i"\
141" ${SRC_ROOT}/scripts/Python/interface/SBType.i"\
Enrico Granata16376ed2012-02-15 02:34:21 +0000142" ${SRC_ROOT}/scripts/Python/interface/SBTypeCategory.i"\
143" ${SRC_ROOT}/scripts/Python/interface/SBTypeFilter.i"\
144" ${SRC_ROOT}/scripts/Python/interface/SBTypeFormat.i"\
145" ${SRC_ROOT}/scripts/Python/interface/SBTypeNameSpecifier.i"\
146" ${SRC_ROOT}/scripts/Python/interface/SBTypeSummary.i"\
147" ${SRC_ROOT}/scripts/Python/interface/SBTypeSynthetic.i"\
Johnny Chenc39793d2011-09-09 17:37:06 +0000148" ${SRC_ROOT}/scripts/Python/interface/SBValue.i"\
Johnny Chen092bd152011-09-27 01:19:20 +0000149" ${SRC_ROOT}/scripts/Python/interface/SBValueList.i"\
Greg Clayton1fa6b3d2011-10-13 18:08:26 +0000150" ${SRC_ROOT}/scripts/Python/interface/SBWatchpoint.i"
Chris Lattner24943d22010-06-08 16:52:24 +0000151
Jason Molendae2801e12012-09-27 21:26:57 +0000152if [ $Debug -eq 1 ]
Chris Lattner24943d22010-06-08 16:52:24 +0000153then
154 echo "Header files are:"
155 echo ${HEADER_FILES}
156fi
157
Jason Molendae2801e12012-09-27 21:26:57 +0000158if [ $Debug -eq 1 ]
Enrico Granata91544802011-09-06 19:20:51 +0000159then
160 echo "SWIG interface files are:"
161 echo ${INTERFACE_FILES}
162fi
163
Chris Lattner24943d22010-06-08 16:52:24 +0000164NeedToUpdate=0
165
Chris Lattner24943d22010-06-08 16:52:24 +0000166
Johnny Chenb4d1fff2010-08-26 20:04:17 +0000167if [ ! -f ${swig_output_file} ]
Chris Lattner24943d22010-06-08 16:52:24 +0000168then
169 NeedToUpdate=1
Jason Molendae2801e12012-09-27 21:26:57 +0000170 if [ $Debug -eq 1 ]
Chris Lattner24943d22010-06-08 16:52:24 +0000171 then
172 echo "Failed to find LLDBWrapPython.cpp"
173 fi
174fi
175
Jason Molendae2801e12012-09-27 21:26:57 +0000176if [ $NeedToUpdate -eq 0 ]
Chris Lattner24943d22010-06-08 16:52:24 +0000177then
178 for hdrfile in ${HEADER_FILES}
179 do
Johnny Chenb4d1fff2010-08-26 20:04:17 +0000180 if [ $hdrfile -nt ${swig_output_file} ]
Chris Lattner24943d22010-06-08 16:52:24 +0000181 then
182 NeedToUpdate=1
Jason Molendae2801e12012-09-27 21:26:57 +0000183 if [ $Debug -eq 1 ]
Chris Lattner24943d22010-06-08 16:52:24 +0000184 then
185 echo "${hdrfile} is newer than ${swig_output_file}"
186 echo "swig file will need to be re-built."
187 fi
Johnny Chenb4d1fff2010-08-26 20:04:17 +0000188 break
Chris Lattner24943d22010-06-08 16:52:24 +0000189 fi
190 done
191fi
192
Jason Molendae2801e12012-09-27 21:26:57 +0000193if [ $NeedToUpdate -eq 0 ]
Johnny Chenb4d1fff2010-08-26 20:04:17 +0000194then
Enrico Granata91544802011-09-06 19:20:51 +0000195 for intffile in ${INTERFACE_FILES}
196 do
197 if [ $intffile -nt ${swig_output_file} ]
198 then
199 NeedToUpdate=1
Jason Molendae2801e12012-09-27 21:26:57 +0000200 if [ $Debug -eq 1 ]
Enrico Granata91544802011-09-06 19:20:51 +0000201 then
202 echo "${intffile} is newer than ${swig_output_file}"
203 echo "swig file will need to be re-built."
204 fi
205 break
206 fi
207 done
208fi
209
Jason Molendae2801e12012-09-27 21:26:57 +0000210if [ $NeedToUpdate -eq 0 ]
Enrico Granata91544802011-09-06 19:20:51 +0000211then
Johnny Chenb4d1fff2010-08-26 20:04:17 +0000212 if [ ${swig_input_file} -nt ${swig_output_file} ]
213 then
214 NeedToUpdate=1
Jason Molendae2801e12012-09-27 21:26:57 +0000215 if [ $Debug -eq 1 ]
Johnny Chenb4d1fff2010-08-26 20:04:17 +0000216 then
217 echo "${swig_input_file} is newer than ${swig_output_file}"
218 echo "swig file will need to be re-built."
219 fi
220 fi
221fi
222
Jason Molendae2801e12012-09-27 21:26:57 +0000223if [ $NeedToUpdate -eq 0 ]
Caroline Tice7826c882010-10-26 03:11:13 +0000224then
Johnny Chenf530bfe2011-08-22 22:10:57 +0000225 if [ ${swig_python_extensions} -nt ${swig_output_file} ]
Caroline Tice7826c882010-10-26 03:11:13 +0000226 then
227 NeedToUpdate=1
Jason Molendae2801e12012-09-27 21:26:57 +0000228 if [ $Debug -eq 1 ]
Caroline Tice7826c882010-10-26 03:11:13 +0000229 then
Johnny Chenf530bfe2011-08-22 22:10:57 +0000230 echo "${swig_python_extensions} is newer than ${swig_output_file}"
231 echo "swig file will need to be re-built."
232 fi
233 fi
234fi
235
Jason Molendae2801e12012-09-27 21:26:57 +0000236if [ $NeedToUpdate -eq 0 ]
Johnny Chenf530bfe2011-08-22 22:10:57 +0000237then
238 if [ ${swig_python_wrapper} -nt ${swig_output_file} ]
239 then
240 NeedToUpdate=1
Jason Molendae2801e12012-09-27 21:26:57 +0000241 if [ $Debug -eq 1 ]
Johnny Chenf530bfe2011-08-22 22:10:57 +0000242 then
243 echo "${swig_python_wrapper} is newer than ${swig_output_file}"
Caroline Tice7826c882010-10-26 03:11:13 +0000244 echo "swig file will need to be re-built."
245 fi
246 fi
247fi
248
Jason Molendae2801e12012-09-27 21:26:57 +0000249if [ $NeedToUpdate -eq 0 ]
Enrico Granatab62d4c62012-02-02 17:26:00 +0000250then
251 if [ ${swig_python_typemaps} -nt ${swig_output_file} ]
252 then
253 NeedToUpdate=1
Jason Molendae2801e12012-09-27 21:26:57 +0000254 if [ $Debug -eq 1 ]
Enrico Granatab62d4c62012-02-02 17:26:00 +0000255 then
256 echo "${swig_python_typemaps} is newer than ${swig_output_file}"
257 echo "swig file will need to be re-built."
258 fi
259 fi
260fi
261
Filipe Cabecinhas4bb4f302012-09-14 17:09:15 +0000262python_version=`/usr/bin/env python --version 2>&1 | sed -e 's,Python ,,' -e 's,[.][0-9],,2' -e 's,[a-z][a-z][0-9],,'`
Caroline Tice9dbe7172010-06-16 19:26:52 +0000263
Jason Molendae2801e12012-09-27 21:26:57 +0000264if [ "$os_name" = "Darwin" ]
Caroline Tice9dbe7172010-06-16 19:26:52 +0000265then
266 framework_python_dir="${TARGET_DIR}/LLDB.framework/Resources/Python"
267else
268 framework_python_dir="${PYTHON_INSTALL_DIR}/python${python_version}"
269fi
270
Chris Lattner24943d22010-06-08 16:52:24 +0000271
272if [ ! -L "${framework_python_dir}/_lldb.so" ]
273then
274 NeedToUpdate=1
275fi
276
277if [ ! -f "${framework_python_dir}/lldb.py" ]
278then
279 NeedToUpdate=1
280fi
281
282
Jason Molendae2801e12012-09-27 21:26:57 +0000283if [ $NeedToUpdate -eq 0 ]
Chris Lattner24943d22010-06-08 16:52:24 +0000284then
285 echo "Everything is up-to-date."
286 exit 0
287else
288 echo "SWIG needs to be re-run."
Caroline Tice7826c882010-10-26 03:11:13 +0000289 if [ -f ${swig_output_file} ]
290 then
291 rm ${swig_output_file}
292 fi
Chris Lattner24943d22010-06-08 16:52:24 +0000293fi
294
295
296# Build the SWIG C++ wrapper file for Python.
297
Johnny Chen8165d432012-08-18 04:14:54 +0000298$SWIG -c++ -shadow -python -threads -I"/usr/include" -I"${SRC_ROOT}/include" -I./. -outdir "${CONFIG_BUILD_DIR}" -o "${swig_output_file}" "${swig_input_file}"
Chris Lattner24943d22010-06-08 16:52:24 +0000299
Johnny Chen22e418a2011-04-29 19:22:24 +0000300# Implement the iterator protocol and/or eq/ne operators for some lldb objects.
Caroline Tice558be582010-06-30 16:22:25 +0000301# Append global variable to lldb Python module.
Johnny Chen14097802011-04-28 21:31:18 +0000302# And initialize the lldb debugger subsystem.
Caroline Tice558be582010-06-30 16:22:25 +0000303current_dir=`pwd`
Johnny Chen14097802011-04-28 21:31:18 +0000304if [ -f "${current_dir}/modify-python-lldb.py" ]
Caroline Tice558be582010-06-30 16:22:25 +0000305then
Johnny Chen14097802011-04-28 21:31:18 +0000306 python ${current_dir}/modify-python-lldb.py ${CONFIG_BUILD_DIR}
Caroline Tice558be582010-06-30 16:22:25 +0000307fi
Caroline Tice5790e062010-10-28 21:51:20 +0000308
309# Fix the "#include" statement in the swig output file
310
311if [ -f "${current_dir}/edit-swig-python-wrapper-file.py" ]
312then
313 python ${current_dir}/edit-swig-python-wrapper-file.py
314 if [ -f "${swig_output_file}.edited" ]
315 then
316 mv "${swig_output_file}.edited" ${swig_output_file}
317 fi
318fi
Greg Clayton3e4238d2011-11-04 03:34:56 +0000319
Greg Clayton3e4238d2011-11-04 03:34:56 +0000320fi