Mercurial > louis > kiibohd-controller
changeset 264:945ce4472602
Adding experimental clang compiler support for arm-none-eabi
- Currently builds larger binaries than gcc (RAM)
author | Jacob Alexander <haata@kiibohd.com> |
---|---|
date | Wed, 31 Dec 2014 19:42:16 -0800 |
parents | 9afed592bcb5 |
children | 708af1b9bc55 |
files | CMakeLists.txt Lib/CMake/arm.cmake Lib/CMake/build.cmake |
diffstat | 3 files changed, 50 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/CMakeLists.txt Wed Dec 31 17:13:44 2014 -0800 +++ b/CMakeLists.txt Wed Dec 31 19:42:16 2014 -0800 @@ -29,6 +29,20 @@ ### +# Compiler Selection +# + +#| *** EXPERIMENTAL *** +#| Stick with gcc unless you know what you're doing +#| Currently only arm is supported with clang +set( COMPILER + "gcc" # arm-none-eabi-gcc / avr-gcc - Default +# "clang" # arm-none-eabi + CACHE STRING "Compiler Type" ) + + + +### # Compiler Intialization # set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/Lib/CMake )
--- a/Lib/CMake/arm.cmake Wed Dec 31 17:13:44 2014 -0800 +++ b/Lib/CMake/arm.cmake Wed Dec 31 19:42:16 2014 -0800 @@ -13,9 +13,20 @@ #| Set the Compilers (must be set first) include( CMakeForceCompiler ) -cmake_force_c_compiler ( arm-none-eabi-gcc ARMCCompiler ) -cmake_force_cxx_compiler( arm-none-eabi-g++ ARMCxxCompiler ) -set( _CMAKE_TOOLCHAIN_PREFIX arm-none-eabi- ) +message( STATUS "Compiler Selected:" ) +if ( "${COMPILER}" MATCHES "gcc" ) + cmake_force_c_compiler ( arm-none-eabi-gcc ARMCCompiler ) + cmake_force_cxx_compiler( arm-none-eabi-g++ ARMCxxCompiler ) + set( _CMAKE_TOOLCHAIN_PREFIX arm-none-eabi- ) + message( "gcc" ) +elseif ( "${COMPILER}" MATCHES "clang" ) + cmake_force_c_compiler ( clang ARMCCompiler ) + cmake_force_cxx_compiler( clang++ ARMCxxCompiler ) + set( _CMAKE_TOOLCHAIN_PREFIX llvm- ) + message( "clang" ) +else () + message( AUTHOR_WARNING "COMPILER: ${COMPILER} - Unknown compiler selection" ) +endif () @@ -134,6 +145,8 @@ if( BOOTLOADER ) set( TUNING "-D_bootloader_ -Wno-main -msoft-float -mthumb -fplan9-extensions -ffunction-sections -fdata-sections -fno-builtin -fstrict-volatile-bitfields -flto -fno-use-linker-plugin -nostdlib" ) #set( TUNING "-mthumb -fdata-sections -ffunction-sections -fno-builtin -msoft-float -fstrict-volatile-bitfields -flto -fno-use-linker-plugin -fwhole-program -Wno-main -nostartfiles -fplan9-extensions -D_bootloader_" ) +elseif ( "${COMPILER}" MATCHES "clang" ) + set( TUNING "-target arm-none-eabi -mthumb -nostdlib -fdata-sections -ffunction-sections -fshort-wchar -fno-builtin" ) else() set( TUNING "-mthumb -nostdlib -fdata-sections -ffunction-sections -fshort-wchar -fno-builtin -nostartfiles" ) endif() @@ -181,5 +194,9 @@ #| Lss Flags -set( LSS_FLAGS -h -S -z ) +if ( "${COMPILER}" MATCHES "clang" ) + set( LSS_FLAGS -section-headers -triple=arm-none-eabi ) +else () + set( LSS_FLAGS -h -S -z ) +endif ()
--- a/Lib/CMake/build.cmake Wed Dec 31 17:13:44 2014 -0800 +++ b/Lib/CMake/build.cmake Wed Dec 31 19:42:16 2014 -0800 @@ -33,22 +33,33 @@ SUFFIX "" # XXX Force Windows to keep the .exe off ) +#| llvm-clang does not have an objcopy equivalent +if ( "${COMPILER}" MATCHES "clang" ) + if ( "${COMPILER_FAMILY}" MATCHES "arm" ) + set ( OBJ_COPY arm-none-eabi-objcopy ) + elseif ( "${COMPILER_FAMILY}" MATCHES "arm" ) + set ( OBJ_COPY avr-objcopy ) + endif () +else () + set ( OBJ_COPY ${CMAKE_OBJCOPY} ) +endif () + #| Convert the .ELF into a .bin to load onto the McHCK -if( DEFINED DFU ) +if ( DEFINED DFU ) set( TARGET_BIN ${TARGET}.dfu.bin ) add_custom_command( TARGET ${TARGET_ELF} POST_BUILD - COMMAND ${CMAKE_OBJCOPY} ${BIN_FLAGS} ${TARGET_ELF} ${TARGET_BIN} + COMMAND ${OBJ_COPY} ${BIN_FLAGS} ${TARGET_ELF} ${TARGET_BIN} COMMENT "Creating dfu binary file: ${TARGET_BIN}" ) -endif() +endif () #| Convert the .ELF into a .HEX to load onto the Teensy if ( DEFINED TEENSY ) set( TARGET_HEX ${TARGET}.teensy.hex ) add_custom_command( TARGET ${TARGET_ELF} POST_BUILD - COMMAND ${CMAKE_OBJCOPY} ${HEX_FLAGS} ${TARGET_ELF} ${TARGET_HEX} + COMMAND ${OBJ_COPY} ${HEX_FLAGS} ${TARGET_ELF} ${TARGET_HEX} COMMENT "Creating iHex file to load: ${TARGET_HEX}" ) endif()