#48333 - justinGBA - Tue Jul 19, 2005 8:41 am
Well, first off, i am new to mac and new to Xcode. I am wanting what GBASDK has to offer, but so far it seems like a dirty hack that could maybe be done better if i knew what i was doing...
So now the question? Here is the error i currently get...
source/helloworld.c:10: warning: implicit declaration of function `rand'
source/helloworld.c:10: warning: unused variable `myNumb'
Linking object files
/usr/local/gbasdk/arm-agb-elf/bin/ld: Dwarf Error: mangled line number section.
./build/helloworld.o: In function `AgbMain':
./build/helloworld.o(.text+0x28): undefined reference to `rand'
here is my make file...
here is my header...
here is my c file...
And well the fun doesnt stop there. That is the first problem, second is that if i try to do the same thing in a cpp file, it just fails to compile.
SO thirdly and more advanced, does anyone have some help on just using devkitArm, and setting up Xcode to use with that? As well as makeing a project template? If we can make a comunity effort here, we could release a better xcode package, that isnt linked to SGADE.
So now the question? Here is the error i currently get...
source/helloworld.c:10: warning: implicit declaration of function `rand'
source/helloworld.c:10: warning: unused variable `myNumb'
Linking object files
/usr/local/gbasdk/arm-agb-elf/bin/ld: Dwarf Error: mangled line number section.
./build/helloworld.o: In function `AgbMain':
./build/helloworld.o(.text+0x28): undefined reference to `rand'
here is my make file...
Code: |
# ----------------------------------------------------------------------------- # \file makefile # \brief The SGADE template make file # \date August 23, 2002 # # \author Jaap Suter, Mark T. Price # # This file contains the make-instructions for a SGADE project. In # order to use this make file you need to change # GCC_DIR, # PROJECT_DIR, # SOCRATES_LIB_DIR and # SOCRATES_INC_DIR and # to the locations on your own computer. # # ----------------------------------------------------------------------------- # ----------------------------------------------------------------------------- # Project name definition; # ----------------------------------------------------------------------------- PROJECT = helloworld # ----------------------------------------------------------------------------- # Base directory of the project. Replace this with wherever # you have put the sample application on your computer # ----------------------------------------------------------------------------- PROJECT_DIR = . # ----------------------------------------------------------------------------- # GCC Version you're using. If you're using the latest DevKitAdv this # should be correct already. # ----------------------------------------------------------------------------- GCC_VERSION = 3.0.4 # ----------------------------------------------------------------------------- # Base directory for GCC Arm-Agb-Elf compiler. Replace with # wherever you have put it. # ----------------------------------------------------------------------------- GCC_DIR = /usr/local/gbasdk/arm-agb-elf # ----------------------------------------------------------------------------- # Socrates library and header directories. Replace this with wherever # you have put the Socrates on your computer # ----------------------------------------------------------------------------- SOCRATES_LIB_DIR = /usr/local/gbasdk/lib SOCRATES_INC_DIR = /usr/local/gbasdk/include/sgade # ----------------------------------------------------------------------------- # Socrates library itself; # ----------------------------------------------------------------------------- SOCRATES_LIB = $(SOCRATES_LIB_DIR)/libSocrates.a # ----------------------------------------------------------------------------- # Compiler directories for includes and libs. # Assuming you are using Devkit Advance there should be no need to change # these, since they are derived from the above CMP_DIR directory definition. # ----------------------------------------------------------------------------- STD_LIB_DIR0 = $(GCC_DIR)/lib/gcc-lib/arm-agb-elf/$(GCC_VERSION)/interwork STD_LIB_DIR1 = $(GCC_DIR)/arm-agb-elf/lib/interwork STD_INC_DIR0 = $(GCC_DIR)/lib/gcc-lib/arm-agb-elf/$(GCC_VERSION)/include STD_INC_DIR1 = $(GCC_DIR)/arm-agb-elf/include # ----------------------------------------------------------------------------- # Project directories. # ----------------------------------------------------------------------------- INC_DIR = $(PROJECT_DIR)/include SRC_DIR = $(PROJECT_DIR)/source CRT0_S_DIR = $(PROJECT_DIR) LINK_SCRIPT_DIR = $(PROJECT_DIR) OBJ_DIR = $(PROJECT_DIR)/build ELF_DIR = $(PROJECT_DIR)/build DAT_DIR = $(PROJECT_DIR)/data # ----------------------------------------------------------------------------- # Define the flags for the compiler, the assembler and the linker; # ----------------------------------------------------------------------------- C_FLAGS = -I$(DAT_DIR) -I$(INC_DIR) -I $(SOCRATES_INC_DIR) -I$(STD_INC_DIR0) -I$(STD_INC_DIR1) -I $(SGADE_SRC_DIR) -mthumb -mthumb-interwork -c -g -Wall -fverbose-asm CPP_FLAGS = -I$(DAT_DIR) -I$(INC_DIR) -I $(SOCRATES_INC_DIR) -I$(STD_INC_DIR0) -I$(STD_INC_DIR1) -I $(SGADE_SRC_DIR) -mthumb -mthumb-interwork -c -g -Wall -fverbose-asm S_FLAGS = -I$(DAT_DIR) -I$(INC_DIR) -I $(SOCRATES_INC_DIR) -I$(STD_INC_DIR0) -I$(STD_INC_DIR1) -mthumb-interwork L_FLAGS = -lSocrates -L $(SOCRATES_LIB_DIR) -L$(STD_LIB_DIR0) -L$(STD_LIB_DIR1) -T $(LINK_SCRIPT_DIR)/lnkscript -lgcc # ----------------------------------------------------------------------------- # Define the list of object files # ----------------------------------------------------------------------------- O_FILES_FROM_C = $(PROJECT).o O_FILES_FROM_CPP = O_FILES_FROM_C_FULL_PATH = $(addprefix $(OBJ_DIR)/, $(O_FILES_FROM_C)) O_FILES_FROM_CPP_FULL_PATH = $(addprefix $(OBJ_DIR)/, $(O_FILES_FROM_CPP)) CRT0_O = $(OBJ_DIR)/crt0.o #CRTBEGIN_O = $(STD_LIB_DIR0)/crtbegin.o #CRTEND_O = $(STD_LIB_DIR0)/crtend.o O_FILES_FULL_PATH = $(CRT0_O) $(CRTBEGIN_O) $(CRTEND_O) $(O_FILES_FROM_C_FULL_PATH) $(O_FILES_FROM_CPP_FULL_PATH) # ----------------------------------------------------------------------------- # Define the final dependecy; # ----------------------------------------------------------------------------- all : $(PROJECT_DIR)/$(PROJECT).gba @echo Done # ----------------------------------------------------------------------------- # Define the copy from .elf to .gba file # ----------------------------------------------------------------------------- $(PROJECT_DIR)/$(PROJECT).gba : $(ELF_DIR)/$(PROJECT).elf @echo Object copying @$(GCC_DIR)/bin/objcopy -v -O binary $< $@ # ----------------------------------------------------------------------------- # Define the linker instruction; # ----------------------------------------------------------------------------- $(ELF_DIR)/$(PROJECT).elf : $(O_FILES_FULL_PATH) $(SOCRATES_LIB) @echo Linking object files @$(GCC_DIR)/bin/ld $(O_FILES_FULL_PATH) -o$@ $(L_FLAGS) # ----------------------------------------------------------------------------- # Define the C compiles; # ----------------------------------------------------------------------------- $(O_FILES_FROM_C_FULL_PATH) : $(OBJ_DIR)/%.o : $(SRC_DIR)/%.c @echo Making $@ @$(GCC_DIR)/bin/gcc -c $< -o$@ $(C_FLAGS) # ----------------------------------------------------------------------------- # Define the CPP compiles; # ----------------------------------------------------------------------------- $(O_FILES_FROM_CPP_FULL_PATH) : $(OBJ_DIR)/%.o : $(SRC_DIR)/%.cpp @echo Making $@ @$(GCC_DIR)/bin/gcc -c $< -o$@ $(CPP_FLAGS) $(O_FILES_FROM_CXX_FULL_PATH) : $(OBJ_DIR)/%.o : $(SRC_DIR)/%.cxx @echo Making $@ @$(GCC_DIR)/bin/gcc -c $< -o$@ $(CPP_FLAGS) $(O_FILES_FROM_CC_FULL_PATH) : $(OBJ_DIR)/%.o : $(SRC_DIR)/%.cc @echo Making $@ @$(GCC_DIR)/bin/gcc -c $< -o$@ $(CPP_FLAGS) # ----------------------------------------------------------------------------- # Define the assembly of the crt0 file; # ----------------------------------------------------------------------------- $(CRT0_O) : $(OBJ_DIR)/%.o : $(CRT0_S_DIR)/%.S @echo Making $@ @$(GCC_DIR)/bin/gcc -c $< -o$@ $(S_FLAGS) # ----------------------------------------------------------------------------- # Clean definition; # ----------------------------------------------------------------------------- .PHONY : clean clean : @echo Cleaning object, .elf and .gba files. @/bin/rm -f $(OBJ_DIR)/*.o @/bin/rm -f $(ELF_DIR)/$(PROJECT).elf @/bin/rm -f $(PROJECT_DIR)/$(PROJECT).gba @echo Clean done... # ----------------------------------------------------------------------------- # EOF; # ----------------------------------------------------------------------------- |
here is my header...
Code: |
#ifndef GBA_H #define GBA_H //Video Mode Defines #define Mode3 0x3 //Backgrounds To Enable #define Bg2 0x400 //Video Memory Pointer #define VideoBufferPointer (unsigned short*)0x6000000 //Initialize Video Mode Macro //Example: InitVideo( Mode3 | Bg2 ); #define InitVideo(mode) *(unsigned long*)0x4000000 = (mode) //RGB Macro //Example: RGB(30,30,30); #define RGB(r,g,b) ((r)+(g<<5)+(b<<10)) //Pixel plotting Macro //Example: DrawPixel3(20, 20, videoBuffer) = RGB(30, 30, 30); #define DrawPixel3(x,y,buffer) (buffer)[(y) * 240 + (x)] #endif |
here is my c file...
Code: |
#include <stdlib.h> #include "gba.h" int AgbMain(void) { InitVideo( Mode3 | Bg2 ); unsigned short* videoBuffer = VideoBufferPointer; int myNumb = rand(); int x = 120; int y = 80; DrawPixel3(x, y, videoBuffer) = RGB( 30, 0, 0 ); while(1) { } return 0; } |
And well the fun doesnt stop there. That is the first problem, second is that if i try to do the same thing in a cpp file, it just fails to compile.
SO thirdly and more advanced, does anyone have some help on just using devkitArm, and setting up Xcode to use with that? As well as makeing a project template? If we can make a comunity effort here, we could release a better xcode package, that isnt linked to SGADE.