conan: [bug] `tools.cmake.cmaketoolchain`: `system_name` & `system_processor` configs not respected

Environment details

  • Operating System+version: M1 Mac Ventura 13.3.1 (a)
  • Compiler+version: N/A
  • Conan version: 2.0.4
  • Python version: 3.10.2

Steps to reproduce

Set the following configuration options in a package and consume in a library and see that it does not get set in the conan_toolchain.cmake.

    def package_info(self):
        self.conf_info.define(
            "tools.cmake.cmaketoolchain:system_name", "GENERIC")
        self.conf_info.define(
            "tools.cmake.cmaketoolchain:system_processor", "ARM")
        self.conf_info.define("tools.build.cross_building:can_run", False)
        self.conf_info.define("tools.build:compiler_executables", {
            "c": "arm-none-eabi-gcc",
            "cpp": "arm-none-eabi-g++",
            "asm": "arm-none-eabi-as",
        })

Logs

No response

About this issue

  • Original URL
  • State: closed
  • Created a year ago
  • Comments: 15 (15 by maintainers)

Most upvoted comments

Totally understand. I was actually working on a stripped down version myself. I’ll see what I can provide. Thank you!

  • Are you using such package as tool_requires in the consumer?

Yes I am.

  • Is that the full package_info() method?

No, this is the full package_info() method:

    def package_info(self):
        bin_folder = os.path.join(self.package_folder, "bin/bin")
        self.cpp_info.bindirs = [bin_folder]
        self.buildenv_info.append_path("PATH", bin_folder)

        self.conf_info.define(
            "tools.cmake.cmaketoolchain:system_name", "GENERIC")
        self.conf_info.define(
            "tools.cmake.cmaketoolchain:system_processor", "ARM")
        self.conf_info.define("tools.build.cross_building:can_run", False)
        self.conf_info.define("tools.build:compiler_executables", {
            "c": "arm-none-eabi-gcc",
            "cpp": "arm-none-eabi-g++",
            "asm": "arm-none-eabi-as",
        })
  • Do you have something in your consumer in the generate() method? (the consumer conanfile.py would be useful)

No, I’m just using the generators = "CMakeToolchain", "CMakeDeps", "VirtualBuildEnv"

  • Are you defining those confs in your profiles? (attaching the logs would be useful)

No, I am not. Trying to let the conf’s travel from the package.

Logs when I use this without a toolchain file forcing the values to be GENERIC and ARM is:

libhal-armcortex/2.0.0: RUN: cmake -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE="/Users/kammce/.conan2/p/t/libhaff761837f668f/b/build/MinSizeRel/generators/conan_toolchain.cmake" -DCMAKE_INSTALL_PREFIX="/Users/kammce/.conan2/p/t/libhaff761837f668f/p" -DCMAKE_POLICY_DEFAULT_CMP0091="NEW" -DCMAKE_BUILD_TYPE="MinSizeRel" -DBUILD_TESTING="OFF" -DARM_CPU="cortex-m4" -DARM_FLOAT_ABI="hard" "/Users/kammce/.conan2/p/libha8a71210618723/s/."
-- Using Conan toolchain: /Users/kammce/.conan2/p/t/libhaff761837f668f/b/build/MinSizeRel/generators/conan_toolchain.cmake
-- Conan toolchain: C++ Standard 20 with extensions ON
-- The CXX compiler identification is GNU 12.2.1
-- Checking whether CXX compiler has -isysroot
-- Checking whether CXX compiler has -isysroot - yes
-- Checking whether CXX compiler supports OSX deployment target flag
-- Checking whether CXX compiler supports OSX deployment target flag - no
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - failed
-- Check for working CXX compiler: /Users/kammce/.conan2/p/arm-gbe94e6aab58c2/p/bin/bin/arm-none-eabi-g++
-- Check for working CXX compiler: /Users/kammce/.conan2/p/arm-gbe94e6aab58c2/p/bin/bin/arm-none-eabi-g++ - broken
CMake Error at /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/cmake/data/CMake.app/Contents/share/cmake-3.24/Modules/CMakeTestCXXCompiler.cmake:62 (message):
  The C++ compiler

    "/Users/kammce/.conan2/p/arm-gbe94e6aab58c2/p/bin/bin/arm-none-eabi-g++"

  is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: /Users/kammce/.conan2/p/t/libhaff761837f668f/b/build/MinSizeRel/CMakeFiles/CMakeTmp
    
    Run Build Command(s):/usr/bin/make -f Makefile cmTC_29877/fast && /Library/Developer/CommandLineTools/usr/bin/make  -f CMakeFiles/cmTC_29877.dir/build.make CMakeFiles/cmTC_29877.dir/build
    Building CXX object CMakeFiles/cmTC_29877.dir/testCXXCompiler.cxx.o
    /Users/kammce/.conan2/p/arm-gbe94e6aab58c2/p/bin/bin/arm-none-eabi-g++ -D_GLIBCXX_USE_CXX11_ABI=0  -mthumb -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -mabi=aapcs   -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk -std=gnu++20 -o CMakeFiles/cmTC_29877.dir/testCXXCompiler.cxx.o -c /Users/kammce/.conan2/p/t/libhaff761837f668f/b/build/MinSizeRel/CMakeFiles/CMakeTmp/testCXXCompiler.cxx
    arm-none-eabi-g++: error: unrecognized command-line option '-arch'; did you mean '-march='?
    make[1]: *** [CMakeFiles/cmTC_29877.dir/testCXXCompiler.cxx.o] Error 1
    make: *** [cmTC_29877/fast] Error 2
    

Here is my conan_toolchain.cmake file:

# Conan automatically generated toolchain file
# DO NOT EDIT MANUALLY, it will be overwritten

# Avoid including toolchain file several times (bad if appending to variables like
#   CMAKE_CXX_FLAGS. See https://github.com/android/ndk/issues/323
include_guard()

message(STATUS "Using Conan toolchain: ${CMAKE_CURRENT_LIST_FILE}")

if(${CMAKE_VERSION} VERSION_LESS "3.15")
    message(FATAL_ERROR "The 'CMakeToolchain' generator only works with CMake >= 3.15")
endif()





# Cross building
set(CMAKE_SYSTEM_NAME Darwin)





# Set the architectures for which to build.
set(CMAKE_OSX_ARCHITECTURES  CACHE STRING "" FORCE)
# Setting CMAKE_OSX_SYSROOT SDK, when using Xcode generator the name is enough
# but full path is necessary for others
set(CMAKE_OSX_SYSROOT macosx CACHE STRING "" FORCE)
set(BITCODE "")
set(FOBJC_ARC "")
set(VISIBILITY "")
#Check if Xcode generator is used, since that will handle these flags automagically
if(CMAKE_GENERATOR MATCHES "Xcode")
  message(DEBUG "Not setting any manual command-line buildflags, since Xcode is selected as generator.")
else()
    string(APPEND CONAN_C_FLAGS " ${BITCODE} ${FOBJC_ARC}")
    string(APPEND CONAN_CXX_FLAGS " ${BITCODE} ${VISIBILITY} ${FOBJC_ARC}")
endif()

string(APPEND CONAN_CXX_FLAGS " -stdlib=libc++")


message(STATUS "Conan toolchain: C++ Standard 20 with extensions OFF")
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Extra c, cxx, linkflags and defines


if(DEFINED CONAN_CXX_FLAGS)
  string(APPEND CMAKE_CXX_FLAGS_INIT " ${CONAN_CXX_FLAGS}")
endif()
if(DEFINED CONAN_C_FLAGS)
  string(APPEND CMAKE_C_FLAGS_INIT " ${CONAN_C_FLAGS}")
endif()
if(DEFINED CONAN_SHARED_LINKER_FLAGS)
  string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " ${CONAN_SHARED_LINKER_FLAGS}")
endif()
if(DEFINED CONAN_EXE_LINKER_FLAGS)
  string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " ${CONAN_EXE_LINKER_FLAGS}")
endif()

get_property( _CMAKE_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE )
if(_CMAKE_IN_TRY_COMPILE)
    message(STATUS "Running toolchain IN_TRY_COMPILE")
    return()
endif()

set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON)

# Definition of CMAKE_MODULE_PATH
# the generators folder (where conan generates files, like this toolchain)
list(PREPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})

# Definition of CMAKE_PREFIX_PATH, CMAKE_XXXXX_PATH
# The Conan local "generators" folder, where this toolchain is saved.
list(PREPEND CMAKE_PREFIX_PATH ${CMAKE_CURRENT_LIST_DIR} )
list(PREPEND CMAKE_LIBRARY_PATH "/Users/kammce/.conan2/p/libhabe4c3c883f8ed/p/lib" "/Users/kammce/.conan2/p/boostc1dcd19891104/p/lib")
list(PREPEND CMAKE_INCLUDE_PATH "/Users/kammce/.conan2/p/libhabe4c3c883f8ed/p/include" "/Users/kammce/.conan2/p/libha3dc969b7e46cb/p/include" "/Users/kammce/.conan2/p/libhade63a3f34a0db/p/include" "/Users/kammce/.conan2/p/tl-fu92f44dcaabe30/p/include" "/Users/kammce/.conan2/p/boostc1dcd19891104/p/include")



if (DEFINED ENV{PKG_CONFIG_PATH})
set(ENV{PKG_CONFIG_PATH} "${CMAKE_CURRENT_LIST_DIR}:$ENV{PKG_CONFIG_PATH}")
else()
set(ENV{PKG_CONFIG_PATH} "${CMAKE_CURRENT_LIST_DIR}:")
endif()




# Variables
# Variables  per configuration


# Preprocessor definitions
# Preprocessor definitions per configuration

And you can see above that its using Darwin because its the build target but not the host target, which should be ARM and GENERIC.

You can use my PR to conan-center-index as thats what I’m using to generate these logs. https://github.com/conan-io/conan-center-index/pull/17528