2015-04-01 21:14:13 +00:00
TARGET := retroarch_3ds
2015-09-11 21:10:03 +00:00
LIBRETRO =
2015-09-11 21:07:12 +00:00
2015-04-01 21:14:13 +00:00
DEBUG = 0
2015-09-13 21:33:35 +00:00
GRIFFIN_BUILD = 1
2015-09-13 21:58:37 +00:00
WHOLE_ARCHIVE_LINK = 0
BUILD_3DSX = 1
BUILD_CIA = 1
2015-04-01 21:14:13 +00:00
2015-09-11 21:07:12 +00:00
APP_TITLE = Retroarch 3DS
APP_DESCRIPTION = Retroarch 3DS
APP_AUTHOR = Team Libretro
APP_PRODUCT_CODE = RETROARCH-3DS
APP_UNIQUE_ID = 0xBAC00
APP_ICON = ctr/default.png
APP_BANNER = ctr/libretro_banner.png
APP_AUDIO = ctr/silent.wav
2015-09-13 21:33:35 +00:00
i n c l u d e c t r / M a k e f i l e . c o r e s
2015-09-11 21:07:12 +00:00
OBJS :=
OBJS += gfx/drivers/ctr_sprite.o
2015-09-13 21:33:35 +00:00
i f e q ( $( GRIFFIN_BUILD ) , 1 )
OBJS += griffin/griffin.o
e l s e
OBJS += libretro-common/file/file_extract.o
OBJS += performance.o
OBJS += libretro-common/compat/compat.o
OBJS += libretro-common/compat/compat_fnmatch.o
OBJS += libretro-common/memmap/memalign.o
OBJS += libretro-common/file/config_file.o
OBJS += libretro-common/file/config_file_userdata.o
OBJS += core_options.o
OBJS += cheats.o
OBJS += libretro-common/hash/rhash.o
OBJS += gfx/video_context_driver.o
OBJS += gfx/drivers_context/gfx_null_ctx.o
OBJS += gfx/image/image.o
OBJS += gfx/video_texture.o
OBJS += libretro-common/formats/tga/tga_decode.o
OBJS += libretro-common/formats/png/rpng_fbio.o
OBJS += libretro-common/formats/png/rpng_nbio.o
OBJS += libretro-common/formats/png/rpng_decode.o
OBJS += libretro-common/formats/png/rpng_encode.o
OBJS += gfx/drivers/ctr_gfx.o
OBJS += gfx/drivers/nullgfx.o
OBJS += gfx/font_renderer_driver.o
OBJS += gfx/drivers_font_renderer/bitmapfont.o
OBJS += gfx/font_driver.o
OBJS += input/input_autodetect.o
OBJS += input/input_joypad_driver.o
OBJS += input/input_joypad.o
OBJS += input/input_hid_driver.o
OBJS += input/input_common.o
OBJS += input/input_keymaps.o
OBJS += input/input_remapping.o
OBJS += input/input_sensor.o
OBJS += input/keyboard_line.o
OBJS += input/drivers/ctr_input.o
OBJS += input/drivers_joypad/ctr_joypad.o
OBJS += input/autoconf/builtin_ctr.o
OBJS += input/drivers/nullinput.o
OBJS += input/drivers_joypad/null_joypad.o
OBJS += input/drivers_joypad/hid_joypad.o
OBJS += input/drivers_hid/null_hid.o
OBJS += gfx/video_state_tracker.o
OBJS += libretro-common/queues/fifo_buffer.o
OBJS += audio/audio_resampler_driver.o
OBJS += audio/drivers_resampler/sinc.o
OBJS += audio/drivers_resampler/nearest.o
OBJS += audio/drivers_resampler/cc_resampler.o
OBJS += camera/drivers/nullcamera.o
OBJS += location/drivers/nulllocation.o
OBJS += audio/drivers/ctr_audio.o
OBJS += audio/drivers/nullaudio.o
OBJS += gfx/video_driver.o
OBJS += gfx/video_common.o
OBJS += gfx/video_pixel_converter.o
OBJS += gfx/video_viewport.o
OBJS += input/input_driver.o
OBJS += audio/audio_driver.o
OBJS += camera/camera_driver.o
OBJS += location/location_driver.o
OBJS += menu/menu_driver.o
OBJS += driver.o
OBJS += libretro-common/gfx/scaler/scaler_filter.o
OBJS += libretro-common/gfx/scaler/pixconv.o
OBJS += libretro-common/gfx/scaler/scaler.o
OBJS += libretro-common/gfx/scaler/scaler_int.o
OBJS += gfx/video_filters/2xsai.o
OBJS += gfx/video_filters/super2xsai.o
OBJS += gfx/video_filters/supereagle.o
OBJS += gfx/video_filters/2xbr.o
OBJS += gfx/video_filters/darken.o
OBJS += gfx/video_filters/epx.o
OBJS += gfx/video_filters/scale2x.o
OBJS += gfx/video_filters/blargg_ntsc_snes.o
OBJS += gfx/video_filters/lq2x.o
OBJS += gfx/video_filters/phosphor2x.o
OBJS += audio/audio_filters/echo.o
OBJS += audio/audio_filters/eq.o
OBJS += audio/audio_filters/chorus.o
OBJS += audio/audio_filters/iir.o
OBJS += audio/audio_filters/panning.o
OBJS += audio/audio_filters/phaser.o
OBJS += audio/audio_filters/reverb.o
OBJS += audio/audio_filters/wahwah.o
OBJS += libretro-common/dynamic/dylib.o
OBJS += dynamic.o
OBJS += gfx/video_filter.o
OBJS += audio/audio_dsp_filter.o
OBJS += cores/dynamic_dummy.o
OBJS += content.o
OBJS += libretro-common/file/file_path.o
OBJS += file_path_special.o
OBJS += libretro-common/file/dir_list.o
OBJS += libretro-common/file/retro_dirent.o
OBJS += dir_list_special.o
OBJS += libretro-common/string/string_list.o
OBJS += libretro-common/string/stdstring.o
OBJS += file_ops.o
OBJS += libretro-common/file/nbio/nbio_stdio.o
OBJS += libretro-common/file/file_list.o
OBJS += libretro-common/queues/message_queue.o
OBJS += patch.o
OBJS += configuration.o
OBJS += rewind.o
OBJS += frontend/frontend_driver.o
OBJS += frontend/drivers/platform_ctr.o
OBJS += frontend/drivers/platform_null.o
OBJS += core_info.o
OBJS += ui/ui_companion_driver.o
OBJS += ui/drivers/ui_null.o
OBJS += frontend/frontend.o
OBJS += libretro_version_1.o
OBJS += retroarch.o
OBJS += retroarch_info.o
OBJS += runloop.o
OBJS += runloop_data.o
OBJS += runloop_msg.o
OBJS += system.o
OBJS += msg_hash.o
OBJS += intl/msg_hash_de.o
OBJS += intl/msg_hash_es.o
OBJS += intl/msg_hash_eo.o
OBJS += intl/msg_hash_fr.o
OBJS += intl/msg_hash_it.o
OBJS += intl/msg_hash_nl.o
OBJS += intl/msg_hash_pt.o
OBJS += intl/msg_hash_pl.o
OBJS += intl/msg_hash_us.o
OBJS += movie.o
OBJS += record/record_driver.o
OBJS += record/drivers/record_null.o
OBJS += tasks/task_file_transfer.o
OBJS += screenshot.o
OBJS += playlist.o
OBJS += menu/menu.o
OBJS += menu/menu_hash.o
OBJS += menu/menu_input.o
OBJS += menu/menu_entry.o
OBJS += menu/menu_entries.o
OBJS += menu/menu_setting.o
OBJS += menu/menu_list.o
OBJS += menu/menu_cbs.o
OBJS += menu/menu_video.o
OBJS += menu/cbs/menu_cbs_ok.o
OBJS += menu/cbs/menu_cbs_cancel.o
OBJS += menu/cbs/menu_cbs_select.o
OBJS += menu/cbs/menu_cbs_start.o
OBJS += menu/cbs/menu_cbs_info.o
OBJS += menu/cbs/menu_cbs_refresh.o
OBJS += menu/cbs/menu_cbs_left.o
OBJS += menu/cbs/menu_cbs_right.o
OBJS += menu/cbs/menu_cbs_title.o
OBJS += menu/cbs/menu_cbs_deferred_push.o
OBJS += menu/cbs/menu_cbs_scan.o
OBJS += menu/cbs/menu_cbs_get_value.o
OBJS += menu/menu_iterate.o
OBJS += menu/cbs/menu_cbs_up.o
OBJS += menu/cbs/menu_cbs_down.o
OBJS += menu/cbs/menu_cbs_contentlist_switch.o
OBJS += menu/menu_shader.o
OBJS += menu/menu_navigation.o
OBJS += menu/menu_display.o
OBJS += menu/menu_displaylist.o
OBJS += menu/menu_animation.o
OBJS += menu/intl/menu_hash_de.o
OBJS += menu/intl/menu_hash_es.o
OBJS += menu/intl/menu_hash_eo.o
OBJS += menu/intl/menu_hash_fr.o
OBJS += menu/intl/menu_hash_it.o
OBJS += menu/intl/menu_hash_nl.o
OBJS += menu/intl/menu_hash_pl.o
OBJS += menu/intl/menu_hash_pt.o
OBJS += menu/intl/menu_hash_us.o
OBJS += menu/drivers/null.o
OBJS += menu/drivers/rgui.o
OBJS += command_event.o
OBJS += deps/zlib/adler32.o
OBJS += deps/zlib/compress.o
OBJS += deps/zlib/crc32.o
OBJS += deps/zlib/deflate.o
OBJS += deps/zlib/gzclose.o
OBJS += deps/zlib/gzlib.o
OBJS += deps/zlib/gzread.o
OBJS += deps/zlib/gzwrite.o
OBJS += deps/zlib/inffast.o
OBJS += deps/zlib/inflate.o
OBJS += deps/zlib/inftrees.o
OBJS += deps/zlib/trees.o
OBJS += deps/zlib/uncompr.o
OBJS += deps/zlib/zutil.o
OBJS += deps/zlib/ioapi.o
OBJS += deps/zlib/unzip.o
OBJS += audio/audio_utils.o
e n d i f
2015-09-11 21:07:12 +00:00
2015-04-01 21:14:13 +00:00
2015-04-01 22:27:55 +00:00
i f e q ( $( strip $ ( DEVKITARM ) ) , )
$( error "Please set DEVKITARM in your environment . export DEVKITARM =<path to >devkitARM ")
e n d i f
2015-04-01 21:14:13 +00:00
2015-04-01 22:27:55 +00:00
i f e q ( $( strip $ ( CTRULIB ) ) , )
$( error "Please set CTRULIB in your environment . export CTRULIB =<path to >ctrulib ")
e n d i f
i f e q ( $( strip $ ( AEMSTRO ) ) , )
$( error "Please set AEMSTRO in your environment . export AEMSTRO =<path to >aemstro ")
e n d i f
2015-04-01 21:14:13 +00:00
2015-09-11 21:07:12 +00:00
APP_TITLE := $( shell echo " $( APP_TITLE) " | cut -c1-128)
APP_DESCRIPTION := $( shell echo " $( APP_DESCRIPTION) " | cut -c1-256)
APP_AUTHOR := $( shell echo " $( APP_AUTHOR) " | cut -c1-128)
APP_PRODUCT_CODE := $( shell echo $( APP_PRODUCT_CODE) | cut -c1-16)
APP_UNIQUE_ID := $( shell echo $( APP_UNIQUE_ID) | cut -c1-7)
2015-04-01 21:14:13 +00:00
INCDIRS := -I$( CTRULIB) /include
LIBDIRS := -L. -L$( CTRULIB) /lib
2015-09-11 21:07:12 +00:00
ARCH := -march= armv6k -mtune= mpcore -mfloat-abi= hard -marm -mfpu= vfp
2015-04-01 21:14:13 +00:00
CFLAGS += -mword-relocations \
-fomit-frame-pointer -ffast-math \
$( ARCH)
#CFLAGS += -Wall
CFLAGS += -DARM11 -D_3DS
i f e q ( $( DEBUG ) , 1 )
CFLAGS += -O0 -g
e l s e
CFLAGS += -O3
e n d i f
2015-09-13 21:58:37 +00:00
i f e q ( $( WHOLE_ARCHIVE_LINK ) , 1 )
WHOLE_START := -Wl,--whole-archive
WHOLE_END := -Wl,--no-whole-archive
e n d i f
2015-04-01 21:14:13 +00:00
CFLAGS += -I. -Ideps/zlib -Ideps/7zip -Ilibretro-common/include
CFLAGS += -DRARCH_INTERNAL -DRARCH_CONSOLE -DSINC_LOWEST_QUALITY
CFLAGS += -DHAVE_GRIFFIN= 1 -DHAVE_FILTERS_BUILTIN -DHAVE_MENU -DHAVE_RGUI
2015-04-19 14:55:03 +00:00
CFLAGS += -DHAVE_ZLIB -DHAVE_RPNG -DWANT_ZLIB -DHAVE_BUILTIN_AUTOCONFIG
2015-04-08 20:35:10 +00:00
#-DHAVE_LIBRETRO_MANAGEMENT -DWANT_RPNG -DHAVE_7ZIP
2015-04-01 21:14:13 +00:00
CXXFLAGS := $( CFLAGS) -fno-rtti -fno-exceptions -std= gnu++11
2015-09-11 21:07:12 +00:00
ASFLAGS := -g $( ARCH) -O3
2015-04-01 21:14:13 +00:00
LDFLAGS = -specs= 3dsx.specs -g $( ARCH) -Wl,-Map,$( notdir $* .map)
2015-09-11 21:07:12 +00:00
2015-04-01 21:14:13 +00:00
CFLAGS += -std= gnu99 -ffast-math
2015-09-13 21:58:37 +00:00
LIBS := $( WHOLE_START) -lretro_ctr $( WHOLE_END) -lctru -lm
2015-04-01 21:14:13 +00:00
2015-09-13 21:58:37 +00:00
i f e q ( $( BUILD_ 3DSX ) , 1 )
TARGET_3DSX := $( TARGET) .3dsx $( TARGET) .smdh
e n d i f
i f e q ( $( BUILD_CIA ) , 1 )
TARGET_CIA := $( TARGET) .cia
e l s e
2015-04-01 21:14:13 +00:00
.PHONY : $( BUILD ) clean all
all : $( TARGET )
2015-09-13 21:58:37 +00:00
$(TARGET) : $( TARGET_ 3DSX ) $( TARGET_CIA )
2015-09-11 21:07:12 +00:00
$(TARGET).3dsx : $( TARGET ) .elf
$(TARGET).elf : $( OBJS ) libretro_ctr .a
2015-04-01 21:14:13 +00:00
2015-09-11 21:07:12 +00:00
ctr_sprite_shader_shbin.h : gfx /drivers /ctr_sprite .o
gfx/drivers/ctr_gfx.c : ctr_sprite_shader_shbin .h
2015-09-13 21:33:35 +00:00
griffin/griffin.o : gfx /drivers /ctr_gfx .c
2015-04-01 21:14:13 +00:00
PREFIX := $( DEVKITARM) /bin/arm-none-eabi-
CC := $( PREFIX) gcc
CXX := $( PREFIX) g++
AS := $( PREFIX) as
AR := $( PREFIX) ar
OBJCOPY := $( PREFIX) objcopy
STRIP := $( PREFIX) strip
NM := $( PREFIX) nm
LD := $( CXX)
2015-09-11 21:07:12 +00:00
i f n e q ( $( findstring Linux ,$ ( shell uname -a ) ) , )
MAKEROM = ctr/tools/makerom-linux
BANNERTOOL = ctr/tools/bannertool-linux
e l s e i f n e q ( $( findstring Darwin ,$ ( shell uname -a ) ) , )
MAKEROM = ctr/tools/makerom-mac
BANNERTOOL = ctr/tools/bannertool-mac
e l s e
MAKEROM = ctr/tools/makerom.exe
BANNERTOOL = ctr/tools/bannertool.exe
e n d i f
2015-04-01 21:14:13 +00:00
%.o : %.shader
python $( AEMSTRO) /aemstro_as.py $< $( notdir $<) .shbin
2015-09-07 17:31:30 +00:00
$( DEVKITARM) /bin/bin2s $( notdir $<) .shbin | $( PREFIX) as -o $@
2015-04-01 21:14:13 +00:00
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
%.o : %.cpp
$( CXX) -c -o $@ $< $( CXXFLAGS) $( INCDIRS)
%.o : %.c
$( CC) -c -o $@ $< $( CFLAGS) $( INCDIRS)
%.o : %.s
$( CC) -c -o $@ $< $( ASFLAGS)
%.o : %.S
$( CC) -c -o $@ $< $( ASFLAGS)
%.a :
$( AR) -rc $@ $^
%.vsh :
2015-09-11 21:07:12 +00:00
%.smdh : $( APP_ICON )
2015-04-01 21:14:13 +00:00
smdhtool --create " $( APP_TITLE) " " $( APP_DESCRIPTION) " " $( APP_AUTHOR) " $( APP_ICON) $@
%.3dsx : %.elf
2015-09-11 21:07:12 +00:00
-3dsxtool $< $@ $( _3DSXFLAGS)
2015-04-01 21:14:13 +00:00
2015-09-11 21:07:12 +00:00
%.elf :
2015-04-01 21:14:13 +00:00
$( LD) $( LDFLAGS) $( OBJS) $( LIBDIRS) $( LIBS) -o $@
$( NM) -CSn $@ > $( notdir $* .lst)
2015-09-11 21:07:12 +00:00
$(TARGET).bnr : $( APP_BANNER ) $( APP_AUDIO )
$( BANNERTOOL) makebanner -i " $( APP_BANNER) " -a " $( APP_AUDIO) " -o $@
$(TARGET).icn : $( APP_ICON )
$( BANNERTOOL) makesmdh -s " $( APP_TITLE) " -l " $( APP_TITLE) " -p " $( APP_AUTHOR) " -i $( APP_ICON) -o $@
$(TARGET).rsf : ctr /tools /template -cia .rsf
cat ctr/tools/template-cia.rsf | sed 's/{APP_TITLE}/$(APP_TITLE)/' | sed 's/{APP_PRODUCT_CODE}/$(APP_PRODUCT_CODE)/' | sed 's/{APP_UNIQUE_ID}/$(APP_UNIQUE_ID)/' > $@
$(TARGET)_stripped.elf : $( TARGET ) .elf
cp $( TARGET) .elf $@
$( STRIP) $@
$(TARGET).cia : $( TARGET ) _stripped .elf $( TARGET ) .bnr $( TARGET ) .icn $( TARGET ) .rsf
$( MAKEROM) -f cia -o $@ -rsf $( TARGET) .rsf -target t -exefslogo -elf $( TARGET) _stripped.elf -icon $( TARGET) .icn -banner $( TARGET) .bnr
2015-04-01 21:14:13 +00:00
2015-09-11 21:07:12 +00:00
clean :
rm -f $( OBJS)
rm -f $( TARGET) .3dsx
rm -f $( TARGET) .elf
rm -f $( TARGET) _stripped.elf
rm -f $( TARGET) .cia
rm -f $( TARGET) .bnr
rm -f $( TARGET) .icn
rm -f $( TARGET) .rsf
rm -f *_shader_shbin.h
.PHONY : clean
2015-04-08 17:59:41 +00:00