EricssonResearch / openwebrtc

A cross-platform WebRTC client framework based on GStreamer
http://www.openwebrtc.org
BSD 2-Clause "Simplified" License
1.8k stars 537 forks source link

Build fails for android on mac os x #352

Open shue249 opened 9 years ago

shue249 commented 9 years ago

Hi, I am trying to build for android on mac os x. I followed the build steps in the wiki as follow:

  1. boot strap for mac os x (success)
  2. full build for mac os x (success)
  3. boot strap for android (success)
  4. full build for android (failed)

Here is the output log

scchia-KVG3QP-mbp:cerbero scchia$ ./cerbero-uninstalled -c config/cross-android-armv7.cbc bootstrap WARNING: Using default configuration because /Users/scchia/.cerbero/cerbero.cbc is missing WARNING: No bootstrapper for the distro version android_gingerbread WARNING: No bootstrapper for the distro version osx_yosemite File /var/folders/zv/m4xq83bs3tz8nzkrpg0_ttvh0000gp/T/tmp42Zu9v already downloaded. Running command 'chmod +x /var/folders/zv/m4xq83bs3tz8nzkrpg0_ttvh0000gp/T/tmp42Zu9v' Running command 'sudo /var/folders/zv/m4xq83bs3tz8nzkrpg0_ttvh0000gp/T/tmp42Zu9v XML::Parser' File /Users/scchia/cerbero/android-ndk-r10d/android-ndk-r10d-darwin-x86_64.bin already downloaded. WARNING: Using default configuration because /Users/scchia/.cerbero/cerbero.cbc is missing Building the following recipes: libiconv gettext xz m4 autoconf sed gettext-tools gettext-m4 automake tar libtool pkg-config orc-tool libffi zlib glib gobject-introspection gnome-common gtk-doc-lite gperf glib-tools android-sdk intltool yasm bison flex [(1/26) libiconv -> already built ] [(2/26) gettext -> already built ] [(3/26) xz -> already built ] [(4/26) m4 -> already built ] [(5/26) autoconf -> already built ] [(6/26) sed -> already built ] [(7/26) gettext-tools -> already built ] [(8/26) gettext-m4 -> already built ] [(9/26) automake -> already built ] [(10/26) tar -> already built ] [(11/26) libtool -> already built ] [(12/26) pkg-config -> already built ] [(13/26) orc-tool -> already built ] [(14/26) libffi -> already built ] [(15/26) zlib -> already built ] [(16/26) glib -> already built ] [(17/26) gobject-introspection -> already built ] [(18/26) gnome-common -> already built ] [(19/26) gtk-doc-lite -> already built ] [(20/26) gperf -> already built ] [(21/26) glib-tools -> already built ] [(22/26) android-sdk -> already built ] [(23/26) intltool -> already built ] [(24/26) yasm -> already built ] [(25/26) bison -> already built ] [(26/26) flex -> already built ] scchia-KVG3QP-mbp:cerbero scchia$ ./cerbero-uninstalled -c config/cross-android-armv7.cbc package -f openwebrtc WARNING: Using default configuration because /Users/scchia/.cerbero/cerbero.cbc is missing Building the following recipes: libiconv gettext gnustl libffi zlib glib orc bzip2 openssl bionic-fixup gtk-doc-lite gstreamer-1.0 gst-plugins-base-1.0 libvpx gst-plugins-good-1.0 openh264 opus libsrtp gst-plugins-bad-1.0 libnice gstreamer-1.0-static gst-plugins-base-1.0-static gst-plugins-good-1.0-static gst-plugins-bad-1.0-static libnice-static intltool gnome-js-common openwebrtc-girepository icu javascriptcoregtk seed libusrsctp openwebrtc-gst-plugins openwebrtc-gst-plugins-static openwebrtc [(1/35) libiconv -> already built ] [(2/35) gettext -> already built ] [(3/35) gnustl -> already built ] [(4/35) libffi -> already built ] [(5/35) zlib -> already built ] [(6/35) glib -> already built ] [(7/35) orc -> already built ] [(8/35) bzip2 -> already built ] [(9/35) openssl -> already built ] [(10/35) bionic-fixup -> already built ] [(11/35) gtk-doc-lite -> already built ] [(12/35) gstreamer-1.0 -> already built ] [(13/35) gst-plugins-base-1.0 -> already built ] [(14/35) libvpx -> already built ] [(15/35) gst-plugins-good-1.0 -> already built ] [(16/35) openh264 -> already built ] [(17/35) opus -> already built ] [(18/35) libsrtp -> already built ] [(19/35) gst-plugins-bad-1.0 -> already built ] [(20/35) libnice -> already built ] [(21/35) gstreamer-1.0-static -> already built ] [(22/35) gst-plugins-base-1.0-static -> already built ] [(23/35) gst-plugins-good-1.0-static -> already built ] [(24/35) gst-plugins-bad-1.0-static -> already built ] [(25/35) libnice-static -> already built ] [(26/35) intltool -> already built ] [(27/35) gnome-js-common -> already built ] [(28/35) openwebrtc-girepository -> already built ] [(29/35) icu -> already built ] [(30/35) javascriptcoregtk -> already built ] [(31/35) seed -> already built ] [(32/35) libusrsctp -> already built ] [(33/35) openwebrtc-gst-plugins -> already built ] [(34/35) openwebrtc-gst-plugins-static -> already built ] [(35/35) openwebrtc -> fetch ] -----> Step done [(35/35) openwebrtc -> extract ] -----> Step done [(35/35) openwebrtc -> configure ] Recipe 'openwebrtc' failed at the build step 'configure' Traceback (most recent call last): File "./cerbero/build/oven.py", line 143, in _cook_recipe stepfunc() File "/Users/scchia/dev/cerbero/recipes/openwebrtc.recipe", line 191, in configure raise Exception(err_nobuild) Exception: You need to build openwebrtc for the host darwin before you can cross-compile it for android Select an action to proceed: [0] Enter the shell [1] Rebuild the recipe from scratch [2] Rebuild starting from the failed step [3] Skip recipe [4] Abort 4 ***\ Error running 'package' command:

I read on the troubleshooting section and tried the buildone command, but it gives the same error.

scchia-KVG3QP-mbp:cerbero scchia$ ./cerbero-uninstalled -c config/osx-x86-64.cbc buildone openwebrtc \

&& ./cerbero-uninstalled -c config/cross-android-armv7.cbc buildone openwebrtc \ && ./cerbero-uninstalled -c config/cross-android-armv7.cbc package openwebrtc WARNING: Using default configuration because /Users/scchia/.cerbero/cerbero.cbc is missing Building the following recipes: openwebrtc [(1/1) openwebrtc -> fetch ] [(1/1) openwebrtc -> extract ] [(1/1) openwebrtc -> configure ] -----> copying /Users/scchia/dev/cerbero/data/autotools/config.guess to /Users/scchia/cerbero/sources/darwin_x86_64/openwebrtc-0.1/config.guess -----> copying /Users/scchia/dev/cerbero/data/autotools/config.sub to /Users/scchia/cerbero/sources/darwin_x86_64/openwebrtc-0.1/config.sub [(1/1) openwebrtc -> compile ] [(1/1) openwebrtc -> install ] [(1/1) openwebrtc -> post_install ] WARNING: Using default configuration because /Users/scchia/.cerbero/cerbero.cbc is missing Building the following recipes: openwebrtc [(1/1) openwebrtc -> fetch ] [(1/1) openwebrtc -> extract ] [(1/1) openwebrtc -> configure ] Recipe 'openwebrtc' failed at the build step 'configure' Traceback (most recent call last): File "./cerbero/build/oven.py", line 143, in _cook_recipe stepfunc() File "/Users/scchia/dev/cerbero/recipes/openwebrtc.recipe", line 191, in configure raise Exception(err_nobuild) Exception: You need to build openwebrtc for the host darwin before you can cross-compile it for android Select an action to proceed: [0] Enter the shell [1] Rebuild the recipe from scratch [2] Rebuild starting from the failed step [3] Skip recipe [4] Abort 4 ***\ Error running 'buildone' command:

Is there something wrong with my command? Or am I missing any steps which causes this problem? Before doing this build, I have also ran these commands and I can see the soft links of dist in my cerbero folder.

sudo mkdir /Library/Frameworks/OpenWebRTC.framework sudo chown $UID /Library/Frameworks/OpenWebRTC.framework/ In ~/cerbero:

mkdir -p dist mkdir -p /Library/Frameworks/OpenWebRTC.framework/Versions/0.1 ln -s /Library/Frameworks/OpenWebRTC.framework/Versions/0.1 dist/darwin_x86_64

shue249 commented 9 years ago

I looked at the openwebrtc.recipe at lines 190-191 and inspected the variables gir_file_path and gir_file. Turns out the gir_file_path is holding this value "/Users/scchia/cerbero/dist/android_armv7/../darwin_x86_64/share/gir-1.0". However, my folder structure for dist is "/Users/scchia/dev/cerbero/dist/darwin_x86_64/0.1/share/gir-1.0" instead.

shue249 commented 9 years ago

After looking into the gir_file_path variable in the openwebrtc.recipe, I found 2 mismatchs with my setup. The full build managed to complete after I did 2 adjustments. Hope this may be useful for anyone who is encountering the same issue as me.

  1. I realised there are 2 cerberos folder for my case; one under Users/my username/dev/cerbero and the second one is Users/my username/cerbero. The first one is created by me where I git clone the cerbero source code and I presume the second one is created by the build scripts. The wiki commands to create the dist folder and softlink to the OpenWebRTC is meant for the second cerbero folder but I executed the commands in my own cerbero folder. So I created the dist folder and softlinks again for the second cerbero folder.
  2. At lines 179-181 of OpenWebRTC.receipe, the host_prefix is asking for a folder structure /Users/my username/cerbero/dist/android_armv7/../darwin_x86_64 but my actual folder structure is /Users/my username/dist/android_armv7/../darwin_x86_64/0.1 instead (notice the 0.1 subfolder at the end). Hence, I changed lines 179-181 to be as follow.

           host_prefix = os.path.join(self.config.prefix, '..',
                                      '{0}_{1}'.format(self.config.platform,
                                                       self.config.arch) ,'0.1')

As far as I am concerned, I feel this issue is considered closed. Perhaps the team can consider checking the folder structure again and update on the wiki page for the instructions for better clarity.

My big thanks again to the team for this amazing work.

superdump commented 9 years ago

About 1. - you say that you're supposed to always do the symlink in ~/cerbero/dist regardless of where you clone cerbero. I don't think that's true, at least, I have tested this on a few machines.

We can look into the rest of what you wrote. Thanks!