Fixing clang compilation and supporting clang-tidy
- clang.c includes necessary functions to make clang compiler work (tested on teensy 3.1) - Added support code to generate a compile_commands.json for clang-tidy * Updates the symlink whenever cmake or make is called (Unix OSs only)
This commit is contained in:
		
							parent
							
								
									c5aed6cb17
								
							
						
					
					
						commit
						0102d05c86
					
				
					 6 changed files with 117 additions and 8 deletions
				
			
		
							
								
								
									
										16
									
								
								.clang-tidy
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								.clang-tidy
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | ||||||
|  | --- | ||||||
|  | Checks:          'clang-diagnostic-*,clang-analyzer-*,-clang-analyzer-alpha*' | ||||||
|  | HeaderFilterRegex: '' | ||||||
|  | AnalyzeTemporaryDtors: false | ||||||
|  | User:            hyatt | ||||||
|  | CheckOptions:     | ||||||
|  |   - key:             google-readability-braces-around-statements.ShortStatementLines | ||||||
|  |     value:           '1' | ||||||
|  |   - key:             google-readability-function-size.StatementThreshold | ||||||
|  |     value:           '800' | ||||||
|  |   - key:             google-readability-namespace-comments.ShortNamespaceLines | ||||||
|  |     value:           '10' | ||||||
|  |   - key:             google-readability-namespace-comments.SpacesBeforeComments | ||||||
|  |     value:           '2' | ||||||
|  | ... | ||||||
|  | 
 | ||||||
							
								
								
									
										1
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							|  | @ -56,6 +56,7 @@ tags | ||||||
| CMakeFiles | CMakeFiles | ||||||
| CMakeCache.txt | CMakeCache.txt | ||||||
| cmake_install.cmake | cmake_install.cmake | ||||||
|  | compile_commands.json | ||||||
| 
 | 
 | ||||||
| # External Repos # | # External Repos # | ||||||
| ################## | ################## | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| ###| CMAKE Kiibohd Controller |### | ###| CMAKE Kiibohd Controller |### | ||||||
| # | # | ||||||
| # Jacob Alexander 2011-2015 | # Jacob Alexander 2011-2016 | ||||||
| # Due to this file's usefulness: | # Due to this file's usefulness: | ||||||
| # | # | ||||||
| # Released into the Public Domain | # Released into the Public Domain | ||||||
|  | @ -25,7 +25,8 @@ set( CHIP | ||||||
| 	"mk20dx128vlf5"    # McHCK       mk20dx128vlf5 | 	"mk20dx128vlf5"    # McHCK       mk20dx128vlf5 | ||||||
| #       "mk20dx256"        # Teensy   3.1,3.2 (arm) | #       "mk20dx256"        # Teensy   3.1,3.2 (arm) | ||||||
| #       "mk20dx256vlh7"    # Kiibohd-dfu mk20dx256vlh7 | #       "mk20dx256vlh7"    # Kiibohd-dfu mk20dx256vlh7 | ||||||
| 	CACHE STRING "Microcontroller Chip" ) | 	CACHE STRING "Microcontroller Chip" | ||||||
|  | ) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -33,13 +34,14 @@ set( CHIP | ||||||
| # Compiler Selection | # Compiler Selection | ||||||
| # | # | ||||||
| 
 | 
 | ||||||
| #| *** EXPERIMENTAL *** | #| gcc has been tested much more (and will likely give smaller binaries) | ||||||
| #| Stick with gcc unless you know what you're doing | #| clang does work though | ||||||
| #| Currently only arm is supported with clang | #| Currently only arm is supported with clang | ||||||
| set( COMPILER | set( COMPILER | ||||||
| 	"gcc"   # arm-none-eabi-gcc / avr-gcc - Default | 	"gcc"   # arm-none-eabi-gcc / avr-gcc - Default | ||||||
| #       "clang" # arm-none-eabi | #       "clang" # arm-none-eabi | ||||||
| 	CACHE STRING "Compiler Type" ) | 	CACHE STRING "Compiler Type" | ||||||
|  | ) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -72,11 +74,13 @@ set(  MacroModule "PartialMap" | ||||||
| 
 | 
 | ||||||
| ##| Sends the current list of usb key codes through USB HID | ##| Sends the current list of usb key codes through USB HID | ||||||
| set( OutputModule "pjrcUSB" | set( OutputModule "pjrcUSB" | ||||||
| 	CACHE STRING "Output Module" ) | 	CACHE STRING "Output Module" | ||||||
|  | ) | ||||||
| 
 | 
 | ||||||
| ##| Debugging source to use, each module has it's own set of defines that it sets | ##| Debugging source to use, each module has it's own set of defines that it sets | ||||||
| set(  DebugModule "full" | set(  DebugModule "full" | ||||||
| 	CACHE STRING "Debug Module" ) | 	CACHE STRING "Debug Module" | ||||||
|  | ) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| ###| CMAKE Kiibohd Controller |### | ###| CMAKE Kiibohd Controller |### | ||||||
| # | # | ||||||
| # Jacob Alexander 2011-2014 | # Jacob Alexander 2011-2016 | ||||||
| # Due to this file's usefulness: | # Due to this file's usefulness: | ||||||
| # | # | ||||||
| # Released into the Public Domain | # Released into the Public Domain | ||||||
|  | @ -111,6 +111,13 @@ set( COMPILER_SRCS | ||||||
| 	Lib/delay.c | 	Lib/delay.c | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | #| Clang needs a few more functions for linking | ||||||
|  | if ( "${COMPILER}" MATCHES "clang" ) | ||||||
|  | 	set( COMPILER_SRCS ${COMPILER_SRCS} | ||||||
|  | 		Lib/clang.c | ||||||
|  | 	) | ||||||
|  | endif () | ||||||
|  | 
 | ||||||
| message( STATUS "Compiler Source Files:" ) | message( STATUS "Compiler Source Files:" ) | ||||||
| message( "${COMPILER_SRCS}" ) | message( "${COMPILER_SRCS}" ) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -135,3 +135,23 @@ elseif ( DEFINED TEENSY ) | ||||||
| 	endif() | 	endif() | ||||||
| endif() | endif() | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ### | ||||||
|  | # Compiler Command Generation | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | #| Generate list of compiler commands for clang-tidy usage | ||||||
|  | set( CMAKE_EXPORT_COMPILE_COMMANDS ON ) | ||||||
|  | 
 | ||||||
|  | #| Make sure symlink exists (for convenience) | ||||||
|  | if ( UNIX ) | ||||||
|  | 	# Make sure symlink is created immediately | ||||||
|  | 	execute_process ( COMMAND ln -sfn ${CMAKE_BINARY_DIR}/compile_commands.json ${CMAKE_SOURCE_DIR}/. ) | ||||||
|  | 
 | ||||||
|  | 	# Also update before each build | ||||||
|  | 	add_custom_command( TARGET ${TARGET_ELF} POST_BUILD | ||||||
|  | 		COMMAND ln -sfn ${CMAKE_BINARY_DIR}/compile_commands.json ${CMAKE_SOURCE_DIR}/. | ||||||
|  | 	) | ||||||
|  | endif () | ||||||
|  | 
 | ||||||
|  |  | ||||||
							
								
								
									
										61
									
								
								Lib/clang.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								Lib/clang.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,61 @@ | ||||||
|  | /* Copyright (C) 2016 by Jacob Alexander
 | ||||||
|  |  * | ||||||
|  |  * Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
|  |  * of this software and associated documentation files (the "Software"), to deal | ||||||
|  |  * in the Software without restriction, including without limitation the rights | ||||||
|  |  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||||
|  |  * copies of the Software, and to permit persons to whom the Software is | ||||||
|  |  * furnished to do so, subject to the following conditions: | ||||||
|  |  * | ||||||
|  |  * The above copyright notice and this permission notice shall be included in | ||||||
|  |  * all copies or substantial portions of the Software. | ||||||
|  |  * | ||||||
|  |  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||||
|  |  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||||
|  |  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||||
|  |  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||||
|  |  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||||
|  |  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||||
|  |  * THE SOFTWARE. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | // This file adds various functions that clang doesn't link properly
 | ||||||
|  | // AFAIK, clang doesn't have an elegant solution for this, so this is what we gotta do...
 | ||||||
|  | 
 | ||||||
|  | // ----- Includes -----
 | ||||||
|  | 
 | ||||||
|  | // Compiler Includes
 | ||||||
|  | #include <string.h> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | void __aeabi_memcpy( void *dest, const void *src, size_t n ) | ||||||
|  | { | ||||||
|  | 	(void)memcpy(dest, src, n); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void __aeabi_memcpy4( void *dest, const void *src, size_t n ) | ||||||
|  | { | ||||||
|  | 	memcpy(dest, src, n); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void __aeabi_memclr( void *dest, size_t n ) | ||||||
|  | { | ||||||
|  | 	memset(dest, 0, n); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void __aeabi_memclr4( void *dest, size_t n ) | ||||||
|  | { | ||||||
|  | 	memset(dest, 0, n); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void __aeabi_memmove( void *dest, const void *src, size_t n ) | ||||||
|  | { | ||||||
|  | 	(void)memmove(dest, src, n); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void __aeabi_memset( void *s, size_t n, int c ) | ||||||
|  | { | ||||||
|  | 	(void)memset(s, c, n); | ||||||
|  | } | ||||||
|  | 
 | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Jacob Alexander
						Jacob Alexander