|
3 | 3 | set -ex |
4 | 4 |
|
5 | 5 | HOUDINI_MAJOR="$1" |
6 | | -GOLD="$2" |
| 6 | +PLATFORM="$2" |
| 7 | +OTHER_ARGS="$3" |
7 | 8 |
|
8 | 9 | pip install --user requests |
| 10 | +python ci/download_houdini.py $HOUDINI_MAJOR $PLATFORM $OTHER_ARGS |
9 | 11 |
|
10 | | -python ci/download_houdini.py $HOUDINI_MAJOR $GOLD |
11 | | - |
12 | | -# create dir hierarchy |
13 | | -mkdir -p hou/bin |
14 | | -mkdir -p hou/houdini |
15 | | -mkdir -p hou/toolkit |
16 | | -mkdir -p hou/dsolib |
17 | | - |
18 | | -# unpack hou.tar.gz and cleanup |
19 | | -tar -xzf hou.tar.gz |
20 | | -rm -rf hou.tar.gz |
21 | | -cd houdini* |
22 | | -tar -xzf houdini.tar.gz |
23 | | - |
24 | | -# copy required files into hou dir |
25 | | -cp houdini_setup* ../hou/. |
26 | | - |
27 | | -# report library names |
28 | | -ls -al dsolib/ |
29 | | - |
30 | | -# copy required libraries |
31 | | -cp -r toolkit/cmake ../hou/toolkit/. |
32 | | -cp -r toolkit/include ../hou/toolkit/. |
33 | | -cp -r dsolib/libHoudini* ../hou/dsolib/. |
34 | | -cp -r dsolib/libopenvdb_sesi* ../hou/dsolib/. |
35 | | -cp -r dsolib/libblosc* ../hou/dsolib/. |
36 | | -cp -r dsolib/libhboost* ../hou/dsolib/. |
37 | | -cp -r dsolib/libz* ../hou/dsolib/. |
38 | | -cp -r dsolib/libbz2* ../hou/dsolib/. |
39 | | -cp -r dsolib/libtbb* ../hou/dsolib/. |
40 | | -cp -r dsolib/libjemalloc* ../hou/dsolib/. |
41 | | -cp -r dsolib/liblzma* ../hou/dsolib/. |
42 | | -cp -r dsolib/libIex* ../hou/dsolib/. |
43 | | -cp -r dsolib/libImath* ../hou/dsolib/. |
44 | | -cp -r dsolib/libIlmThread* ../hou/dsolib/. |
45 | | - |
46 | | -if [ "$HOUDINI_MAJOR" == "19.0" ]; then |
47 | | - cp -r dsolib/libHalf* ../hou/dsolib/. |
48 | | - cp -r dsolib/libIlmImf* ../hou/dsolib/. |
| 12 | +if [[ $PLATFORM =~ "linux" ]]; then |
| 13 | + # create dir hierarchy |
| 14 | + mkdir -p hou/bin |
| 15 | + mkdir -p hou/houdini |
| 16 | + mkdir -p hou/toolkit |
| 17 | + mkdir -p hou/dsolib |
| 18 | + |
| 19 | + # unpack hou.tar.gz and cleanup |
| 20 | + tar -xzf hou.tar.gz |
| 21 | + rm -rf hou.tar.gz |
| 22 | + cd houdini* |
| 23 | + tar -xzf houdini.tar.gz |
| 24 | + |
| 25 | + # copy required files into hou dir |
| 26 | + cp houdini_setup* ../hou/. |
| 27 | + |
| 28 | + # report library names |
| 29 | + ls -al dsolib/ |
| 30 | + |
| 31 | + # copy required libraries |
| 32 | + cp -r toolkit/cmake ../hou/toolkit/. |
| 33 | + cp -r toolkit/include ../hou/toolkit/. |
| 34 | + cp -r dsolib/libHoudini* ../hou/dsolib/. |
| 35 | + cp -r dsolib/libopenvdb_sesi* ../hou/dsolib/. |
| 36 | + cp -r dsolib/libblosc* ../hou/dsolib/. |
| 37 | + cp -r dsolib/libhboost* ../hou/dsolib/. |
| 38 | + cp -r dsolib/libz* ../hou/dsolib/. |
| 39 | + cp -r dsolib/libbz2* ../hou/dsolib/. |
| 40 | + cp -r dsolib/libtbb* ../hou/dsolib/. |
| 41 | + cp -r dsolib/libjemalloc* ../hou/dsolib/. |
| 42 | + cp -r dsolib/liblzma* ../hou/dsolib/. |
| 43 | + cp -r dsolib/libIex* ../hou/dsolib/. |
| 44 | + cp -r dsolib/libImath* ../hou/dsolib/. |
| 45 | + cp -r dsolib/libIlmThread* ../hou/dsolib/. |
| 46 | + cd .. |
| 47 | + |
| 48 | +elif [[ $PLATFORM =~ "macos" ]]; then |
| 49 | + # Exract files by mounting the downloaded dmg (we only really want to |
| 50 | + # expand Houdini.framework) |
| 51 | + hdiutil attach hou.dmg |
| 52 | + pkgutil --expand-full /Volumes/Houdini/Houdini.pkg Houdini |
| 53 | + hdiutil detach /Volumes/Houdini |
| 54 | + rm hou.dmg |
| 55 | + |
| 56 | + # Move the required Frameworks and delete the extracted src |
| 57 | + mkdir -p hou/Frameworks |
| 58 | + mv Houdini/Framework.pkg/Payload/Houdini.framework hou/Frameworks/Houdini.framework |
| 59 | + rm -rf Houdini |
| 60 | + |
| 61 | + # Report library names |
| 62 | + ls -al hou/Frameworks/Houdini.framework/Libraries |
| 63 | + |
| 64 | + # Remove unused resources |
| 65 | + cd hou/Frameworks/Houdini.framework/Resources/ |
| 66 | + rm -rf $(ls | grep -e toolkit -v) |
| 67 | + cd - |
| 68 | + |
| 69 | + # Handle libraries. On some versions of MacOS with older versions of ld, |
| 70 | + # ld will complain (error) if shared libraries contain missing files which |
| 71 | + # are referenced with LC_LOAD_DYLIB or LC_RPATH entries (even though they |
| 72 | + # are not explicitly required at link time). We still want to delete these |
| 73 | + # unused libs as they occupt ~1-2GB. To handle this, we generate a unique |
| 74 | + # list of libs that our direct dependencies reference and create an empty |
| 75 | + # shared dylib in their place. |
| 76 | + cd hou/Frameworks/Houdini.framework/Libraries |
| 77 | + # Remove any folders here, they aren't needed |
| 78 | + rm -rf $(ls -p | grep /) |
| 79 | + # Remove any library that does not match the -e patterns (inverse grep with -v) |
| 80 | + unused_libraries=$(ls | \ |
| 81 | + grep -e libHoudini \ |
| 82 | + -e libopenvdb_sesi \ |
| 83 | + -e libblosc \ |
| 84 | + -e libhboost \ |
| 85 | + -e libz \ |
| 86 | + -e libbz2 \ |
| 87 | + -e libtbb \ |
| 88 | + -e libjemalloc \ |
| 89 | + -e liblzma \ |
| 90 | + -e libIex \ |
| 91 | + -e libImath \ |
| 92 | + -e libIlmThread \ |
| 93 | + -v) |
| 94 | + rm -rf ${unused_libraries} |
| 95 | + |
| 96 | + # Create an empty valid shared lib |
| 97 | + echo '' | clang -x c -shared -o libempty.dylib - |
| 98 | + |
| 99 | + # Generate a unique list of libs that our remaining libs reference |
| 100 | + for i in $(ls); do otool -LX $i >> libnames; done |
| 101 | + sort -u libnames | grep @rpath | cut -f1 -d' ' | xargs > rpaths |
| 102 | + |
| 103 | + # Recreate unused libraries that have been deleted as empty shared dylibs |
| 104 | + # to keep ld happy |
| 105 | + for libpath in $(cat rpaths); do |
| 106 | + libpath=${libpath#"@rpath/"} |
| 107 | + echo "Checking $libpath" |
| 108 | + if [ ! -f $libpath ]; then |
| 109 | + echo "Creating empty library at $libpath" |
| 110 | + mkdir -p $(dirname $libpath) |
| 111 | + cp libempty.dylib $libpath |
| 112 | + fi |
| 113 | + done |
| 114 | + |
| 115 | + rm libempty.dylib |
| 116 | + cd - |
49 | 117 | fi |
50 | 118 |
|
51 | 119 | # write hou into hou.tar.gz and cleanup |
52 | | -cd .. |
53 | 120 | tar -czvf hou.tar.gz hou |
54 | 121 |
|
55 | 122 | # move hou.tar.gz into hou subdirectory |
|
0 commit comments