Kiibohd Controller
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

build.cmake 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. ###| CMAKE Kiibohd Controller Source Configurator |###
  2. #
  3. # Written by Jacob Alexander in 2011-2015 for the Kiibohd Controller
  4. #
  5. # Released into the Public Domain
  6. #
  7. ###
  8. ###
  9. # Disable -Wl,-search_paths_first for OSX (not supported by avr-gcc or arm-none-eabi-gcc)
  10. #
  11. if ( APPLE )
  12. string ( REPLACE "-Wl,-search_paths_first" "" CMAKE_C_LINK_FLAGS ${CMAKE_C_LINK_FLAGS} )
  13. string ( REPLACE "-Wl,-search_paths_first" "" CMAKE_CXX_LINK_FLAGS ${CMAKE_CXX_LINK_FLAGS} )
  14. endif ()
  15. ###
  16. # Build Targets
  17. #
  18. #| Create the .ELF file
  19. set( TARGET_ELF ${TARGET}.elf )
  20. add_executable( ${TARGET_ELF} ${SRCS} generatedKeymap.h )
  21. #| .ELF Properties
  22. set_target_properties( ${TARGET_ELF} PROPERTIES
  23. LINK_FLAGS ${LINKER_FLAGS}
  24. SUFFIX "" # XXX Force Windows to keep the .exe off
  25. )
  26. #| llvm-clang does not have an objcopy equivalent
  27. if ( "${COMPILER}" MATCHES "clang" )
  28. if ( "${COMPILER_FAMILY}" MATCHES "arm" )
  29. set ( OBJ_COPY arm-none-eabi-objcopy )
  30. elseif ( "${COMPILER_FAMILY}" MATCHES "arm" )
  31. set ( OBJ_COPY avr-objcopy )
  32. endif ()
  33. else ()
  34. set ( OBJ_COPY ${CMAKE_OBJCOPY} )
  35. endif ()
  36. #| Convert the .ELF into a .bin to load onto the McHCK
  37. #| Then sign using dfu-suffix (requries dfu-util)
  38. if ( DEFINED DFU )
  39. # dfu-suffix is required to sign the dfu binary
  40. find_package ( DFUSuffix )
  41. set( TARGET_BIN ${TARGET}.dfu.bin )
  42. if ( DFU_SUFFIX_FOUND )
  43. add_custom_command( TARGET ${TARGET_ELF} POST_BUILD
  44. COMMAND ${OBJ_COPY} ${BIN_FLAGS} ${TARGET_ELF} ${TARGET_BIN}
  45. COMMAND ${DFU_SUFFIX_EXECUTABLE} --add ${TARGET_BIN} --vid ${BOOT_VENDOR_ID} --pid ${BOOT_PRODUCT_ID} 1> /dev/null
  46. COMMENT "Create and sign dfu bin file: ${TARGET_BIN}"
  47. )
  48. else ()
  49. message ( WARNING "DFU Binary has not been signed, requires dfu-suffix..." )
  50. add_custom_command( TARGET ${TARGET_ELF} POST_BUILD
  51. COMMAND ${OBJ_COPY} ${BIN_FLAGS} ${TARGET_ELF} ${TARGET_BIN}
  52. COMMENT "Creating dfu binary file: ${TARGET_BIN}"
  53. )
  54. endif ()
  55. endif ()
  56. #| Convert the .ELF into a .HEX to load onto the Teensy
  57. if ( DEFINED TEENSY )
  58. set( TARGET_HEX ${TARGET}.teensy.hex )
  59. add_custom_command( TARGET ${TARGET_ELF} POST_BUILD
  60. COMMAND ${OBJ_COPY} ${HEX_FLAGS} ${TARGET_ELF} ${TARGET_HEX}
  61. COMMENT "Creating iHex file to load: ${TARGET_HEX}"
  62. )
  63. endif()
  64. #| Generate the Extended .LSS
  65. set( TARGET_LSS ${TARGET}.lss )
  66. add_custom_command( TARGET ${TARGET_ELF} POST_BUILD
  67. COMMAND ${CMAKE_OBJDUMP} ${LSS_FLAGS} ${TARGET_ELF} > ${TARGET_LSS}
  68. COMMENT "Creating Extended Listing: ${TARGET_LSS}"
  69. )
  70. #| Generate the Symbol Table .SYM
  71. set( TARGET_SYM ${TARGET}.sym )
  72. add_custom_command( TARGET ${TARGET_ELF} POST_BUILD
  73. COMMAND ${CMAKE_NM} -n ${TARGET_ELF} > ${TARGET_SYM}
  74. COMMENT "Creating Symbol Table: ${TARGET_SYM}"
  75. )
  76. #| Compiler Selection Record
  77. add_custom_command( TARGET ${TARGET_ELF} POST_BUILD
  78. COMMAND ${CMAKE_SOURCE_DIR}/Lib/CMake/writer compiler ${COMPILER_FAMILY}
  79. )
  80. ###
  81. # Size Information
  82. #
  83. #| After Changes Size Information
  84. add_custom_target( SizeAfter ALL
  85. COMMAND ${CMAKE_SOURCE_DIR}/Lib/CMake/sizeCalculator ${CMAKE_SIZE} ram ${TARGET_ELF} ${SIZE_RAM} " SRAM"
  86. COMMAND ${CMAKE_SOURCE_DIR}/Lib/CMake/sizeCalculator ${CMAKE_SIZE} flash ${TARGET_ELF} ${SIZE_FLASH} "Flash"
  87. DEPENDS ${TARGET_ELF}
  88. COMMENT "Chip usage for ${CHIP}"
  89. )
  90. ###
  91. # Setup Loader Script and Program
  92. #
  93. #| First check for DFU based controllers
  94. if( DEFINED DFU )
  95. configure_file( LoadFile/load.dfu load NEWLINE_STYLE UNIX )
  96. #| Next check for Teensy based
  97. elseif ( DEFINED TEENSY )
  98. # Provides the user with the correct teensy-loader-cli command for the built .HEX file
  99. # Windows
  100. if( CMAKE_SYSTEM_NAME MATCHES "Windows" )
  101. configure_file( LoadFile/winload.teensy load NEWLINE_STYLE UNIX )
  102. # Default
  103. else()
  104. configure_file( LoadFile/load.teensy load NEWLINE_STYLE UNIX )
  105. endif()
  106. endif()
  107. ###
  108. # Compiler Command Generation
  109. #
  110. #| Generate list of compiler commands for clang-tidy usage
  111. set( CMAKE_EXPORT_COMPILE_COMMANDS ON )
  112. #| Make sure symlink exists (for convenience)
  113. if ( UNIX )
  114. # Make sure symlink is created immediately
  115. execute_process ( COMMAND ln -sfn ${CMAKE_BINARY_DIR}/compile_commands.json ${CMAKE_SOURCE_DIR}/. )
  116. # Also update before each build
  117. add_custom_command( TARGET ${TARGET_ELF} POST_BUILD
  118. COMMAND ln -sfn ${CMAKE_BINARY_DIR}/compile_commands.json ${CMAKE_SOURCE_DIR}/.
  119. )
  120. endif ()