v17 CMAKE build for RPi2: multiple config & errors ...
#1
I'm working on CMAKE build of latest Krypton-master in a raspbian chroot for RPI2.

For RPI2 with autofoo, I see
Code:
./configure --with-platform=raspberry-pi2 ...

Looking in "project/cmake/..." source, I'm not seeing any reference to rpi2

What's the correct RPi2-ready cmake build config for Krypton, equivalent to I suppose
Code:
cmake ../project/cmake/ -DPLATFORM=raspberry-pi2 ...
?

I've attempted a variety of build configs
Code:
cmake ../project/cmake/ -DPLATFORM=raspberry-pi ... (varied options) ...
cmake --build . -- VERBOSE=1 -j4

but currently am stuck at "invalid use of incomplete type ‘class CMMALBuffer’" errors in the build,
Code:
...
[ 92%] Building C object build/cores/VideoPlayer/codecs/overlay/CMakeFiles/dvdoverlaycodecs.dir/contrib/cc_decoder.c.o
cd /usr/local/src/kodi/build/build/cores/VideoPlayer/codecs/overlay && /usr/bin/gcc-6   -I/usr/local/src/kodi -I/usr/local/src/kodi/addons/library.xbmc.addon -I/usr/local/src/kodi/lib -I/usr/local/src/kodi/lib/gtest/include -I/usr/local/src/kodi/xbmc -I/usr/local/src/kodi/xbmc/linux -I/usr/local/src/kodi/xbmc/cores/VideoPlayer -I/usr/local/src/kodi/build/build -I/usr/include/freetype2 -I/usr/local/src/kodi/build/build/cpluff/include -I/usr/local/src/kodi/build/build/libdvd/include -I/usr/include/python2.7 -I/usr/include/lzo -I/usr/local/src/kodi/build/build/include -I/usr/include/libxml2 -I/usr/include/dbus-1.0 -I/usr/lib/arm-linux-gnueabihf/dbus-1.0/include -I/usr/local/include -I/opt/vc/include  -O3 -pipe  -fmessage-length=0 -fstack-protector -march=armv7-a  -mfpu=neon-vfpv4  -mfloat-abi=hard -mtune=cortex-a7 -mcpu=cortex-a7 -ftree-vectorize -Wno-psabi -Wa,-mno-warn-deprecated -Wno-deprecated-declarations -Wl,--dynamic-linker=/lib/ld-linux-armhf.so.3 -O3 -DNDEBUG   -D_LINUX -DTARGET_POSIX -DTARGET_LINUX -D__STDC_CONSTANT_MACROS -D_FILE_DEFINED -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_STD__U16_STRING=1 -DHAVE_STD__U32_STRING=1 -DHAVE_CHAR16_T=1 -DHAVE_CHAR32_T=1 -DHAVE_STDINT_H=1 -DHAS_BUILTIN_SYNC_ADD_AND_FETCH=1 -DHAS_BUILTIN_SYNC_SUB_AND_FETCH=1 -DHAS_BUILTIN_SYNC_VAL_COMPARE_AND_SWAP=1 -DHAVE_INOTIFY=1 -DHAVE_POSIX_FADVISE=1 -DHAVE_LOCALTIME_R=1 -DHAVE_INTTYPES_H=1 -DFFMPEG_VER_SHA=\"3.1.5-Krypton-Beta5-1\" -DUSE_STATIC_FFMPEG=1 -DHAVE_LIBMICROHTTPD=1 -DHAVE_MYSQL=1 -DHAVE_LIBSSH=1 -DHAVE_LIBXSLT=1 -DHAVE_ALSA=1 -DUSE_ALSA=1 -DHAVE_LIBUDEV=1 -DHAVE_DBUS=1 -DHAVE_LIBCEC=1 -DHAVE_LIBBLURAY=1 -DHAVE_LIBNFS=1 -DHAVE_OPENSSL=1 -DUSE_UPNP=1 -DHAVE_XBMC_NONFREE=1 -DHAVE_LIBGLESV2 -DHAVE_LIBEGL=1 -DBIN_INSTALL_PATH=\"/usr/local/kodi/lib/kodi\" -DINSTALL_PATH=\"/usr/local/kodi/share/kodi\" -o CMakeFiles/dvdoverlaycodecs.dir/contrib/cc_decoder.c.o   -c /usr/local/src/kodi/xbmc/cores/VideoPlayer/DVDCodecs/Overlay/contrib/cc_decoder.c
/usr/local/src/kodi/xbmc/cores/VideoPlayer/DVDCodecs/Overlay/contrib/cc_decoder.c:1:0: warning: switch -mcpu=cortex-a7 conflicts with -march=armv7-a switch
/*

In file included from /usr/local/src/kodi/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/MMALRenderer.h:32:0,
                 from /usr/local/src/kodi/xbmc/cores/VideoPlayer/DVDCodecs/Video/MMALCodec.cpp:45:
/usr/local/src/kodi/xbmc/cores/VideoPlayer/DVDCodecs/Video/MMALFFmpeg.h:40:31: error: invalid use of incomplete type ‘class CMMALBuffer’
class CMMALYUVBuffer : public CMMALBuffer
                               ^~~~~~~~~~~
In file included from /usr/local/src/kodi/xbmc/cores/VideoPlayer/DVDCodecs/Video/MMALCodec.cpp:33:0:
/usr/local/src/kodi/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodec.h:52:7: note: forward declaration of ‘class CMMALBuffer’
class CMMALBuffer;
       ^~~~~~~~~~~
In file included from /usr/local/src/kodi/xbmc/cores/VideoPlayer/DVDCodecs/Video/MMALCodec.cpp:45:0:
/usr/local/src/kodi/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/MMALRenderer.h:56:116: error: ‘MMALState’ has not been declared
   CMMALPool(const char *component_name, bool input, uint32_t num_buffers, uint32_t buffer_size, uint32_t encoding, MMALState state);
                                                                                                                    ^~~~~~~~~

Not clear yet if that's a result of the 'wrong' platform (RPi1 vs RPi2), or can be worked-around with the right mix of configs.

I've searched forums for "CMMALBuffer" with not much luck yet.

Is there any guide yet for a successful CMAKE on RPI2 build config?
Reply
#2
Have you read this thread; http://forum.kodi.tv/showthread.php?tid=288739
Reply
#3
@popcornmix

I have now. Not clear specifically what you're referring to re: CMMAL*.

1 step at a time, then, the relevant bits appear to be
Code:
cmake ../project/cmake \
-DCORE_SYSTEM_NAME=rbpi -DCPU=cortex-a7 -DCMAKE_C_FLAGS="-fPIC -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4" -DCMAKE_CXX_FLAGS="-fPIC -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4"
With that atm, starting with clean Krypton-master sources, building for RPi2, 1st returns an error
Code:
...
CMake Error at scripts/rbpi/ArchSetup.cmake:7 (string):
  string sub-command REGEX, mode REPLACE needs at least 6 arguments total to
  command.
Call Stack (most recent call first):
  scripts/common/ArchSetup.cmake:95 (include)
  CMakeLists.txt:28 (include)
...

Reading at
Code:
https://cmake.org/pipermail/cmake/2004-June/005165.html
suggests quoting the last argument(s)
Code:
edit scripts/rbpi/ArchSetup.cmake
    ...
    -    string(REGEX REPLACE "[ ]+" ";" SYSTEM_LDFLAGS $ENV{LDFLAGS})
    +    string(REGEX REPLACE "[ ]+" ";" SYSTEM_LDFLAGS "$ENV{LDFLAGS}")
    ...
which does get 'cmake ...' past the initial error, but continues on to additional/similar errors
Code:
...
CMake Error at scripts/rbpi/Macros.cmake:34 (string):
  string sub-command REGEX, mode REPLACE needs at least 6 arguments total to
  command.
Call Stack (most recent call first):
  modules/FindCpluff.cmake:34 (core_link_library)
  scripts/common/Macros.cmake:307 (find_package)
  CMakeLists.txt:141 (core_require_dep)

CMake Error at scripts/rbpi/Macros.cmake:34 (string):
  string sub-command REGEX, mode REPLACE needs at least 6 arguments total to
  command.
Call Stack (most recent call first):
  modules/FindLibDvd.cmake:194 (core_link_library)
  scripts/common/Macros.cmake:307 (find_package)
  CMakeLists.txt:141 (core_require_dep)
...
But, sanity-checking, this only occurs in the RPi2 Raspbian chroot; on linux, no such errors.

Fyi, in Raspbian
Code:
cmake --version
    cmake version 3.6.1
In linux64 native env,
Code:
cmake --version
    cmake version 3.7.0

EDIT: upgrade to
Code:
apt-get install -t stretch cmake
cmake --version
    cmake version 3.7.0
returns same error.

EDIT2: the not-on-linux behavior looks like a result of inconsistencies in usage; note some quoting, some lacking
Code:
grep "REGEX REPLACE" `grep -rln "REGEX REPLACE" .`
./modules/FindYajl.cmake:  string(REGEX REPLACE "YAJL_MAJOR ([0-9]+)" "\\1" YAJL_VERSION_MAJOR "${YAJL_VERSION_MAJOR}")
./modules/FindYajl.cmake:  string(REGEX REPLACE ".*YAJL_MAJOR ([0-9]+).*" "\\1" yajl_major "${yajl_version_str}")
./modules/FindYajl.cmake:  string(REGEX REPLACE ".*YAJL_MINOR ([0-9]+).*" "\\1" yajl_minor "${yajl_version_str}")
./modules/FindYajl.cmake:  string(REGEX REPLACE ".*YAJL_MICRO ([0-9]+).*" "\\1" yajl_micro "${yajl_version_str}")
./modules/FindSWIG.cmake:    string(REGEX REPLACE ".*SWIG Version[^0-9.]*\([0-9.]+\).*" "\\1"
./modules/FindCEC.cmake:  string(REGEX REPLACE "^[\t ]+LIBCEC_VERSION_TO_UINT\\(([0-9]+), ([0-9]+), ([0-9]+)\\)" "\\1.\\2.\\3" CEC_VERSION "${cec_version_str}")
./modules/FindPulseAudio.cmake:  string(REGEX REPLACE "^#define[\t ]+pa_get_headers_version\\(\\)[\t ]+\\(\"([^\"]+)\"\\).*" "\\1" PULSEAUDIO_VERSION_STRING "${pulseaudio_version_str}")
./modules/FindSSE.cmake:     string(REGEX REPLACE "^.*(sse).*$" "\\1" _SSE_THERE ${CPUINFO})
./modules/FindSSE.cmake:     string(REGEX REPLACE "^.*(sse2).*$" "\\1" _SSE_THERE ${CPUINFO})
./modules/FindSSE.cmake:     string(REGEX REPLACE "^.*[^s](sse3).*$" "\\1" _SSE_THERE ${CPUINFO})
./modules/FindSSE.cmake:        string(REGEX REPLACE "^.*(T2300).*$" "\\1" _SSE_THERE ${CPUINFO})
./modules/FindSSE.cmake:     string(REGEX REPLACE "^.*(ssse3).*$" "\\1" _SSE_THERE ${CPUINFO})
./modules/FindSSE.cmake:     string(REGEX REPLACE "^.*(sse4_1).*$" "\\1" _SSE_THERE ${CPUINFO})
./modules/FindSSE.cmake:     string(REGEX REPLACE "^.*(sse4_2).*$" "\\1" _SSE_THERE ${CPUINFO})
./modules/FindSSE.cmake:     string(REGEX REPLACE "^.*(avx).*$" "\\1" _SSE_THERE ${CPUINFO})
./modules/FindSSE.cmake:     string(REGEX REPLACE "^.*(avx2).*$" "\\1" _SSE_THERE ${CPUINFO})
./modules/FindSSE.cmake:      string(REGEX REPLACE "^.*[^S](SSE).*$" "\\1" _SSE_THERE ${CPUINFO})
./modules/FindSSE.cmake:      string(REGEX REPLACE "^.*[^S](SSE2).*$" "\\1" _SSE_THERE ${CPUINFO})
./modules/FindSSE.cmake:      string(REGEX REPLACE "^.*[^S](SSE3).*$" "\\1" _SSE_THERE ${CPUINFO})
./modules/FindSSE.cmake:      string(REGEX REPLACE "^.*(SSSE3).*$" "\\1" _SSE_THERE ${CPUINFO})
./modules/FindSSE.cmake:      string(REGEX REPLACE "^.*(SSE4.1).*$" "\\1" _SSE_THERE ${CPUINFO})
./modules/FindSSE.cmake:      string(REGEX REPLACE "^.*(SSE4.2).*$" "\\1" _SSE_THERE ${CPUINFO})
./modules/FindSSE.cmake:      string(REGEX REPLACE "^.*(AVX).*$" "\\1" _SSE_THERE ${CPUINFO})
./modules/FindSSE.cmake:      string(REGEX REPLACE "^.*(AVX2).*$" "\\1" _SSE_THERE ${CPUINFO})
./modules/FindFFMPEG.cmake:    string(REGEX REPLACE "framework;" "framework " PC_FFMPEG_LDFLAGS "${PC_FFMPEG_LDFLAGS}")
./modules/FindVAAPI.cmake:  string(REGEX REPLACE "^#define[\t ]+VA_VERSION_S[\t ]+\"([^\"]+)\".*" "\\1" VAAPI_VERSION_STRING "${vaapi_version_str}")
./modules/FindMySqlClient.cmake:  string(REGEX REPLACE "^#define[\t ]+LIBMYSQL_VERSION[\t ]+\"([^\"]+)\".*" "\\1" MYSQLCLIENT_VERSION_STRING "${mysql_version_str}")
./modules/FindLibXml2.cmake:    string(REGEX REPLACE "^#define[\t ]+LIBXML_DOTTED_VERSION[\t ]+\"([^\"]*)\".*" "\\1"
./scripts/common/CMakeHelpers.cmake:  string(REGEX REPLACE ";" "\\\\;" _properties "${_properties}")
./scripts/common/CMakeHelpers.cmake:  string(REGEX REPLACE "\n" ";" _properties "${_properties}")
./scripts/common/CMakeHelpers.cmake:  string(REGEX REPLACE ";LOCATION;|LOCATION" "" _properties "${_properties}")
./scripts/common/CMakeHelpers.cmake:  string(REGEX REPLACE "<CONFIG>" "${CMAKE_BUILD_TYPE}" _properties
./scripts/common/Macros.cmake:      string(REGEX REPLACE "^(.*)#(.*)" "\\1" fstring ${fstring})
./scripts/common/Macros.cmake:      string(REGEX REPLACE "[ \n\r\t]//.*" "" fstring ${fstring})
./scripts/common/Macros.cmake:  string(REGEX REPLACE ".*\"(.*)\"" "\\1" guilib_version ${guilib_version})
./scripts/common/Macros.cmake:  string(REGEX REPLACE ".*\"(.*)\"" "\\1" guilib_version_min ${guilib_version_min})
./scripts/common/ProjectMacros.cmake:            string(REGEX REPLACE ".*\\( *([A-Za-z_0-9]+), *([A-Za-z_0-9]+) *\\).*" "\\1.\\2" test_name ${hit})
./scripts/common/CheckCommits.cmake:    string(REGEX REPLACE "(\r?\n)+$" "" build_threads "${build_threads}")
./scripts/common/CheckCommits.cmake:string(REGEX REPLACE "(\r?\n)+$" "" current_branch "${current_branch}")
./scripts/common/AddonHelpers.cmake:  string(REGEX REPLACE ".*version=.([0-9\\.]+).*" "\\1" ${prefix}_VERSION ${VERSION_STRING})
./scripts/rbpi/ArchSetup.cmake:string(REGEX REPLACE "[ ]+" ";" SYSTEM_LDFLAGS $ENV{LDFLAGS})
./scripts/android/Install.cmake:    string(REGEX REPLACE "\\.so\\..+$" "\.so" destfile ${srcfile})
./scripts/linux/CodeCoverage.cmake:  string(REGEX REPLACE "([^;]+)" "--exclude=\"\\1\"" _gcovr_excludes "${COVERAGE_EXCLUDES}")
./scripts/linux/Macros.cmake:  string(REGEX REPLACE "[ ]+" ";" _flags ${CMAKE_SHARED_LINKER_FLAGS})
Reply

Logout Mark Read Team Forum Stats Members Help
CMAKE build for RPi2: multiple config & errors ...0