简体   繁体   中英

Compile with distcc doesn't distribute to other system(s) / slave not working

I've encountered a problem with discc, a compile job distribution tool, where a ( cmake ) build was not distributed to other specified systems (as defined in ~/.distcc/host ).

I configured the build system like so:

cmake -DCMAKE_C_COMPILER_LAUNCHER=distcc -DCMAKE_CXX_COMPILER_LAUNCHER=distcc [...]

For other (similar) builds it turned out distcc worked just fine and hence, was configured properly.

What can possibly be the issue?

It turns out that distcc refuses to work with the march=native compile option. Which certainly makes sense, since binaries with mixed optimization flags may be combined.

Just to let you know, if you have a build system using march=native , like the cmake instructions:

include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-march=native" COMPILER_SUPPORTS_MARCH_NATIVE)
if(COMPILER_SUPPORTS_MARCH_NATIVE)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
endif()

You'll have to disable it, to be able to use distcc with slaves. You'll have to specifiy the architecture flags manually.

Alternatively, try to detect the use of distcc :

include(CheckCXXCompilerFlag)
STRING(FIND "${CMAKE_CXX_COMPILER_LAUNCHER}" "distcc" found)
if (${found} LESS 0)
    message(STATUS "trying to use -march=native")
    CHECK_CXX_COMPILER_FLAG("-march=native" COMPILER_SUPPORTS_MARCH_NATIVE)
    if(COMPILER_SUPPORTS_MARCH_NATIVE)
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
    endif()
else()
    message(STATUS "detected 'distcc' build, hence not using -march=native")
endif()

for this to be successful, make sure you use distcc with the respective cmake compiler launcher tool:

cmake -DCMAKE_C_COMPILER_LAUNCHER=distcc -DCMAKE_CXX_COMPILER_LAUNCHER=distcc [...]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM