Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- PROGRAM = program
- BUILD_DIR = build
- DEBUG_ENABLED = 1
- SOURCE_S_LIST = \
- src/startup_code.s\
- src/instruction_set.s
- SOURCE_C_LIST = \
- src/main.c \
- src/systick.c
- OBJECTS_LIST =
- # Make funkcija notdir daje samo ime fajla (izbacuje source/)
- OBJECTS_LIST += ${addprefix ${BUILD_DIR}/, ${notdir ${SOURCE_S_LIST:.s=.o}}}
- OBJECTS_LIST += ${addprefix ${BUILD_DIR}/, ${notdir ${SOURCE_C_LIST:.c=.o}}}
- # Make funkcija dir vraca samo direktorijum
- # vpath kaze make-u u kojim dodatnim direktorijuma da trazi fajlove oblika %.s
- vpath %.s ${sort ${dir ${SOURCE_S_LIST}}}
- vpath %.c ${sort ${dir ${SOURCE_C_LIST}}}
- # Da kompajler zna gde da trazi include fajlove -Ifolder
- FLAGS_INCLUDE = \
- -Iinc
- # format je -fdebug-prefix-map=old=new
- # menja putanje u debug informacijama
- # kako bi se izbeglo da se u debug informacijama vidi putanja do fajla na racunaru
- # tj da ne bude /home/username/... vec samo /...
- FLAGS_DEBUG = -g -gdwarf-2 -fdebug-prefix-map==../
- CC = arm-none-eabi-gcc.exe -c
- AS = arm-none-eabi-gcc.exe -c -x assembler
- LD = arm-none-eabi-ld.exe
- HX = arm-none-eabi-objcopy.exe -O ihex
- MCU = -mcpu=cortex-m3 -mthumb
- FLAGS_AS =
- FLAGS_AS += $(MCU)
- ifeq (${DEBUG_ENABLED}, 1)
- FLAGS_AS += ${FLAGS_DEBUG}
- endif
- # Za automatsko ubacivanje it instrukcije za uslovno izvrsavanje
- FLAGS_AS += -Wa,-mimplicit-it=thumb
- FLAGS_CC =
- FLAGS_CC += $(MCU)
- # -MMD -MP dodaje .d fajl (dependency) koji sadrzi zavisnosti izmedju fajlova (za .h fajlove)
- FLAGS_CC += -MMD -MP
- # -mlong-calls omogucava da se pozivaju funkcije koje su udaljene vise od 32MB
- FLAGS_CC += -mlong-calls
- FLAGS_CC += ${FLAGS_INCLUDE}
- ifeq (${DEBUG_ENABLED}, 1)
- FLAGS_CC += ${FLAGS_DEBUG}
- endif
- LINKER_SCRIPT = linker_script.ld
- # Cilj je all, preduslovi su program.hex i program.elf
- # all ce se izvrsiti nakon sto se izvrse preduslovi
- all : ${BUILD_DIR}/${PROGRAM}.hex ${BUILD_DIR}/${PROGRAM}.elf
- # ${@} je cilj, ${<} je prvi preduslov, ${^} predstavlja sve preduslove
- ${BUILD_DIR}/${PROGRAM}.hex : ${BUILD_DIR}/${PROGRAM}.elf
- ${HX} ${<} ${@}
- # Dodavanje makefile kao preduslov obezbedjujemo da ako dodamo neki fajl da ce se opet izvrsiti
- # Samim time ne mozemo koristiti ${^} jer to ukljucuje makefile
- ${BUILD_DIR}/${PROGRAM}.elf : ${OBJECTS_LIST} makefile
- ${LD} -T ${LINKER_SCRIPT} -o ${@} ${OBJECTS_LIST}
- # Obicno se vidi oblik -o ${@} ${<}
- # Ako postoji neki fajl.s ako ima preduslov fajl.o, ovo ce se izvrsiti
- # 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
- # Zato se navodi kao order only prerequisite - treba samo da postoji
- ${BUILD_DIR}/%.o : %.s | ${BUILD_DIR}
- ${AS} ${FLAGS_AS} -o ${@} ${<}
- # Ovde ne moze se navesti header fajl tako da se nece izvrsiti ako se promeni header fajl
- ${BUILD_DIR}/%.o : %.c | ${BUILD_DIR}
- ${CC} ${FLAGS_CC} -o ${@} ${<}
- # Dodat cilj za pravljenje build dir ako ne postoji
- ${BUILD_DIR} :
- mkdir ${@}
- clean :
- rm -rf ${BUILD_DIR}
- # -include dodaje sve .d fajlove
- # wildcard ekspanduje wildcard expression
- -include ${wildcard ${BUILD_DIR}/*.d}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement