掌機 - GCW Zero - Build buildroot



參考資訊:
https://github.com/etnaviv/galcore_headers
https://github.com/pbouda/buildroot-qt-dev/issues/6
http://www.synerlab.ee/lang/v8/files/patch-src-objects.h
https://blog.csdn.net/weixin_42421766/article/details/82983170
https://github.com/mono/mono/commit/16ee0252305fbd4f40ea39c3c4421dc7f103f8a0

Debian 9 x64:

$ sudo apt-get install bison flex gettext texinfo wget cpio python unzip mercurial subversion libncurses5-dev libc6-dev-i386 bzr
$ git clone git://github.com/gcwnow/buildroot.git
$ cd buildroot
$ wget https://w1.fi/releases/hostapd-2.8.tar.gz dl/hostapd-0.8_rtw_r7475.20130812.tar.gz
$ make gcw0_defconfig
$ make
    cfns.gperf:101:1: error: ‘const char* libc_name_p(const char*, unsigned int)’ redeclared inline with ‘gnu_inline’ attribute

$ vim output/build/host-gcc-final-4.9.1/gcc/cp/cfns.h +55
    //__inline

$ make
    In file included from ../ncurses/curses.priv.h:283:0, 
                     from ../ncurses/lib_gen.c:19:
    _9246.c:835:15: error: expected ‘)’ before ‘int’
    ../include/curses.h:1594:56: note: in definition of macro ‘mouse_trafo’
    #define mouse_trafo(y,x,to_screen) wmouse_trafo(stdscr,y,x,to_screen)

$ vim output/build/host-ncurses-5.9/ncurses/base/MKlib_gen.sh +439
    cat >$ED1 <<EOF
    s/  / /g
    s/^ //
    s/ $//
    s/P_NCURSES_BOOL/NCURSES_BOOL/g
    EOF

    # A patch discussed here:
    #  https://gcc.gnu.org/ml/gcc-patches/2014-06/msg02185.html
    # introduces spurious #line markers.  Work around that by ignoring the system's
    # attempt to define "bool" and using our own symbol here.
    sed -e 's/bool/P_NCURSES_BOOL/g' $TMP > $ED2
    cat $ED2 >$TMP

     $preprocessor $TMP 2>/dev/null \
     | sed -f $ED1 \
     | $AWK -f $AW2 \
     | sed -f $ED3 \
     | sed \

$ make
    gdate.c:2497:7: error: format not a string literal, format string not checked [-Werror=format-nonliteral]
    tmplen = strftime (tmpbuf, tmpbufsize, locale_format, &tm);

$ vim output/build/host-libglib2-2.38.2/glib/Makefile +621
    CFLAGS = -O2 -Ioutput/host/usr/include -Wno-format-nonliteral

$ make
    CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
    CMake 3.1.0 or higher is required.  You are running version 2.8.12.2

$ rm -rf output/build/host-cmake-2.8.12.2
$ rm package/cmake/cmake-0001-FindQt4-do-not-prepend-CMake-root-path-when-searchin.patch
$ vim package/cmake/cmake.mk
    CMAKE_VERSION_MAJOR = 3.1
    CMAKE_VERSION = $(CMAKE_VERSION_MAJOR).0

$ vim package/etna_viv/etna_viv.mk
    22: $(MAKE) -C $(@D)/attic \
    32: cp $(@D)/attic/etnaviv/libetnaviv.a $(STAGING_DIR)/usr/lib
    34: cp $(@D)/attic/etnaviv/*.h $(STAGING_DIR)/usr/include/etnaviv

$ make
    etna.c:34:20: fatal error: gc_abi.h: No such file or directory
    #include "gc_abi.h"

$ vim output/build/etna_viv-master/attic/Makefile.inc
    1:   ifndef GCABI
    2:     #$(error GCABI is undefined. Consult the README.md file to set it according to your kernel)
    3:   endif
    12:  GCC_CFLAGS = -D_POSIX_C_SOURCE=200809 -D_GNU_SOURCE -I../../src

$ git clone https://github.com/etnaviv/galcore_headers
$ cp -a galcore_headers/include_v4/* output/build/etna_viv-master/attic
$ rm -rf galcore_headers

$ vim output/build/etna_viv-master/attic/driver/etna_rasterizer.h +30
    #define VIVS_PA_SYSTEM_MODE_UNK0  0x00000001
    #define VIVS_PA_SYSTEM_MODE_UNK4  0x00000010

$ make 
    etna_internal.h:29:31: fatal error: etnaviv/state.xml.h: No such file or directory
    #include <etnaviv/state.xml.h>

$ vim output/build/mesa3d-etna_viv-pre_rebase_2014_09/src/gallium/drivers/etna/Makefile +206
    CFLAGS = -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64  -pipe -O2  -Wall -std=c99 -Werror=implicit-function-declaration -Werror=missing-prototypes -fno-strict-aliasing -fno-builtin-memcmp -Ixxx/output/build/etna_viv-master/src

$ vim output/build/mesa3d-etna_viv-pre_rebase_2014_09/src/gallium/winsys/etna/drm/Makefile +201
    CFLAGS = -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64  -pipe -O2  -Wall -std=c99 -Werror=implicit-function-declaration -Werror=missing-prototypes -fno-strict-aliasing -fno-builtin-memcmp -Ixxx/output/build/etna_viv-master/src

$ vim output/build/mesa3d-etna_viv-pre_rebase_2014_09/src/gallium/winsys/etna/fbdev/Makefile +201
    CFLAGS = -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64  -pipe -O2  -Wall -std=c99 -Werror=implicit-function-declaration -Werror=missing-prototypes -fno-strict-aliasing -fno-builtin-memcmp -Ixxx/output/build/etna_viv-master/src

$ make
    etna_rasterizer.c:61:66: error: 'VIVS_PA_SYSTEM_MODE_UNK4' undeclared (first use in this function)
    (rs->half_pixel_center ? (VIVS_PA_SYSTEM_MODE_UNK0 | VIVS_PA_SYSTEM_MODE_UNK4) : 0);

$ vim output/build/mesa3d-etna_viv-pre_rebase_2014_09/src/gallium/drivers/etna/etna_rasterizer.h +30
    #define VIVS_PA_SYSTEM_MODE_UNK0  0x00000001
    #define VIVS_PA_SYSTEM_MODE_UNK4  0x00000010

$ vim output/build/mesa3d-etna_viv-pre_rebase_2014_09/src/gallium/drivers/etna/etna_zsa.h +30
    #define VIVS_PE_STENCIL_CONFIG                    0x0000141c
    #define VIVS_PE_STENCIL_CONFIG_MODE__MASK         0x00000003
    #define VIVS_PE_STENCIL_CONFIG_MODE__SHIFT        0
    #define VIVS_PE_STENCIL_CONFIG_MODE_DISABLED      0x00000000
    #define VIVS_PE_STENCIL_CONFIG_MODE_ONE_SIDED     0x00000001
    #define VIVS_PE_STENCIL_CONFIG_MODE_TWO_SIDED     0x00000002
    #define VIVS_PE_STENCIL_CONFIG_MODE_MASK          0x00000010
    #define VIVS_PE_STENCIL_CONFIG_REF_FRONT_MASK     0x00000020
    #define VIVS_PE_STENCIL_CONFIG_MASK_FRONT_MASK    0x00000040
    #define VIVS_PE_STENCIL_CONFIG_WRITE_MASK_MASK    0x00000080
    #define VIVS_PE_STENCIL_CONFIG_REF_FRONT__MASK    0x0000ff00
    #define VIVS_PE_STENCIL_CONFIG_REF_FRONT__SHIFT   8
    #define VIVS_PE_STENCIL_CONFIG_REF_FRONT(x)       (((x) << VIVS_PE_STENCIL_CONFIG_REF_FRONT__SHIFT) & VIVS_PE_STENCIL_CONFIG_REF_FRONT__MASK)
    #define VIVS_PE_STENCIL_CONFIG_MASK_FRONT__MASK   0x00ff0000
    #define VIVS_PE_STENCIL_CONFIG_MASK_FRONT__SHIFT  16
    #define VIVS_PE_STENCIL_CONFIG_MASK_FRONT(x)      (((x) << VIVS_PE_STENCIL_CONFIG_MASK_FRONT__SHIFT) & VIVS_PE_STENCIL_CONFIG_MASK_FRONT__MASK)
    #define VIVS_PE_STENCIL_CONFIG_WRITE_MASK__MASK   0xff000000
    #define VIVS_PE_STENCIL_CONFIG_WRITE_MASK__SHIFT  24
    #define VIVS_PE_STENCIL_CONFIG_WRITE_MASK(x)      (((x) << VIVS_PE_STENCIL_CONFIG_WRITE_MASK__SHIFT) & VIVS_PE_STENCIL_CONFIG_WRITE_MASK__MASK)

$ make
    output/build/host-mono-3.10.0/mono/mini/mini.c:2642: undefined reference to mono_jit_tls

$ vim output/build/host-mono-3.10.0/mono/metadata/sgen-alloc.c +97
    static __thread char **tlab_next_addr MONO_ATTR_USED;

$ vim output/build/host-mono-3.10.0/mono/utils/mono-compiler.h +16
    #ifdef __GNUC__
      #define MONO_ATTR_USED __attribute__ ((used))
    #else
      #define MONO_ATTR_USED
    #endif
    #define MONO_FAST_TLS_DECLARE(x) static __thread gpointer x MONO_TLS_FAST MONO_ATTR_USED;

$ make
    ../deps/v8/src/objects.h:5188:44: error: left operand of shift expression ‘(-1 << 3)’ is negative [-fpermissive]
      static const int kElementsKindMask = (-1 << kElementsKindShift) &
    ../deps/v8/src/objects.h:7376:39: warning: left shift of negative value [-Wshift-negative-value]
      (~kMaxCachedArrayIndexLength << kArrayIndexHashLengthShift) |
    ../deps/v8/src/objects.h:7376:36: error: left operand of shift expression ‘(-8 << 26)’ is negative [-fpermissive]
      (~kMaxCachedArrayIndexLength << kArrayIndexHashLengthShift) |

$ vim output/build/host-nodejs-0.10.12/deps/v8/src/objects.h +5188
    static const int kElementsKindMask = -(1 << kElementsKindShift) &

$ vim output/build/host-nodejs-0.10.12/deps/v8/src/objects.h +7376
    (~static_cast<unsigned>(kMaxCachedArrayIndexLength) << kArrayIndexHashLengthShift) |

$ make
    ../deps/v8/src/liveedit.cc:205:41: error: left operand of shift expression ‘(-1 << 2)’ is negative [-fpermissive]
    static const int kEmptyCellValue = -1 << kDirectionSizeBits;

$ vim output/build/host-nodejs-0.10.12/deps/v8/src/liveedit.cc +205
    static const int kEmptyCellValue = -(1 << kDirectionSizeBits);

$ make
    checking whether your compiler passes the ACC conformance test... FAILED

$ vim output/build/host-lzo-2.06/src/miniacc.h
    755 #elif defined(__amd64__) || defined(__x86_64__) || defined(_M_AMD64)
    756 #  define ACC_ARCH_AMD64            1
    757 #  define ACC_INFO_ARCH             "amd64"
    758 #  if defined(__ILP32__)
    759 #    define ACC_ARCH_AMD64_X32      1
    760 #  endif
    761 #elif defined(__thumb__) || (defined(_M_ARM) && defined(_M_THUMB))

    4473 #if defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0150)
    4474 #elif 1 && (ACC_CC_SUNPROC) && !defined(ACCCHK_CFG_PEDANTIC)
    4475 #else
    4476     ACCCHK_ASSERT((int)(1u   << (8*SIZEOF_INT-1)) < 0)
    4477 #endif
    4478     ACCCHK_ASSERT((1u  << (8*SIZEOF_INT-1)) > 0)
    4479 #if 1 && (ACC_CC_SUNPROC) && !defined(ACCCHK_CFG_PEDANTIC)
    4480 #else
    4481     ACCCHK_ASSERT((long)(1ul  << (8*SIZEOF_LONG-1)) < 0)
    4482 #endif
    4483     ACCCHK_ASSERT((1ul << (8*SIZEOF_LONG-1)) > 0)

    4708 #elif 1 && (ACC_CC_SUNPROC) && !defined(ACCCHK_CFG_PEDANTIC)
    4709 #elif !(ACC_BROKEN_INTEGRAL_PROMOTION) && (SIZEOF_INT > 1)
    4710     ACCCHK_ASSERT( (int)((unsigned int)((unsigned char)128) << (int)(8*sizeof(int)-8)) < 0)
    4711 #endif
    4712 #if (ACC_CC_BORLANDC && (__BORLANDC__ >= 0x0530) && (__BORLANDC__ < 0x0560))

    6788 ACCLIB_PUBLIC_NOINLINE(void, acc_debug_nop) (void)
    6789 {
    6790 }
    6791 ACCLIB_PUBLIC_NOINLINE(int, acc_debug_align_check_query) (void)
    6792 {
    6793 #if (ACC_ARCH_AMD64 || ACC_ARCH_I386) && (ACC_ASM_SYNTAX_GNUC)
    6794     #  if defined(ACC_ARCH_AMD64_X32)
    6795       unsigned long long r;
    6796     #  else
    6797       size_t r;
    6798     #  endif
    6799     __asm__ __volatile__("pushf\n pop %0\n" : "=a" (r) : : __ACC_ASM_CLOBBER);
    6800     return (int)(r >> 18) & 1;
    6801 #elif (ACC_ARCH_I386) && (ACC_ASM_SYNTAX_MSC)

P.S. Toolchain(output/host)、rootfs(output/images/rootfs.squashfs)