Homebrew Homebrew Development

  • Thread starter Thread starter aliak11
  • Start date Start date
  • Views Views 1,475,037
  • Replies Replies 6,048
  • Likes Likes 54
I'm having a strange issue on my netbook with Windows 10.
I updated libctru to latest build, re-compiled it several times (just to be sure it's assuming the latest ones) but the linker seems to still refer to the older ones, does someone know how to fix?

Screenshot (libctru in ctrWolfen and devkitpro folders are the same):
CX2dZSx.png
 
I can't say for sure. But I had a similar problem where I had set my CTRULIB env variable to a separate build of libctru. The problem was that the "3ds_rules" in devkitARM dir was redefining CTRULIB to the libctru dir in devkitPRO. I just made a symlink to point that dir to whatever I wanted.
 
I can't say for sure. But I had a similar problem where I had set my CTRULIB env variable to a separate build of libctru. The problem was that the "3ds_rules" in devkitARM dir was redefining CTRULIB to the libctru dir in devkitPRO. I just made a symlink to point that dir to whatever I wanted.

I tried to not include LIBCTRU variable and use my own variable defined in the Makefile but i'm still stucked with the same error.

Code:
#---------------------------------------------------------------------------------
.SUFFIXES:
#---------------------------------------------------------------------------------

ifeq ($(strip $(DEVKITARM)),)
$(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM")
endif

TOPDIR ?= $(CURDIR)
include $(DEVKITARM)/3ds_rules
CSTM_CTRULIB ?= $(CURDIR)/libctru
#---------------------------------------------------------------------------------
# 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
#
# NO_SMDH: if set to anything, no SMDH file is generated.
# APP_TITLE is the name of the app stored in the SMDH file (Optional)
# APP_DESCRIPTION is the description of the app stored in the SMDH file (Optional)
# APP_AUTHOR is the author of the app stored in the SMDH file (Optional)
# ICON is the filename of the icon (.png), relative to the project folder.
#  If not set, it attempts to use one of the following (in this order):
#  - <Project name>.png
#  - icon.png
#  - <libctru folder>/default_icon.png
#---------------------------------------------------------------------------------
TARGET     :=   ctrWolfen
BUILD     :=   build
SOURCES     :=   source
APP_AUTHOR    :=    Rinnegatamante
APP_TITLE    :=    ctrWolfen
APP_DESCRIPTION    := Wolfenstein 3D port for 3DS

DATA     :=   data
INCLUDES   :=   include

#---------------------------------------------------------------------------------
# options for code generation
#---------------------------------------------------------------------------------
ARCH   :=   -march=armv6k -mtune=mpcore -mfloat-abi=softfp

CFLAGS   :=   -g -O2 -mword-relocations \
       -fomit-frame-pointer -ffast-math \
       $(ARCH)

CFLAGS   +=   $(INCLUDE) -DARM11 -D_3DS -DSKIPFADE -DHAVE_FFBLK -DDOSISM -fno-short-enums

CXXFLAGS   := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11

ASFLAGS   :=   -g $(ARCH)
LDFLAGS   =   -specs=3dsx.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)

LIBS   := -lctru -lm -lc

#---------------------------------------------------------------------------------
# list of directories containing libraries, this must be the top level containing
# include and lib
#---------------------------------------------------------------------------------
LIBDIRS   := $(CSTM_CTRULIB)


#---------------------------------------------------------------------------------
# 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 TOPDIR   :=   $(CURDIR)

export VPATH   :=   $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
       $(foreach dir,$(DATA),$(CURDIR)/$(dir))

export DEPSDIR   :=   $(CURDIR)/$(BUILD)

COMMON_OBJS = ff_ctr.o \
       fmopl.o \
       id_ca.o \
       id_us.o \
       id_vh.o \
       misc.o \
       objs.o \
       sd_null.o \
       vi_comm.o \
       vi_ctr.o \
       wl_act1.o \
       wl_act2.o \
       wl_act3.o \
       wl_agent.o \
       wl_debug.o \
       wl_draw.o \
       wl_game.o \
       wl_inter.o \
       wl_main.o \
       wl_menu.o \
       wl_play.o \
       wl_state.o \
       wl_text.o \
       automap.o

CFILES     :=   $(COMMON_OBJS)
CPPFILES   :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
SFILES     :=
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)

ifeq ($(strip $(ICON)),)
   icons := $(wildcard *.png)
   ifneq (,$(findstring $(TARGET).png,$(icons)))
     export APP_ICON := $(TOPDIR)/$(TARGET).png
   else
     ifneq (,$(findstring icon.png,$(icons)))
       export APP_ICON := $(TOPDIR)/icon.png
     endif
   endif
else
   export APP_ICON := $(TOPDIR)/$(ICON)
endif

ifeq ($(strip $(NO_SMDH)),)
   export _3DSXFLAGS += --smdh=$(CURDIR)/$(TARGET).smdh
endif

.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).3dsx $(OUTPUT).smdh $(TARGET).elf


#---------------------------------------------------------------------------------
else

DEPENDS   :=   $(OFILES:.o=.d)

#---------------------------------------------------------------------------------
# main targets
#---------------------------------------------------------------------------------
ifeq ($(strip $(NO_SMDH)),)
$(OUTPUT).3dsx   :   $(OUTPUT).elf $(OUTPUT).smdh
else
$(OUTPUT).3dsx   :   $(OUTPUT).elf
endif
$(OUTPUT).elf   :   $(OFILES)

#---------------------------------------------------------------------------------
# you need a rule like this for each extension you use as binary data
#---------------------------------------------------------------------------------
%.bin.o   :   %.bin
#---------------------------------------------------------------------------------
   @echo $(notdir $<)
   @$(bin2o)

# WARNING: This is not the right way to do this! TODO: Do it right!
#---------------------------------------------------------------------------------
%.vsh.o   :   %.vsh
#---------------------------------------------------------------------------------
   @echo $(notdir $<)
   @python $(AEMSTRO)/aemstro_as.py $< ../$(notdir $<).shbin
   @bin2s ../$(notdir $<).shbin | $(PREFIX)as -o $@
   @echo "extern const u8" `(echo $(notdir $<).shbin | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end[];" > `(echo $(notdir $<).shbin | tr . _)`.h
   @echo "extern const u8" `(echo $(notdir $<).shbin | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"[];" >> `(echo $(notdir $<).shbin | tr . _)`.h
   @echo "extern const u32" `(echo $(notdir $<).shbin | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size";" >> `(echo $(notdir $<).shbin | tr . _)`.h
   @rm ../$(notdir $<).shbin

-include $(DEPENDS)

#---------------------------------------------------------------------------------------
endif
#---------------------------------------------------------------------------------------
 
I'm interested in creating a 2D platformer to run through the homebrew launcher but I'm a bit lost as to where to begin. What programming laanguage would be best? What are my technical limitations?
 
I'm interested in creating a 2D platformer to run through the homebrew launcher but I'm a bit lost as to where to begin. What programming laanguage would be best? What are my technical limitations?
You can only program in C or C++. (You can use Assembly too, but that won't be very helpful.) Tbh, you are better off waiting until Unity for 3DS comes out and getting that.
 
You can only program in C or C++. (You can use Assembly too, but that won't be very helpful.) Tbh, you are better off waiting until Unity for 3DS comes out and getting that.

Is there a thread for that or an ETA of some kind? I'm familiar with Unity already so that would be perfect. Would I need kernel to use Unity for 3DS?
 
I've made a homebrew application, that I need to pack as a CIA: https://github.com/TuxSH/TWLSaveTool
However, even if I have recreated sysUpdater's and/or CHMM2's build environment, but makerom crashes all the time, no matter what I do (on both Windows and Linux, x86_64).

Could someone help me?
 
Last edited by TuxSH,

Site & Scene News

Popular threads in this forum