Skip to content

Commit 98ecdf9

Browse files
committed
[[ Prebuilt ]] Compile & package thirdparty libraries as prebuilt libs
Modify the prebuilt build scripts to generate prebuilt versions of the libraries within the thirdparty submodule
1 parent a04f779 commit 98ecdf9

File tree

7 files changed

+245
-6
lines changed

7 files changed

+245
-6
lines changed

livecode.gyp

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,104 @@
216216
],
217217
],
218218
},
219+
220+
{
221+
'target_name': 'thirdparty-prebuilts',
222+
'type': 'none',
223+
224+
'variables':
225+
{
226+
'thirdparty_libs_core':
227+
[
228+
'thirdparty/libffi/libffi.gyp:libffi',
229+
'thirdparty/libpng/libpng.gyp:libpng',
230+
'thirdparty/libz/libz.gyp:libz',
231+
'thirdparty/libgif/libgif.gyp:libgif',
232+
'thirdparty/libjpeg/libjpeg.gyp:libjpeg',
233+
'thirdparty/libpcre/libpcre.gyp:libpcre',
219234

235+
'thirdparty/libskia/libskia.gyp:libskia',
236+
'thirdparty/libskia/libskia.gyp:libskia_opt_none',
237+
'thirdparty/libskia/libskia.gyp:libskia_opt_arm',
238+
'thirdparty/libskia/libskia.gyp:libskia_opt_sse2',
239+
'thirdparty/libskia/libskia.gyp:libskia_opt_sse3',
240+
'thirdparty/libskia/libskia.gyp:libskia_opt_sse41',
241+
'thirdparty/libskia/libskia.gyp:libskia_opt_sse42',
242+
'thirdparty/libskia/libskia.gyp:libskia_opt_avx',
243+
'thirdparty/libskia/libskia.gyp:libskia_opt_hsw',
244+
],
245+
246+
'thirdparty_libs_native':
247+
[
248+
'thirdparty/libmysql/libmysql.gyp:libmysql',
249+
'thirdparty/libsqlite/libsqlite.gyp:libsqlite',
250+
'thirdparty/libxml/libxml.gyp:libxml',
251+
'thirdparty/libxslt/libxslt.gyp:libxslt',
252+
'thirdparty/libzip/libzip.gyp:libzip',
253+
],
254+
255+
'thirdparty_libs_desktop':
256+
[
257+
'thirdparty/libiodbc/libiodbc.gyp:libiodbc',
258+
'thirdparty/libpq/libpq.gyp:libpq',
259+
'thirdparty/libcairo/libcairo.gyp:libcairo',
260+
],
261+
262+
'thirdparty_libs_fonts':
263+
[
264+
'thirdparty/libharfbuzz/libharfbuzz.gyp:libharfbuzz',
265+
'thirdparty/libfreetype/libfreetype.gyp:libfreetype',
266+
],
267+
},
268+
269+
'dependencies':
270+
[
271+
'<@(thirdparty_libs_core)',
272+
],
273+
274+
'conditions':
275+
[
276+
[
277+
'OS == "mac" or OS == "win" or OS == "linux"',
278+
{
279+
'dependencies':
280+
[
281+
'<@(thirdparty_libs_native)',
282+
'<@(thirdparty_libs_desktop)',
283+
],
284+
},
285+
],
286+
[
287+
'OS == "ios"',
288+
{
289+
'dependencies':
290+
[
291+
'<@(thirdparty_libs_native)',
292+
'thirdparty/libcairo/libcairo.gyp:libcairo',
293+
],
294+
},
295+
],
296+
[
297+
'OS == "android"',
298+
{
299+
'dependencies':
300+
[
301+
'<@(thirdparty_libs_native)',
302+
'<@(thirdparty_libs_fonts)',
303+
'thirdparty/libexpat/libexpat.gyp:libexpat',
304+
],
305+
},
306+
],
307+
[
308+
'OS == "emscripten"',
309+
{
310+
'dependencies':
311+
[
312+
'<@(thirdparty_libs_fonts)',
313+
],
314+
},
315+
],
316+
],
317+
},
220318
],
221319
}

prebuilt/build-libraries.sh

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,22 +32,22 @@ export CUSTOM_EMCONFIGURE="${EMCONFIGURE}"
3232
# Set which libs to build for the target platform
3333
case "${PLATFORM}" in
3434
android)
35-
PREBUILT_LIBS="openssl icu"
35+
PREBUILT_LIBS="openssl icu thirdparty"
3636
;;
3737
mac)
38-
PREBUILT_LIBS="openssl icu"
38+
PREBUILT_LIBS="openssl icu thirdparty"
3939
;;
4040
ios)
41-
PREBUILT_LIBS="openssl icu"
41+
PREBUILT_LIBS="openssl icu thirdparty"
4242
;;
4343
win32)
44-
PREBUILT_LIBS="openssl curl icu cef"
44+
PREBUILT_LIBS="openssl curl icu cef thirdparty"
4545
;;
4646
linux)
47-
PREBUILT_LIBS="openssl curl icu cef"
47+
PREBUILT_LIBS="openssl curl icu cef thirdparty"
4848
;;
4949
emscripten)
50-
PREBUILT_LIBS="icu"
50+
PREBUILT_LIBS="icu thirdparty"
5151
;;
5252
esac
5353

prebuilt/package-libs.sh

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ function doPackage {
7575
generateTarFileName Curl "${SUFFIX}"
7676
generateTarFileName ICU "${SUFFIX}"
7777
generateTarFileName CEF "${SUFFIX}"
78+
generateTarFileName Thirdparty "${SUFFIX}"
7879

7980
# Package up OpenSSL
8081
if [ -f "${LIBPATH}/libcustomcrypto.a" ] ; then
@@ -122,6 +123,29 @@ function doPackage {
122123
fi
123124
fi
124125

126+
# Package up Thirdparty
127+
local Thirdparty_FILES=
128+
local Thirdparty_LIBS_I="Thirdparty_LIBS_$PLATFORM"
129+
if [ -f "${LIBPATH}/libz.a" ] ; then
130+
for LIB in ${!Thirdparty_LIBS_I} ; do
131+
Thirdparty_FILES+="${LIBPATH}/${LIB}.a "
132+
if [ -e "${LIBPATH}/${LIB}_opt_none.a" ]; then
133+
Thirdparty_FILES+="${LIBPATH}/${LIB}_*.a "
134+
fi
135+
done
136+
else
137+
for LIB in ${!Thirdparty_LIBS_I} ; do
138+
Thirdparty_FILES+="${LIBPATH}/${LIB}.lib "
139+
if [ "${LIB}" == "libskia" ]; then
140+
Thirdparty_FILES+="${LIBPATH}/${LIB}_*.lib "
141+
fi
142+
done
143+
fi
144+
145+
if [ ! -z "${Thirdparty_FILES}" ] ; then
146+
tar -cf "${Thirdparty_TAR}" ${Thirdparty_FILES}
147+
fi
148+
125149
# Compress the packages
126150
if [ -f "${OpenSSL_TAR}" ] ; then
127151
bzip2 -zf --best "${OpenSSL_TAR}"
@@ -135,6 +159,9 @@ function doPackage {
135159
if [ -f "${CEF_TAR}" ] ; then
136160
bzip2 -zf --best "${CEF_TAR}"
137161
fi
162+
if [ -f "${Thirdparty_TAR}" ] ; then
163+
bzip2 -zf --best "${Thirdparty_TAR}"
164+
fi
138165
}
139166

140167
PLATFORM=$1
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
#!/bin/bash
2+
3+
source "${BASEDIR}/scripts/platform.inc"
4+
source "${BASEDIR}/scripts/lib_versions.inc"
5+
6+
echo $Thirdparty_BUILDREVISION
7+
echo $Thirdparty_VERSION
8+
9+
echo $PLATFORM
10+
echo $SUBPLATFORM
11+
echo $ARCH
12+
13+
if [ "$XCODEBUILD" == "" ]; then
14+
XCODEBUILD="xcodebuild"
15+
fi
16+
17+
if [ "$EMMAKE" == "" ]; then
18+
EMMAKE="emmake"
19+
fi
20+
21+
TARGET_NAME=$PLATFORM
22+
23+
if [ "$ARCH" != "" -a "$ARCH" != "universal" ]; then
24+
TARGET_NAME=$TARGET_NAME-$ARCH
25+
fi
26+
27+
if [ "$SUBPLATFORM" != "" -a "$PLATFORM" != "android" ]; then
28+
TARGET_NAME=$TARGET_NAME-$SUBPLATFORM
29+
fi
30+
31+
MAKE_TARGET=$TARGET_NAME
32+
33+
if [ "$PLATFORM" == "mac" ]; then
34+
LIBS="${Thirdparty_LIBS_mac}"
35+
BUILDPATH="../_build/mac/Release"
36+
LIBPATH="lib/mac"
37+
elif [ "$PLATFORM" == "linux" ]; then
38+
LIBS="${Thirdparty_LIBS_linux}"
39+
BUILDPATH="../build-linux-$ARCH/livecode/out/Release/obj.target/thirdparty"
40+
LIBPATH="lib/linux/$ARCH"
41+
elif [ "$PLATFORM" == "ios" ]; then
42+
LIBS="${Thirdparty_LIBS_ios}"
43+
BUILDPATH="../_build/ios/$SUBPLATFORM/Release"
44+
LIBPATH="lib/ios/$SUBPLATFORM"
45+
elif [ "$PLATFORM" == "emscripten" ]; then
46+
MAKE_TARGET=emscripten
47+
LIBS="${Thirdparty_LIBS_emscripten}"
48+
BUILDPATH="../build-emscripten/livecode/out/Release/obj.target/thirdparty"
49+
LIBPATH="lib/emscripten/js"
50+
elif [ "$PLATFORM" == "android" ]; then
51+
LIBS="${Thirdparty_LIBS_android}"
52+
BUILDPATH="../build-android-$ARCH/livecode/out/Release/obj.target/thirdparty"
53+
LIBPATH="lib/android/$ARCH/$SUBPLATFORM"
54+
elif [ "$PLATFORM" == "win32" ]; then
55+
LIBS="${Thirdparty_LIBS_win32}"
56+
BUILDPATH=""
57+
LIBPATH=""
58+
fi
59+
60+
make -C .. config-$MAKE_TARGET
61+
62+
if [ "$PLATFORM" == "mac" ] || [ "$PLATFORM" == "ios" ] ; then
63+
${XCODEBUILD} -project "../build-$TARGET_NAME/livecode/livecode.xcodeproj" -configuration "Release" -target "thirdparty-prebuilts"
64+
elif [ "$PLATFORM" == "linux" ] ; then
65+
export BUILDTYPE=Release
66+
make -C "../build-${PLATFORM}-${ARCH}/livecode" thirdparty-prebuilts
67+
elif [ "$PLATFORM" == "emscripten" ] ; then
68+
export BUILDTYPE=Release
69+
${EMMAKE} make -j16 -C "../build-${PLATFORM}/livecode" thirdparty-prebuilts
70+
elif [ "$PLATFORM" == "android" ] ; then
71+
export BUILDTYPE=Release
72+
make -j16 -C "../build-${PLATFORM}-${ARCH}/livecode" thirdparty-prebuilts
73+
fi
74+
75+
mkdir -p "$LIBPATH"
76+
77+
for t_lib in $LIBS ; do
78+
if [ "$PLATFORM" == "mac" ] || [ "$PLATFORM" == "ios" ] ; then
79+
cp "$BUILDPATH/${t_lib}.a" "$LIBPATH"
80+
if [ "${t_lib}" == "libskia" ]; then
81+
cp "$BUILDPATH/${t_lib}"_*.a "$LIBPATH"
82+
fi
83+
elif [ "$PLATFORM" == "linux" ] || [ "$PLATFORM" == "android" ] || [ "$PLATFORM" == "emscripten" ]; then
84+
cp "$BUILDPATH/${t_lib}/${t_lib}.a" "$LIBPATH"
85+
if [ "${t_lib}" == "libskia" ]; then
86+
cp "$BUILDPATH/${t_lib}/${t_lib}"_*.a "$LIBPATH"
87+
fi
88+
fi
89+
done

prebuilt/scripts/lib_versions.inc

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,26 @@ readVersion OpenSSL
1919
readVersion ICU
2020
readVersion Curl
2121
readVersion CEF
22+
readVersion Thirdparty
23+
24+
# extract hash from start of submodule status
25+
Thirdparty_VERSION=$(expr "$(git submodule status | grep 'thirdparty' )" : '[^0-9a-z]*\([0-9a-z]*\)')
26+
27+
# Libraries used on all platforms
28+
Thirdparty_LIBS_CORE="libffi libpng libz libgif libjpeg libpcre libskia"
29+
30+
# Libraries used only on native (non emscripten) platforms
31+
Thirdparty_LIBS_NATIVE="libmysql libsqlite libxml libxslt libzip"
32+
33+
# Libraries used only on desktop platforms
34+
Thirdparty_LIBS_DESKTOP="libiodbc libpq libcairo"
35+
36+
# Libraries used by emscripten / android for fonts
37+
Thirdparty_LIBS_FONTS="libharfbuzz libfreetype"
38+
39+
Thirdparty_LIBS_mac="$Thirdparty_LIBS_CORE $Thirdparty_LIBS_NATIVE $Thirdparty_LIBS_DESKTOP"
40+
Thirdparty_LIBS_linux="$Thirdparty_LIBS_CORE $Thirdparty_LIBS_NATIVE $Thirdparty_LIBS_DESKTOP"
41+
Thirdparty_LIBS_win32="$Thirdparty_LIBS_CORE $Thirdparty_LIBS_NATIVE $Thirdparty_LIBS_DESKTOP"
42+
Thirdparty_LIBS_ios="$Thirdparty_LIBS_CORE $Thirdparty_LIBS_NATIVE libcairo"
43+
Thirdparty_LIBS_emscripten="$Thirdparty_LIBS_CORE $Thirdparty_LIBS_FONTS"
44+
Thirdparty_LIBS_android="$Thirdparty_LIBS_CORE $Thirdparty_LIBS_NATIVE $Thirdparty_LIBS_FONTS libexpat"

prebuilt/scripts/platform.inc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ case $(uname -m) in
2424
esac
2525

2626
if [ -z "${XCODEBUILD}" ] ; then
27+
export XCODEBUILD="/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild"
2728
XCODE_DEVELOPER="/Applications/Xcode.app/Contents/Developer"
2829
else
2930
# XCODEBUILD points to $XCODE_APP/Contents/Developer/usr/bin/xcodebuild

prebuilt/versions/thirdparty

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
1

0 commit comments

Comments
 (0)