Tools für ASM richtig einsetzen.
-
Ah okay gut das tutoril werd ich mir mal snehen,
ja in welcher weise dagt es dem compiler welche header er nehmen soll, was gehört immer da rein?
hier au mal der code von dem makefile :
#--------------------------------------------------------------------------------- .SUFFIXES: #--------------------------------------------------------------------------------- ifeq ($(strip $(DEVKITARM)),) $(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM") endif include $(DEVKITARM)/ds_rules #--------------------------------------------------------------------------------- # TARGET is the name of the output # BUILD is the directory where object files & intermediate files will be placed # SOURCES is a list of directories containing source code # DATA is a list of directories containing data files # INCLUDES is a list of directories containing header files #--------------------------------------------------------------------------------- TARGET := $(shell basename $(CURDIR)) BUILD := build SOURCES := source DATA := data INCLUDES := include #--------------------------------------------------------------------------------- # options for code generation #--------------------------------------------------------------------------------- ARCH := -mthumb -mthumb-interwork CFLAGS := -g -Wall -O2\ -march=armv5te -mtune=arm946e-s -fomit-frame-pointer\ -ffast-math \ $(ARCH) CFLAGS += $(INCLUDE) -DARM9 CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions ASFLAGS := -g $(ARCH) LDFLAGS = -specs=ds_arm9.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map) #--------------------------------------------------------------------------------- # any extra libraries we wish to link with the project #--------------------------------------------------------------------------------- LIBS := -lnds9 #--------------------------------------------------------------------------------- # list of directories containing libraries, this must be the top level containing # include and lib #--------------------------------------------------------------------------------- LIBDIRS := $(LIBNDS) #--------------------------------------------------------------------------------- # no real need to edit anything past this point unless you need to add additional # rules for different file extensions #--------------------------------------------------------------------------------- ifneq ($(BUILD),$(notdir $(CURDIR))) #--------------------------------------------------------------------------------- export OUTPUT := $(CURDIR)/$(TARGET) export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ $(foreach dir,$(DATA),$(CURDIR)/$(dir)) export DEPSDIR := $(CURDIR)/$(BUILD) CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) #--------------------------------------------------------------------------------- # use CXX for linking C++ projects, CC for standard C #--------------------------------------------------------------------------------- ifeq ($(strip $(CPPFILES)),) #--------------------------------------------------------------------------------- export LD := $(CC) #--------------------------------------------------------------------------------- else #--------------------------------------------------------------------------------- export LD := $(CXX) #--------------------------------------------------------------------------------- endif #--------------------------------------------------------------------------------- export OFILES := $(addsuffix .o,$(BINFILES)) \ $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ -I$(CURDIR)/$(BUILD) export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) .PHONY: $(BUILD) clean all #--------------------------------------------------------------------------------- all: $(BUILD) $(BUILD): @[ -d $@ ] || mkdir -p $@ @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile #--------------------------------------------------------------------------------- clean: @echo clean ... @rm -fr $(BUILD) $(TARGET).elf $(TARGET).nds $(TARGET).arm9 $(TARGET).ds.gba #--------------------------------------------------------------------------------- else DEPENDS := $(OFILES:.o=.d) #--------------------------------------------------------------------------------- # main targets #--------------------------------------------------------------------------------- $(OUTPUT).nds : $(OUTPUT).arm9 $(OUTPUT).arm9 : $(OUTPUT).elf $(OUTPUT).elf : $(OFILES) #--------------------------------------------------------------------------------- %.bin.o : %.bin #--------------------------------------------------------------------------------- @echo $(notdir $<) @$(bin2o) -include $(DEPENDS) #--------------------------------------------------------------------------------------- endif #---------------------------------------------------------------------------------------
Mfg Wikinger75!
-
Das makefile ist schon relativ komplex, deshalb hier mal der allgemeine Aufbau
#leitet Kommentare ein #Variablen (nicht jeder benutzt den selben Compiler #dann werden die Ziele angegeben #Aufbau: #Zielname: wovon es abhängt #"TAB-Taste" der Befehl der ausgeführt werden soll
naja lerne makefiles grade selber
auf jeden Fall: das Ziel muss ja nur compiliert werden, wennn sich eine Datei, von der es abhängt, ändert.
In größen Projekten werden die Abhängigkeiten schnell unübersichtlich, deshalb lässt man sich automatisch die *.d Dateien erzeugen.Ob sich eine Datei verändert hat, erkennt make am "zu letzt geändert am" Datum, welches, wenn keine Änderung vorliegt, ja nicht "jünger" sein kann als die Zieldatei.
Also ich sag mal so, in der Documentation ist es schöner erklärt
-
Okay, danke werd mir also dne mal das tut durchlesen.
Mfg Wikinger75!
-
Google: "Makefile" -> Eine Einführung in Makefiles
Der Bezug zu Assembler ist gering. Bei konkreten Fragen werden Dir im C-Unterforum mehr Leute weiterhelfen koennen.
-
warum nimmste nicht das: http://www.animationmagazine.net/article/2872
garantiert kein gefummel mit makefiles.
-
hmm is aufjedenfall wert sich anzukucken, bin bis http://www.freescale.com/webapp/sps/site/overview.jsp?nodeId=0127260061 gekommen, in dem unterpunkten finde ich nicht das richtige pack für win, mein linux is grad wech
Mfg Wikinger75!
-
^^such mal bei rapidshare. es gibt 'nen download+crack. ob der funzt weiss ich aber nicht.
ich selbst verwende codewarriors für hcs12x und coldfires. das zeug ist schon nicht schlecht. kein gcc und erste recht kein makefile-gefrickel.
btw, wie ich's so einschätze: 'n simulator für DS wird wohl auch dabei sein.
falls alle stricke reissen: versuch's mit 'nem ARM ADS (ältere tolchain für ARMs), oder dem nachfolger (keil µvision für ARM). allerdings gibt's da wohl nix spezielles für'n DS. in dem fall wirst du um einiges an konfigurationsarbeit nicht herumkommen. die compiler sind jedenfalls ziemlich gut (hochoptimierend, sehr schlanker und schneller code, kein vergleich zum GCC).
-
Wie kann das sein, für die als angebliche bessere als x86 Architektur gibt es Probleme beim Tools-Zusammenstellen?
-
abc.w schrieb:
Wie kann das sein, für die als angebliche bessere als x86 Architektur gibt es Probleme beim Tools-Zusammenstellen?
es gibt nun mal unglaublich viele ARM-derivate, chips mit ARM-core usw. auserdem: 'ne einstiegshürde haste doch immer. aber auf länge sicht lohnt es sich, zeit in das erlernen einer guten toolchain zu investieren, als ewig mit GCC und 'make' rumzustokeln.
-
Aber es würde auch funktionieren wenn ich ein z.b c++ projekt mit eclipse machen würde und dan dem asm vorwerfen würde oder asm in c++ eibetten würde, dass geht ja auch, könnte ich so arm asm machen? ich sehe das nur als gute dirketive für x86, da deas ein x86 asm ist der bei gcc dabei ist hab ich recht?
ja gut kuck mir das mal an, sonst bleib ich halt beim von Hand schreiben
Mfg Wikinger75!
-
Hmm ne das Studio ist nichts für mich, ich bleib lieber bei den tools, außerdem denke ich ist das wissen über makefiles auch nützlich
Mfg Wikinger75!