Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env bash
- # This file is part of The RetroPie Project
- #
- # The RetroPie Project is the legal property of its developers, whose names are
- # too numerous to list here. Please refer to the COPYRIGHT.md file distributed with this source.
- #
- # See the LICENSE.md file at the top-level directory of this distribution and
- # at https://raw.githubusercontent.com/RetroPie/RetroPie-Setup/master/LICENSE.md
- #
- rp_module_id="retroarch"
- rp_module_desc="RetroArch - frontend to the libretro emulator cores - required by all lr-* emulators"
- rp_module_licence="GPL3 https://raw.githubusercontent.com/libretro/RetroArch/master/COPYING"
- rp_module_repo="git https://github.com/retropie/RetroArch.git retropie-v1.18.0"
- rp_module_section="core"
- function depends_retroarch() {
- local depends=(libudev-dev libxkbcommon-dev libsdl2-dev libasound2-dev libusb-1.0-0-dev)
- isPlatform "rpi" && depends+=(libraspberrypi-dev)
- isPlatform "gles" && ! isPlatform "vero4k" && depends+=(libgles2-mesa-dev)
- isPlatform "mesa" && depends+=(libx11-xcb-dev)
- isPlatform "mali" && depends+=(mali-fbdev)
- isPlatform "x11" && depends+=(libx11-xcb-dev libpulse-dev)
- isPlatform "vulkan" && depends+=(libvulkan-dev mesa-vulkan-drivers)
- isPlatform "vero4k" && depends+=(vero3-userland-dev-osmc zlib1g-dev libfreetype6-dev)
- isPlatform "kms" && depends+=(libgbm-dev)
- if [[ "$__os_debian_ver" -ge 9 ]]; then
- depends+=(libavcodec-dev libavformat-dev libavdevice-dev)
- fi
- getDepends "${depends[@]}"
- }
- function sources_retroarch() {
- gitPullOrClone
- }
- function build_retroarch() {
- local params=(--disable-sdl --enable-sdl2 --disable-oss --disable-al --disable-jack --disable-qt)
- if ! isPlatform "x11"; then
- params+=(--disable-pulse)
- ! isPlatform "mesa" && params+=(--disable-x11)
- fi
- if [[ "$__os_debian_ver" -lt 9 ]]; then
- params+=(--disable-ffmpeg)
- fi
- isPlatform "gles" && params+=(--enable-opengles)
- if isPlatform "gles3"; then
- params+=(--enable-opengles3)
- isPlatform "gles31" && params+=(--enable-opengles3_1)
- isPlatform "gles32" && params+=(--enable-opengles3_2)
- fi
- isPlatform "videocore" && params+=(--disable-crtswitchres)
- isPlatform "rpi" && isPlatform "mesa" && params+=(--disable-videocore)
- # Temporarily block dispmanx support for fkms until upstream support is fixed
- isPlatform "dispmanx" && ! isPlatform "kms" && params+=(--enable-dispmanx --disable-opengl1)
- isPlatform "mali" && params+=(--enable-mali_fbdev)
- isPlatform "kms" && params+=(--enable-kms --enable-egl)
- isPlatform "arm" && params+=(--enable-floathard)
- isPlatform "neon" && params+=(--enable-neon)
- isPlatform "vulkan" && params+=(--enable-vulkan)
- ! isPlatform "x11" && params+=(--disable-wayland)
- isPlatform "vero4k" && params+=(--enable-mali_fbdev --with-opengles_libs='-L/opt/vero3/lib')
- ./configure --prefix="$md_inst" "${params[@]}"
- make clean
- make
- md_ret_require="$md_build/retroarch"
- }
- function install_retroarch() {
- make install
- md_ret_files=(
- 'retroarch.cfg'
- )
- }
- function update_shaders_retroarch() {
- local dir="$configdir/all/retroarch/shaders"
- local branch=""
- isPlatform "rpi" && branch="rpi"
- # remove if not git repository for fresh checkout
- [[ ! -d "$dir/.git" ]] && rm -rf "$dir"
- gitPullOrClone "$dir" https://github.com/RetroPie/common-shaders.git "$branch"
- chown -R $user:$user "$dir"
- }
- function update_overlays_retroarch() {
- local dir="$configdir/all/retroarch/overlay"
- # remove if not a git repository for fresh checkout
- [[ ! -d "$dir/.git" ]] && rm -rf "$dir"
- gitPullOrClone "$dir" https://github.com/libretro/common-overlays.git
- chown -R $user:$user "$dir"
- }
- function update_joypad_autoconfigs_retroarch() {
- gitPullOrClone "$md_build/autoconfigs" https://github.com/libretro/retroarch-joypad-autoconfig.git
- cp -a "$md_build/autoconfigs/." "$md_inst/autoconfig-presets/"
- }
- function update_assets_retroarch() {
- local dir="$configdir/all/retroarch/assets"
- # remove if not a git repository for fresh checkout
- [[ ! -d "$dir/.git" ]] && rm -rf "$dir"
- gitPullOrClone "$dir" https://github.com/libretro/retroarch-assets.git
- chown -R $user:$user "$dir"
- }
- function update_core_info_retroarch() {
- local dir="$configdir/all/retroarch/cores"
- # remove if not a git repository and do a fresh checkout
- [[ ! -d "$dir/.git" ]] && rm -fr "$dir"
- # remove our locally generated `.info` files, just in case upstream adds them
- [[ -d "$dir/.git" ]] && git -C "$dir" clean -q -f "*.info"
- gitPullOrClone "$dir" https://github.com/libretro/libretro-core-info.git
- # add our info files for cores not included in the upstream repo
- cp --update "$md_data"/*.info "$dir"
- chown -R $user:$user "$dir"
- }
- function install_minimal_assets_retroarch() {
- local dir="$configdir/all/retroarch/assets"
- [[ -d "$dir/.git" ]] && return
- [[ ! -d "$dir" ]] && mkUserDir "$dir"
- downloadAndExtract "$__binary_base_url/retroarch-minimal-assets.tar.gz" "$dir"
- chown -R $user:$user "$dir"
- }
- function _package_minimal_assets_retroarch() {
- gitPullOrClone "$md_build/assets" https://github.com/libretro/retroarch-assets.git
- mkdir -p "$__tmpdir/archives"
- local archive="$__tmpdir/archives/retroarch-minimal-assets.tar.gz"
- rm -f "$archive"
- tar cvzf "$archive" -C "$md_build/assets" ozone menu_widgets xmb/monochrome
- }
- function configure_retroarch() {
- [[ "$md_mode" == "remove" ]] && return
- addUdevInputRules
- # move / symlink the retroarch configuration
- moveConfigDir "$home/.config/retroarch" "$configdir/all/retroarch"
- # move / symlink our old retroarch-joypads folder
- moveConfigDir "$configdir/all/retroarch-joypads" "$configdir/all/retroarch/autoconfig"
- # move / symlink old assets / overlays and shader folder
- moveConfigDir "$md_inst/assets" "$configdir/all/retroarch/assets"
- moveConfigDir "$md_inst/overlays" "$configdir/all/retroarch/overlay"
- moveConfigDir "$md_inst/shader" "$configdir/all/retroarch/shaders"
- # install shaders by default
- update_shaders_retroarch
- # install minimal assets
- install_minimal_assets_retroarch
- # install core info files
- update_core_info_retroarch
- # install joypad autoconfig presets
- update_joypad_autoconfigs_retroarch
- local config="$(mktemp)"
- cp "$md_inst/retroarch.cfg" "$config"
- # query ES A/B key swap configuration
- local es_swap="false"
- getAutoConf "es_swap_a_b" && es_swap="true"
- # configure default options
- iniConfig " = " '"' "$config"
- iniSet "cache_directory" "/tmp/retroarch"
- iniSet "system_directory" "$biosdir"
- iniSet "config_save_on_exit" "false"
- iniSet "video_aspect_ratio_auto" "true"
- if ! isPlatform "x86"; then
- iniSet "video_threaded" "true"
- fi
- iniSet "video_font_size" "24"
- iniSet "core_options_path" "$configdir/all/retroarch-core-options.cfg"
- iniSet "global_core_options" "true"
- isPlatform "x11" && iniSet "video_fullscreen" "true"
- isPlatform "mesa" && iniSet "video_fullscreen" "true"
- # set default render resolution to 640x480 for rpi1
- if isPlatform "videocore" && isPlatform "rpi1"; then
- iniSet "video_fullscreen_x" "640"
- iniSet "video_fullscreen_y" "480"
- fi
- # enable hotkey ("select" button)
- iniSet "input_enable_hotkey" "nul"
- iniSet "input_exit_emulator" "escape"
- # enable and configure rewind feature
- iniSet "rewind_enable" "false"
- iniSet "rewind_buffer_size" "10"
- iniSet "rewind_granularity" "2"
- iniSet "input_rewind" "r"
- # enable gpu screenshots
- iniSet "video_gpu_screenshot" "true"
- # enable and configure shaders
- iniSet "input_shader_next" "m"
- iniSet "input_shader_prev" "n"
- # configure keyboard mappings
- iniSet "input_player1_a" "x"
- iniSet "input_player1_b" "z"
- iniSet "input_player1_y" "a"
- iniSet "input_player1_x" "s"
- iniSet "input_player1_start" "enter"
- iniSet "input_player1_select" "rshift"
- iniSet "input_player1_l" "q"
- iniSet "input_player1_r" "w"
- iniSet "input_player1_left" "left"
- iniSet "input_player1_right" "right"
- iniSet "input_player1_up" "up"
- iniSet "input_player1_down" "down"
- # input settings
- iniSet "input_autodetect_enable" "true"
- iniSet "auto_remaps_enable" "true"
- iniSet "input_joypad_driver" "udev"
- iniSet "all_users_control_menu" "true"
- iniSet "remap_save_on_exit" "false"
- # rgui by default
- iniSet "menu_driver" "rgui"
- iniSet "rgui_aspect_ratio_lock" "2"
- iniSet "rgui_browser_directory" "$romdir"
- iniSet "rgui_switch_icons" "false"
- iniSet "menu_rgui_shadows" "true"
- iniSet "rgui_menu_color_theme" "29" # Tango Dark theme
- # hide online updater menu options and the restart option
- iniSet "menu_show_core_updater" "false"
- iniSet "menu_show_online_updater" "false"
- iniSet "menu_show_restart_retroarch" "false"
- # disable the search action
- iniSet "menu_disable_search_button" "true"
- # remove some rarely used entries from the quick menu
- iniSet "quick_menu_show_close_content" "false"
- iniSet "quick_menu_show_add_to_favorites" "false"
- iniSet "quick_menu_show_replay" "false"
- iniSet "quick_menu_show_start_recording" "false"
- iniSet "quick_menu_show_start_streaming" "false"
- iniSet "menu_show_overlays" "false"
- # disable the load notification message with core and game info
- iniSet "menu_show_load_content_animation" "false"
- # disable core cache file
- iniSet "core_info_cache_enable" "false"
- # disable game runtime logging
- iniSet "content_runtime_log" "false"
- # disable unnecessary xmb menu tabs
- iniSet "xmb_show_add" "false"
- iniSet "xmb_show_history" "false"
- iniSet "xmb_show_images" "false"
- iniSet "xmb_show_music" "false"
- # disable xmb menu driver icon shadows
- iniSet "xmb_shadows_enable" "false"
- # swap A/B buttons based on ES configuration
- iniSet "menu_swap_ok_cancel_buttons" "$es_swap"
- # enable menu_unified_controls by default (see below for more info)
- iniSet "menu_unified_controls" "true"
- # disable 'press twice to quit'
- iniSet "quit_press_twice" "false"
- # enable video shaders
- iniSet "video_shader_enable" "true"
- # enable overlays by default
- iniSet "input_overlay_enable" "true"
- # disable save paths under sub-folders
- iniSet "sort_savestates_enable" "false"
- iniSet "sort_savefiles_enable" "false"
- copyDefaultConfig "$config" "$configdir/all/retroarch.cfg"
- rm "$config"
- # if no menu_driver is set, force RGUI, as the default has now changed to XMB.
- _set_config_option_retroarch "menu_driver" "rgui"
- # set RGUI aspect ratio to "Integer Scaling" to prevent stretching
- _set_config_option_retroarch "rgui_aspect_ratio_lock" "2"
- # if no menu_unified_controls is set, force it on so that keyboard player 1 can control
- # the RGUI menu which is important for arcade sticks etc that map to keyboard inputs
- _set_config_option_retroarch "menu_unified_controls" "true"
- # disable `quit_press_twice` on existing configs
- _set_config_option_retroarch "quit_press_twice" "false"
- # enable video shaders on existing configs
- _set_config_option_retroarch "video_shader_enable" "true"
- # (compat) keep all core options in a single file
- _set_config_option_retroarch "global_core_options" "true"
- # disable the content load info popup with core and game info
- _set_config_option_retroarch "menu_show_load_content_animation" "false"
- # disable search action
- _set_config_option_retroarch "menu_disable_search_button" "true"
- # don't save input remaps by default
- _set_config_option_retroarch "remap_save_on_exit" "false"
- # enable overlays by default on upgrades
- _set_config_option_retroarch "input_overlay_enable" "true"
- # don't sort save files in sub-folders
- _set_config_option_retroarch "sort_savefiles_enable" "false"
- _set_config_option_retroarch "sort_savestates_enable" "false"
- # remapping hack for old 8bitdo firmware
- addAutoConf "8bitdo_hack" 0
- }
- function keyboard_retroarch() {
- if [[ ! -f "$configdir/all/retroarch.cfg" ]]; then
- printMsgs "dialog" "No RetroArch configuration file found at $configdir/all/retroarch.cfg"
- return
- fi
- local input
- local options
- local i=1
- local key=()
- while read input; do
- local parts=($input)
- key+=("${parts[0]}")
- options+=("${parts[0]}" $i 2 "${parts[*]:2}" $i 26 16 0)
- ((i++))
- done < <(grep "^[[:space:]]*input_player[0-9]_[a-z]*" "$configdir/all/retroarch.cfg")
- local cmd=(dialog --backtitle "$__backtitle" --form "RetroArch keyboard configuration" 22 48 16)
- local choice=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)
- if [[ -n "$choice" ]]; then
- local value
- local values
- readarray -t values <<<"$choice"
- iniConfig " = " '"' "$configdir/all/retroarch.cfg"
- i=0
- for value in "${values[@]}"; do
- iniSet "${key[$i]}" "$value" >/dev/null
- ((i++))
- done
- fi
- }
- function hotkey_retroarch() {
- iniConfig " = " '"' "$configdir/all/retroarch.cfg"
- local cmd=(dialog --backtitle "$__backtitle" --menu "Choose the desired hotkey behaviour." 22 76 16)
- local options=(1 "Hotkeys enabled. (default)"
- 2 "Press ALT to enable hotkeys."
- 3 "Hotkeys disabled. Press ESCAPE to open RGUI.")
- local choice=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)
- if [[ -n "$choice" ]]; then
- case "$choice" in
- 1)
- iniSet "input_enable_hotkey" "nul"
- iniSet "input_exit_emulator" "escape"
- iniSet "input_menu_toggle" "F1"
- ;;
- 2)
- iniSet "input_enable_hotkey" "alt"
- iniSet "input_exit_emulator" "escape"
- iniSet "input_menu_toggle" "F1"
- ;;
- 3)
- iniSet "input_enable_hotkey" "escape"
- iniSet "input_exit_emulator" "nul"
- iniSet "input_menu_toggle" "escape"
- ;;
- esac
- fi
- }
- function gui_retroarch() {
- while true; do
- local names=(shaders overlays assets)
- local dirs=(shaders overlay assets)
- local options=()
- local name
- local dir
- local i=1
- for name in "${names[@]}"; do
- if [[ -d "$configdir/all/retroarch/${dirs[i-1]}/.git" ]]; then
- options+=("$i" "Manage $name (installed)")
- else
- options+=("$i" "Manage $name (not installed)")
- fi
- ((i++))
- done
- options+=(
- 4 "Configure keyboard for use with RetroArch"
- 5 "Configure keyboard hotkey behaviour for RetroArch"
- )
- local cmd=(dialog --backtitle "$__backtitle" --menu "Choose an option" 22 76 16)
- local choice=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)
- case "$choice" in
- 1|2|3)
- name="${names[choice-1]}"
- dir="${dirs[choice-1]}"
- options=(1 "Install/Update $name" 2 "Uninstall $name" )
- cmd=(dialog --backtitle "$__backtitle" --menu "Choose an option for $dir" 12 40 06)
- choice=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)
- case "$choice" in
- 1)
- "update_${name}_retroarch"
- ;;
- 2)
- rm -rf "$configdir/all/retroarch/$dir"
- [[ "$dir" == "assets" ]] && install_xmb_monochrome_assets_retroarch
- ;;
- *)
- continue
- ;;
- esac
- ;;
- 4)
- keyboard_retroarch
- ;;
- 5)
- hotkey_retroarch
- ;;
- *)
- break
- ;;
- esac
- done
- }
- # adds a retroarch global config option in `$configdir/all/retroarch.cfg`, if not already set
- function _set_config_option_retroarch()
- {
- local option="$1"
- local value="$2"
- iniConfig " = " '"' "$configdir/all/retroarch.cfg"
- iniGet "$option"
- if [[ -z "$ini_value" ]]; then
- iniSet "$option" "$value"
- fi
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement