How do I compile Homebrew?

Discussion in '3DS - Homebrew Development and Emulators' started by Job Moody, Jan 17, 2016.

?

Can someone take this thread down?

Poll closed Jan 17, 2016.
  1. Yes

    0 vote(s)
    0.0%
  2. No

    0 vote(s)
    0.0%
  3. Later

    0 vote(s)
    0.0%
Multiple votes are allowed.
  1. Job Moody
    OP

    Job Moody Advanced Member

    Newcomer
    58
    6
    Jan 6, 2016
    United States
    OK I'm pretty sure there are other posts out there about this, but I need help.
    I'm trying to compile some Homebrew apps, but i can't figure out how, I have looked everywhere...
    Please. Help.
    EDIT: I have citrulib downloaded, but i don't know how to use it, sorry never done this before
     
    Last edited by Job Moody, Jan 17, 2016
  2. Job Moody
    OP

    Job Moody Advanced Member

    Newcomer
    58
    6
    Jan 6, 2016
    United States
    I have DevKitPro
     
  3. GalladeGuy

    GalladeGuy Freeze Kirby :3

    Member
    2,588
    2,652
    Oct 28, 2015
    United States
    First, you need your homebrew. I suggest trying this with the examples to start out with. On a folder with an example in it, do SHIFT+RightClick on the folder, "Open command window here", and type "make".

    EDIT: Or you could just do what @WiiLoveU said. Much easier. XD
     
  4. Job Moody
    OP

    Job Moody Advanced Member

    Newcomer
    58
    6
    Jan 6, 2016
    United States
    Where does it put them when its done?
    Also mine had an error.
     
    GalladeGuy likes this.
  5. GalladeGuy

    GalladeGuy Freeze Kirby :3

    Member
    2,588
    2,652
    Oct 28, 2015
    United States
    We all have our moments. :P
     
  6. Job Moody
    OP

    Job Moody Advanced Member

    Newcomer
    58
    6
    Jan 6, 2016
    United States
    Yes but more importantly, it didn't work?
     
  7. GalladeGuy

    GalladeGuy Freeze Kirby :3

    Member
    2,588
    2,652
    Oct 28, 2015
    United States
    What error did you get?
     
  8. Job Moody
    OP

    Job Moody Advanced Member

    Newcomer
    58
    6
    Jan 6, 2016
    United States
    Forgot to compile citrulib if that matters
    What do i do now that i have citrulib compiled?
     
  9. GalladeGuy

    GalladeGuy Freeze Kirby :3

    Member
    2,588
    2,652
    Oct 28, 2015
    United States
    @Job Moody Here, just put this in your makefile instead of what you have:
    Code:
    #---------------------------------------------------------------------------------
    .SUFFIXES:
    #---------------------------------------------------------------------------------
    
    ifeq ($(strip $(DEVKITARM)),)
    $(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM")
    endif
    
    TOPDIR ?= $(CURDIR)
    include $(DEVKITARM)/3ds_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
    #
    # 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              :=    $(notdir $(CURDIR))
    BUILD                :=    build
    SOURCES              :=    source
    DATA                :=    data
    INCLUDES          :=    include
    APP_TITLE       :=  Simple-Calc
    APP_DESCRIPTION :=  A Very Simple Calculator
    APP_AUTHOR      :=  GalladeGuy
    ICON            :=  logo.png
    
    #---------------------------------------------------------------------------------
    # options for code generation
    #---------------------------------------------------------------------------------
    ARCH    :=    -march=armv6k -mtune=mpcore -mfloat-abi=hard
    
    CFLAGS    :=    -g -Wall -O2 -mword-relocations \
                -fomit-frame-pointer -ffast-math \
                $(ARCH)
    
    CFLAGS    +=    $(INCLUDE) -DARM11 -D_3DS
    
    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
    
    #---------------------------------------------------------------------------------
    # list of directories containing libraries, this must be the top level containing
    # include and lib
    #---------------------------------------------------------------------------------
    LIBDIRS    := $(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)
    
    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)
    
    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
    
    .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)),)
    .PHONY: all
    all    :    $(OUTPUT).3dsx $(OUTPUT).smdh
    endif
    $(OUTPUT).3dsx    :    $(OUTPUT).elf
    $(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
    #---------------------------------------------------------------------------------------
    
     
  10. Job Moody
    OP

    Job Moody Advanced Member

    Newcomer
    58
    6
    Jan 6, 2016
    United States
    What is that?
    It says this:
    > "make"
    Makefile:126: *** missing separator. Stop.

    > Process Exit Code: 2
    > Time Taken: 00:01
     
  11. GalladeGuy

    GalladeGuy Freeze Kirby :3

    Member
    2,588
    2,652
    Oct 28, 2015
    United States
    In the folder with the homebrew you want to compile, there is a file called "makefile". Open it, delete everything inside, and copy and paste that instead.
     
  12. Job Moody
    OP

    Job Moody Advanced Member

    Newcomer
    58
    6
    Jan 6, 2016
    United States
    Still. Did. Nothing.
    You gave me code for a calculator?
    I need the files for that in order for it to work.
     
  13. GalladeGuy

    GalladeGuy Freeze Kirby :3

    Member
    2,588
    2,652
    Oct 28, 2015
    United States
    Um... What? That isn't a calculator... Its the makefile for use with 3DS homebrew. Download the examples folder. Here's a link: https://github.com/devkitPro/3ds-examples
     
    Last edited by GalladeGuy, Jan 17, 2016
  14. Job Moody
    OP

    Job Moody Advanced Member

    Newcomer
    58
    6
    Jan 6, 2016
    United States
    Sure.
    I read it lol, its made by you and its titled "simple calculator"
     
  15. GalladeGuy

    GalladeGuy Freeze Kirby :3

    Member
    2,588
    2,652
    Oct 28, 2015
    United States
    That's the makefile for the homebrew. That's just what the .3dsx should be named. I just use it as a default. It doesn't matter.
     
  16. Job Moody
    OP

    Job Moody Advanced Member

    Newcomer
    58
    6
    Jan 6, 2016
    United States
    Well im making this https://gbatemp.net/threads/wip-undertale-techdemo.404386/
    (the source code is kinda hidden)
    It gives an error, you try :D

    — Posts automatically merged - Please don't double post! —

    ooops....
    found this "If you are looking to compile the demo yourself, please delete the "build" folder, since it may cause some problems."
     
  17. GalladeGuy

    GalladeGuy Freeze Kirby :3

    Member
    2,588
    2,652
    Oct 28, 2015
    United States
    Also, it uses sf2d, so it won't work unless you install that. Just try compiling one of the examples.
     
    Last edited by GalladeGuy, Jan 17, 2016
  18. Job Moody
    OP

    Job Moody Advanced Member

    Newcomer
    58
    6
    Jan 6, 2016
    United States
    What's that?
     
  19. GalladeGuy

    GalladeGuy Freeze Kirby :3

    Member
    2,588
    2,652
    Oct 28, 2015
    United States
    Its a graphics library for the 3DS.
     
  20. Job Moody
    OP

    Job Moody Advanced Member

    Newcomer
    58
    6
    Jan 6, 2016
    United States
    Ok where do I get it? and How do I use it?
    Found it.
     
    Last edited by Job Moody, Jan 17, 2016