-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathavr.cmake
90 lines (57 loc) · 2.59 KB
/
avr.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
SET( AVR_INCLUDE_DIRS "" )
MACRO( AVR_INCLUDE_DIRECTORIES dir )
LIST( APPEND AVR_INCLUDE_DIRS "-I${dir}" )
ENDMACRO()
FUNCTION( AVR_ADD_EXECUTABLE target_name )
IF( NOT AVR_MMCU )
SET( AVR_MMCU atmega8 )
ENDIF()
IF( NOT AVR_PART )
SET( AVR_PART m8 )
ENDIF()
IF( NOT AVR_F_CPU )
SET( AVR_F_CPU 1000000 )
ENDIF()
FOREACH( src_file ${ARGN} )
GET_FILENAME_COMPONENT( extension "${src_file}" EXT )
IF( IS_ABSOLUTE "${src_file}" )
FILE( RELATIVE_PATH rel_src_file "${CMAKE_CURRENT_SOURCE_DIR}" "${src_file}" )
SET( full_src_file "${src_file}" )
ELSE()
SET( rel_src_file "${src_file}" )
SET( full_src_file "${CMAKE_CURRENT_SOURCE_DIR}/${src_file}" )
ENDIF()
IF( extension STREQUAL ".c" )
GET_FILENAME_COMPONENT( src_file_name "${src_file}" NAME )
STRING(REGEX REPLACE "\\.c$" ".o" rel_object_file "${src_file_name}")
LIST( APPEND object_files "${CMAKE_CURRENT_BINARY_DIR}/${rel_object_file}" )
ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${rel_object_file}
COMMAND avr-gcc -mmcu=${AVR_MMCU} -DF_CPU=${AVR_F_CPU} -O1 ${full_src_file}
-c
${AVR_INCLUDE_DIRS}
-o ${CMAKE_CURRENT_BINARY_DIR}/${rel_object_file}
-I"${CMAKE_CURRENT_SOURCE_DIR}"
DEPENDS ${full_src_file} )
ENDIF()
IF( extension STREQUAL ".S" )
LIST( APPEND asm_files "${full_src_file}" )
ENDIF()
IF( extension STREQUAL ".h" )
LIST( APPEND header_files "${full_src_file}" )
ENDIF()
ENDFOREACH()
ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${target_name}.elf
COMMAND avr-gcc -mmcu=${AVR_MMCU} -DF_CPU=${AVR_F_CPU} -o ${CMAKE_CURRENT_BINARY_DIR}/${target_name}.elf
${object_files}
${asm_files}
DEPENDS ${object_files} ${header_files} ${asm_files})
ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${target_name}.hex
COMMAND avr-objcopy -j .text -j .data -O ihex ${CMAKE_CURRENT_BINARY_DIR}/${target_name}.elf
${CMAKE_CURRENT_BINARY_DIR}/${target_name}.hex
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${target_name}.elf )
ADD_CUSTOM_TARGET( ${target_name} ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${target_name}.elf )
ADD_CUSTOM_TARGET( ${target_name}_hex DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${target_name}.hex )
ADD_CUSTOM_TARGET( deploy_${target_name}
COMMAND avrdude -P usb -p ${AVR_PART} -c avrisp2 -e -U flash:w:${CMAKE_CURRENT_BINARY_DIR}/${target_name}.hex
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${target_name}.hex )
ENDFUNCTION()