Bug 11016 - Wrong compiler used for external user host packages
Summary: Wrong compiler used for external user host packages
Status: RESOLVED WONTFIX
Alias: None
Product: buildroot
Classification: Unclassified
Component: Other (show other bugs)
Version: unspecified
Hardware: PC Linux
: P5 normal
Target Milestone: ---
Assignee: unassigned
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2018-05-14 08:02 UTC by Dr I J Ormshaw
Modified: 2018-05-15 20:58 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Dr I J Ormshaw 2018-05-14 08:02:57 UTC
I am building on CentOs from the head of master.

I have a number of packages in the BR2_EXTERNAL file structure that require c++14 to compile.  I have configured buildroot to use gcc 7.  However for host packages the native compiler is being used not the one built as a part of buildroot.  The build output and package config files are included below.

>>> host-amstParseSharedLibraries custom Configuring
(mkdir -p /home/ian/build/silverstone/x86_64/1c622ae/buildroot/build/host-amstParseSharedLibraries-custom/ && cd /home/ian/build/silverstone/x86_64/1c622ae/buildroot/build/host-amstParseSharedLibraries-custom/ && rm -f CMakeCache.txt && PATH="/home/ian/build/silverstone/x86_64/1c622ae/buildroot/host/bin:/home/ian/build/silverstone/x86_64/1c622ae/buildroot/host/sbin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/ian/.local/bin:/home/ian/bin" PKG_CONFIG="/home/ian/build/silverstone/x86_64/1c622ae/buildroot/host/bin/pkg-config" PKG_CONFIG_SYSROOT_DIR="/" PKG_CONFIG_LIBDIR="/home/ian/build/silverstone/x86_64/1c622ae/buildroot/host/lib/pkgconfig:/home/ian/build/silverstone/x86_64/1c622ae/buildroot/host/share/pkgconfig" PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1 PKG_CONFIG_ALLOW_SYSTEM_LIBS=1  /home/ian/build/silverstone/x86_64/1c622ae/buildroot/host/bin/cmake /home/ian/build/silverstone/x86_64/1c622ae/buildroot/build/host-amstParseSharedLibraries-custom/ -DCMAKE_INSTALL_SO_NO_EXE=0 -DCMAKE_FIND_ROOT_PATH="/home/ian/build/silverstone/x86_64/1c622ae/buildroot/host" -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM="BOTH" -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY="BOTH" -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE="BOTH" -DCMAKE_INSTALL_PREFIX="/home/ian/build/silverstone/x86_64/1c622ae/buildroot/host" -DCMAKE_C_FLAGS="-O2 -I/home/ian/build/silverstone/x86_64/1c622ae/buildroot/host/include" -DCMAKE_CXX_FLAGS="-O2 -I/home/ian/build/silverstone/x86_64/1c622ae/buildroot/host/include" -DCMAKE_EXE_LINKER_FLAGS="-L/home/ian/build/silverstone/x86_64/1c622ae/buildroot/host/lib -Wl,-rpath,/home/ian/build/silverstone/x86_64/1c622ae/buildroot/host/lib" -DCMAKE_SHARED_LINKER_FLAGS="-L/home/ian/build/silverstone/x86_64/1c622ae/buildroot/host/lib -Wl,-rpath,/home/ian/build/silverstone/x86_64/1c622ae/buildroot/host/lib" -DCMAKE_ASM_COMPILER="/usr/bin/as" -DCMAKE_C_COMPILER="/usr/bin/gcc" -DCMAKE_CXX_COMPILER="/usr/bin/g++"  -DCMAKE_C_COMPILER_ARG1="" -DCMAKE_CXX_COMPILER_ARG1=""  -DCMAKE_COLOR_MAKEFILE=OFF -DBUILD_DOC=OFF -DBUILD_DOCS=OFF -DBUILD_EXAMPLE=OFF -DBUILD_EXAMPLES=OFF -DBUILD_TEST=OFF -DBUILD_TESTS=OFF -DBUILD_TESTING=OFF  -DCMAKE_CXX_FLAGS="-fPIC -Wall -Wextra -Wpedantic -Werror -std=gnu++14" -DAMSTPARSESHAREDLIBRARIES=On )
-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is unknown
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/g++
-- Check for working CXX compiler: /usr/bin/g++ -- broken
CMake Error at /home/ian/build/silverstone/x86_64/1c622ae/buildroot/host/share/cmake-3.8/Modules/CMakeTestCXXCompiler.cmake:44 (message):
  The C++ compiler "/usr/bin/g++" is not able to compile a simple test
  program.

  It fails with the following output:

   Change Dir: /home/ian/build/silverstone/x86_64/1c622ae/buildroot/build/host-amstParseSharedLibraries-custom/CMakeFiles/CMakeTmp

  

  Run Build Command:"/usr/bin/gmake" "cmTC_e7a5c/fast"

  gmake[3]: Entering directory
  `/home/ian/build/silverstone/x86_64/1c622ae/buildroot/build/host-amstParseSharedLibraries-custom/CMakeFiles/CMakeTmp'


  /usr/bin/gmake -f CMakeFiles/cmTC_e7a5c.dir/build.make
  CMakeFiles/cmTC_e7a5c.dir/build

  gmake[4]: Entering directory
  `/home/ian/build/silverstone/x86_64/1c622ae/buildroot/build/host-amstParseSharedLibraries-custom/CMakeFiles/CMakeTmp'


  Building CXX object CMakeFiles/cmTC_e7a5c.dir/testCXXCompiler.cxx.o

  /usr/bin/g++ -fPIC -Wall -Wextra -Wpedantic -Werror -std=gnu++14 -o
  CMakeFiles/cmTC_e7a5c.dir/testCXXCompiler.cxx.o -c
  /home/ian/build/silverstone/x86_64/1c622ae/buildroot/build/host-amstParseSharedLibraries-custom/CMakeFiles/CMakeTmp/testCXXCompiler.cxx


  g++: error: unrecognized command line option ‘-std=gnu++14’

  gmake[4]: *** [CMakeFiles/cmTC_e7a5c.dir/testCXXCompiler.cxx.o] Error 1

  gmake[4]: Leaving directory
  `/home/ian/build/silverstone/x86_64/1c622ae/buildroot/build/host-amstParseSharedLibraries-custom/CMakeFiles/CMakeTmp'


  gmake[3]: *** [cmTC_e7a5c/fast] Error 2

  gmake[3]: Leaving directory
  `/home/ian/build/silverstone/x86_64/1c622ae/buildroot/build/host-amstParseSharedLibraries-custom/CMakeFiles/CMakeTmp'


  

  

  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  CMakeLists.txt:2 (project)


-- Configuring incomplete, errors occurred!
See also "/home/ian/build/silverstone/x86_64/1c622ae/buildroot/build/host-amstParseSharedLibraries-custom/CMakeFiles/CMakeOutput.log".
See also "/home/ian/build/silverstone/x86_64/1c622ae/buildroot/build/host-amstParseSharedLibraries-custom/CMakeFiles/CMakeError.log".
make[2]: *** [/home/ian/build/silverstone/x86_64/1c622ae/buildroot/build/host-amstParseSharedLibraries-custom/.stamp_configured] Error 1
make[1]: *** [_all] Error 2
make[1]: Leaving directory `/home/ian/amst/buildroot'
make: *** [buildroot] Error 2

#########
Config.in
#########

config BR2_PACKAGE_AMSTLINUXLIBRARIES
    bool "Linux Libraries"
    depends on BR2_INSTALL_LIBSTDCPP && BR2_TOOLCHAIN_HAS_THREADS

comment "Linux Libraries needs a toolchain with glibc"
        depends on !BR2_TOOLCHAIN_BUILDROOT_GLIBC

comment "Linux Libraries needs a toolchain with threading support"
        depends on !BR2_TOOLCHAIN_HAS_THREADS


################################################################################
#
# amstLinuxLibraries.mk
#
################################################################################

AMSTLINUXLIBRARIES_VERSION           = 0.0.1
AMSTLINUXLIBRARIES_SITE              = $(BR2_EXTERNAL)/source/libraries
AMSTLINUXLIBRARIES_SITE_METHOD       = local
AMSTLINUXLIBRARIES_DEPENDENCIES      = host-amstLinuxLibraries
AMSTLINUXLIBRARIES_INSTALL_TARGET    = YES
AMSTLINUXLIBRARIES_INSTALL_STAGING   = YES
AMSTLINUXLIBRARIES_CONF_OPTS         = -DCMAKE_CXX_FLAGS="$(AMSTLINUXLIBRARIES_COMMON_CXX_FLAGS)" -DAMSTLINUXLIBRARIES=On
HOST_AMSTLINUXLIBRARIES_CONF_OPTS    = -DCMAKE_CXX_COMPILER=$(HOST_DIR)/bin/x86_64-linux-g++ -DCMAKE_CXX_FLAGS="$(HOST_CPPFLAGS) $(AMSTLINUXLIBRARIES_COMMON_CXX_FLAGS)" -DAMSTLINUXLIBRARIES=On

$(eval $(cmake-package))
$(eval $(host-cmake-package))
Comment 1 Dr I J Ormshaw 2018-05-14 08:19:44 UTC
The CMakeLists file used with that config was:

cmake_minimum_required(VERSION 3.0.2)
project(linuxLibraries)

set(CMAKE_C_STANDARD_REQUIRED -std=gnu++14)
add_compile_options(-fPIC -Wall -Wextra -Werror)

add_subdirectory(libTime)
add_subdirectory(libLock)
add_subdirectory(libRegularExpression)
add_subdirectory(libApplication)
add_subdirectory(libStatistic)
add_subdirectory(libSocket)
add_subdirectory(libXmlDocument)
add_subdirectory(libFifo)
add_subdirectory(libHash)
add_subdirectory(libDiskEvents)

The make file:

################################################################################
#
# amstLinuxLibraries
#
################################################################################
AMSTLINUXLIBRARIES_COMMON_CXX_FLAGS = -fPIC -Wall -Wextra -Werror -std=gnu++14

AMSTLINUXLIBRARIES_VERSION           = 0.0.1
AMSTLINUXLIBRARIES_SITE              = $(BR2_EXTERNAL)/source/libraries
AMSTLINUXLIBRARIES_SITE_METHOD       = local
AMSTLINUXLIBRARIES_DEPENDENCIES      = host-amstLinuxLibraries
AMSTLINUXLIBRARIES_INSTALL_TARGET    = YES
AMSTLINUXLIBRARIES_INSTALL_STAGING   = YES
AMSTLINUXLIBRARIES_CONF_OPTS         = -DCMAKE_CXX_FLAGS="$(AMSTLINUXLIBRARIES_COMMON_CXX_FLAGS)" -DAMSTLINUXLIBRARIES=On
HOST_AMSTLINUXLIBRARIES_CONF_OPTS    = -DCMAKE_CXX_FLAGS="$(HOST_CPPFLAGS) $(AMSTLINUXLIBRARIES_COMMON_CXX_FLAGS)" -DAMSTLINUXLIBRARIES=On

$(eval $(cmake-package))
$(eval $(host-cmake-package))

was origionally used with:

cmake_minimum_required(VERSION 3.0.2)
project(linuxLibraries)

add_subdirectory(libTime)
add_subdirectory(libLock)
add_subdirectory(libRegularExpression)
add_subdirectory(libApplication)
add_subdirectory(libStatistic)
add_subdirectory(libSocket)
add_subdirectory(libXmlDocument)
add_subdirectory(libFifo)
add_subdirectory(libHash)
add_subdirectory(libDiskEvents)
Comment 2 Arnout Vandecappelle 2018-05-15 20:58:18 UTC
Buildroot does not build its own native compiler (i.e. the compiler used to build host-packages). We don't plan to do so. It would increase the complexity significantly.

Instead, Buildroot can exclude packages that require a recent native compiler, using the symbols BR2_HOST_GCC_AT_LEAST_X_Y. So in your case, you could add 'depends on BR2_HOST_GCC_AT_LEAST_5' to the Config.in of amstParseSharedLibraries. Clearly, that doesn't solve your problem because you simply will not be able to build your packages.

However, you can fairly easily build gcc7 yourself and install it somewhere in your PATH.