Hi @all,
In recent CMake versions I get a deprecated message for using the
cmake_force_xxx_compiler() function inside my toolchain file. After searching,
I found that there are two threads on the CMake list, one
https://cmake.org/pipermail/cmake/2016-February/062773.html
just ending without a solution and referencing to
https://cmake.org/pipermail/cmake-developers/2016-February/027888.html
which also doesn’t really tell me how this is supposed to work in my case.
From those threads, I was able to modify my toolchain file:
- replaced force_compiler function with regular set(CMAKE...
- added line set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) as linking needs
a linker script.
However, it fails with the following output:
exit.c:(.text.exit+0x1a): undefined reference to `_exit'
collect2: error: ld returned 1 exit status
which to me indicates that CMake ignores the STATIC_LIBRARY flag and tries
linking.
Has anyone successfully modified their toolchain file to correctly detect the
gnu-arm-embedded toolchain?
Thanks for your help!
Regards,
Martin
Terminal output:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- The C compiler identification is GNU 6.2.1
-- The CXX compiler identification is GNU 6.2.1
-- Check for working C compiler:
/opt/gcc-arm-freertos-eabi-6_2-2017q1/bin/arm-freertos-eabi-gcc
CMake Error at
/home/user/workspace/project/buildsupport/toolchains/toolchain_stm32f303xB_freertos.cmake:37
(include):
include could not find load file:
/home/user/workspace/project/build/release/arm-cortex-m4f_stm32f303/CMakeFiles/CMakeTmp/buildsupport/toolchains/toolchain_arm-cortex-m4f.cmake
Call Stack (most recent call first):
/home/user/workspace/project/build/release/arm-cortex-m4f_stm32f303/CMakeFiles/3.7.2/CMakeSystem.cmake:6
(include)
/home/user/workspace/project/build/release/arm-cortex-m4f_stm32f303/CMakeFiles/CMakeTmp/CMakeLists.txt:2
(project)
CMake Error: Internal CMake error, TryCompile configure of cmake failed
-- Check for working C compiler:
/opt/gcc-arm-freertos-eabi-6_2-2017q1/bin/arm-freertos-eabi-gcc -- broken
CMake Error at /usr/share/cmake-3.7/Modules/CMakeTestCCompiler.cmake:51
(message):
The C compiler
"/opt/gcc-arm-freertos-eabi-6_2-2017q1/bin/arm-freertos-eabi-gcc" is not
able to compile a simple test program.
It fails with the following output:
-- Configuring incomplete, errors occurred!
See also
"/home/user/workspace/project/build/release/arm-cortex-m4f_stm32f303/CMakeFiles/CMakeOutput.log".
See also
"/home/user/workspace/project/build/release/arm-cortex-m4f_stm32f303/CMakeFiles/CMakeError.log".
CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
CMakeLists.txt:17 (project)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CMakeOutput.log
The target system is: Generic - - arm-freertos-eabi
The host system is: Linux - 4.9.0-1-amd64 - x86_64
Compiling the C compiler identification source file "CMakeCCompilerId.c"
succeeded.
Compiler: /opt/gcc-arm-freertos-eabi-6_2-2017q1/bin/arm-freertos-eabi-gcc
Build flags:
;-DSTM32F303xC;-mcpu=cortex-m4;-mfpu=fpv4-sp-d16;-mfloat-abi=hard;-mthumb;--specs=nano.specs;-D_REENT_SMALL;
Id flags: -c
The output was:
0
Compilation of the C compiler identification source "CMakeCCompilerId.c"
produced "CMakeCCompilerId.o"
The C compiler identification is GNU, found in
"/home/user/workspace/project/build/release/arm-cortex-m4f_stm32f303/CMakeFiles/3.7.2/CompilerIdC/CMakeCCompilerId.o"
Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp"
succeeded.
Compiler: /opt/gcc-arm-freertos-eabi-6_2-2017q1/bin/arm-freertos-eabi-g++
Build flags:
;-DSTM32F303xC;-mcpu=cortex-m4;-mfpu=fpv4-sp-d16;-mfloat-abi=hard;-mthumb;--specs=nano.specs;-D_REENT_SMALL;
Id flags: -c
The output was:
0
Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp"
produced "CMakeCXXCompilerId.o"
The CXX compiler identification is GNU, found in
"/home/user/workspace/project/build/release/arm-cortex-m4f_stm32f303/CMakeFiles/3.7.2/CompilerIdCXX/CMakeCXXCompilerId.o"
Compiling the C compiler identification source file "CMakeCCompilerId.c"
succeeded.
Compiler: /opt/gcc-arm-freertos-eabi-6_2-2017q1/bin/arm-freertos-eabi-gcc
Build flags:
;-DSTM32F303xC;-mcpu=cortex-m4;-mfpu=fpv4-sp-d16;-mfloat-abi=hard;-mthumb;--specs=nano.specs;-D_REENT_SMALL;
Id flags: -c
The output was:
0
Compilation of the C compiler identification source "CMakeCCompilerId.c"
produced "CMakeCCompilerId.o"
The C compiler identification is GNU, found in
"/home/user/workspace/project/build/release/arm-cortex-m4f_stm32f303/CMakeFiles/3.7.2/CompilerIdC/CMakeCCompilerId.o"
Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp"
succeeded.
Compiler: /opt/gcc-arm-freertos-eabi-6_2-2017q1/bin/arm-freertos-eabi-g++
Build flags:
;-DSTM32F303xC;-mcpu=cortex-m4;-mfpu=fpv4-sp-d16;-mfloat-abi=hard;-mthumb;--specs=nano.specs;-D_REENT_SMALL;
Id flags: -c
The output was:
0
Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp"
produced "CMakeCXXCompilerId.o"
The CXX compiler identification is GNU, found in
"/home/user/workspace/project/build/release/arm-cortex-m4f_stm32f303/CMakeFiles/3.7.2/CompilerIdCXX/CMakeCXXCompilerId.o"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CMakeError.log
Compiling the C compiler identification source file "CMakeCCompilerId.c" failed.
Compiler: /opt/gcc-arm-freertos-eabi-6_2-2017q1/bin/arm-freertos-eabi-gcc
Build flags:
;-DSTM32F303xC;-mcpu=cortex-m4;-mfpu=fpv4-sp-d16;-mfloat-abi=hard;-mthumb;--specs=nano.specs;-D_REENT_SMALL;
Id flags:
The output was:
1
/opt/gcc-arm-freertos-eabi-6_2-2017q1/bin/../lib/gcc/arm-freertos-eabi/6.2.1/../../../../arm-freertos-eabi/lib/thumb/v7e-m/fpv4-sp/hard/libc_nano.a(lib_a-exit.o):
In function `exit':
exit.c:(.text.exit+0x1a): undefined reference to `_exit'
collect2: error: ld returned 1 exit status
Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp"
failed.
Compiler: /opt/gcc-arm-freertos-eabi-6_2-2017q1/bin/arm-freertos-eabi-g++
Build flags:
;-DSTM32F303xC;-mcpu=cortex-m4;-mfpu=fpv4-sp-d16;-mfloat-abi=hard;-mthumb;--specs=nano.specs;-D_REENT_SMALL;
Id flags:
The output was:
1
/opt/gcc-arm-freertos-eabi-6_2-2017q1/bin/../lib/gcc/arm-freertos-eabi/6.2.1/../../../../arm-freertos-eabi/lib/thumb/v7e-m/fpv4-sp/hard/libc_nano.a(lib_a-exit.o):
In function `exit':
exit.c:(.text.exit+0x1a): undefined reference to `_exit'
collect2: error: ld returned 1 exit status
Determining if the C compiler works failed with the following output:
Compiling the C compiler identification source file "CMakeCCompilerId.c" failed.
Compiler: /opt/gcc-arm-freertos-eabi-6_2-2017q1/bin/arm-freertos-eabi-gcc
Build flags:
;-DSTM32F303xC;-mcpu=cortex-m4;-mfpu=fpv4-sp-d16;-mfloat-abi=hard;-mthumb;--specs=nano.specs;-D_REENT_SMALL;
Id flags:
The output was:
1
/opt/gcc-arm-freertos-eabi-6_2-2017q1/bin/../lib/gcc/arm-freertos-eabi/6.2.1/../../../../arm-freertos-eabi/lib/thumb/v7e-m/fpv4-sp/hard/libc_nano.a(lib_a-exit.o):
In function `exit':
exit.c:(.text.exit+0x1a): undefined reference to `_exit'
collect2: error: ld returned 1 exit status
Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp"
failed.
Compiler: /opt/gcc-arm-freertos-eabi-6_2-2017q1/bin/arm-freertos-eabi-g++
Build flags:
;-DSTM32F303xC;-mcpu=cortex-m4;-mfpu=fpv4-sp-d16;-mfloat-abi=hard;-mthumb;--specs=nano.specs;-D_REENT_SMALL;
Id flags:
The output was:
1
/opt/gcc-arm-freertos-eabi-6_2-2017q1/bin/../lib/gcc/arm-freertos-eabi/6.2.1/../../../../arm-freertos-eabi/lib/thumb/v7e-m/fpv4-sp/hard/libc_nano.a(lib_a-exit.o):
In function `exit':
exit.c:(.text.exit+0x1a): undefined reference to `_exit'
collect2: error: ld returned 1 exit status
Determining if the C compiler works failed with the following output:
~~~~eof, no output~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Toolchain file:
# FreeRTOS custom toolchain
set(target_os freertos)
set(target_toolchain /opt/gcc-arm-${target_os}-eabi-6_2-2017q1/bin)
# Linker file
set(EXE_LINKER_FLAGS "${EXE_LINKER_FLAGS} -T
path/to/linker/file/STM32F303CBTx_FLASH.ld")
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) #can’t link without linker
file
## specify the cross compiler
set(CROSSTOOLCHAIN_PATH ${target_toolchain})
set(CMAKE_SYSTEM_PROCESSOR arm-${target_os}-eabi)
set(CROSSTOOLCHAIN_PREFIX ${CMAKE_SYSTEM_PROCESSOR}-)
#cmake_force_c_compiler(${CROSSTOOLCHAIN_PATH}/${CROSSTOOLCHAIN_PREFIX}gcc GNU )
#cmake_force_cxx_compiler(${CROSSTOOLCHAIN_PATH}/${CROSSTOOLCHAIN_PREFIX}g++
GNU )
set(CMAKE_C_COMPILER ${CROSSTOOLCHAIN_PATH}/${CROSSTOOLCHAIN_PREFIX}gcc)
set(CMAKE_CXX_COMPILER ${CROSSTOOLCHAIN_PATH}/${CROSSTOOLCHAIN_PREFIX}g++)
## where is the target environment
set(CMAKE_FIND_ROOT_PATH ${CROSSTOOLCHAIN_PATH})
## search for programs in the build host directories
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
## for libraries and headers in the target directories
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
# Cortex M4 Compilerflags
# gcc-arm-none-eabi-4_9-2015q3/share/doc/gcc-arm-none-eabi/readme.txt
set(C_FLAGS "${C_FLAGS} -mcpu=cortex-m4")
set(C_FLAGS "${C_FLAGS} -mfpu=fpv4-sp-d16")
set(C_FLAGS "${C_FLAGS} -mfloat-abi=hard")
set(C_FLAGS "${C_FLAGS} -mthumb")
# newlib Nano. REENT_SMALL needed for FreeRTOS!
set(C_FLAGS "${C_FLAGS} --specs=nano.specs -D_REENT_SMALL ")
# Bare Metal Target
set(EXE_LINKER_FLAGS "${EXE_LINKER_FLAGS} --specs=rdimon.specs -lrdimon")
set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} ${C_FLAGS} CACHE STRING "Cortex M4 C Flags")
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} ${C_FLAGS} CACHE STRING "Cortex M4 C++
Flags")
set(CMAKE_ASM_FLAGS ${CMAKE_ASM_FLAGS} ${C_FLAGS} CACHE STRING "Cortex M4 asm
Flags")
set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} ${EXE_LINKER_FLAGS} CACHE
STRING "Cortex M4 Linker Flags")
--
Powered by www.kitware.com
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Kitware offers various services to support the CMake community. For more
information on each offering, please visit:
CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake