Идентификатор компилятора TI cl2000 cmake CXX неизвестен - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь выполнить кросс-компиляцию, используя cl2000.exe компилятор / компоновщик из TI, но у меня возникают проблемы с компилированием / связыванием CMake его простой тестовой программы.

Файл инструментарияЯ использую это (скопировано из this gist ):

set(TI_TOOLCHAIN_DIR "C:/ti/ccs901/ccs/tools/compiler/ti-cgt-c2000_18.12.1.LTS")

set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_VERSION 1)

# toolchain paths
find_program(TI_GCC             NAMES   cl2000    PATHS  ${TI_TOOLCHAIN_DIR}/bin    NO_DEFAULT_PATH)
find_program(TI_CXX             NAMES   cl2000    PATHS  ${TI_TOOLCHAIN_DIR}/bin    NO_DEFAULT_PATH)
find_program(TI_AS              NAMES   cl2000    PATHS  ${TI_TOOLCHAIN_DIR}/bin    NO_DEFAULT_PATH)
find_program(TI_AR              NAMES   ar2000    PATHS  ${TI_TOOLCHAIN_DIR}/bin    NO_DEFAULT_PATH)
find_program(TI_OBJCOPY         NAMES   ofd2000   PATHS  ${TI_TOOLCHAIN_DIR}/bin    NO_DEFAULT_PATH)
find_program(TI_OBJDUMP         NAMES   hex2000   PATHS  ${TI_TOOLCHAIN_DIR}/bin    NO_DEFAULT_PATH)
find_program(TI_SIZE            NAMES   size2000  PATHS  ${TI_TOOLCHAIN_DIR}/bin    NO_DEFAULT_PATH)
find_program(TI_LD              NAMES   cl2000    PATHS  ${TI_TOOLCHAIN_DIR}/bin    NO_DEFAULT_PATH)

# set executables settings
set(CMAKE_C_COMPILER    ${TI_GCC})
set(CMAKE_CXX_COMPILER  ${TI_CXX})
set(AS                  ${TI_AS})
set(AR                  ${TI_AR})
set(OBJCOPY             ${TI_OBJCOPY})
set(OBJDUMP             ${TI_OBJDUMP})
set(SIZE                ${TI_SIZE})
set(LD                  ${TI_LD})

Похоже, что он правильно определяет компилятор C как TI, но не компилятор CXX:

$ cmake -DCMAKE_TOOLCHAIN_FILE=../toolchain-cl2000.cmake -G "Unix Makefiles" ..
-- The C compiler identification is TI
-- The CXX compiler identification is unknown
-- Check for working C compiler: C:/ti/ccs901/ccs/tools/compiler/ti-cgt-c2000_18.12.1.LTS/bin/cl2000.exe
-- Check for working C compiler: C:/ti/ccs901/ccs/tools/compiler/ti-cgt-c2000_18.12.1.LTS/bin/cl2000.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: C:/ti/ccs901/ccs/tools/compiler/ti-cgt-c2000_18.12.1.LTS/bin/cl2000.exe
-- Check for working CXX compiler: C:/ti/ccs901/ccs/tools/compiler/ti-cgt-c2000_18.12.1.LTS/bin/cl2000.exe -- broken
CMake Error at C:/Program Files/CMake/share/cmake-3.15/Modules/CMakeTestCXXCompiler.cmake:53 (message):
  The C++ compiler

    "C:/ti/ccs901/ccs/tools/compiler/ti-cgt-c2000_18.12.1.LTS/bin/cl2000.exe"

  is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: C:/src/company/proj/build/CMakeFiles/CMakeTmp

    Run Build Command(s):C:/PROGRA~2/GnuWin32/bin/make.exe cmTC_13e15/fast && C:/PROGRA~2/GnuWin32/bin/make.exe -f CMakeFiles/cmTC_13e15.dir/build.make CMakeFiles/cmTC_13e15.dir/build
    make.exe[1]: Entering directory `C:/src/company/proj/build/CMakeFiles/CMakeTmp'
    Building CXX object CMakeFiles/cmTC_13e15.dir/testCXXCompiler.cxx.obj
    C:/ti/ccs901/ccs/tools/compiler/ti-cgt-c2000_18.12.1.LTS/bin/cl2000.exe     -o CMakeFiles/cmTC_13e15.dir/testCXXCompiler.cxx.obj -c "C:/src/company/proj/build/CMakeFiles/CMakeTmp/testCXXCompiler.cxx"
    [testCXXCompiler.cxx]
    >> WARNING: object file specified, but linking not enabled
    Linking CXX executable cmTC_13e15
    C:/ti/ccs901/ccs/tools/compiler/ti-cgt-c2000_18.12.1.LTS/bin/cl2000.exe       "CMakeFiles/cmTC_13e15.dir/testCXXCompiler.cxx.obj"   -o cmTC_13e15
    [cmTC_13e15.]
    >> WARNING: object file specified, but linking not enabled
    Fatal error: cannot open source file "cmTC_13e15"
    1 catastrophic error detected in the compilation of "cmTC_13e15".
    Compilation terminated.

    >> Compilation failure
    make.exe[1]: *** [cmTC_13e15] Error 1
    make.exe[1]: Leaving directory `C:/src/company/proj/build/CMakeFiles/CMakeTmp'
    make.exe: *** [cmTC_13e15/fast] Error 2





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


-- Configuring incomplete, errors occurred!

Я пробовал:

  • set(CMAKE_EXE_LINKER_FLAGS "-z")
    • Вызывает компоновщик из командной строки компилятора.
  • set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -eo=cxx.obj")
    • Устраняет проблему, из-за которой cl2000.exe удаляет .cxx из простой тестовой программы .cxx.obj.

ВключениеФлаг -z вызывает только следующую ошибку:

<Linking>
    "C:\\Users\\user\\AppData\\Local\\Temp\\{F59696C9-9FC5-441B-8BA5-AC3022232249}", line 5: error:
       cannot find file "CMakeFiles/cmTC_d4b00.dir/testCXXCompiler.cxx.obj"
    fatal error: no input files

Затем добавление опции -eo=cxx.obj также вызывает ту же ошибку.

Кто-нибудь успешно кросс-компилировал C / C ++ с использованием CMake иcl2000

1 Ответ

0 голосов
/ 11 июля 2019

Проблема заключалась в том, что компилятор cl2000 создает .obj файлы, в которых информационные строки компилятора были UTF-16BE, а CMake предполагал, что это UTF-8. В CMake 3.16.0 запланировано исправление, в котором CMake теперь правильно определяет идентификацию компилятора C и CXX для компилятора cl2000.

Подробнее см. и запрос на слияние .

...