diff --git a/libretro-build-common.sh b/libretro-build-common.sh index af424ac2..4accae77 100755 --- a/libretro-build-common.sh +++ b/libretro-build-common.sh @@ -184,7 +184,9 @@ build_libretro_generic_makefile() { # # $core_build_subdir Subdir of the makefile (if any) # $core_build_makefile Name of the makefile (if not {GNUm,m,M}akefile) +# $core_build_args Extra arguments to make # $core_build_platform Usually some variant of $FORMAT_COMPILER_TARGET +# $core_build_cores A list of cores produced by the builds build_makefile() { [ -n "$core_build_subdir" ] && core_build_subdir="/$core_build_subdir" @@ -209,14 +211,22 @@ build_makefile() { if [ -d "$build_dir" ]; then echo_cmd "cd \"$build_dir\"" + $core_build_configure + if [ -z "$NOCLEAN" ]; then - echo_cmd "$make_cmdline clean" + $core_build_preclean + echo_cmd "$make_cmdline $core_build_args clean" fi make_cmdline="$make_cmdline $COMPILER" - echo_cmd "$make_cmdline" - # TODO: Make this a separate stage rule - copy_core_to_dist $1 + $core_build_prebuild + echo_cmd "$make_cmdline $core_build_args" + + # TODO: Make this a separate stage/package rule + $core_build_prepkg + for a in $core_build_cores; do + copy_core_to_dist ${core_build_products:+$core_build_products/}$a $a + done else echo "$1 not fetched, skipping ..." fi @@ -262,13 +272,20 @@ libretro_build_core() { case "$core_build_rule" in generic_makefile) + core_build_configure="libretro_${1}_build_configure" + core_build_preclean="libretro_${1}_build_preclean" + core_build_prebuild="libretro_${1}_build_prebuild" + core_build_prepkg="libretro_${1}_build_prepkg" eval "core_build_makefile=\$libretro_${1}_build_makefile" eval "core_build_subdir=\$libretro_${1}_build_subdir" + eval "core_build_args=\$libretro_${1}_build_args" # TODO: Really, clean this up... eval "core_build_platform=\$libretro_${1}_build_platform" core_build_platform="${core_build_platform:-$FORMAT_COMPILER_TARGET}$opengl_type" + eval "core_build_cores=\${libretro_${1}_build_cores:-$1}" + eval "core_build_products=\$libretro_${1}_build_products" echo "Building ${1}..." build_makefile $1 ;; @@ -407,288 +424,9 @@ create_dist_dir() { create_dist_dir -########## LEGACY RULES -# TODO: Safe to delete these when scripts no longer reference them - -build_libretro_2048() { - libretro_build_core 2048 -} -build_libretro_3dengine() { - libretro_build_core 3dengine -} -build_libretro_4do() { - libretro_build_core 4do -} -build_libretro_beetle_gba() { - libretro_build_core mednafen_gba -} -build_libretro_beetle_lynx() { - libretro_build_core mednafen_lynx -} -build_libretro_beetle_ngp() { - libretro_build_core mednafen_ngp -} -build_libretro_beetle_pce_fast() { - libretro_build_core mednafen_pce_fast -} -build_libretro_beetle_pcfx() { - libretro_build_core mednafen_pcfx -} -build_libretro_beetle_psx() { - libretro_build_core mednafen_psx -} -build_libretro_beetle_snes() { - libretro_build_core mednafen_snes -} -build_libretro_beetle_supergrafx() { - libretro_build_core mednafen_supergrafx -} -build_libretro_beetle_vb() { - libretro_build_core mednafen_vb -} -build_libretro_beetle_wswan() { - libretro_build_core mednafen_wsawn -} -build_libretro_bluemsx() { - libretro_build_core bluemsx -} -build_libretro_catsfc() { - libretro_build_core catsfc -} -build_libretro_desmume() { - libretro_build_core desmume -} -build_libretro_dinothawr() { - libretro_build_core dinothawr -} -build_libretro_dosbox() { - libretro_build_core dosbox -} -build_libretro_fb_alpha() { - libretro_build_core fb_alpha -} -build_libretro_fceumm() { - libretro_build_core fceumm -} -build_libretro_ffmpeg() { - libretro_build_core ffmpeg -} -build_libretro_fmsx() { - libretro_build_core fmsx -} -build_libretro_fuse() { - libretro_build_core fuse -} -build_libretro_gambatte() { - libretro_build_core gambatte -} -build_libretro_genesis_plus_gx() { - libretro_build_core genesis_plus_gx -} -build_libretro_gpsp() { - libretro_build_core gpsp -} -build_libretro_handy() { - libretro_build_core handy -} -build_libretro_hatari() { - libretro_build_core hatari -} -build_libretro_mame078() { - libretro_build_core mame078 -} -build_libretro_mednafen_psx() { - libretro_build_core mednafen_psx -} -build_libretro_meteor() { - libretro_build_core meteor -} -build_libretro_nestopia() { - libretro_build_core nestopia -} -build_libretro_nx() { - libretro_build_core nxengine -} -build_libretro_o2em() { - libretro_build_core o2em -} -build_libretro_picodrive() { - libretro_build_core picodrive -} -build_libretro_ppsspp() { - libretro_build_core ppsspp -} -build_libretro_prboom() { - libretro_build_core prboom -} -build_libretro_prosystem() { - libretro_build_core prosystem -} -build_libretro_quicknes() { - libretro_build_core quicknes -} -build_libretro_scummvm() { - libretro_build_core scummvm -} -build_libretro_snes9x() { - libretro_build_core snes9x -} -build_libretro_snes9x_next() { - libretro_build_core snes9x_next -} -build_libretro_stella() { - libretro_build_core stella -} -build_libretro_stonesoup() { - libretro_build_core stonesoup -} -build_libretro_tgbdual() { - libretro_build_core tgbdual -} -build_libretro_tyrquake() { - libretro_build_core tyrquake -} -build_libretro_vba_next() { - libretro_build_core vba_next -} -build_libretro_vbam() { - libretro_build_core vbam -} -build_libretro_vecx() { - libretro_build_core vecx -} -build_libretro_virtualjaguar() { - libretro_build_core virtualjaguar -} -build_libretro_yabause() { - libretro_build_core yabause -} -build_libretro_gw() { - libretro_build_core gw -} -build_libretro_lutro() { - libretro_build_core lutro -} - ########## LEGACY RULES # TODO: Port these to modern rules -build_libretro_bnes() { - build_dir="$WORKDIR/libretro-bnes" - - if build_should_skip bnes "$build_dir"; then - echo "Core bnes is already built, skipping..." - return - fi - - if [ -d "$build_dir" ]; then - echo '=== Building bNES ===' - echo_cmd "cd \"$build_dir\"" - - mkdir -p obj - if [ -z "$NOCLEAN" ]; then - echo_cmd "$MAKE -f Makefile \"-j$JOBS\" clean" || die 'Failed to clean bNES' - fi - echo_cmd "$MAKE -f Makefile $COMPILER \"-j$JOBS\" compiler=\"${CXX11}\"" || die 'Failed to build bNES' - copy_core_to_dist "bnes" - build_save_revision $? "bnes" - else - echo 'bNES not fetched, skipping ...' - fi -} - -build_libretro_bsnes_modern() { - build_dir="$WORKDIR/libretro-$1" - if [ -d "$build_dir" ]; then - echo "=== Building $1 ===" - echo_cmd "cd \"$build_dir\"" - - if [ -z "$NOCLEAN" ]; then - echo_cmd "rm -f obj/*.{o,\"$FORMAT_EXT\"}" - echo_cmd "rm -f out/*.{o,\"$FORMAT_EXT\"}" - fi - - cmdline="$MAKE target=libretro -j$JOBS" - cmdline="$cmdline platform=\"$FORMAT_COMPILER_TARGET\"" - cmdline="$cmdline compiler=\"$CXX11\"" - ret=0 - for a in accuracy balanced performance; do - echo_cmd "$cmdline profile=$a" - copy_core_to_dist "out/${1}_$a" "${1}_$a" - [ $ret -eq 0 ] || break - done - - return $ret - else - echo "$1 not fetched, skipping ..." - fi -} - -build_libretro_bsnes() { - if build_should_skip bsnes "$WORKDIR/libretro-bsnes"; then - echo "Core bsnes is already built, skipping..." - return - fi - - build_libretro_bsnes_modern "bsnes" - build_save_revision $? bsnes -} - -build_libretro_bsnes_cplusplus98() { - CORENAME="bsnes_cplusplus98" - build_dir="$WORKDIR/libretro-$CORENAME" - - if build_should_skip $CORENAME "$build_dir"; then - echo "Core $CORENAME is already built, skipping..." - return - fi - - if [ -d "$build_dir" ]; then - echo "=== Building $CORENAME ===" - echo_cmd "cd \"$build_dir\"" - - if [ -z "$NOCLEAN" ]; then - # byuu's "make clean" doesn't - echo_cmd "rm -f obj/*.{o,\"$FORMAT_EXT\"}" - echo_cmd "rm -f out/*.{o,\"$FORMAT_EXT\"}" - fi - - echo_cmd "$MAKE platform=\"$FORMAT_COMPILER_TARGET\" $COMPILER \"-j$JOBS\"" - copy_core_to_dist "out/$CORENAME" "$CORENAME" - build_save_revision $? $CORENAME - else - echo "$CORENAME not fetched, skipping ..." - fi -} - -build_libretro_bsnes_mercury() { - if build_should_skip bsnes_mercury "$WORKDIR/libretro-bsnes"; then - echo "Core bsnes_mercury is already built, skipping..." - return - fi - - build_libretro_bsnes_modern "bsnes_mercury" - build_save_revision $? bsnes_mercury -} - - -build_libretro_emux() { - if build_should_skip emux "$WORKDIR/libretro-emux"; then - echo "Cores for emux are already built, skipping..." - return - fi - - build_libretro_generic_makefile "emux" "libretro" "Makefile" $FORMAT_COMPILER_TARGET 1 - - copy_core_to_dist "emux_chip8" - copy_core_to_dist "emux_gb" - copy_core_to_dist "emux_nes" - copy_core_to_dist "emux_sms" - - # TODO: Check for more than emux_sms here... - build_save_revision $? "emux" -} - build_libretro_mupen64() { if check_opengl; then build_dir="$WORKDIR/libretro-mupen64plus" @@ -701,8 +439,6 @@ build_libretro_mupen64() { if [ -d "$build_dir" ]; then echo_cmd "cd \"$build_dir\"" - mkdir -p obj - if iscpu_x86_64 $ARCH; then dynarec="WITH_DYNAREC=x86_64" elif iscpu_x86 $ARCH; then diff --git a/rules.d/core-rules.sh b/rules.d/core-rules.sh index 09a5c16f..dca92e14 100644 --- a/rules.d/core-rules.sh +++ b/rules.d/core-rules.sh @@ -3,8 +3,9 @@ register_core "bsnes" -theos_ios -ngc -ps3 -psp1 -qnx -wii libretro_bsnes_name="bsnes/higan" libretro_bsnes_git_url="https://github.com/libretro/bsnes-libretro.git" -libretro_bsnes_build_rule=legacy -libretro_bsnes_build_legacy=build_libretro_bsnes +libretro_bsnes_build_args="compiler=\"${CXX11}\"" +libretro_bsnes_build_products="out" +libretro_bsnes_build_cores="bsnes_accuracy bsnes_balanced bsnes_performance" register_core "snes9x" -ngc -ps3 -psp1 -wii libretro_snes9x_name="SNES9x" @@ -53,8 +54,7 @@ libretro_cap32_build_makefile="Makefile" register_core "bnes" -ios -theos_ios -ngc -ps3 -psp1 -qnx -wii libretro_bnes_name="bnes/higan" libretro_bnes_git_url="https://github.com/libretro/bnes-libretro.git" -libretro_bnes_build_rule=legacy -libretro_bnes_build_legacy=build_libretro_bnes +libretro_bnes_build_args="compiler=\"${CXX11}\"" register_core "fceumm" libretro_fceumm_name="FCEUmm" @@ -200,14 +200,14 @@ libretro_ffmpeg_build_opengl="optional" register_core "bsnes_cplusplus98" -theos_ios -ngc -ps3 -psp1 -wii libretro_bsnes_cplusplus98_name="bsnes C++98 (v0.85)" libretro_bsnes_cplusplus98_git_url="https://github.com/libretro/bsnes-libretro-cplusplus98.git" -libretro_bsnes_cplusplus98_build_rule=legacy -libretro_bsnes_cplusplus98_build_legacy=build_libretro_bsnes_cplusplus98 +libretro_bsnes_cplusplus98_build_products="out" register_core "bsnes_mercury" -theos_ios -ngc -ps3 -psp1 -qnx -wii libretro_bsnes_mercury_name="bsnes-mercury" libretro_bsnes_mercury_git_url="https://github.com/libretro/bsnes-mercury.git" -libretro_bsnes_mercury_build_rule=legacy -libretro_bsnes_mercury_build_legacy=build_libretro_bsnes_mercury +libretro_bsnes_mercury_build_args="compiler=\"${CXX11}\"" +libretro_bsnes_mercury_build_products="out" +libretro_bsnes_mercury_build_cores="bsnes_mercury_accuracy bsnes_mercury_balanced bsnes_mercury_performance" register_core "picodrive" -theos_ios -ngc -ps3 -wii libretro_picodrive_name="Picodrive" @@ -309,8 +309,8 @@ libretro_gpsp_git_url="https://github.com/libretro/gpsp.git" register_core "emux" -theos_ios -ngc -ps3 -psp1 -qnx -wii libretro_emux_name="Emux" libretro_emux_git_url="https://github.com/libretro/emux.git" -libretro_emux_build_rule=legacy -libretro_emux_build_legacy=build_libretro_emux +libretro_emux_build_subdir=libretro +libretro_emux_build_cores="emux_chip8 emux_gb emux_nes emux_sms" register_core "fuse" -theos_ios -ngc -ps3 -psp1 -qnx -wii libretro_fuse_name="Fuse" @@ -394,12 +394,22 @@ libretro_lutro_game_of_life_git_url="https://github.com/libretro/lutro-game-of-l # build_makefile Name of makefile # If unset, GNU make has rules for default makefile names # +# build_subdir The subdir containing the makefile, if any +# +# build_args Any extra arguments to pass to make +# # build_platform Set to override the default platform # (e.g., $FORMAT_COMPILER_TARGET_ALT) # # build_opengl Set to "optional" to use OpenGL/GLES if available # Set to "yes" if the core requires it # +# build_cores String containing the core(s) produced +# Defaults to "" +# +# build_products Directory build products are located in +# bsnes puts cores in "out" for some reason +# # Example: # # libretro_dinothawr_git_url="https://github.com/libretro/Dinothawr.git"