Skip to content

Linux build fails (and how to somehow fix it) #1207

@iskolbin

Description

@iskolbin

Tried to build current branch recently, and build failed. After some trial I finally successfully build it, but with some hacks, so let me just list my problems and my 'fixes'.

  1. My system: Ubuntu 18.04.1 LTS on MSI Dominator laptop (2K14 or so)
  2. expat not compiling, complaining on You do not have support for any sources of high quality entropy, Upd thx @ciwrl, updated cmake:
diff --git a/cmake/cmake/cmake-modules/platform-linux.cmake b/cmake/cmake/cmake-modules/platform-linux.cmake
index 7b61c0c2d..c91cce9a6 100644
--- a/cmake/cmake/cmake-modules/platform-linux.cmake
+++ b/cmake/cmake/cmake-modules/platform-linux.cmake
@@ -1,3 +1,3 @@
  #find_package ( OpenGL REQUIRED )
-  set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DPOSIX  -DNDEBUG -DHAVE_MEMMOVE" )
-  set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -DPOSIX " )
\ No newline at end of file
+  set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DPOSIX  -DNDEBUG -DHAVE_MEMMOVE -DXML_DEV_URANDOM" )
+  set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -DPOSIX " )
  1. Old SDL2, build failed with:
libmoai/third-party/sdl2/install/lib/libSDL2.a(SDL_waylandvideo.c.o): In function `wl_registry_bind':
/usr/include/wayland-client-protocol.h:1079: undefined reference to `wl_proxy_marshal_constructor_versioned'
/usr/include/wayland-client-protocol.h:1079: undefined reference to `wl_proxy_marshal_constructor_versioned'
/usr/include/wayland-client-protocol.h:1079: undefined reference to `wl_proxy_marshal_constructor_versioned'
/usr/include/wayland-client-protocol.h:1079: undefined reference to `wl_proxy_marshal_constructor_versioned'
/usr/include/wayland-client-protocol.h:1079: undefined reference to `wl_proxy_marshal_constructor_versioned'
libmoai/third-party/sdl2/install/lib/libSDL2.a(SDL_waylandvideo.c.o):/usr/include/wayland-client-protocol.h:1079: more undefined references to `wl_proxy_marshal_constructor_versioned' follow
libmoai/third-party/sdl2/install/lib/libSDL2.a(SDL_waylandevents.c.o): In function `wl_registry_bind':
/usr/include/wayland-client-protocol.h:1079: undefined reference to `wl_proxy_marshal_constructor_versioned'
libmoai/third-party/sdl2/install/lib/libSDL2.a(SDL_waylandtouch.c.o): In function `wl_registry_bind':
/usr/include/wayland-client-protocol.h:1079: undefined reference to `wl_proxy_marshal_constructor_versioned'

to heal this, just updated SDL2 to 2.0.8, updated cmake file (see 5), note about bug and fix: http://blfs-dev.linuxfromscratch.narkive.com/bJ1fxg4e/sdl2-2-0-4-fails-to-compile-with-wayland-1-12-0
4. Problems building sndio:

libmoai/third-party/sdl2/install/lib/libSDL2.a(SDL_sndioaudio.c.o): In function `SNDIO_Init':
SDL_sndioaudio.c:(.text+0xa3): undefined reference to `sio_open'
SDL_sndioaudio.c:(.text+0xb1): undefined reference to `sio_close'
SDL_sndioaudio.c:(.text+0xbf): undefined reference to `sio_setpar'
SDL_sndioaudio.c:(.text+0xcd): undefined reference to `sio_getpar'
SDL_sndioaudio.c:(.text+0xdb): undefined reference to `sio_start'
SDL_sndioaudio.c:(.text+0xe9): undefined reference to `sio_stop'
SDL_sndioaudio.c:(.text+0xf7): undefined reference to `sio_read'
SDL_sndioaudio.c:(.text+0x105): undefined reference to `sio_write'
SDL_sndioaudio.c:(.text+0x113): undefined reference to `sio_nfds'
SDL_sndioaudio.c:(.text+0x121): undefined reference to `sio_pollfd'
SDL_sndioaudio.c:(.text+0x12f): undefined reference to `sio_revents'
SDL_sndioaudio.c:(.text+0x13d): undefined reference to `sio_eof'
SDL_sndioaudio.c:(.text+0x14b): undefined reference to `sio_initpar'

which is healed by adding link flag to cmake file (taken from https://stackoverflow.com/questions/41608136/sdl-sndioaudio-c-undefined-reference-to-sio#41621638), updted cmake file (see 5)
5. Update SDL2 cmake file for new version and sndio fix

diff --git a/cmake/cmake/third-party/sdl2/CMakeLists.txt b/cmake/cmake/third-party/sdl2/CMakeLists.txt
index 6f85c3528..fa67a342e 100644
--- a/cmake/cmake/third-party/sdl2/CMakeLists.txt
+++ b/cmake/cmake/third-party/sdl2/CMakeLists.txt
@@ -2,13 +2,13 @@ cmake_minimum_required ( VERSION 3.0 )
 project ( SDL2-static )
 include(ExternalProject)
 
-set (SDL2_SOURCE_DIR "${MOAI_ROOT}/3rdparty/sdl2-2.0.4")
+set (SDL2_SOURCE_DIR "${MOAI_ROOT}/3rdparty/sdl2-2.0.8")
 set (SDL2_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/binarydir")
 ExternalProject_Add(sdl2
    SOURCE_DIR "${SDL2_SOURCE_DIR}"
    CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/install"  -DSDL_SHARED=OFF -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DLIBC=ON
    CMAKE_CACHE_ARGS "-DSDL2_SOURCE_DIR:string=${SDL2_SOURCE_DIR}" "-DSDL2_BINARY_DIR:string=${SDL2_BINARY_DIR}" "-DSDL_STATIC:bool=on" "-DSDL_SHARED:bool=off" 
-   PREFIX "${CMAKE_CURRENT_BINARY_DIR}/sdl2-2.0.4"
+   PREFIX "${CMAKE_CURRENT_BINARY_DIR}/sdl2-2.0.8"
    INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/install"
 )
 
@@ -35,7 +35,6 @@ add_library(SDL2-static INTERFACE)
 
 #todo install headers too :)
 target_include_directories(SDL2-static INTERFACE "${SDL2_SOURCE_DIR}/include_moai" "${SDL2_SOURCE_DIR}/include" )
-target_link_libraries(SDL2-static INTERFACE SDL2-static-imp )
-
+target_link_libraries(SDL2-static INTERFACE SDL2-static-imp sndio )
 
 install(TARGETS SDL2-static EXPORT libmoai ARCHIVE DESTINATION lib)
  1. Missing variable in src/zl-gfx/ZLGfxDevice.cpp (commented out, but used), fixed by using global variable, defined in this file
diff --git a/src/zl-gfx/ZLGfxDevice.cpp b/src/zl-gfx/ZLGfxDevice.cpp
index 409956b72..92287f688 100644
--- a/src/zl-gfx/ZLGfxDevice.cpp
+++ b/src/zl-gfx/ZLGfxDevice.cpp
@@ -124,7 +124,7 @@ void ZLGfxDevice::Initialize () {
 
                // if framebuffer object is not in code, check to see if it's available as
                // an extension and remap to core function pointers if so
-               if (( isOpenGLES == false ) && ( majorVersion < 3 )) {
+               if (( isOpenGLES == false ) && ( sMajorVersion < 3 )) {
 
                        if ( glewIsSupported ( "GL_EXT_framebuffer_object" )) {
  1. Cannot build moai-http-client, I guess problems with expat. Cannot find MOAIXmlParser. To fix this I modified #if guards:
diff --git a/src/moai-http-client/MOAIHttpTaskBase.cpp b/src/moai-http-client/MOAIHttpTaskBase.cpp
index d0d15f02f..5ac22486e 100644
--- a/src/moai-http-client/MOAIHttpTaskBase.cpp
+++ b/src/moai-http-client/MOAIHttpTaskBase.cpp
@@ -3,7 +3,7 @@
 
 #include "pch.h"
 
-#if MOAI_WITH_TINYXML
+#if MOAI_WITH_TINYXML && MOAI_WITH_EXPAT
   #include <tinyxml.h>
 #endif 
 
@@ -225,7 +225,7 @@ int MOAIHttpTaskBase::_isBusy ( lua_State* L ) {
 int MOAIHttpTaskBase::_parseXml ( lua_State* L ) {
        MOAI_LUA_SETUP ( MOAIHttpTaskBase, "U" )
 
-       #if MOAI_WITH_TINYXML
+       #if MOAI_WITH_TINYXML && MOAI_WITH_EXPAT
 
                if ( !self->mData.Size ()) return 0;
                

Hope this will help:)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions