Advertisement
PecaJ

makefile

Nov 4th, 2023
937
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Make 3.05 KB | None | 0 0
  1. PROGRAM = program
  2. BUILD_DIR = build
  3. DEBUG_ENABLED = 1
  4.  
  5. SOURCE_S_LIST = \
  6. src/startup_code.s\
  7. src/instruction_set.s
  8.  
  9. SOURCE_C_LIST = \
  10. src/main.c \
  11. src/systick.c
  12.  
  13. OBJECTS_LIST =
  14. # Make funkcija notdir daje samo ime fajla (izbacuje source/)
  15. OBJECTS_LIST += ${addprefix ${BUILD_DIR}/, ${notdir ${SOURCE_S_LIST:.s=.o}}}
  16. OBJECTS_LIST += ${addprefix ${BUILD_DIR}/, ${notdir ${SOURCE_C_LIST:.c=.o}}}
  17. # Make funkcija dir vraca samo direktorijum
  18. # vpath kaze make-u u kojim dodatnim direktorijuma da trazi fajlove oblika %.s
  19. vpath %.s ${sort ${dir ${SOURCE_S_LIST}}}
  20. vpath %.c ${sort ${dir ${SOURCE_C_LIST}}}
  21.  
  22. # Da kompajler zna gde da trazi include fajlove -Ifolder
  23. FLAGS_INCLUDE = \
  24. -Iinc
  25.  
  26. # format je -fdebug-prefix-map=old=new
  27. # menja putanje u debug informacijama
  28. # kako bi se izbeglo da se u debug informacijama vidi putanja do fajla na racunaru
  29. # tj da ne bude /home/username/... vec samo /...
  30. FLAGS_DEBUG = -g -gdwarf-2 -fdebug-prefix-map==../
  31.  
  32.  
  33. CC = arm-none-eabi-gcc.exe -c
  34. AS = arm-none-eabi-gcc.exe -c -x assembler
  35. LD = arm-none-eabi-ld.exe
  36. HX = arm-none-eabi-objcopy.exe -O ihex
  37.  
  38. MCU = -mcpu=cortex-m3 -mthumb
  39.  
  40.  
  41. FLAGS_AS =
  42. FLAGS_AS += $(MCU)
  43. ifeq (${DEBUG_ENABLED}, 1)
  44. FLAGS_AS += ${FLAGS_DEBUG}
  45. endif
  46. # Za automatsko ubacivanje it instrukcije za uslovno izvrsavanje
  47. FLAGS_AS += -Wa,-mimplicit-it=thumb
  48.  
  49.  
  50. FLAGS_CC =
  51. FLAGS_CC += $(MCU)
  52. # -MMD -MP dodaje .d fajl (dependency) koji sadrzi zavisnosti izmedju fajlova (za .h fajlove)
  53. FLAGS_CC += -MMD -MP
  54. # -mlong-calls omogucava da se pozivaju funkcije koje su udaljene vise od 32MB
  55. FLAGS_CC += -mlong-calls
  56. FLAGS_CC += ${FLAGS_INCLUDE}
  57. ifeq (${DEBUG_ENABLED}, 1)
  58. FLAGS_CC += ${FLAGS_DEBUG}
  59. endif
  60.  
  61. LINKER_SCRIPT = linker_script.ld
  62.  
  63.  
  64. # Cilj je all, preduslovi su program.hex i program.elf
  65. # all ce se izvrsiti nakon sto se izvrse preduslovi
  66. all : ${BUILD_DIR}/${PROGRAM}.hex ${BUILD_DIR}/${PROGRAM}.elf
  67.  
  68. # ${@} je cilj, ${<} je prvi preduslov, ${^} predstavlja sve preduslove
  69. ${BUILD_DIR}/${PROGRAM}.hex : ${BUILD_DIR}/${PROGRAM}.elf
  70.     ${HX} ${<} ${@}
  71.  
  72. # Dodavanje makefile kao preduslov obezbedjujemo da ako dodamo neki fajl da ce se opet izvrsiti
  73. # Samim time ne mozemo koristiti ${^} jer to ukljucuje makefile
  74. ${BUILD_DIR}/${PROGRAM}.elf : ${OBJECTS_LIST} makefile
  75.     ${LD} -T ${LINKER_SCRIPT} -o ${@} ${OBJECTS_LIST}
  76.  
  77. # Obicno se vidi oblik -o ${@} ${<}
  78. # Ako postoji neki fajl.s ako ima preduslov fajl.o, ovo ce se izvrsiti
  79. # Kako bi se pravili fajlove u build dir mora da postoji, ali ne treba da pratimo da li je noviji od cilja, samo da postoji
  80. # Zato se navodi kao order only prerequisite - treba samo da postoji
  81. ${BUILD_DIR}/%.o : %.s | ${BUILD_DIR}
  82.     ${AS} ${FLAGS_AS} -o ${@} ${<}
  83.  
  84. # Ovde ne moze se navesti header fajl tako da se nece izvrsiti ako se promeni header fajl
  85. ${BUILD_DIR}/%.o : %.c | ${BUILD_DIR}
  86.     ${CC} ${FLAGS_CC} -o ${@} ${<}
  87.    
  88. # Dodat cilj za pravljenje build dir ako ne postoji
  89. ${BUILD_DIR} :
  90.     mkdir ${@}
  91.  
  92. clean :
  93.     rm -rf ${BUILD_DIR}
  94.  
  95.  
  96. # -include dodaje sve .d fajlove
  97. # wildcard ekspanduje wildcard expression
  98. -include ${wildcard ${BUILD_DIR}/*.d}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement