mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-22 04:21:23 +00:00
Merge branch 'master' into lua-minmax-plus-bruh-moments
This commit is contained in:
commit
97e449bd59
967 changed files with 161250 additions and 102611 deletions
|
@ -1,9 +1,9 @@
|
||||||
version: 2
|
version: 2
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
working_directory: /root/SRB2
|
working_directory: /home/circleci/SRB2
|
||||||
docker:
|
docker:
|
||||||
- image: debian:stretch
|
- image: cimg/base:current
|
||||||
environment:
|
environment:
|
||||||
CC: ccache gcc -m32
|
CC: ccache gcc -m32
|
||||||
PKG_CONFIG_LIBDIR: /usr/lib/i386-linux-gnu/pkgconfig
|
PKG_CONFIG_LIBDIR: /usr/lib/i386-linux-gnu/pkgconfig
|
||||||
|
@ -11,7 +11,7 @@ jobs:
|
||||||
LIBGME_LDFLAGS: -lgme
|
LIBGME_LDFLAGS: -lgme
|
||||||
CCACHE_COMPRESS: true
|
CCACHE_COMPRESS: true
|
||||||
WFLAGS: -Wno-unsuffixed-float-constants
|
WFLAGS: -Wno-unsuffixed-float-constants
|
||||||
GCC49: true
|
GCC81: true
|
||||||
#- image: ubuntu:trusty
|
#- image: ubuntu:trusty
|
||||||
# environment:
|
# environment:
|
||||||
# CC: ccache gcc -m32
|
# CC: ccache gcc -m32
|
||||||
|
@ -21,54 +21,69 @@ jobs:
|
||||||
# CCACHE_COMPRESS: true
|
# CCACHE_COMPRESS: true
|
||||||
# WFLAGS: -Wno-unsuffixed-float-constants
|
# WFLAGS: -Wno-unsuffixed-float-constants
|
||||||
# GCC48: true
|
# GCC48: true
|
||||||
|
resource_class: large
|
||||||
steps:
|
steps:
|
||||||
- run:
|
- run:
|
||||||
name: Add i386 arch
|
name: Add i386 arch
|
||||||
command: dpkg --add-architecture i386
|
command: sudo dpkg --add-architecture i386
|
||||||
- run:
|
- run:
|
||||||
name: Add STJr PPA
|
name: Add STJr PPA
|
||||||
command: |
|
command: |
|
||||||
apt-get -qq update
|
sudo apt-get -qq update
|
||||||
apt-get -qq -y install dirmngr
|
sudo apt-get -qq -y install dirmngr
|
||||||
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0B1702D71499D9C25F986507F240F4449D3B0EC6
|
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0B1702D71499D9C25F986507F240F4449D3B0EC6
|
||||||
echo "deb http://ppa.launchpad.net/stjr/srb2/ubuntu trusty main" >> /etc/apt/sources.list
|
echo "deb http://ppa.launchpad.net/stjr/srb2/ubuntu trusty main" | sudo tee -a /etc/apt/sources.list
|
||||||
|
- run:
|
||||||
|
name: Make APT cache folder
|
||||||
|
command: mkdir -p /home/circleci/.cache/apt/archives/partial
|
||||||
|
- run:
|
||||||
|
name: Make APT cache usage by _apt
|
||||||
|
command: sudo chown -Rv _apt:root /home/circleci/.cache/apt/archives/partial
|
||||||
- run:
|
- run:
|
||||||
name: Update APT listing
|
name: Update APT listing
|
||||||
command: apt-get -qq update
|
command: sudo apt-get -qq update
|
||||||
- run:
|
- run:
|
||||||
name: Support S3 upload
|
name: Support S3 upload
|
||||||
command: apt-get -qq -y install ca-certificates
|
command: sudo apt-get -qq -y install ca-certificates
|
||||||
- restore_cache:
|
- restore_cache:
|
||||||
keys:
|
keys:
|
||||||
- v1-SRB2-APT
|
- v1-SRB2-APT
|
||||||
- run:
|
- run:
|
||||||
name: Install SDK
|
name: Uninstall amd64 SDK
|
||||||
command: apt-get -qq -y --no-install-recommends install git build-essential nasm libpng-dev:i386 libsdl2-mixer-dev:i386 libgme-dev:i386 libcurl4-openssl-dev:i386 libopenmpt-dev:i386 gettext ccache wget gcc-multilib upx openssh-client
|
command: sudo apt-get -o Dir::Cache="/home/circleci/.cache/apt" -qq -y --no-install-recommends remove libcurl4-openssl-dev:amd64
|
||||||
|
- run:
|
||||||
|
name: Install i386 SDK
|
||||||
|
command: sudo apt-get -o Dir::Cache="/home/circleci/.cache/apt" -qq -y --no-install-recommends install git build-essential libpng-dev:i386 libsdl2-mixer-dev:i386 libgme-dev:i386 libcurl4-openssl-dev:i386 libopenmpt-dev:i386 gettext ccache wget gcc-multilib upx openssh-client
|
||||||
|
- run:
|
||||||
|
name: make md5sum
|
||||||
|
command: sudo find /home/circleci/.cache/apt/archives -type f -print0 | sort -z | sudo xargs -r0 md5sum > /home/circleci/.cache/apt_archives.md5
|
||||||
- save_cache:
|
- save_cache:
|
||||||
key: v1-SRB2-APT
|
key: v1-SRB2-APT-{{ checksum "/home/circleci/.cache/apt_archives.md5" }}
|
||||||
paths:
|
paths:
|
||||||
- /var/cache/apt/archives
|
- /home/circleci/.cache/apt
|
||||||
- checkout
|
- checkout
|
||||||
- run:
|
- run:
|
||||||
name: Compile without network support
|
name: Compile without network support
|
||||||
command: make -C src LINUX=1 ERRORMODE=1 -k NONET=1
|
command: make -C src LINUX=1 ERRORMODE=1 -k NONET=1 -j4
|
||||||
- run:
|
- run:
|
||||||
name: wipe build
|
name: wipe build
|
||||||
command: make -C src LINUX=1 cleandep
|
command: make -C src LINUX=1 cleandep
|
||||||
- run:
|
- run:
|
||||||
name: rebuild depend
|
name: rebuild depend
|
||||||
command: make -C src LINUX=1 clean
|
command: make -C src LINUX=1 clean
|
||||||
|
- run:
|
||||||
|
name: make master depend file
|
||||||
|
command: find make/linux/SDL/deps/ -type f -print0 | sort -z | xargs -r0 cat > make/linux/SDL.deps
|
||||||
- restore_cache:
|
- restore_cache:
|
||||||
keys:
|
keys:
|
||||||
- v1-SRB2-{{ .Branch }}-{{ checksum "objs/Linux/SDL/Release/depend.dep" }}
|
- v1-SRB2-{{ .Branch }}-{{ checksum "make/linux/SDL.deps" }}
|
||||||
- run:
|
- run:
|
||||||
name: Compile
|
name: Compile
|
||||||
command: make -C src LINUX=1 ERRORMODE=1 -k
|
command: make -C src LINUX=1 ERRORMODE=1 -k -j4
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
path: /root/SRB2/bin/Linux/Release/
|
path: /home/circleci/SRB2/bin/
|
||||||
destination: bin
|
destination: bin
|
||||||
- save_cache:
|
- save_cache:
|
||||||
key: v1-SRB2-{{ .Branch }}-{{ checksum "objs/Linux/SDL/Release/depend.dep" }}
|
key: v1-SRB2-{{ .Branch }}-{{ checksum "make/linux/SDL.deps" }}
|
||||||
paths:
|
paths:
|
||||||
- /root/.ccache
|
- /home/circleci/.ccache
|
||||||
|
|
4
.gitattributes
vendored
4
.gitattributes
vendored
|
@ -1,15 +1,17 @@
|
||||||
#Source code
|
#Source code
|
||||||
|
/Makefile text=auto
|
||||||
/src/*.c text=auto
|
/src/*.c text=auto
|
||||||
/src/*.h text=auto
|
/src/*.h text=auto
|
||||||
/src/*.s text=auto
|
/src/*.s text=auto
|
||||||
/src/*.m text=auto
|
/src/*.m text=auto
|
||||||
/src/*.xpm text=auto
|
/src/*.xpm text=auto
|
||||||
/src/Makefile text=auto
|
/src/Makefile text=auto
|
||||||
|
/tools/Makefile text=auto
|
||||||
/src/Make*.cfg text=auto
|
/src/Make*.cfg text=auto
|
||||||
/src/CMakeLists.txt text=auto
|
/src/CMakeLists.txt text=auto
|
||||||
|
*.mk -whitespace text=auto
|
||||||
# Windows EOL
|
# Windows EOL
|
||||||
*.cs -crlf -whitespace
|
*.cs -crlf -whitespace
|
||||||
*.mk -crlf -whitespace
|
|
||||||
*.bat -crlf -whitespace
|
*.bat -crlf -whitespace
|
||||||
*.dev -crlf -whitespace
|
*.dev -crlf -whitespace
|
||||||
*.dsp -crlf -whitespace
|
*.dsp -crlf -whitespace
|
||||||
|
|
7
.gitignore
vendored
7
.gitignore
vendored
|
@ -13,11 +13,14 @@ Win32_LIB_ASM_Release
|
||||||
*.dgb
|
*.dgb
|
||||||
*.debug
|
*.debug
|
||||||
*.debug.txt
|
*.debug.txt
|
||||||
/bin/VC10/
|
|
||||||
/objs/VC10/
|
|
||||||
*.user
|
*.user
|
||||||
*.db
|
*.db
|
||||||
*.opendb
|
*.opendb
|
||||||
/.vs
|
/.vs
|
||||||
/debian
|
/debian
|
||||||
/assets/debian
|
/assets/debian
|
||||||
|
/make
|
||||||
|
/bin
|
||||||
|
/build
|
||||||
|
/build/*
|
||||||
|
/CMakeUserPresets.json
|
434
.gitlab-ci.yml
Normal file
434
.gitlab-ci.yml
Normal file
|
@ -0,0 +1,434 @@
|
||||||
|
variables:
|
||||||
|
GIT_STRATEGY: clone
|
||||||
|
GIT_CLONE_PATH: $CI_BUILDS_DIR/$CI_CONCURRENT_ID/$CI_PROJECT_PATH
|
||||||
|
|
||||||
|
default:
|
||||||
|
image: debian:stable-slim
|
||||||
|
|
||||||
|
cache:
|
||||||
|
- key: ccache-$CI_PROJECT_PATH_SLUG-$CI_JOB_NAME_SLUG
|
||||||
|
fallback_keys:
|
||||||
|
- cache-$CI_PROJECT_PATH_SLUG-$CI_DEFAULT_BRANCH
|
||||||
|
- cache-$CI_PROJECT_PATH_SLUG-default
|
||||||
|
paths:
|
||||||
|
- ccache
|
||||||
|
- ccache_statslog
|
||||||
|
|
||||||
|
- key: apt-$CI_JOB_IMAGE
|
||||||
|
paths:
|
||||||
|
- apt-cache
|
||||||
|
unprotect: true
|
||||||
|
|
||||||
|
before_script:
|
||||||
|
- - |
|
||||||
|
# debconf
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:debconf[collapsed=true]\r\e[0KSetup debconf's environment"
|
||||||
|
- export DEBIAN_FRONTEND="noninteractive"
|
||||||
|
- export DEBIAN_PRIORITY="low"
|
||||||
|
- export DEBCONF_NONINTERACTIVE_SEEN="true"
|
||||||
|
- |
|
||||||
|
# debconf
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:debconf\r\e[0K"
|
||||||
|
- - |
|
||||||
|
# dpkg_aa
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:dpkg_aa[collapsed=true]\r\e[0KAdding architectures to dpkg"
|
||||||
|
- dpkg --add-architecture i386
|
||||||
|
- dpkg --add-architecture amd64
|
||||||
|
- dpkg --add-architecture arm64
|
||||||
|
- |
|
||||||
|
# dpkg_aa
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:dpkg_aa\r\e[0K"
|
||||||
|
- - |
|
||||||
|
# apt_conf
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_conf[collapsed=true]\r\e[0KSetting up APT conf"
|
||||||
|
- export APT_CACHE_DIR=`pwd`/apt-cache
|
||||||
|
- mkdir --parents --verbose $APT_CACHE_DIR/partial/
|
||||||
|
- touch /etc/apt/apt.conf.d/99build
|
||||||
|
- |
|
||||||
|
# apt.conf
|
||||||
|
echo Adding options to apt.conf':'
|
||||||
|
- |
|
||||||
|
# APT::Install-Recommends
|
||||||
|
echo APT::Install-Recommends "false"\; | tee --append /etc/apt/apt.conf.d/99build
|
||||||
|
- |
|
||||||
|
# quit
|
||||||
|
echo quiet "1"\; | tee --append /etc/apt/apt.conf.d/99build
|
||||||
|
- |
|
||||||
|
# APT::Get::Assume-Yes
|
||||||
|
echo APT::Get::Assume-Yes "true"\; | tee --append /etc/apt/apt.conf.d/99build
|
||||||
|
- |
|
||||||
|
# Dir::Cache::Archives
|
||||||
|
echo Dir::Cache::Archives "$APT_CACHE_DIR"\; | tee --append /etc/apt/apt.conf.d/99build
|
||||||
|
- |
|
||||||
|
# apt_conf
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_conf\r\e[0K"
|
||||||
|
- - |
|
||||||
|
# apt_update
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_update[collapsed=true]\r\e[0KUpdating APT listing"
|
||||||
|
- apt-get update
|
||||||
|
- |
|
||||||
|
# apt_update
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_update\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# apt_pre
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_pre[collapsed=true]\r\e[0KInstalling pre packages"
|
||||||
|
- apt-get install apt-utils
|
||||||
|
- |
|
||||||
|
# apt_pre
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_pre\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# apt_upgrade
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_upgrade[collapsed=true]\r\e[0KUpdating existing packages"
|
||||||
|
- apt-get upgrade
|
||||||
|
- |
|
||||||
|
# apt_update
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_upgrade\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# apt_common
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_common[collapsed=true]\r\e[0KInstalling common packages"
|
||||||
|
- apt-get install make git ccache nasm
|
||||||
|
- |
|
||||||
|
# apt_common
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_common\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# ccache_config
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:ccache_config[collapsed=true]\r\e[0KSetting up ccache config"
|
||||||
|
- mkdir --parents --verbose ~/.ccache/
|
||||||
|
- touch ~/.ccache/ccache.conf
|
||||||
|
- |
|
||||||
|
# cache.conf
|
||||||
|
echo Adding ccache configution option
|
||||||
|
- |
|
||||||
|
# base_dir
|
||||||
|
echo base_dir = $PWD | tee --append ~/.ccache/ccache.conf
|
||||||
|
- |
|
||||||
|
# cache_dir
|
||||||
|
echo cache_dir = $PWD/ccache | tee --append ~/.ccache/ccache.conf
|
||||||
|
- |
|
||||||
|
# compiler_check
|
||||||
|
echo compiler_check = content | tee --append ~/.ccache/ccache.conf
|
||||||
|
- |
|
||||||
|
# stats_log
|
||||||
|
echo stats_log = $PWD/ccache_statslog | tee --append ~/.ccache/ccache.conf
|
||||||
|
- |
|
||||||
|
# max_size
|
||||||
|
echo max_size = 50M | tee --append ~/.ccache/ccache.conf
|
||||||
|
- |
|
||||||
|
# ccache_config
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:ccache_config\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# cache_reset
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:ccache_reset[collapsed=true]\r\e[0KResetting ccache statistics"
|
||||||
|
- ccache --zero-stats
|
||||||
|
- ccache --show-stats
|
||||||
|
- |
|
||||||
|
# ccache_reset
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:ccache_reset\r\e[0K"
|
||||||
|
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- "bin/"
|
||||||
|
- "src/comptime.h"
|
||||||
|
name: "$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA-$CI_JOB_NAME_SLUG"
|
||||||
|
|
||||||
|
after_script:
|
||||||
|
- - |
|
||||||
|
# apt_clean
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_clean[collapsed=true]\r\e[0KCleaning of unneeded APT packages"
|
||||||
|
- apt-get autoclean
|
||||||
|
- |
|
||||||
|
# apt_clean
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_clean\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# ccache_stats
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:ccache_stats[collapsed=true]\r\e[0Kccache statistics:"
|
||||||
|
- ccache --show-stats --verbose
|
||||||
|
- ccache --show-log-stats --verbose
|
||||||
|
- |
|
||||||
|
# ccahe_stats
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:ccache_stats\r\e[0K"
|
||||||
|
|
||||||
|
stages:
|
||||||
|
- build
|
||||||
|
|
||||||
|
Debian testing GCC:
|
||||||
|
stage: build
|
||||||
|
image: debian:testing-slim
|
||||||
|
|
||||||
|
allow_failure: true
|
||||||
|
|
||||||
|
artifacts:
|
||||||
|
name: "$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA-testing-gcc"
|
||||||
|
|
||||||
|
variables:
|
||||||
|
CC: gcc
|
||||||
|
LDFLAGS: -Wl,-fuse-ld=gold
|
||||||
|
|
||||||
|
script:
|
||||||
|
- - |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_toolchain[collapsed=true]\r\e[0KInstalling toolchain packages"
|
||||||
|
- apt-get install gcc
|
||||||
|
- |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_toolchain\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# apt_development
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_development[collapsed=true]\r\e[0KInstalling development packages"
|
||||||
|
- apt-get install libsdl2-mixer-dev libpng-dev libcurl4-openssl-dev libgme-dev libopenmpt-dev
|
||||||
|
- |
|
||||||
|
# apt_development
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_development\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
|
||||||
|
- make --directory=src --keep-going CCACHE=1 ERRORMODE=1 NONX86=1 || make --directory=src --keep-going CCACHE=1 ERRORMODE=1 NONX86=1
|
||||||
|
- |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
|
||||||
|
|
||||||
|
Windows x86:
|
||||||
|
stage: build
|
||||||
|
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- "bin/"
|
||||||
|
- "src/comptime.h"
|
||||||
|
expose_as: "Win32"
|
||||||
|
name: "$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA-Win32"
|
||||||
|
|
||||||
|
variables:
|
||||||
|
PREFIX: i686-w64-mingw32
|
||||||
|
|
||||||
|
script:
|
||||||
|
- - |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_toolchain[collapsed=true]\r\e[0KInstalling toolchain packages"
|
||||||
|
- apt-get install gcc-mingw-w64-i686-win32
|
||||||
|
- |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_toolchain\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
|
||||||
|
- make --directory=src --keep-going CCACHE=1 ERRORMODE=1 MINGW=1 SDL=1 || make --directory=src --keep-going CCACHE=1 ERRORMODE=1 MINGW=1 SDL=1
|
||||||
|
- |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
|
||||||
|
|
||||||
|
Debian stable:amd64:
|
||||||
|
stage: build
|
||||||
|
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- "bin/"
|
||||||
|
- "src/comptime.h"
|
||||||
|
expose_as: "Debian amd64"
|
||||||
|
name: "$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA-x86-64"
|
||||||
|
|
||||||
|
variables:
|
||||||
|
CC: x86_64-linux-gnu-gcc
|
||||||
|
LDFLAGS: -Wl,-fuse-ld=gold
|
||||||
|
OBJCOPY: x86_64-linux-gnu-objcopy
|
||||||
|
OBJDUMP: x86_64-linux-gnu-objdump
|
||||||
|
PKG_CONFIG_PATH: /usr/lib/x86_64-linux-gnu/pkgconfig
|
||||||
|
|
||||||
|
script:
|
||||||
|
- - |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_toolchain[collapsed=true]\r\e[0KInstalling toolchain packages"
|
||||||
|
- apt-get install gcc-x86-64-linux-gnu || apt-get install gcc
|
||||||
|
- |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_toolchain\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# apt_development
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_development[collapsed=true]\r\e[0KInstalling development packages"
|
||||||
|
- apt-get install libsdl2-mixer-dev:amd64 libpng-dev:amd64 libcurl4-openssl-dev:amd64 libgme-dev:amd64 libopenmpt-dev:amd64
|
||||||
|
- |
|
||||||
|
# apt_development
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_development\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
|
||||||
|
- make --directory=src --keep-going CCACHE=1 ERRORMODE=1 LINUX64=1 || make --directory=src --keep-going CCACHE=1 ERRORMODE=1 LINUX64=1
|
||||||
|
- |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
|
||||||
|
|
||||||
|
Debian stable:i386:
|
||||||
|
stage: build
|
||||||
|
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- "bin/"
|
||||||
|
- "src/comptime.h"
|
||||||
|
expose_as: "Debian i386"
|
||||||
|
name: "$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA-i686"
|
||||||
|
|
||||||
|
variables:
|
||||||
|
CC: i686-linux-gnu-gcc
|
||||||
|
OBJCOPY: i686-linux-gnu-objcopy
|
||||||
|
OBJDUMP: i686-linux-gnu-objdump
|
||||||
|
PKG_CONFIG_PATH: /usr/lib/i386-linux-gnu/pkgconfig
|
||||||
|
|
||||||
|
script:
|
||||||
|
- - |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_toolchain[collapsed=true]\r\e[0KInstalling toolchain packages"
|
||||||
|
- apt-get install gcc-i686-linux-gnu || apt-get install gcc
|
||||||
|
- |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_toolchain\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# apt_development
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_development[collapsed=true]\r\e[0KInstalling development packages"
|
||||||
|
- apt-get install libsdl2-mixer-dev:i386 libpng-dev:i386 libcurl4-openssl-dev:i386 libgme-dev:i386 libopenmpt-dev:i386
|
||||||
|
- |
|
||||||
|
# apt_development
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_development\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
|
||||||
|
- make --directory=src --keep-going CCACHE=1 ERRORMODE=1 LINUX=1 || make --directory=src --keep-going CCACHE=1 ERRORMODE=1 LINUX=1
|
||||||
|
- |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
|
||||||
|
|
||||||
|
Debian stable:arm64:
|
||||||
|
stage: build
|
||||||
|
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- "bin/"
|
||||||
|
- "src/comptime.h"
|
||||||
|
expose_as: "Debian arm64"
|
||||||
|
name: "$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA-aarch64"
|
||||||
|
|
||||||
|
variables:
|
||||||
|
CC: aarch64-linux-gnu-gcc
|
||||||
|
LDFLAGS: -Wl,-fuse-ld=gold
|
||||||
|
OBJCOPY: aarch64-linux-gnu-objcopy
|
||||||
|
OBJDUMP: aarch64-linux-gnu-objdump
|
||||||
|
PKG_CONFIG_PATH: /usr/lib/aarch64-linux-gnu/pkgconfig
|
||||||
|
|
||||||
|
script:
|
||||||
|
- - |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_toolchain[collapsed=true]\r\e[0KInstalling toolchain packages"
|
||||||
|
- apt-get install gcc-aarch64-linux-gnu || apt-get install gcc
|
||||||
|
- |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_toolchain\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# apt_development
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_development[collapsed=true]\r\e[0KInstalling development packages"
|
||||||
|
- apt-get install libsdl2-mixer-dev:arm64 libpng-dev:arm64 libcurl4-openssl-dev:arm64 libgme-dev:arm64 libopenmpt-dev:arm64
|
||||||
|
- |
|
||||||
|
# apt_development
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_development\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
|
||||||
|
- make --directory=src --keep-going CCACHE=1 ERRORMODE=1 LINUX64=1 ERRORMODE=1 NONX86=1 || make --directory=src --keep-going CCACHE=1 ERRORMODE=1 LINUX64=1 NONX86=1
|
||||||
|
- |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
|
||||||
|
|
||||||
|
Windows x64:
|
||||||
|
stage: build
|
||||||
|
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- "bin/"
|
||||||
|
- "src/comptime.h"
|
||||||
|
expose_as: "Win64"
|
||||||
|
name: "$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA-Win64"
|
||||||
|
|
||||||
|
variables:
|
||||||
|
PREFIX: x86_64-w64-mingw32
|
||||||
|
|
||||||
|
script:
|
||||||
|
- - |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_toolchain[collapsed=true]\r\e[0KInstalling toolchain packages"
|
||||||
|
- apt-get install gcc-mingw-w64-x86-64-win32
|
||||||
|
- |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_toolchain\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
|
||||||
|
- make --directory=src --keep-going CCACHE=1 ERRORMODE=1 MINGW64=1 SDL=1 || make --directory=src --keep-going CCACHE=1 ERRORMODE=1 MINGW64=1 SDL=1
|
||||||
|
- |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
|
||||||
|
|
||||||
|
Debian stable Clang:
|
||||||
|
stage: build
|
||||||
|
|
||||||
|
allow_failure: true
|
||||||
|
|
||||||
|
artifacts:
|
||||||
|
name: "$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA-clang"
|
||||||
|
|
||||||
|
variables:
|
||||||
|
CC: clang
|
||||||
|
WFLAGS: -Wno-cast-align
|
||||||
|
CFLAGS: -Wno-cast-align
|
||||||
|
LDFLAGS: -Wl,-fuse-ld=gold
|
||||||
|
|
||||||
|
script:
|
||||||
|
- - |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_toolchain[collapsed=true]\r\e[0KInstalling toolchain packages"
|
||||||
|
- apt-get install clang
|
||||||
|
- |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_toolchain\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# apt_development
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_development[collapsed=true]\r\e[0KInstalling development packages"
|
||||||
|
- apt-get install libsdl2-mixer-dev libpng-dev libcurl4-openssl-dev libgme-dev libopenmpt-dev
|
||||||
|
- |
|
||||||
|
# apt_development
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_development\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
|
||||||
|
- make --directory=src --keep-going CCACHE=1 ERRORMODE=1 NONX86=1 || make --directory=src --keep-going CCACHE=1 ERRORMODE=1 NONX86=1
|
||||||
|
- |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
|
||||||
|
|
||||||
|
Debian testing Clang:
|
||||||
|
extends: Debian stable Clang
|
||||||
|
|
||||||
|
image: debian:testing-slim
|
||||||
|
|
||||||
|
artifacts:
|
||||||
|
name: "$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA-testing-clang"
|
||||||
|
|
||||||
|
variables:
|
||||||
|
CC: clang
|
||||||
|
WFLAGS: -Wno-cast-align -Wno-deprecated-non-prototype
|
||||||
|
CFLAGS: -Wno-cast-align -Wno-deprecated-non-prototype
|
||||||
|
LDFLAGS: -Wl,-fuse-ld=gold
|
301
CMakeLists.txt
301
CMakeLists.txt
|
@ -1,17 +1,15 @@
|
||||||
cmake_minimum_required(VERSION 3.0)
|
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
|
||||||
|
|
||||||
# Enable CCache early
|
if("${CMAKE_CURRENT_BINARY_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||||
set(SRB2_USE_CCACHE OFF CACHE BOOL "Use CCache")
|
message(FATAL_ERROR "In-source builds are blocked. Please build from a separate directory.")
|
||||||
if (${SRB2_USE_CCACHE})
|
|
||||||
find_program(CCACHE_PROGRAM ccache)
|
|
||||||
if(CCACHE_PROGRAM)
|
|
||||||
message(STATUS "Found CCache: ${CCACHE_PROGRAM}")
|
|
||||||
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")
|
|
||||||
else()
|
|
||||||
message(WARNING "You have specified to use CCACHE but it was not found. Object files will not be cached.")
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Set up CMAKE path
|
||||||
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
|
||||||
|
|
||||||
|
include(CMakeDependentOption)
|
||||||
|
include(cmake/CPM.cmake)
|
||||||
|
|
||||||
file(STRINGS src/version.h SRB2_VERSION)
|
file(STRINGS src/version.h SRB2_VERSION)
|
||||||
string(REGEX MATCH "[0-9]+\\.[0-9.]+" SRB2_VERSION ${SRB2_VERSION})
|
string(REGEX MATCH "[0-9]+\\.[0-9.]+" SRB2_VERSION ${SRB2_VERSION})
|
||||||
|
|
||||||
|
@ -19,128 +17,18 @@ string(REGEX MATCH "[0-9]+\\.[0-9.]+" SRB2_VERSION ${SRB2_VERSION})
|
||||||
# Version change is fine.
|
# Version change is fine.
|
||||||
project(SRB2
|
project(SRB2
|
||||||
VERSION ${SRB2_VERSION}
|
VERSION ${SRB2_VERSION}
|
||||||
LANGUAGES C)
|
LANGUAGES C CXX)
|
||||||
|
|
||||||
if(${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR})
|
|
||||||
message(FATAL_ERROR "In-source builds will bring you a world of pain. Please make a separate directory to invoke CMake from.")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if ((${SRB2_USE_CCACHE}) AND (${CMAKE_C_COMPILER} MATCHES "clang"))
|
|
||||||
message(WARNING "Using clang and CCache: You may want to set environment variable CCACHE_CPP2=yes to prevent include errors during compile.")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Set up CMAKE path
|
|
||||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
|
|
||||||
|
|
||||||
### Useful functions
|
|
||||||
|
|
||||||
# Prepend sources with current source directory
|
|
||||||
function(prepend_sources SOURCE_FILES)
|
|
||||||
foreach(SOURCE_FILE ${${SOURCE_FILES}})
|
|
||||||
set(MODIFIED ${MODIFIED} ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE_FILE})
|
|
||||||
endforeach()
|
|
||||||
set(${SOURCE_FILES} ${MODIFIED} PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
# Macro to add OSX framework
|
|
||||||
macro(add_framework fwname appname)
|
|
||||||
find_library(FRAMEWORK_${fwname}
|
|
||||||
NAMES ${fwname}
|
|
||||||
PATHS ${CMAKE_OSX_SYSROOT}/System/Library
|
|
||||||
${CMAKE_OSX_SYSROOT}/Library
|
|
||||||
/System/Library
|
|
||||||
/Library
|
|
||||||
ATH_SUFFIXES Frameworks
|
|
||||||
NO_DEFAULT_PATH)
|
|
||||||
if( ${FRAMEWORK_${fwname}} STREQUAL FRAMEWORK_${fwname}-NOTFOUND)
|
|
||||||
MESSAGE(ERROR ": Framework ${fwname} not found")
|
|
||||||
else()
|
|
||||||
TARGET_LINK_LIBRARIES(${appname} PRIVATE "${FRAMEWORK_${fwname}}/${fwname}")
|
|
||||||
MESSAGE(STATUS "Framework ${fwname} found at ${FRAMEWORK_${fwname}}")
|
|
||||||
endif()
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
# Macro to copy Windows DLLs to Debug/Release folder for easy debugging
|
|
||||||
# Note: this is general purpose, we could copy anything. Just using for DLLs on MSVC though
|
|
||||||
macro(copy_files_to_build_dir target dlllist_var)
|
|
||||||
if(MSVC)
|
|
||||||
# http://stackoverflow.com/a/26983405/3064195
|
|
||||||
foreach(dlllist_item ${${dlllist_var}})
|
|
||||||
get_filename_component(dllname ${dlllist_item} NAME)
|
|
||||||
add_custom_command(TARGET ${target} POST_BUILD
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
||||||
${dlllist_item}
|
|
||||||
$<TARGET_FILE_DIR:${target}>/${dllname}
|
|
||||||
)
|
|
||||||
endforeach()
|
|
||||||
endif()
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
# bitness check
|
|
||||||
set(SRB2_SYSTEM_BITS 0)
|
|
||||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
||||||
message(STATUS "Target is 64-bit")
|
|
||||||
set(SRB2_SYSTEM_BITS 64)
|
|
||||||
endif()
|
|
||||||
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
||||||
message(STATUS "Target is 32-bit")
|
|
||||||
set(SRB2_SYSTEM_BITS 32)
|
|
||||||
endif()
|
|
||||||
if(${SRB2_SYSTEM_BITS} EQUAL 0)
|
|
||||||
message(STATUS "Target bitness is unknown")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# OS macros
|
|
||||||
if (UNIX)
|
|
||||||
add_definitions(-DUNIXCOMMON)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(CMAKE_COMPILER_IS_GNUCC)
|
|
||||||
find_program(OBJCOPY objcopy)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(${CMAKE_SYSTEM} MATCHES "Linux")
|
|
||||||
add_definitions(-DLINUX)
|
|
||||||
if(${SRB2_SYSTEM_BITS} EQUAL 64)
|
|
||||||
add_definitions(-DLINUX64)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(${CMAKE_SYSTEM} MATCHES "Darwin")
|
|
||||||
add_definitions(-DMACOSX)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
|
||||||
set(CMAKE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
|
||||||
|
|
||||||
# Set EXE names so the assets CMakeLists can refer to its target
|
|
||||||
set(SRB2_SDL2_EXE_NAME srb2 CACHE STRING "Executable binary output name")
|
|
||||||
|
|
||||||
include_directories(${CMAKE_CURRENT_BINARY_DIR}/src)
|
|
||||||
|
|
||||||
add_subdirectory(src)
|
|
||||||
add_subdirectory(assets)
|
|
||||||
|
|
||||||
|
|
||||||
## config.h generation
|
|
||||||
set(GIT_EXECUTABLE "git" CACHE FILEPATH "Path to git binary")
|
|
||||||
include(GitUtilities)
|
|
||||||
git_latest_commit(SRB2_COMP_COMMIT "${CMAKE_SOURCE_DIR}")
|
|
||||||
git_current_branch(SRB2_GIT_BRANCH "${CMAKE_SOURCE_DIR}")
|
|
||||||
set(SRB2_COMP_BRANCH "${SRB2_GIT_BRANCH}")
|
|
||||||
set(SRB2_COMP_REVISION "${SRB2_COMP_COMMIT}")
|
|
||||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/src/config.h)
|
|
||||||
|
|
||||||
##### PACKAGE CONFIGURATION #####
|
##### PACKAGE CONFIGURATION #####
|
||||||
|
|
||||||
set(SRB2_CPACK_GENERATOR "" CACHE STRING "Generator to use for making a package. E.g., ZIP, TGZ, DragNDrop (OSX only). Leave blank for default generator.")
|
set(SRB2_CPACK_GENERATOR "" CACHE STRING "Generator to use for making a package. E.g., ZIP, TGZ, DragNDrop (OSX only). Leave blank for default generator.")
|
||||||
|
|
||||||
if("${SRB2_CPACK_GENERATOR}" STREQUAL "")
|
if("${SRB2_CPACK_GENERATOR}" STREQUAL "")
|
||||||
if(${CMAKE_SYSTEM} MATCHES "Windows")
|
if("${CMAKE_SYSTEM_NAME}" MATCHES "Windows")
|
||||||
set(SRB2_CPACK_GENERATOR "ZIP")
|
set(SRB2_CPACK_GENERATOR "ZIP")
|
||||||
elseif(${CMAKE_SYSTEM} MATCHES "Linux")
|
elseif("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
|
||||||
set(SRB2_CPACK_GENERATOR "TGZ")
|
set(SRB2_CPACK_GENERATOR "TGZ")
|
||||||
elseif(${CMAKE_SYSTEM} MATCHES "Darwin")
|
elseif("${CMAKE_SYSTEM_NAME}" MATCHES "Darwin")
|
||||||
set(SRB2_CPACK_GENERATOR "TGZ")
|
set(SRB2_CPACK_GENERATOR "TGZ")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
@ -156,3 +44,166 @@ set(CPACK_PACKAGE_VERSION_PATCH ${SRB2_VERSION_PATCH})
|
||||||
set(CPACK_PACKAGE_INSTALL_DIRECTORY "CMake ${CMAKE_VERSION_MAJOR}.${CMAKE_VERSION_MINOR}")
|
set(CPACK_PACKAGE_INSTALL_DIRECTORY "CMake ${CMAKE_VERSION_MAJOR}.${CMAKE_VERSION_MINOR}")
|
||||||
SET(CPACK_OUTPUT_FILE_PREFIX package)
|
SET(CPACK_OUTPUT_FILE_PREFIX package)
|
||||||
include(CPack)
|
include(CPack)
|
||||||
|
|
||||||
|
# Options
|
||||||
|
|
||||||
|
if("${CMAKE_SYSTEM_NAME}" MATCHES Linux)
|
||||||
|
set(SRB2_CONFIG_SYSTEM_LIBRARIES_DEFAULT ON)
|
||||||
|
else()
|
||||||
|
set(SRB2_CONFIG_SYSTEM_LIBRARIES_DEFAULT OFF)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Clang tidy options will be ignored if CMAKE_<LANG>_CLANG_TIDY are set.
|
||||||
|
option(SRB2_CONFIG_ENABLE_CLANG_TIDY_C "Enable default clang-tidy check configuration for C" OFF)
|
||||||
|
option(SRB2_CONFIG_ENABLE_CLANG_TIDY_CXX "Enable default clang-tidy check configuration for C++" OFF)
|
||||||
|
option(
|
||||||
|
SRB2_CONFIG_SYSTEM_LIBRARIES
|
||||||
|
"Link dependencies using CMake's find_package and do not use internal builds"
|
||||||
|
${SRB2_CONFIG_SYSTEM_LIBRARIES_DEFAULT}
|
||||||
|
)
|
||||||
|
option(SRB2_CONFIG_ENABLE_TESTS "Build the test suite" ON)
|
||||||
|
# This option isn't recommended for distribution builds and probably won't work (yet).
|
||||||
|
cmake_dependent_option(
|
||||||
|
SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES
|
||||||
|
"Use dynamic libraries when compiling internal dependencies"
|
||||||
|
OFF "NOT SRB2_CONFIG_SYSTEM_LIBRARIES"
|
||||||
|
OFF
|
||||||
|
)
|
||||||
|
option(SRB2_CONFIG_HWRENDER "Enable hardware render (OpenGL) support" ON)
|
||||||
|
option(SRB2_CONFIG_STATIC_OPENGL "Enable static linking GL (do not do this)" OFF)
|
||||||
|
option(SRB2_CONFIG_ERRORMODE "Compile C code with warnings treated as errors." OFF)
|
||||||
|
option(SRB2_CONFIG_DEBUGMODE "Compile with PARANOIA, ZDEBUG, RANGECHECK and PACKETDROP defined." OFF)
|
||||||
|
option(SRB2_CONFIG_MOBJCONSISTANCY "Compile with MOBJCONSISTANCY defined." OFF)
|
||||||
|
option(SRB2_CONFIG_PACKETDROP "Compile with PACKETDROP defined." OFF)
|
||||||
|
option(SRB2_CONFIG_ZDEBUG "Compile with ZDEBUG defined." OFF)
|
||||||
|
# SRB2_CONFIG_PROFILEMODE is probably superceded by some CMake setting.
|
||||||
|
option(SRB2_CONFIG_PROFILEMODE "Compile for profiling (GCC only)." OFF)
|
||||||
|
set(SRB2_CONFIG_ASSET_DIRECTORY "" CACHE PATH "Path to directory that contains all asset files for the installer. If set, assets will be part of installation and cpack.")
|
||||||
|
|
||||||
|
if(SRB2_CONFIG_ENABLE_TESTS)
|
||||||
|
# https://github.com/catchorg/Catch2
|
||||||
|
CPMAddPackage(
|
||||||
|
NAME Catch2
|
||||||
|
VERSION 3.4.0
|
||||||
|
GITHUB_REPOSITORY catchorg/Catch2
|
||||||
|
OPTIONS
|
||||||
|
"CATCH_INSTALL_DOCS OFF"
|
||||||
|
)
|
||||||
|
list(APPEND CMAKE_MODULE_PATH "${Catch2_SOURCE_DIR}/extras")
|
||||||
|
include(CTest)
|
||||||
|
include(Catch)
|
||||||
|
add_executable(srb2tests)
|
||||||
|
# To add tests, use target_sources to add individual test files to the target in subdirs.
|
||||||
|
target_link_libraries(srb2tests PRIVATE Catch2::Catch2 Catch2::Catch2WithMain)
|
||||||
|
target_compile_features(srb2tests PRIVATE c_std_11 cxx_std_17)
|
||||||
|
catch_discover_tests(srb2tests)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Enable CCache
|
||||||
|
# (Set USE_CCACHE=ON to use, CCACHE_OPTIONS for options)
|
||||||
|
if("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL Windows)
|
||||||
|
option(USE_CCACHE "Enable ccache support" OFF)
|
||||||
|
|
||||||
|
if(USE_CCACHE)
|
||||||
|
find_program(CCACHE_TOOL_PATH ccache)
|
||||||
|
if(CCACHE_TOOL_PATH)
|
||||||
|
set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_TOOL_PATH} CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_TOOL_PATH} CACHE STRING "" FORCE)
|
||||||
|
else()
|
||||||
|
message(WARNING "USE_CCACHE was set but ccache is not found (set CCACHE_TOOL_PATH)")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
CPMAddPackage(
|
||||||
|
NAME Ccache.cmake
|
||||||
|
GITHUB_REPOSITORY TheLartians/Ccache.cmake
|
||||||
|
VERSION 1.2
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Dependencies
|
||||||
|
add_subdirectory(thirdparty)
|
||||||
|
|
||||||
|
if("${SRB2_CONFIG_SYSTEM_LIBRARIES}")
|
||||||
|
find_package(ZLIB REQUIRED)
|
||||||
|
find_package(PNG REQUIRED)
|
||||||
|
find_package(SDL2 REQUIRED)
|
||||||
|
find_package(SDL2_mixer REQUIRED)
|
||||||
|
find_package(CURL REQUIRED)
|
||||||
|
find_package(OPENMPT REQUIRED)
|
||||||
|
|
||||||
|
# libgme defaults to "Nuked" YM2612 emulator, which is
|
||||||
|
# very SLOW. The system library probably uses the
|
||||||
|
# default so just always build it.
|
||||||
|
#find_package(GME REQUIRED)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR})
|
||||||
|
message(FATAL_ERROR "In-source builds will bring you a world of pain. Please make a separate directory to invoke CMake from.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if ((${SRB2_USE_CCACHE}) AND (${CMAKE_C_COMPILER} MATCHES "clang"))
|
||||||
|
message(WARNING "Using clang and CCache: You may want to set environment variable CCACHE_CPP2=yes to prevent include errors during compile.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# bitness check
|
||||||
|
set(SRB2_SYSTEM_BITS 0)
|
||||||
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
|
message(STATUS "Target is 64-bit")
|
||||||
|
set(SRB2_SYSTEM_BITS 64)
|
||||||
|
endif()
|
||||||
|
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
||||||
|
message(STATUS "Target is 32-bit")
|
||||||
|
set(SRB2_SYSTEM_BITS 32)
|
||||||
|
endif()
|
||||||
|
if(${SRB2_SYSTEM_BITS} EQUAL 0)
|
||||||
|
message(STATUS "Target bitness is unknown")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
||||||
|
set(CMAKE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
||||||
|
|
||||||
|
# Set EXE names so the assets CMakeLists can refer to its target
|
||||||
|
set(SRB2_SDL2_EXE_NAME "" CACHE STRING "Override executable binary output name")
|
||||||
|
set(SRB2_SDL2_EXE_SUFFIX "" CACHE STRING "Optional executable suffix, separated by an underscore")
|
||||||
|
|
||||||
|
include_directories(${CMAKE_CURRENT_BINARY_DIR}/src)
|
||||||
|
|
||||||
|
add_subdirectory(src)
|
||||||
|
add_subdirectory(assets)
|
||||||
|
|
||||||
|
|
||||||
|
set(GIT_EXECUTABLE "git" CACHE FILEPATH "Path to git binary")
|
||||||
|
include(GitUtilities)
|
||||||
|
|
||||||
|
if("${SRB2_SDL2_EXE_NAME}" STREQUAL "")
|
||||||
|
# cause a reconfigure if the branch changes
|
||||||
|
get_git_dir(SRB2_GIT_DIR)
|
||||||
|
configure_file("${SRB2_GIT_DIR}/HEAD" HEAD COPYONLY)
|
||||||
|
|
||||||
|
git_current_branch(SRB2_GIT_REVISION)
|
||||||
|
|
||||||
|
if("${SRB2_GIT_REVISION}" STREQUAL "")
|
||||||
|
# use abbreviated commit hash if on detached HEAD
|
||||||
|
git_latest_commit(SRB2_GIT_REVISION)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if("${CMAKE_SYSTEM_NAME}" MATCHES "Windows")
|
||||||
|
list(APPEND EXE_NAME_PARTS "srb2win")
|
||||||
|
elseif("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
|
||||||
|
list(APPEND EXE_NAME_PARTS "lsdlsrb2")
|
||||||
|
else()
|
||||||
|
list(APPEND EXE_NAME_PARTS "srb2")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT "${SRB2_GIT_REVISION}" STREQUAL "master")
|
||||||
|
list(APPEND EXE_NAME_PARTS ${SRB2_GIT_REVISION})
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
list(APPEND EXE_NAME_PARTS ${SRB2_SDL2_EXE_NAME})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
list(APPEND EXE_NAME_PARTS ${SRB2_SDL2_EXE_SUFFIX})
|
||||||
|
|
||||||
|
list(JOIN EXE_NAME_PARTS "_" EXE_NAME)
|
||||||
|
set_target_properties(SRB2SDL2 PROPERTIES OUTPUT_NAME ${EXE_NAME})
|
||||||
|
|
29
CMakePresets.json
Normal file
29
CMakePresets.json
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"version": 3,
|
||||||
|
"configurePresets": [
|
||||||
|
{
|
||||||
|
"name": "default",
|
||||||
|
"description": "Build using default generator",
|
||||||
|
"binaryDir": "build",
|
||||||
|
"cacheVariables": {
|
||||||
|
"CMAKE_C_FLAGS": "-fdiagnostics-color",
|
||||||
|
"CMAKE_CXX_FLAGS": "-fdiagnostics-color",
|
||||||
|
"CMAKE_BUILD_TYPE": "RelWithDebInfo"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "debug",
|
||||||
|
"description": "Build for development (no optimizations)",
|
||||||
|
"inherits": "default",
|
||||||
|
"cacheVariables": {
|
||||||
|
"CMAKE_BUILD_TYPE": "Debug"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"buildPresets": [
|
||||||
|
{
|
||||||
|
"name": "default",
|
||||||
|
"configurePreset": "default"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
8
Makefile
Normal file
8
Makefile
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
ifdef SILENT
|
||||||
|
MAKEFLAGS+=--no-print-directory
|
||||||
|
endif
|
||||||
|
|
||||||
|
all :
|
||||||
|
|
||||||
|
% ::
|
||||||
|
@$(MAKE) -C src $(MAKECMDGOALS)
|
|
@ -1,4 +1,5 @@
|
||||||
# Sonic Robo Blast 2
|
# Sonic Robo Blast 2
|
||||||
|
[![latest release](https://badgen.net/github/release/STJr/SRB2/stable)](https://github.com/STJr/SRB2/releases/latest)
|
||||||
|
|
||||||
[![Build status](https://ci.appveyor.com/api/projects/status/399d4hcw9yy7hg2y?svg=true)](https://ci.appveyor.com/project/STJr/srb2)
|
[![Build status](https://ci.appveyor.com/api/projects/status/399d4hcw9yy7hg2y?svg=true)](https://ci.appveyor.com/project/STJr/srb2)
|
||||||
[![Build status](https://travis-ci.org/STJr/SRB2.svg?branch=master)](https://travis-ci.org/STJr/SRB2)
|
[![Build status](https://travis-ci.org/STJr/SRB2.svg?branch=master)](https://travis-ci.org/STJr/SRB2)
|
||||||
|
@ -7,7 +8,6 @@
|
||||||
[Sonic Robo Blast 2](https://srb2.org/) is a 3D Sonic the Hedgehog fangame based on a modified version of [Doom Legacy](http://doomlegacy.sourceforge.net/).
|
[Sonic Robo Blast 2](https://srb2.org/) is a 3D Sonic the Hedgehog fangame based on a modified version of [Doom Legacy](http://doomlegacy.sourceforge.net/).
|
||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
- NASM (x86 builds only)
|
|
||||||
- SDL2 (Linux/OS X only)
|
- SDL2 (Linux/OS X only)
|
||||||
- SDL2-Mixer (Linux/OS X only)
|
- SDL2-Mixer (Linux/OS X only)
|
||||||
- libupnp (Linux/OS X only)
|
- libupnp (Linux/OS X only)
|
||||||
|
|
18
SRB2.cbp
18
SRB2.cbp
|
@ -1992,24 +1992,6 @@ HW3SOUND for 3D hardware sound support
|
||||||
<Option compilerVar="CC" />
|
<Option compilerVar="CC" />
|
||||||
</Unit>
|
</Unit>
|
||||||
<Unit filename="src/v_video.h" />
|
<Unit filename="src/v_video.h" />
|
||||||
<Unit filename="src/vid_copy.s">
|
|
||||||
<Option compilerVar="CC" />
|
|
||||||
<Option compiler="avrgcc" use="1" buildCommand="$compiler $options -x assembler-with-cpp -c $file -o $object" />
|
|
||||||
<Option compiler="gnu_gcc_compiler_for_mingw32" use="1" buildCommand="$compiler $options -x assembler-with-cpp -c $file -o $object" />
|
|
||||||
<Option compiler="gnu_gcc_compiler_for_mingw64" use="1" buildCommand="$compiler $options -x assembler-with-cpp -c $file -o $object" />
|
|
||||||
<Option compiler="armelfgcc" use="1" buildCommand="$compiler $options -x assembler-with-cpp -c $file -o $object" />
|
|
||||||
<Option compiler="tricoregcc" use="1" buildCommand="$compiler $options -x assembler-with-cpp -c $file -o $object" />
|
|
||||||
<Option compiler="ppcgcc" use="1" buildCommand="$compiler $options -x assembler-with-cpp -c $file -o $object" />
|
|
||||||
<Option compiler="gcc" use="1" buildCommand="$compiler $options -x assembler-with-cpp -c $file -o $object" />
|
|
||||||
<Option target="Debug Native/SDL" />
|
|
||||||
<Option target="Release Native/SDL" />
|
|
||||||
<Option target="Debug Linux/SDL" />
|
|
||||||
<Option target="Release Linux/SDL" />
|
|
||||||
<Option target="Debug Mingw/SDL" />
|
|
||||||
<Option target="Release Mingw/SDL" />
|
|
||||||
<Option target="Debug Mingw/DirectX" />
|
|
||||||
<Option target="Release Mingw/DirectX" />
|
|
||||||
</Unit>
|
|
||||||
<Unit filename="src/w_wad.c">
|
<Unit filename="src/w_wad.c">
|
||||||
<Option compilerVar="CC" />
|
<Option compilerVar="CC" />
|
||||||
</Unit>
|
</Unit>
|
||||||
|
|
|
@ -25,9 +25,6 @@
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(PlatformTarget)'=='x86'">
|
<ItemDefinitionGroup Condition="'$(PlatformTarget)'=='x86'">
|
||||||
<ClCompile>
|
|
||||||
<PreprocessorDefinitions>USEASM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
<Link>
|
||||||
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
|
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
|
||||||
</Link>
|
</Link>
|
||||||
|
|
52
Srb2.dev
52
Srb2.dev
|
@ -5,7 +5,7 @@ Ver=3
|
||||||
IsCpp=0
|
IsCpp=0
|
||||||
Type=0
|
Type=0
|
||||||
UnitCount=279
|
UnitCount=279
|
||||||
Folders=A_Asm,B_Bot,BLUA,D_Doom,F_Frame,G_Game,H_Hud,Hw_Hardware,Hw_Hardware/r_opengl,I_Interface,I_Interface/Dummy,I_Interface/SDL,I_Interface/Win32,LUA,M_Misc,P_Play,R_Rend,S_Sounds,W_Wad
|
Folders=B_Bot,BLUA,D_Doom,F_Frame,G_Game,H_Hud,Hw_Hardware,Hw_Hardware/r_opengl,I_Interface,I_Interface/Dummy,I_Interface/SDL,I_Interface/Win32,LUA,M_Misc,P_Play,R_Rend,S_Sounds,W_Wad
|
||||||
CommandLine=
|
CommandLine=
|
||||||
CompilerSettings=00000000000100000111e1
|
CompilerSettings=00000000000100000111e1
|
||||||
PchHead=-1
|
PchHead=-1
|
||||||
|
@ -1473,36 +1473,6 @@ Priority=1000
|
||||||
OverrideBuildCmd=0
|
OverrideBuildCmd=0
|
||||||
BuildCmd=
|
BuildCmd=
|
||||||
|
|
||||||
[Unit149]
|
|
||||||
FileName=src\tmap.nas
|
|
||||||
Folder=A_Asm
|
|
||||||
Compile=0
|
|
||||||
CompileCpp=0
|
|
||||||
Link=0
|
|
||||||
Priority=1000
|
|
||||||
OverrideBuildCmd=1
|
|
||||||
BuildCmd=nasm.exe -g -o $@ -f win32 src/tmap.nas
|
|
||||||
|
|
||||||
[Unit150]
|
|
||||||
FileName=src\asm_defs.inc
|
|
||||||
Folder=A_Asm
|
|
||||||
Compile=0
|
|
||||||
CompileCpp=0
|
|
||||||
Link=0
|
|
||||||
Priority=1000
|
|
||||||
OverrideBuildCmd=0
|
|
||||||
BuildCmd=
|
|
||||||
|
|
||||||
[Unit151]
|
|
||||||
FileName=src\vid_copy.s
|
|
||||||
Folder=A_Asm
|
|
||||||
Compile=1
|
|
||||||
CompileCpp=0
|
|
||||||
Link=1
|
|
||||||
Priority=1000
|
|
||||||
OverrideBuildCmd=1
|
|
||||||
BuildCmd=$(CC) $(CFLAGS) -x assembler-with-cpp -c src/vid_copy.s -o $@
|
|
||||||
|
|
||||||
[Unit152]
|
[Unit152]
|
||||||
FileName=src\y_inter.h
|
FileName=src\y_inter.h
|
||||||
Folder=H_Hud
|
Folder=H_Hud
|
||||||
|
@ -1543,26 +1513,6 @@ Priority=1000
|
||||||
OverrideBuildCmd=0
|
OverrideBuildCmd=0
|
||||||
BuildCmd=
|
BuildCmd=
|
||||||
|
|
||||||
[Unit156]
|
|
||||||
FileName=src\p5prof.h
|
|
||||||
Folder=A_Asm
|
|
||||||
Compile=1
|
|
||||||
CompileCpp=0
|
|
||||||
Link=1
|
|
||||||
Priority=1000
|
|
||||||
OverrideBuildCmd=0
|
|
||||||
BuildCmd=
|
|
||||||
|
|
||||||
[Unit157]
|
|
||||||
FileName=src\tmap_mmx.nas
|
|
||||||
Folder=A_Asm
|
|
||||||
Compile=0
|
|
||||||
CompileCpp=0
|
|
||||||
Link=0
|
|
||||||
Priority=1000
|
|
||||||
OverrideBuildCmd=1
|
|
||||||
BuildCmd=nasm.exe -g -o $@ -f win32 src/tmap_mmx.nas
|
|
||||||
|
|
||||||
[Unit159]
|
[Unit159]
|
||||||
FileName=src\lzf.h
|
FileName=src\lzf.h
|
||||||
Folder=W_Wad
|
Folder=W_Wad
|
||||||
|
|
29
alias-bootstrap.sh
Executable file
29
alias-bootstrap.sh
Executable file
|
@ -0,0 +1,29 @@
|
||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
# All these commands can be run from anywhere in the git
|
||||||
|
# tree, not just the top level.
|
||||||
|
|
||||||
|
# Usage: git cmake
|
||||||
|
#
|
||||||
|
# Same usage as standard CMake command.
|
||||||
|
#
|
||||||
|
git config 'alias.cmake' '!cmake'
|
||||||
|
|
||||||
|
# Usage: git build <build preset> [options]
|
||||||
|
# Usage: git build [options]
|
||||||
|
#
|
||||||
|
# In the second usage, when no preset is given, the
|
||||||
|
# "default" build preset is used.
|
||||||
|
#
|
||||||
|
# Available options can be found by running:
|
||||||
|
#
|
||||||
|
# git cmake --build
|
||||||
|
#
|
||||||
|
git config 'alias.build' '!p="${1##-*}"; [ "$p" ] && shift; git cmake --build --preset "${p:-default}"'
|
||||||
|
|
||||||
|
# Usage: git crossmake
|
||||||
|
#
|
||||||
|
# Shortcut to i686-w64-mingw32-cmake (CMake cross
|
||||||
|
# compiler)
|
||||||
|
#
|
||||||
|
git config 'alias.crossmake' '!i686-w64-mingw32-cmake'
|
42
appveyor.yml
42
appveyor.yml
|
@ -1,26 +1,18 @@
|
||||||
version: 2.2.8.{branch}-{build}
|
version: 2.2.13.{branch}-{build}
|
||||||
os: MinGW
|
os: MinGW
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
CC: ccache
|
CC: i686-w64-mingw32-gcc
|
||||||
CCACHE_CC: i686-w64-mingw32-gcc
|
|
||||||
CCACHE_CC_64: x86_64-w64-mingw32-gcc
|
|
||||||
WINDRES: windres
|
WINDRES: windres
|
||||||
# c:\mingw-w64 i686 has gcc 6.3.0, so use c:\msys64 7.3.0 instead
|
# c:\mingw-w64 i686 has gcc 6.3.0, so use c:\msys64 7.3.0 instead
|
||||||
MINGW_SDK: c:\msys64\mingw32
|
MINGW_SDK: c:\msys64\mingw32
|
||||||
# c:\msys64 x86_64 has gcc 8.2.0, so use c:\mingw-w64 7.3.0 instead
|
CFLAGS: -Wno-implicit-fallthrough
|
||||||
MINGW_SDK_64: C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64
|
|
||||||
CFLAGS: -Wall -W -Werror -Wno-error=implicit-fallthrough -Wimplicit-fallthrough=3 -Wno-tautological-compare -Wno-error=suggest-attribute=noreturn
|
|
||||||
NASM_ZIP: nasm-2.12.01
|
|
||||||
NASM_URL: http://www.nasm.us/pub/nasm/releasebuilds/2.12.01/win64/nasm-2.12.01-win64.zip
|
|
||||||
UPX_ZIP: upx391w
|
UPX_ZIP: upx391w
|
||||||
UPX_URL: http://upx.sourceforge.net/download/upx391w.zip
|
UPX_URL: http://upx.sourceforge.net/download/upx391w.zip
|
||||||
CCACHE_EXE: ccache.exe
|
CCACHE_EXE: ccache.exe
|
||||||
CCACHE_URL: http://alam.srb2.org/ccache.exe
|
CCACHE_URL: http://alam.srb2.org/ccache.exe
|
||||||
CCACHE_COMPRESS: true
|
CCACHE_COMPRESS: true
|
||||||
CCACHE_DIR: C:\Users\appveyor\.ccache
|
CCACHE_DIR: C:\Users\appveyor\.ccache
|
||||||
# Disable UPX by default. The user can override this in their Appveyor project settings
|
|
||||||
NOUPX: 1
|
|
||||||
##############################
|
##############################
|
||||||
# DEPLOYER VARIABLES
|
# DEPLOYER VARIABLES
|
||||||
# DPL_ENABLED=1 builds installers for branch names starting with `deployer`.
|
# DPL_ENABLED=1 builds installers for branch names starting with `deployer`.
|
||||||
|
@ -46,22 +38,12 @@ environment:
|
||||||
ASSET_CLEAN: 0
|
ASSET_CLEAN: 0
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
- nasm-2.12.01.zip
|
|
||||||
- upx391w.zip
|
- upx391w.zip
|
||||||
- ccache.exe
|
- ccache.exe
|
||||||
- C:\Users\appveyor\.ccache
|
- C:\Users\appveyor\.ccache
|
||||||
- C:\Users\appveyor\srb2_cache
|
- C:\Users\appveyor\srb2_cache
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- if [%CONFIGURATION%] == [SDL64] ( set "X86_64=1" )
|
|
||||||
- if [%CONFIGURATION%] == [SDL64] ( set "CONFIGURATION=SDL" )
|
|
||||||
- if [%X86_64%] == [1] ( set "MINGW_SDK=%MINGW_SDK_64%" )
|
|
||||||
- if [%X86_64%] == [1] ( set "CCACHE_CC=%CCACHE_CC_64%" )
|
|
||||||
|
|
||||||
- if not exist "%NASM_ZIP%.zip" appveyor DownloadFile "%NASM_URL%" -FileName "%NASM_ZIP%.zip"
|
|
||||||
- 7z x -y "%NASM_ZIP%.zip" -o%TMP% >null
|
|
||||||
- robocopy /S /xx /ns /nc /nfl /ndl /np /njh /njs "%TMP%\%NASM_ZIP%" "%MINGW_SDK%\bin" nasm.exe || exit 0
|
|
||||||
|
|
||||||
- if not exist "%UPX_ZIP%.zip" appveyor DownloadFile "%UPX_URL%" -FileName "%UPX_ZIP%.zip"
|
- if not exist "%UPX_ZIP%.zip" appveyor DownloadFile "%UPX_URL%" -FileName "%UPX_ZIP%.zip"
|
||||||
- 7z x -y "%UPX_ZIP%.zip" -o%TMP% >null
|
- 7z x -y "%UPX_ZIP%.zip" -o%TMP% >null
|
||||||
- robocopy /S /xx /ns /nc /nfl /ndl /np /njh /njs "%TMP%\%UPX_ZIP%" "%MINGW_SDK%\bin" upx.exe || exit 0
|
- robocopy /S /xx /ns /nc /nfl /ndl /np /njh /njs "%TMP%\%UPX_ZIP%" "%MINGW_SDK%\bin" upx.exe || exit 0
|
||||||
|
@ -72,43 +54,30 @@ install:
|
||||||
|
|
||||||
configuration:
|
configuration:
|
||||||
- SDL
|
- SDL
|
||||||
- SDL64
|
|
||||||
|
|
||||||
before_build:
|
before_build:
|
||||||
- set "Path=%MINGW_SDK%\bin;%Path%"
|
- set "Path=%MINGW_SDK%\bin;%Path%"
|
||||||
- if [%X86_64%] == [1] ( x86_64-w64-mingw32-gcc --version ) else ( i686-w64-mingw32-gcc --version )
|
|
||||||
- mingw32-make --version
|
- mingw32-make --version
|
||||||
- if not [%X86_64%] == [1] ( nasm -v )
|
|
||||||
- if not [%NOUPX%] == [1] ( upx -V )
|
- if not [%NOUPX%] == [1] ( upx -V )
|
||||||
- ccache -V
|
- ccache -V
|
||||||
- ccache -s
|
- ccache -s
|
||||||
- if [%NOUPX%] == [1] ( set "NOUPX=NOUPX=1" ) else ( set "NOUPX=" )
|
|
||||||
- if defined [%APPVEYOR_PULL_REQUEST_HEAD_COMMIT%] ( set "COMMIT=%APPVEYOR_PULL_REQUEST_HEAD_COMMIT%" ) else ( set "COMMIT=%APPVEYOR_REPO_COMMIT%" )
|
- if defined [%APPVEYOR_PULL_REQUEST_HEAD_COMMIT%] ( set "COMMIT=%APPVEYOR_PULL_REQUEST_HEAD_COMMIT%" ) else ( set "COMMIT=%APPVEYOR_REPO_COMMIT%" )
|
||||||
- cmd: git rev-parse --short %COMMIT%>%TMP%/gitshort.txt
|
- cmd: git rev-parse --short %COMMIT%>%TMP%/gitshort.txt
|
||||||
- cmd: set /P GITSHORT=<%TMP%/gitshort.txt
|
- cmd: set /P GITSHORT=<%TMP%/gitshort.txt
|
||||||
# for pull requests, take the owner's name only, if this isn't the same repo of course
|
# for pull requests, take the owner's name only, if this isn't the same repo of course
|
||||||
- set "REPO=%APPVEYOR_REPO_BRANCH%"
|
- set "REPO=%APPVEYOR_REPO_BRANCH%"
|
||||||
- if not [%APPVEYOR_PULL_REQUEST_HEAD_REPO_NAME%] == [] ( if not [%APPVEYOR_PULL_REQUEST_HEAD_REPO_NAME%] == [%APPVEYOR_REPO_NAME%] ( for /f "delims=/" %%a in ("%APPVEYOR_PULL_REQUEST_HEAD_REPO_NAME%") do set "REPO=%%a-%APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH%" ) )
|
- if not [%APPVEYOR_PULL_REQUEST_HEAD_REPO_NAME%] == [] ( if not [%APPVEYOR_PULL_REQUEST_HEAD_REPO_NAME%] == [%APPVEYOR_REPO_NAME%] ( for /f "delims=/" %%a in ("%APPVEYOR_PULL_REQUEST_HEAD_REPO_NAME%") do set "REPO=%%a-%APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH%" ) )
|
||||||
- set "EXENAME=EXENAME=srb2win-%REPO%-%GITSHORT%.exe"
|
- set "SRB2_MFLAGS=-C src NOECHOFILENAMES=1 CCACHE=1 EXENAME=srb2win-%REPO%-%GITSHORT%.exe"
|
||||||
- set "SRB2_MFLAGS=-C src WARNINGMODE=1 CCACHE=1 NOOBJDUMP=1 %NOUPX% %EXENAME%"
|
|
||||||
- if [%X86_64%] == [1] ( set "MINGW_FLAGS=MINGW64=1 X86_64=1 GCC81=1" ) else ( set "MINGW_FLAGS=MINGW=1 GCC91=1" )
|
|
||||||
- set "SRB2_MFLAGS=%SRB2_MFLAGS% %MINGW_FLAGS% %CONFIGURATION%=1"
|
|
||||||
|
|
||||||
build_script:
|
build_script:
|
||||||
- cmd: mingw32-make.exe %SRB2_MFLAGS% clean
|
- cmd: mingw32-make.exe %SRB2_MFLAGS% clean
|
||||||
- cmd: mingw32-make.exe %SRB2_MFLAGS% ERRORMODE=1 -k
|
- cmd: mingw32-make.exe %SRB2_MFLAGS% ERRORMODE=1 -k
|
||||||
|
|
||||||
after_build:
|
after_build:
|
||||||
- if [%X86_64%] == [1] (
|
|
||||||
set "BUILD_PATH=bin\Mingw64\Release"
|
|
||||||
) else (
|
|
||||||
set "BUILD_PATH=bin\Mingw\Release"
|
|
||||||
)
|
|
||||||
- if [%X86_64%] == [1] ( set "CONFIGURATION=%CONFIGURATION%64" )
|
|
||||||
- ccache -s
|
- ccache -s
|
||||||
- set BUILD_ARCHIVE=%REPO%-%GITSHORT%-%CONFIGURATION%.7z
|
- set BUILD_ARCHIVE=%REPO%-%GITSHORT%-%CONFIGURATION%.7z
|
||||||
- set BUILDSARCHIVE=%REPO%-%CONFIGURATION%.7z
|
- set BUILDSARCHIVE=%REPO%-%CONFIGURATION%.7z
|
||||||
- cmd: 7z a %BUILD_ARCHIVE% %BUILD_PATH% -xr!.gitignore
|
- cmd: 7z a %BUILD_ARCHIVE% bin -xr!.gitignore
|
||||||
- appveyor PushArtifact %BUILD_ARCHIVE%
|
- appveyor PushArtifact %BUILD_ARCHIVE%
|
||||||
#- cmd: copy %BUILD_ARCHIVE% %BUILDSARCHIVE%
|
#- cmd: copy %BUILD_ARCHIVE% %BUILDSARCHIVE%
|
||||||
#- appveyor PushArtifact %BUILDSARCHIVE%
|
#- appveyor PushArtifact %BUILDSARCHIVE%
|
||||||
|
@ -139,3 +108,4 @@ test: off
|
||||||
on_finish:
|
on_finish:
|
||||||
#- cmd: echo xfreerdp /u:appveyor /cert-ignore +clipboard /v:<ip>:<port>
|
#- cmd: echo xfreerdp /u:appveyor /cert-ignore +clipboard /v:<ip>:<port>
|
||||||
#- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
|
#- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
|
||||||
|
# vim: et ts=1
|
||||||
|
|
|
@ -1,72 +1,51 @@
|
||||||
## Assets Target Configuration ##
|
## Assets Target Configuration ##
|
||||||
|
|
||||||
# For prepending the current source path, later
|
if(${CMAKE_SYSTEM} MATCHES Linux)
|
||||||
FUNCTION(PREPEND var prefix)
|
# Asset installation isn't part of the Linux target
|
||||||
SET(listVar "")
|
return()
|
||||||
FOREACH(f ${ARGN})
|
endif()
|
||||||
LIST(APPEND listVar "${prefix}/${f}")
|
|
||||||
ENDFOREACH(f)
|
|
||||||
SET(${var} "${listVar}" PARENT_SCOPE)
|
|
||||||
ENDFUNCTION(PREPEND)
|
|
||||||
|
|
||||||
set(SRB2_ASSET_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/installer"
|
if("${SRB2_CONFIG_ASSET_DIRECTORY}" STREQUAL "")
|
||||||
CACHE STRING "Path to directory that contains all asset files for the installer.")
|
message(WARNING "SRB2_CONFIG_ASSET_DIRECTORY is not set, so installation will not contain data files.")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
set(SRB2_ASSET_INSTALL ON
|
get_filename_component(SRB2_ASSET_DIRECTORY_ABSOLUTE "${SRB2_CONFIG_ASSET_DIRECTORY}" ABSOLUTE)
|
||||||
CACHE BOOL "Insert asset files into the install directory or package.")
|
|
||||||
|
set(SRB2_ASSETS_DOCS
|
||||||
|
"README.txt"
|
||||||
|
"README-SDL.txt"
|
||||||
|
"LICENSE.txt"
|
||||||
|
"LICENSE-3RD-PARTY.txt"
|
||||||
|
)
|
||||||
|
list(TRANSFORM SRB2_ASSETS_DOCS PREPEND "/")
|
||||||
|
list(TRANSFORM SRB2_ASSETS_DOCS PREPEND "${SRB2_ASSET_DIRECTORY_ABSOLUTE}")
|
||||||
|
|
||||||
####################
|
####################
|
||||||
# POST-V2.2 NOTE: Do not forget to add patch.pk3 to the end of this list!
|
# POST-V2.2 NOTE: Do not forget to add patch.pk3 to the end of this list!
|
||||||
####################
|
####################
|
||||||
|
|
||||||
set(SRB2_ASSET_HASHED
|
set(SRB2_ASSETS_GAME
|
||||||
"srb2.pk3;\
|
"srb2.pk3"
|
||||||
player.dta;\
|
"player.dta"
|
||||||
zones.pk3;\
|
"zones.pk3"
|
||||||
patch.pk3"
|
"patch.pk3"
|
||||||
CACHE STRING "Asset filenames to apply MD5 checks. No spaces between entries!"
|
"music.dta"
|
||||||
|
"models.dat"
|
||||||
)
|
)
|
||||||
|
list(TRANSFORM SRB2_ASSETS_GAME PREPEND "/")
|
||||||
|
list(TRANSFORM SRB2_ASSETS_GAME PREPEND "${SRB2_ASSET_DIRECTORY_ABSOLUTE}")
|
||||||
|
|
||||||
set(SRB2_ASSET_DOCS
|
set(SRB2_ASSETS ${SRB2_ASSET_DOCS} ${SRB2_ASSETS_GAME})
|
||||||
"README.txt;\
|
|
||||||
LICENSE.txt;\
|
|
||||||
LICENSE-3RD-PARTY.txt;\
|
|
||||||
README-SDL.txt"
|
|
||||||
CACHE STRING "Documentation filenames. In OS X, these are packaged separately from other assets. No spaces between entries!"
|
|
||||||
)
|
|
||||||
|
|
||||||
PREPEND(SRB2_ASSET_DOCS ${SRB2_ASSET_DIRECTORY} ${SRB2_ASSET_DOCS})
|
|
||||||
|
|
||||||
foreach(SRB2_ASSET ${SRB2_ASSET_HASHED})
|
|
||||||
file(MD5 ${SRB2_ASSET_DIRECTORY}/${SRB2_ASSET} "SRB2_ASSET_${SRB2_ASSET}_HASH")
|
|
||||||
set(SRB2_ASSET_${SRB2_ASSET}_HASH ${SRB2_ASSET_${SRB2_ASSET}_HASH} PARENT_SCOPE)
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
|
|
||||||
if(${CMAKE_SYSTEM} MATCHES Darwin)
|
if(${CMAKE_SYSTEM} MATCHES Darwin)
|
||||||
get_target_property(outname SRB2SDL2 OUTPUT_NAME)
|
get_target_property(outname SRB2SDL2 OUTPUT_NAME)
|
||||||
if(${SRB2_ASSET_INSTALL})
|
install(FILES ${SRB2_ASSETS} DESTINATION "${outname}.app/Contents/Resources")
|
||||||
install(DIRECTORY "${SRB2_ASSET_DIRECTORY}/"
|
install(DIRECTORY "${SRB2_ASSET_DIRECTORY_ABSOLUTE}/models" DESTINATION "${outname}.app/Contents/Resources")
|
||||||
DESTINATION "${outname}.app/Contents/Resources"
|
install(FILES ${SRB2_ASSETS_DOCS} DESTINATION .)
|
||||||
)
|
|
||||||
endif()
|
|
||||||
# Always install the doc files, even in non-asset packages.
|
|
||||||
install(FILES ${SRB2_ASSET_DOCS}
|
|
||||||
DESTINATION .
|
|
||||||
OPTIONAL
|
|
||||||
)
|
|
||||||
else()
|
else()
|
||||||
if(${SRB2_ASSET_INSTALL})
|
install(FILES ${SRB2_ASSETS} DESTINATION .)
|
||||||
install(DIRECTORY "${SRB2_ASSET_DIRECTORY}/"
|
install(DIRECTORY "${SRB2_ASSET_DIRECTORY_ABSOLUTE}/models" DESTINATION .)
|
||||||
DESTINATION .
|
|
||||||
)
|
|
||||||
# Docs are assumed to be located in SRB2_ASSET_DIRECTORY, so don't install them in their own call.
|
|
||||||
else()
|
|
||||||
# Always install the doc files, even in non-asset packages.
|
|
||||||
install(FILES ${SRB2_ASSET_DOCS}
|
|
||||||
DESTINATION .
|
|
||||||
OPTIONAL
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -1,24 +1,21 @@
|
||||||
SONIC ROBO BLAST 2
|
SONIC ROBO BLAST 2
|
||||||
|
|
||||||
Sonic Robo Blast 2 (SRB2) is a 3D Sonic the Hedgehog fangame based on a
|
Sonic Robo Blast 2 (SRB2) is a 3D Sonic the Hedgehog fangame, based on a modified version of Doom Legacy.
|
||||||
modified version of Doom Legacy.
|
|
||||||
|
https://www.srb2.org
|
||||||
|
|
||||||
LICENSE
|
LICENSE
|
||||||
|
|
||||||
The source code for SRB2 is licensed under the GNU General Public
|
The source code for SRB2 is licensed under the GNU General Public License, Version 2. See LICENSE.txt for the full text of this license.
|
||||||
License, Version 2. See LICENSE.txt for the full text of this license.
|
|
||||||
|
|
||||||
SRB2 uses various third-party libraries, including SDL, SDL Mixer, and
|
SRB2 uses various third-party libraries, including SDL, SDL Mixer, and their dependencies. See LICENSE-3RD-PARTY.txt for the licenses of these libraries.
|
||||||
their dependencies. See LICENSE-3RD-PARTY.txt for the licenses of these
|
|
||||||
libraries.
|
|
||||||
|
|
||||||
SOURCE CODE
|
SOURCE CODE
|
||||||
|
|
||||||
You may obtain the source code for SRB2, including the source code for
|
You may obtain the source code for SRB2, including the source code for specific version releases, at the following web sites:
|
||||||
specific version releases, at the following web sites:
|
|
||||||
|
|
||||||
STJr GitLab:
|
STJr GitLab:
|
||||||
https://git.magicalgirl.moe/STJr/SRB2
|
https://git.do.srb2.org/STJr/SRB2
|
||||||
|
|
||||||
GitHub:
|
GitHub:
|
||||||
https://github.com/STJr/SRB2
|
https://github.com/STJr/SRB2
|
||||||
|
@ -27,25 +24,27 @@ CONTACT
|
||||||
|
|
||||||
You may contact Sonic Team Junior via the following web sites:
|
You may contact Sonic Team Junior via the following web sites:
|
||||||
|
|
||||||
SRB2.ORG:
|
|
||||||
https://www.srb2.org
|
|
||||||
|
|
||||||
SRB2 Message Board:
|
SRB2 Message Board:
|
||||||
https://mb.srb2.org
|
https://mb.srb2.org
|
||||||
|
|
||||||
SRB2 Official Discord:
|
SRB2 Official Discord:
|
||||||
https://discord.gg/pYDXzpX (13+)
|
https://discord.gg/b3BGb8A
|
||||||
|
|
||||||
|
Twitter:
|
||||||
|
https://twitter.com/SonicTeamJr
|
||||||
|
|
||||||
|
Facebook:
|
||||||
|
https://facebook.com/SonicRoboBlast2
|
||||||
|
|
||||||
|
|
||||||
COPYRIGHT AND DISCLAIMER
|
COPYRIGHT AND DISCLAIMER
|
||||||
|
|
||||||
Design and content on SRB2 is copyright 1998-2019 by Sonic Team Junior.
|
Design and content in Sonic Robo Blast 2 is copyright 1998-2023 by Sonic Team Jr.
|
||||||
All non-original material on SRB2.ORG is copyrighted by their
|
|
||||||
respective owners, and no copyright infringement is intended. The owner
|
|
||||||
of the SRB2.ORG domain is only acting as an ISP, and is therefore not
|
|
||||||
responsible for any content on SRB2.ORG under the 1998 DMCA. This
|
|
||||||
site, its webmaster, and its staff make no profit whatsoever (in fact,
|
|
||||||
we lose money). Sonic Team Junior assumes no responsibility for the
|
|
||||||
content on any Sonic Team Junior fan sites.
|
|
||||||
|
|
||||||
Sonic Team Junior is in no way affiliated with SEGA or Sonic Team. We do
|
All original material in this game is copyrighted by their respective owners, and no copyright infringement is intended. Sonic Team Jr. is in no way affiliated with SEGA or Sonic Team, and we do not claim ownership of any of SEGA's intellectual property used in SRB2.
|
||||||
not claim ownership of any of SEGA's intellectual property used in SRB2.
|
|
||||||
|
Sonic Robo Blast 2 is not commercial software. If you purchased this game, you have been scammed! Sonic Team Jr.'s staff makes no profit whatsoever (in fact, we lose money).
|
||||||
|
|
||||||
|
The owner of the srb2.org domain is only acting as an ISP, and is therefore not responsible for any content on srb2.org under the 1998 DMCA. Sonic Team Jr. assumes no responsibility for the content on any Sonic Team Jr. fan sites.
|
||||||
|
|
||||||
|
This software is provided as-is with no warranty whatsoever.
|
||||||
|
|
2
bin/FreeBSD/Debug/.gitignore
vendored
2
bin/FreeBSD/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
bin/FreeBSD/Release/.gitignore
vendored
2
bin/FreeBSD/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
1
bin/Linux/Debug/.gitignore
vendored
1
bin/Linux/Debug/.gitignore
vendored
|
@ -1 +0,0 @@
|
||||||
/lsdlsrb2
|
|
3
bin/Linux/Release/.gitignore
vendored
3
bin/Linux/Release/.gitignore
vendored
|
@ -1,3 +0,0 @@
|
||||||
/lsdlsrb2
|
|
||||||
/pnd
|
|
||||||
/*.mo
|
|
1
bin/Linux64/Debug/.gitignore
vendored
1
bin/Linux64/Debug/.gitignore
vendored
|
@ -1 +0,0 @@
|
||||||
/lsdlsrb2
|
|
1
bin/Linux64/Release/.gitignore
vendored
1
bin/Linux64/Release/.gitignore
vendored
|
@ -1 +0,0 @@
|
||||||
/lsdlsrb2
|
|
3
bin/Mingw/Debug/.gitignore
vendored
3
bin/Mingw/Debug/.gitignore
vendored
|
@ -1,3 +0,0 @@
|
||||||
*.exe
|
|
||||||
*.mo
|
|
||||||
r_opengl.dll
|
|
4
bin/Mingw/Release/.gitignore
vendored
4
bin/Mingw/Release/.gitignore
vendored
|
@ -1,4 +0,0 @@
|
||||||
*.exe
|
|
||||||
*.mo
|
|
||||||
r_opengl.dll
|
|
||||||
*.bat
|
|
3
bin/Mingw64/Debug/.gitignore
vendored
3
bin/Mingw64/Debug/.gitignore
vendored
|
@ -1,3 +0,0 @@
|
||||||
/srb2sdl.exe
|
|
||||||
/srb2win.exe
|
|
||||||
/r_opengl.dll
|
|
3
bin/Mingw64/Release/.gitignore
vendored
3
bin/Mingw64/Release/.gitignore
vendored
|
@ -1,3 +0,0 @@
|
||||||
/srb2sdl.exe
|
|
||||||
/srb2win.exe
|
|
||||||
/r_opengl.dll
|
|
2
bin/SDL/Debug/.gitignore
vendored
2
bin/SDL/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
bin/SDL/Release/.gitignore
vendored
2
bin/SDL/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
bin/VC/.gitignore
vendored
2
bin/VC/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
/Release
|
|
||||||
/Debug
|
|
2
bin/VC9/.gitignore
vendored
2
bin/VC9/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
/Win32
|
|
||||||
/x64
|
|
2
bin/dummy/.gitignore
vendored
2
bin/dummy/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
21
cmake/CPM.cmake
Normal file
21
cmake/CPM.cmake
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
set(CPM_DOWNLOAD_VERSION 0.36.0)
|
||||||
|
|
||||||
|
if(CPM_SOURCE_CACHE)
|
||||||
|
set(CPM_DOWNLOAD_LOCATION "${CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
|
||||||
|
elseif(DEFINED ENV{CPM_SOURCE_CACHE})
|
||||||
|
set(CPM_DOWNLOAD_LOCATION "$ENV{CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
|
||||||
|
else()
|
||||||
|
set(CPM_DOWNLOAD_LOCATION "${CMAKE_BINARY_DIR}/cmake/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Expand relative path. This is important if the provided path contains a tilde (~)
|
||||||
|
get_filename_component(CPM_DOWNLOAD_LOCATION ${CPM_DOWNLOAD_LOCATION} ABSOLUTE)
|
||||||
|
if(NOT (EXISTS ${CPM_DOWNLOAD_LOCATION}))
|
||||||
|
message(STATUS "Downloading CPM.cmake to ${CPM_DOWNLOAD_LOCATION}")
|
||||||
|
file(DOWNLOAD
|
||||||
|
https://github.com/cpm-cmake/CPM.cmake/releases/download/v${CPM_DOWNLOAD_VERSION}/CPM.cmake
|
||||||
|
${CPM_DOWNLOAD_LOCATION}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(${CPM_DOWNLOAD_LOCATION})
|
32
cmake/Comptime.cmake
Normal file
32
cmake/Comptime.cmake
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
cmake_minimum_required(VERSION 3.3 FATAL_ERROR)
|
||||||
|
|
||||||
|
set(CMAKE_BINARY_DIR "${BINARY_DIR}")
|
||||||
|
set(CMAKE_CURRENT_BINARY_DIR "${BINARY_DIR}")
|
||||||
|
|
||||||
|
# Set up CMAKE path
|
||||||
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/")
|
||||||
|
|
||||||
|
include(GitUtilities)
|
||||||
|
|
||||||
|
git_current_branch(SRB2_COMP_BRANCH)
|
||||||
|
git_working_tree_dirty(SRB2_COMP_UNCOMMITTED)
|
||||||
|
|
||||||
|
git_latest_commit(SRB2_COMP_REVISION)
|
||||||
|
git_subject(subject)
|
||||||
|
string(REGEX REPLACE "([\"\\])" "\\\\\\1" SRB2_COMP_NOTE "${subject}")
|
||||||
|
|
||||||
|
if("${CMAKE_BUILD_TYPE}" STREQUAL "")
|
||||||
|
set(CMAKE_BUILD_TYPE None)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# These build types enable optimizations of some kind by default.
|
||||||
|
set(optimized_build_types "MINSIZEREL;RELEASE;RELWITHDEBINFO")
|
||||||
|
|
||||||
|
string(TOUPPER "${CMAKE_BUILD_TYPE}" build_type)
|
||||||
|
if("${build_type}" IN_LIST optimized_build_types)
|
||||||
|
set(SRB2_COMP_OPTIMIZED TRUE)
|
||||||
|
else()
|
||||||
|
set(SRB2_COMP_OPTIMIZED FALSE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in" "${CMAKE_CURRENT_BINARY_DIR}/src/config.h")
|
|
@ -1,46 +0,0 @@
|
||||||
|
|
||||||
#=============================================================================
|
|
||||||
# Copyright 2010 Kitware, Inc.
|
|
||||||
#
|
|
||||||
# Distributed under the OSI-approved BSD License (the "License");
|
|
||||||
# see accompanying file Copyright.txt for details.
|
|
||||||
#
|
|
||||||
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
|
||||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
# See the License for more information.
|
|
||||||
#=============================================================================
|
|
||||||
# (To distribute this file outside of CMake, substitute the full
|
|
||||||
# License text for the above reference.)
|
|
||||||
|
|
||||||
# support for the yasm assembler
|
|
||||||
|
|
||||||
set(CMAKE_ASM_YASM_SOURCE_FILE_EXTENSIONS nasm yasm asm)
|
|
||||||
|
|
||||||
if(NOT CMAKE_ASM_YASM_OBJECT_FORMAT)
|
|
||||||
if(WIN32)
|
|
||||||
if(CMAKE_C_SIZEOF_DATA_PTR EQUAL 8)
|
|
||||||
set(CMAKE_ASM_YASM_OBJECT_FORMAT win64)
|
|
||||||
else()
|
|
||||||
set(CMAKE_ASM_YASM_OBJECT_FORMAT win32)
|
|
||||||
endif()
|
|
||||||
elseif(APPLE)
|
|
||||||
if(CMAKE_C_SIZEOF_DATA_PTR EQUAL 8)
|
|
||||||
set(CMAKE_ASM_YASM_OBJECT_FORMAT macho64)
|
|
||||||
else()
|
|
||||||
set(CMAKE_ASM_YASM_OBJECT_FORMAT macho)
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
if(CMAKE_C_SIZEOF_DATA_PTR EQUAL 8)
|
|
||||||
set(CMAKE_ASM_YASM_OBJECT_FORMAT elf64)
|
|
||||||
else()
|
|
||||||
set(CMAKE_ASM_YASM_OBJECT_FORMAT elf)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(CMAKE_ASM_YASM_COMPILE_OBJECT "<CMAKE_ASM_YASM_COMPILER> <FLAGS> -f ${CMAKE_ASM_YASM_OBJECT_FORMAT} -o <OBJECT> <SOURCE>")
|
|
||||||
|
|
||||||
# Load the generic ASMInformation file:
|
|
||||||
set(ASM_DIALECT "_YASM")
|
|
||||||
include(CMakeASMInformation)
|
|
||||||
set(ASM_DIALECT)
|
|
|
@ -1,27 +0,0 @@
|
||||||
|
|
||||||
#=============================================================================
|
|
||||||
# Copyright 2010 Kitware, Inc.
|
|
||||||
#
|
|
||||||
# Distributed under the OSI-approved BSD License (the "License");
|
|
||||||
# see accompanying file Copyright.txt for details.
|
|
||||||
#
|
|
||||||
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
|
||||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
# See the License for more information.
|
|
||||||
#=============================================================================
|
|
||||||
# (To distribute this file outside of CMake, substitute the full
|
|
||||||
# License text for the above reference.)
|
|
||||||
|
|
||||||
# Find the nasm assembler. yasm (http://www.tortall.net/projects/yasm/) is nasm compatible
|
|
||||||
|
|
||||||
set(CMAKE_ASM_YASM_COMPILER_LIST nasm yasm)
|
|
||||||
|
|
||||||
if(NOT CMAKE_ASM_YASM_COMPILER)
|
|
||||||
find_program(CMAKE_ASM_YASM_COMPILER yasm
|
|
||||||
"$ENV{ProgramFiles}/YASM")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Load the generic DetermineASM compiler file with the DIALECT set properly:
|
|
||||||
set(ASM_DIALECT "_YASM")
|
|
||||||
include(CMakeDetermineASMCompiler)
|
|
||||||
set(ASM_DIALECT)
|
|
|
@ -1,23 +0,0 @@
|
||||||
|
|
||||||
#=============================================================================
|
|
||||||
# Copyright 2010 Kitware, Inc.
|
|
||||||
#
|
|
||||||
# Distributed under the OSI-approved BSD License (the "License");
|
|
||||||
# see accompanying file Copyright.txt for details.
|
|
||||||
#
|
|
||||||
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
|
||||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
# See the License for more information.
|
|
||||||
#=============================================================================
|
|
||||||
# (To distribute this file outside of CMake, substitute the full
|
|
||||||
# License text for the above reference.)
|
|
||||||
|
|
||||||
# This file is used by EnableLanguage in cmGlobalGenerator to
|
|
||||||
# determine that the selected ASM_NASM "compiler" works.
|
|
||||||
# For assembler this can only check whether the compiler has been found,
|
|
||||||
# because otherwise there would have to be a separate assembler source file
|
|
||||||
# for each assembler on every architecture.
|
|
||||||
|
|
||||||
set(ASM_DIALECT "_YASM")
|
|
||||||
include(CMakeTestASMCompiler)
|
|
||||||
set(ASM_DIALECT)
|
|
|
@ -20,4 +20,14 @@ find_library(GME_LIBRARY
|
||||||
|
|
||||||
set(GME_PROCESS_INCLUDES GME_INCLUDE_DIR)
|
set(GME_PROCESS_INCLUDES GME_INCLUDE_DIR)
|
||||||
set(GME_PROCESS_LIBS GME_LIBRARY)
|
set(GME_PROCESS_LIBS GME_LIBRARY)
|
||||||
libfind_process(GME)
|
libfind_process(GME)
|
||||||
|
|
||||||
|
if(GME_FOUND AND NOT TARGET gme)
|
||||||
|
add_library(gme UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(
|
||||||
|
gme
|
||||||
|
PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${GME_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${GME_INCLUDE_DIR}"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
|
@ -20,4 +20,14 @@ find_library(OPENMPT_LIBRARY
|
||||||
|
|
||||||
set(OPENMPT_PROCESS_INCLUDES OPENMPT_INCLUDE_DIR)
|
set(OPENMPT_PROCESS_INCLUDES OPENMPT_INCLUDE_DIR)
|
||||||
set(OPENMPT_PROCESS_LIBS OPENMPT_LIBRARY)
|
set(OPENMPT_PROCESS_LIBS OPENMPT_LIBRARY)
|
||||||
libfind_process(OPENMPT)
|
libfind_process(OPENMPT)
|
||||||
|
|
||||||
|
if(OPENMPT_FOUND AND NOT TARGET openmpt)
|
||||||
|
add_library(openmpt UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(
|
||||||
|
openmpt
|
||||||
|
PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${OPENMPT_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${OPENMPT_INCLUDE_DIR}"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
|
@ -31,3 +31,13 @@ find_library(SDL2_LIBRARY
|
||||||
set(SDL2_PROCESS_INCLUDES SDL2_INCLUDE_DIR)
|
set(SDL2_PROCESS_INCLUDES SDL2_INCLUDE_DIR)
|
||||||
set(SDL2_PROCESS_LIBS SDL2_LIBRARY)
|
set(SDL2_PROCESS_LIBS SDL2_LIBRARY)
|
||||||
libfind_process(SDL2)
|
libfind_process(SDL2)
|
||||||
|
|
||||||
|
if(SDL2_FOUND AND NOT TARGET SDL2::SDL2)
|
||||||
|
add_library(SDL2::SDL2 UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(
|
||||||
|
SDL2::SDL2
|
||||||
|
PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${SDL2_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${SDL2_INCLUDE_DIR}"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
|
@ -32,3 +32,13 @@ find_library(SDL2_MIXER_LIBRARY
|
||||||
set(SDL2_MIXER_PROCESS_INCLUDES SDL2_MIXER_INCLUDE_DIR)
|
set(SDL2_MIXER_PROCESS_INCLUDES SDL2_MIXER_INCLUDE_DIR)
|
||||||
set(SDL2_MIXER_PROCESS_LIBS SDL2_MIXER_LIBRARY)
|
set(SDL2_MIXER_PROCESS_LIBS SDL2_MIXER_LIBRARY)
|
||||||
libfind_process(SDL2_MIXER)
|
libfind_process(SDL2_MIXER)
|
||||||
|
|
||||||
|
if(SDL2_MIXER_FOUND AND NOT TARGET SDL2_mixer::SDL2_mixer)
|
||||||
|
add_library(SDL2_mixer::SDL2_mixer UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(
|
||||||
|
SDL2_mixer::SDL2_mixer
|
||||||
|
PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${SDL2_MIXER_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${SDL2_MIXER_INCLUDE_DIR}"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
|
@ -6,38 +6,54 @@ endif()
|
||||||
|
|
||||||
set(__GitUtilities ON)
|
set(__GitUtilities ON)
|
||||||
|
|
||||||
function(git_describe variable path)
|
macro(_git_command)
|
||||||
execute_process(COMMAND "${GIT_EXECUTABLE}" "describe"
|
execute_process(
|
||||||
WORKING_DIRECTORY "${path}"
|
COMMAND "${GIT_EXECUTABLE}" ${ARGN}
|
||||||
RESULT_VARIABLE result
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
OUTPUT_VARIABLE output
|
OUTPUT_VARIABLE output
|
||||||
ERROR_QUIET
|
ERROR_QUIET
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
)
|
)
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
macro(_git_easy_command)
|
||||||
|
_git_command(${ARGN})
|
||||||
|
set(${variable} "${output}" PARENT_SCOPE)
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
function(git_current_branch variable)
|
||||||
|
_git_command(symbolic-ref -q --short HEAD)
|
||||||
|
|
||||||
|
# If a detached head, a ref could still be resolved.
|
||||||
|
if("${output}" STREQUAL "")
|
||||||
|
_git_command(describe --all --exact-match)
|
||||||
|
|
||||||
|
# Get the ref, in the form heads/master or
|
||||||
|
# remotes/origin/master so isolate the final part.
|
||||||
|
string(REGEX REPLACE ".*/" "" output "${output}")
|
||||||
|
endif()
|
||||||
|
|
||||||
set(${variable} "${output}" PARENT_SCOPE)
|
set(${variable} "${output}" PARENT_SCOPE)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
function(git_current_branch variable path)
|
function(git_latest_commit variable)
|
||||||
execute_process(COMMAND ${GIT_EXECUTABLE} "symbolic-ref" "--short" "HEAD"
|
_git_easy_command(rev-parse --short HEAD)
|
||||||
WORKING_DIRECTORY "${path}"
|
|
||||||
RESULT_VARIABLE result
|
|
||||||
OUTPUT_VARIABLE output
|
|
||||||
ERROR_QUIET
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
)
|
|
||||||
|
|
||||||
set(${variable} "${output}" PARENT_SCOPE)
|
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
function(git_latest_commit variable path)
|
function(git_working_tree_dirty variable)
|
||||||
execute_process(COMMAND ${GIT_EXECUTABLE} "rev-parse" "--short" "HEAD"
|
_git_command(status --porcelain -uno)
|
||||||
WORKING_DIRECTORY "${path}"
|
|
||||||
RESULT_VARIABLE result
|
|
||||||
OUTPUT_VARIABLE output
|
|
||||||
ERROR_QUIET
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
)
|
|
||||||
|
|
||||||
set(${variable} "${output}" PARENT_SCOPE)
|
if(output STREQUAL "")
|
||||||
endfunction()
|
set(${variable} FALSE PARENT_SCOPE)
|
||||||
|
else()
|
||||||
|
set(${variable} TRUE PARENT_SCOPE)
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(git_subject variable)
|
||||||
|
_git_easy_command(log -1 --format=%s)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(get_git_dir variable)
|
||||||
|
_git_easy_command(rev-parse --git-dir)
|
||||||
|
endfunction()
|
||||||
|
|
21
cmake/Modules/clang-tidy-default.cmake
Normal file
21
cmake/Modules/clang-tidy-default.cmake
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
find_program(CLANG_TIDY clang-tidy)
|
||||||
|
|
||||||
|
# Note: Apple Clang does not ship with clang tools. If you want clang-tidy on
|
||||||
|
# macOS, it's best to install the Homebrew llvm bottle and set CLANG_TIDY
|
||||||
|
# in your build directory. The llvm package is keg-only, so it will not
|
||||||
|
# collide with Apple Clang.
|
||||||
|
|
||||||
|
function(target_set_default_clang_tidy target lang checks)
|
||||||
|
if("${CLANG_TIDY}" STREQUAL "CLANG_TIDY-NOTFOUND")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
get_target_property(c_clang_tidy_prop SRB2SDL2 C_CLANG_TIDY)
|
||||||
|
if(NOT ("${c_clang_tidy_prop}" STREQUAL "c_clang_tidy_prop-NOTFOUND"))
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set_target_properties("${target}" PROPERTIES
|
||||||
|
${lang}_CLANG_TIDY "${CLANG_TIDY};-checks=${checks}"
|
||||||
|
)
|
||||||
|
endfunction()
|
|
@ -1,3 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
export CCACHE_CPP2=true
|
|
||||||
exec "${RULE_LAUNCH_COMPILE}" "${CMAKE_C_COMPILER}" "$@"
|
|
|
@ -1,3 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
export CCACHE_CPP2=true
|
|
||||||
exec "${RULE_LAUNCH_COMPILE}" "${CMAKE_C_COMPILER}" "$@"
|
|
54
comptime.sh
54
comptime.sh
|
@ -1,54 +1,44 @@
|
||||||
#!/bin/bash -e
|
#!/bin/sh
|
||||||
path="."
|
path="."
|
||||||
if [ x"$1" != x ]; then
|
if [ x"$1" != x ]; then
|
||||||
path="$1"
|
path="$1"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
versiongit() {
|
version() {
|
||||||
gitbranch=`git rev-parse --abbrev-ref HEAD`
|
cat <<EOF > "$path/comptime.h"
|
||||||
gitversion=`git rev-parse HEAD`
|
|
||||||
cat <<EOF > $path/comptime.h
|
|
||||||
|
|
||||||
// Do not edit! This file was autogenerated
|
// Do not edit! This file was autogenerated
|
||||||
// by the $0 script with git
|
// by the $0 script with git
|
||||||
//
|
//
|
||||||
const char* compbranch = "$gitbranch";
|
const char* compbranch = "$1";
|
||||||
const char* comprevision = "${gitversion:0:8}";
|
const char* comprevision = "$2";
|
||||||
EOF
|
EOF
|
||||||
exit 0
|
}
|
||||||
|
|
||||||
|
versiongit() {
|
||||||
|
gitbranch="$(git rev-parse --abbrev-ref HEAD)"
|
||||||
|
gitversion="$(git rev-parse HEAD | cut -c -8)"
|
||||||
|
version "$gitbranch" "$gitversion";
|
||||||
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
versionsvn() {
|
versionsvn() {
|
||||||
svnrevision=`svnversion -n $1`
|
svnrevision="$(svnversion -n "$1")"
|
||||||
cat <<EOF > $path/comptime.h
|
version "Subversion" "r$svnrevision";
|
||||||
|
exit 0
|
||||||
// Do not edit! This file was autogenerated
|
|
||||||
// by the $0 script with subversion
|
|
||||||
//
|
|
||||||
const char* compbranch = "Subversion";
|
|
||||||
const char* comprevision = "r$svnrevision";
|
|
||||||
EOF
|
|
||||||
exit 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
versionfake() {
|
versionfake() {
|
||||||
cat <<EOF > $path/comptime.h
|
version "Unknown" "illegal";
|
||||||
|
|
||||||
// Do not edit! This file was autogenerated
|
|
||||||
// by the $0 script with an unknown or nonexist SCM
|
|
||||||
//
|
|
||||||
const char* compbranch = "Unknown";
|
|
||||||
const char* comprevision = "illegal";
|
|
||||||
EOF
|
|
||||||
}
|
}
|
||||||
|
|
||||||
compversion() {
|
compversion() {
|
||||||
touch $path/comptime.c
|
touch "$path/comptime.c"
|
||||||
versionfake
|
versionfake
|
||||||
test -d $path/.svn && versionsvn
|
[ -d "$path/.svn" ] && versionsvn "$@"
|
||||||
test -d $path/../.git && versiongit
|
[ -d "$path/../.git" ] && versiongit
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
test -f $path/comptime.c && compversion
|
[ -f "$path/comptime.c" ] && compversion "$@"
|
||||||
exit 2
|
exit 2
|
||||||
|
|
|
@ -3,12 +3,12 @@ ifdef ComSpec
|
||||||
COMSPEC=$(ComSpec)
|
COMSPEC=$(ComSpec)
|
||||||
endif
|
endif
|
||||||
ifdef COMSPEC
|
ifdef COMSPEC
|
||||||
OBJCOPY=objcopy.exe
|
OBJCOPY?=objcopy.exe
|
||||||
OBJDUMP=objdump.exe
|
OBJDUMP?=objdump.exe
|
||||||
GZIP?=gzip.exe
|
GZIP?=gzip.exe
|
||||||
else
|
else
|
||||||
OBJCOPY=objcopy
|
OBJCOPY?=objcopy
|
||||||
OBJDUMP=objdump
|
OBJDUMP?=objdump
|
||||||
GZIP?=gzip
|
GZIP?=gzip
|
||||||
endif
|
endif
|
||||||
DBGNAME=$(BIN).debug
|
DBGNAME=$(BIN).debug
|
||||||
|
|
|
@ -78,7 +78,7 @@ NONX86 = $(shell test "`echo $(CROSS_COMPILE_HOST) | grep 'i[3-6]86'`" || echo "
|
||||||
MAKEARGS = $(OS) $(NONX86) $(PREFIX) EXENAME=$(EXENAME) DBGNAME=$(DBGNAME) NOOBJDUMP=1 # SDL_PKGCONFIG=sdl2 PNG_PKGCONFIG=libpng
|
MAKEARGS = $(OS) $(NONX86) $(PREFIX) EXENAME=$(EXENAME) DBGNAME=$(DBGNAME) NOOBJDUMP=1 # SDL_PKGCONFIG=sdl2 PNG_PKGCONFIG=libpng
|
||||||
MENUFILE1 = ?package($(PACKAGE)):needs="X11" section="$(SECTION)"
|
MENUFILE1 = ?package($(PACKAGE)):needs="X11" section="$(SECTION)"
|
||||||
MENUFILE2 = title="$(TITLE)" command="/$(PKGDIR)/$(PACKAGE)"
|
MENUFILE2 = title="$(TITLE)" command="/$(PKGDIR)/$(PACKAGE)"
|
||||||
BINDIR := $(DIR)/bin/Linux/Release
|
BINDIR := $(DIR)/bin/
|
||||||
|
|
||||||
# FIXME pkg-config dir hacks
|
# FIXME pkg-config dir hacks
|
||||||
# Launchpad doesn't need this; it actually makes i386 builds fail due to cross-compile
|
# Launchpad doesn't need this; it actually makes i386 builds fail due to cross-compile
|
||||||
|
|
2
dep/.gitignore
vendored
2
dep/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
#All folders
|
|
||||||
*.d
|
|
2
dep/FreeBSD/SDL/Debug/.gitignore
vendored
2
dep/FreeBSD/SDL/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/FreeBSD/SDL/Release/.gitignore
vendored
2
dep/FreeBSD/SDL/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/Linux/SDL/Debug/.gitignore
vendored
2
dep/Linux/SDL/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/Linux/SDL/Release/.gitignore
vendored
2
dep/Linux/SDL/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/Linux64/SDL/Debug/.gitignore
vendored
2
dep/Linux64/SDL/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/Linux64/SDL/Release/.gitignore
vendored
2
dep/Linux64/SDL/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/MasterClient/.gitignore
vendored
2
dep/MasterClient/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/MasterServer/.gitignore
vendored
2
dep/MasterServer/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/Mingw/Debug/.gitignore
vendored
2
dep/Mingw/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/Mingw/Release/.gitignore
vendored
2
dep/Mingw/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/Mingw/SDL/Debug/.gitignore
vendored
2
dep/Mingw/SDL/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/Mingw/SDL/Release/.gitignore
vendored
2
dep/Mingw/SDL/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/Mingw64/Debug/.gitignore
vendored
2
dep/Mingw64/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/Mingw64/Release/.gitignore
vendored
2
dep/Mingw64/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/Mingw64/SDL/Debug/.gitignore
vendored
2
dep/Mingw64/SDL/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/Mingw64/SDL/Release/.gitignore
vendored
2
dep/Mingw64/SDL/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/SDL/Release/.gitignore
vendored
2
dep/SDL/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/VC/.gitignore
vendored
2
dep/VC/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/VC9/.gitignore
vendored
2
dep/VC9/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/cygwin/Debug/.gitignore
vendored
2
dep/cygwin/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/cygwin/Release/.gitignore
vendored
2
dep/cygwin/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/dummy/.gitignore
vendored
2
dep/dummy/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
File diff suppressed because it is too large
Load diff
|
@ -15,7 +15,7 @@ common
|
||||||
ignoredextensions = "wad pk3 pk7 bak backup1 backup2 backup3 zip rar 7z";
|
ignoredextensions = "wad pk3 pk7 bak backup1 backup2 backup3 zip rar 7z";
|
||||||
|
|
||||||
// Default testing parameters
|
// Default testing parameters
|
||||||
testparameters = "-file \"%AP\" \"%F\" -warp %L";
|
testparameters = "-folder \"%AF\" -file \"%AA\" \"%F\" -warp %L";
|
||||||
testshortpaths = true;
|
testshortpaths = true;
|
||||||
|
|
||||||
// Action special help
|
// Action special help
|
||||||
|
@ -26,7 +26,7 @@ common
|
||||||
generalizedsectors = true;
|
generalizedsectors = true;
|
||||||
|
|
||||||
// Maximum safe map size check (0 means skip check)
|
// Maximum safe map size check (0 means skip check)
|
||||||
safeboundary = 1;
|
safeboundary = 0;
|
||||||
|
|
||||||
// Map boundaries. Map objects can only be placed within these boundaries
|
// Map boundaries. Map objects can only be placed within these boundaries
|
||||||
leftboundary = -32768;
|
leftboundary = -32768;
|
||||||
|
@ -40,6 +40,8 @@ common
|
||||||
defaultflatscale = 1.0f;
|
defaultflatscale = 1.0f;
|
||||||
scaledtextureoffsets = true;
|
scaledtextureoffsets = true;
|
||||||
|
|
||||||
|
maxcolormapalpha = 25;
|
||||||
|
|
||||||
// Thing number for start position in 3D Mode
|
// Thing number for start position in 3D Mode
|
||||||
start3dmode = 3328;
|
start3dmode = 3328;
|
||||||
|
|
||||||
|
@ -68,131 +70,6 @@ common
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mapformat_doom
|
|
||||||
{
|
|
||||||
// The format interface handles the map data format
|
|
||||||
formatinterface = "DoomMapSetIO";
|
|
||||||
|
|
||||||
// Default nodebuilder configurations
|
|
||||||
defaultsavecompiler = "zennode_normal";
|
|
||||||
defaulttestcompiler = "zennode_fast";
|
|
||||||
|
|
||||||
/*
|
|
||||||
GAME DETECT PATTERN
|
|
||||||
Used to guess the game for which a WAD file is made.
|
|
||||||
|
|
||||||
1 = One of these lumps must exist
|
|
||||||
2 = None of these lumps must exist
|
|
||||||
3 = All of these lumps must exist
|
|
||||||
*/
|
|
||||||
|
|
||||||
gamedetect
|
|
||||||
{
|
|
||||||
EXTENDED = 2;
|
|
||||||
|
|
||||||
|
|
||||||
BEHAVIOR = 2;
|
|
||||||
|
|
||||||
E#M# = 2;
|
|
||||||
|
|
||||||
MAP?? = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
MAP LUMP NAMES
|
|
||||||
Map lumps are loaded with the map as long as they are right after each other. When the editor
|
|
||||||
meets a lump which is not defined in this list it will ignore the map if not satisfied.
|
|
||||||
The order of items defines the order in which lumps will be written to WAD file on save.
|
|
||||||
To indicate the map header lump, use ~MAP
|
|
||||||
|
|
||||||
Legenda:
|
|
||||||
required = Lump is required to exist.
|
|
||||||
blindcopy = Lump will be copied along with the map blindly. (usefull for lumps Doom Builder doesn't use)
|
|
||||||
nodebuild = The nodebuilder generates this lump.
|
|
||||||
allowempty = The nodebuilder is allowed to leave this lump empty.
|
|
||||||
script = This lump is a text-based script. Specify the filename of the script configuration to use.
|
|
||||||
*/
|
|
||||||
|
|
||||||
maplumpnames
|
|
||||||
{
|
|
||||||
include("SRB222_misc.cfg", "doommaplumpnames");
|
|
||||||
}
|
|
||||||
|
|
||||||
// When this is set to true, sectors with the same tag will light up when a line is highlighted
|
|
||||||
linetagindicatesectors = true;
|
|
||||||
|
|
||||||
// Special linedefs
|
|
||||||
include("SRB222_misc.cfg", "speciallinedefs");
|
|
||||||
|
|
||||||
// Default flags for first new thing
|
|
||||||
defaultthingflags
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
// DEFAULT SECTOR BRIGHTNESS LEVELS
|
|
||||||
sectorbrightness
|
|
||||||
{
|
|
||||||
include("SRB222_misc.cfg", "sectorbrightness");
|
|
||||||
}
|
|
||||||
|
|
||||||
// SECTOR TYPES
|
|
||||||
sectortypes
|
|
||||||
{
|
|
||||||
include("SRB222_sectors.cfg", "sectortypes");
|
|
||||||
}
|
|
||||||
|
|
||||||
// GENERALISED SECTOR TYPES
|
|
||||||
gen_sectortypes
|
|
||||||
{
|
|
||||||
include("SRB222_sectors.cfg", "gen_sectortypes");
|
|
||||||
}
|
|
||||||
|
|
||||||
// LINEDEF FLAGS
|
|
||||||
linedefflags
|
|
||||||
{
|
|
||||||
include("SRB222_misc.cfg", "linedefflags");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Linedef flags UDMF translation table
|
|
||||||
// This is needed for copy/paste and prefabs to work properly
|
|
||||||
// When the UDMF field name is prefixed with ! it is inverted
|
|
||||||
linedefflagstranslation
|
|
||||||
{
|
|
||||||
include("SRB222_misc.cfg", "linedefflagstranslation");
|
|
||||||
}
|
|
||||||
|
|
||||||
// LINEDEF ACTIVATIONS
|
|
||||||
linedefactivations
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
// LINEDEF TYPES
|
|
||||||
linedeftypes
|
|
||||||
{
|
|
||||||
include("SRB222_linedefs.cfg", "doom");
|
|
||||||
}
|
|
||||||
|
|
||||||
// THING FLAGS
|
|
||||||
thingflags
|
|
||||||
{
|
|
||||||
include("SRB222_misc.cfg", "thingflags");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Thing flags UDMF translation table
|
|
||||||
// This is needed for copy/paste and prefabs to work properly
|
|
||||||
// When the UDMF field name is prefixed with ! it is inverted
|
|
||||||
thingflagstranslation
|
|
||||||
{
|
|
||||||
include("SRB222_misc.cfg", "thingflagstranslation");
|
|
||||||
}
|
|
||||||
|
|
||||||
// THING FLAGS ERROR MASK
|
|
||||||
// Mask for the thing flags which indicates the options
|
|
||||||
// that make the same thing appear in the same modes
|
|
||||||
thingflagsmask1 = 7; // 1 + 2 + 4
|
|
||||||
thingflagsmask2 = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
mapformat_udmf
|
mapformat_udmf
|
||||||
{
|
{
|
||||||
// The format interface handles the map data format
|
// The format interface handles the map data format
|
||||||
|
@ -216,9 +93,17 @@ mapformat_udmf
|
||||||
{
|
{
|
||||||
include("SRB222_misc.cfg", "universalfields");
|
include("SRB222_misc.cfg", "universalfields");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Disable Doom-related modes that don't make sense for SRB2
|
||||||
|
soundsupport = false;
|
||||||
|
automapsupport = false;
|
||||||
|
|
||||||
// When this is set to true, sectors with the same tag will light up when a line is highlighted
|
// When this is set to true, sectors with the same tag will light up when a line is highlighted
|
||||||
linetagindicatesectors = false;
|
linetagindicatesectors = false;
|
||||||
|
localsidedeftextureoffsets = true;
|
||||||
|
distinctfloorandceilingbrightness = true;
|
||||||
|
|
||||||
|
planeequationsupport = true;
|
||||||
|
|
||||||
// Special linedefs
|
// Special linedefs
|
||||||
include("SRB222_misc.cfg", "speciallinedefs_udmf");
|
include("SRB222_misc.cfg", "speciallinedefs_udmf");
|
||||||
|
@ -234,23 +119,19 @@ mapformat_udmf
|
||||||
include("SRB222_misc.cfg", "sectorflags");
|
include("SRB222_misc.cfg", "sectorflags");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sectorflagscategories
|
||||||
|
{
|
||||||
|
include("SRB222_misc.cfg", "sectorflagscategories");
|
||||||
|
}
|
||||||
|
|
||||||
// DEFAULT SECTOR BRIGHTNESS LEVELS
|
// DEFAULT SECTOR BRIGHTNESS LEVELS
|
||||||
sectorbrightness
|
sectorbrightness
|
||||||
{
|
{
|
||||||
include("SRB222_misc.cfg", "sectorbrightness");
|
include("SRB222_misc.cfg", "sectorbrightness");
|
||||||
}
|
}
|
||||||
|
|
||||||
// SECTOR TYPES
|
damagetypes = "Generic Water Fire Lava Electric Spike DeathPitTilt DeathPitNoTilt Instakill SpecialStage";
|
||||||
sectortypes
|
triggerertypes = "Player AllPlayers Mobj";
|
||||||
{
|
|
||||||
include("SRB222_sectors.cfg", "sectortypes");
|
|
||||||
}
|
|
||||||
|
|
||||||
// GENERALISED SECTOR TYPES
|
|
||||||
gen_sectortypes
|
|
||||||
{
|
|
||||||
include("SRB222_sectors.cfg", "gen_sectortypes");
|
|
||||||
}
|
|
||||||
|
|
||||||
// LINEDEF FLAGS
|
// LINEDEF FLAGS
|
||||||
linedefflags
|
linedefflags
|
||||||
|
@ -264,10 +145,10 @@ mapformat_udmf
|
||||||
}
|
}
|
||||||
|
|
||||||
// LINEDEF RENDERSTYLES
|
// LINEDEF RENDERSTYLES
|
||||||
/*linedefrenderstyles
|
linedefrenderstyles
|
||||||
{
|
{
|
||||||
include("SRB222_misc.cfg", "linedefrenderstyles");
|
include("SRB222_misc.cfg", "linedefrenderstyles");
|
||||||
}*/
|
}
|
||||||
|
|
||||||
// THING FLAGS
|
// THING FLAGS
|
||||||
thingflags
|
thingflags
|
||||||
|
@ -286,7 +167,12 @@ mapformat_udmf
|
||||||
// How to compare thing flags (for the stuck things error checker)
|
// How to compare thing flags (for the stuck things error checker)
|
||||||
thingflagscompare
|
thingflagscompare
|
||||||
{
|
{
|
||||||
include("UDMF_misc.cfg", "thingflagscompare");
|
}
|
||||||
|
|
||||||
|
// THING TYPES
|
||||||
|
thingtypes
|
||||||
|
{
|
||||||
|
include("SRB222_things.cfg", "udmf");
|
||||||
}
|
}
|
||||||
|
|
||||||
// LINEDEF TYPES
|
// LINEDEF TYPES
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,24 +1,3 @@
|
||||||
linedefflags
|
|
||||||
{
|
|
||||||
1 = "[0] Impassable";
|
|
||||||
2 = "[1] Block Enemies";
|
|
||||||
4 = "[2] Double-Sided";
|
|
||||||
8 = "[3] Upper Unpegged";
|
|
||||||
16 = "[4] Lower Unpegged";
|
|
||||||
32 = "[5] Slope Skew (E1)";
|
|
||||||
64 = "[6] Not Climbable";
|
|
||||||
128 = "[7] No Midtexture Skew (E2)";
|
|
||||||
256 = "[8] Peg Midtexture (E3)";
|
|
||||||
512 = "[9] Solid Midtexture (E4)";
|
|
||||||
1024 = "[10] Repeat Midtexture (E5)";
|
|
||||||
2048 = "[11] Netgame Only";
|
|
||||||
4096 = "[12] No Netgame";
|
|
||||||
8192 = "[13] Effect 6";
|
|
||||||
16384 = "[14] Bouncy Wall";
|
|
||||||
32768 = "[15] Transfer Line";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Linedef flags UDMF translation table
|
// Linedef flags UDMF translation table
|
||||||
// This is needed for copy/paste and prefabs to work properly
|
// This is needed for copy/paste and prefabs to work properly
|
||||||
// When the UDMF field name is prefixed with ! it is inverted
|
// When the UDMF field name is prefixed with ! it is inverted
|
||||||
|
@ -42,7 +21,6 @@ linedefflagstranslation
|
||||||
32768 = "transfer";
|
32768 = "transfer";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
linedefflags_udmf
|
linedefflags_udmf
|
||||||
{
|
{
|
||||||
blocking = "Impassable";
|
blocking = "Impassable";
|
||||||
|
@ -58,42 +36,99 @@ linedefflags_udmf
|
||||||
wrapmidtex = "Repeat Midtexture";
|
wrapmidtex = "Repeat Midtexture";
|
||||||
netonly = "Netgame Only";
|
netonly = "Netgame Only";
|
||||||
nonet = "No Netgame";
|
nonet = "No Netgame";
|
||||||
effect6 = "Effect 6";
|
|
||||||
bouncy = "Bouncy Wall";
|
bouncy = "Bouncy Wall";
|
||||||
transfer = "Transfer Line";
|
transfer = "Transfer Line";
|
||||||
}
|
}
|
||||||
|
|
||||||
/*linedefrenderstyles
|
linedefrenderstyles
|
||||||
{
|
{
|
||||||
translucent = "Translucent";
|
translucent = "Translucent";
|
||||||
|
add = "Add";
|
||||||
|
subtract = "Subtract";
|
||||||
|
reversesubtract = "Reverse subtract";
|
||||||
|
modulate = "Modulate";
|
||||||
fog = "Fog";
|
fog = "Fog";
|
||||||
}*/
|
}
|
||||||
|
|
||||||
sectorflags
|
sectorflags
|
||||||
{
|
{
|
||||||
colormapfog = "Fog Planes in Colormap";
|
invertprecip = "Invert Precipitation";
|
||||||
colormapfadesprites = "Fade Fullbright in Colormap";
|
gravityflip = "Flip Objects in Reverse Gravity";
|
||||||
colormapprotected = "Protected Colormap";
|
heatwave = "Heat Wave";
|
||||||
|
noclipcamera = "Intangible to the Camera";
|
||||||
|
colormapfog = "Fog Planes";
|
||||||
|
colormapfadesprites = "Fade Fullbright";
|
||||||
|
colormapprotected = "Protected from Tagging";
|
||||||
|
outerspace = "Space Countdown";
|
||||||
|
doublestepup = "Ramp Sector (double step-up/down)";
|
||||||
|
nostepdown = "Non-Ramp Sector (No step-down)";
|
||||||
|
speedpad = "Speed Pad";
|
||||||
|
starpostactivator = "Star Post Activator";
|
||||||
|
exit = "Exit";
|
||||||
|
specialstagepit = "Special Stage Pit";
|
||||||
|
returnflag = "Return Flag";
|
||||||
|
redteambase = "Red Team Base";
|
||||||
|
blueteambase = "Blue Team Base";
|
||||||
|
fan = "Fan Sector";
|
||||||
|
supertransform = "Super Sonic Transform";
|
||||||
|
forcespin = "Force Spin";
|
||||||
|
zoomtubestart = "Zoom Tube Start";
|
||||||
|
zoomtubeend = "Zoom Tube End";
|
||||||
|
finishline = "Circuit Finish Line";
|
||||||
|
ropehang = "Rope Hang";
|
||||||
|
jumpflip = "Flip Gravity on Jump";
|
||||||
|
gravityoverride = "Make Reverse Gravity Temporary";
|
||||||
|
flipspecial_nofloor = "No Trigger on Floor Touch";
|
||||||
|
flipspecial_ceiling = "Trigger on Ceiling Touch";
|
||||||
|
triggerspecial_touch = "Trigger on Edge Touch";
|
||||||
|
triggerspecial_headbump = "Trigger on Headbump";
|
||||||
|
triggerline_plane = "Linedef Trigger Requires Plane Touch";
|
||||||
|
triggerline_mobj = "Non-Pushables Can Trigger Linedef";
|
||||||
}
|
}
|
||||||
|
|
||||||
thingflags
|
sectorflagscategories
|
||||||
{
|
{
|
||||||
1 = "[1] Extra";
|
invertprecip = "regular";
|
||||||
2 = "[2] Flip";
|
gravityflip = "regular";
|
||||||
4 = "[4] Special";
|
heatwave = "regular";
|
||||||
8 = "[8] Ambush";
|
noclipcamera = "regular";
|
||||||
|
colormapfog = "colormap";
|
||||||
|
colormapfadesprites = "colormap";
|
||||||
|
colormapprotected = "colormap";
|
||||||
|
outerspace = "special";
|
||||||
|
doublestepup = "special";
|
||||||
|
nostepdown = "special";
|
||||||
|
speedpad = "special";
|
||||||
|
starpostactivator = "special";
|
||||||
|
exit = "special";
|
||||||
|
specialstagepit = "special";
|
||||||
|
returnflag = "special";
|
||||||
|
redteambase = "special";
|
||||||
|
blueteambase = "special";
|
||||||
|
fan = "special";
|
||||||
|
supertransform = "special";
|
||||||
|
forcespin = "special";
|
||||||
|
zoomtubestart = "special";
|
||||||
|
zoomtubeend = "special";
|
||||||
|
finishline = "special";
|
||||||
|
ropehang = "special";
|
||||||
|
jumpflip = "special";
|
||||||
|
gravityoverride = "special";
|
||||||
|
flipspecial_nofloor = "trigger";
|
||||||
|
flipspecial_ceiling = "trigger";
|
||||||
|
triggerspecial_touch = "trigger";
|
||||||
|
triggerspecial_headbump = "trigger";
|
||||||
|
triggerline_plane = "trigger";
|
||||||
|
triggerline_mobj = "trigger";
|
||||||
}
|
}
|
||||||
|
|
||||||
// THING FLAGS
|
// THING FLAGS
|
||||||
thingflags_udmf
|
thingflags_udmf
|
||||||
{
|
{
|
||||||
extra = "Extra";
|
|
||||||
flip = "Flip";
|
flip = "Flip";
|
||||||
special = "Special";
|
absolutez = "Absolute Z height";
|
||||||
ambush = "Ambush";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Thing flags UDMF translation table
|
// Thing flags UDMF translation table
|
||||||
// This is needed for copy/paste and prefabs to work properly
|
// This is needed for copy/paste and prefabs to work properly
|
||||||
// When the UDMF field name is prefixed with ! it is inverted
|
// When the UDMF field name is prefixed with ! it is inverted
|
||||||
|
@ -103,9 +138,9 @@ thingflagstranslation
|
||||||
2 = "flip";
|
2 = "flip";
|
||||||
4 = "special";
|
4 = "special";
|
||||||
8 = "ambush";
|
8 = "ambush";
|
||||||
|
16 = "absolutez";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// DEFAULT SECTOR BRIGHTNESS LEVELS
|
// DEFAULT SECTOR BRIGHTNESS LEVELS
|
||||||
sectorbrightness
|
sectorbrightness
|
||||||
{
|
{
|
||||||
|
@ -144,6 +179,8 @@ sectorbrightness
|
||||||
0;
|
0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
numbrightnesslevels = 32;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
TEXTURES AND FLAT SOURCES
|
TEXTURES AND FLAT SOURCES
|
||||||
This tells Doom Builder where to find the information for textures
|
This tells Doom Builder where to find the information for textures
|
||||||
|
@ -194,68 +231,14 @@ universalfields
|
||||||
{
|
{
|
||||||
sector
|
sector
|
||||||
{
|
{
|
||||||
lightalpha
|
|
||||||
{
|
|
||||||
type = 0;
|
|
||||||
default = 25;
|
|
||||||
}
|
|
||||||
|
|
||||||
fadealpha
|
|
||||||
{
|
|
||||||
type = 0;
|
|
||||||
default = 25;
|
|
||||||
}
|
|
||||||
|
|
||||||
fadestart
|
|
||||||
{
|
|
||||||
type = 0;
|
|
||||||
default = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
fadeend
|
|
||||||
{
|
|
||||||
type = 0;
|
|
||||||
default = 33;
|
|
||||||
}
|
|
||||||
|
|
||||||
foglighting
|
|
||||||
{
|
|
||||||
type = 3;
|
|
||||||
default = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
linedef
|
linedef
|
||||||
{
|
{
|
||||||
arg5
|
|
||||||
{
|
|
||||||
type = 0;
|
|
||||||
default = 0;
|
|
||||||
}
|
|
||||||
stringarg0
|
|
||||||
{
|
|
||||||
type = 2;
|
|
||||||
default = "";
|
|
||||||
}
|
|
||||||
stringarg1
|
|
||||||
{
|
|
||||||
type = 2;
|
|
||||||
default = "";
|
|
||||||
}
|
|
||||||
executordelay
|
|
||||||
{
|
|
||||||
type = 0;
|
|
||||||
default = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sidedef
|
sidedef
|
||||||
{
|
{
|
||||||
repeatcnt
|
|
||||||
{
|
|
||||||
type = 0;
|
|
||||||
default = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
thing
|
thing
|
||||||
|
@ -278,87 +261,6 @@ allowempty = The nodebuilder is allowed to leave this lump empty.
|
||||||
scriptbuild = This lump is a text-based script, which should be compiled using current script compiler;
|
scriptbuild = This lump is a text-based script, which should be compiled using current script compiler;
|
||||||
script = This lump is a text-based script. Specify the filename of the script configuration to use.
|
script = This lump is a text-based script. Specify the filename of the script configuration to use.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
doommaplumpnames
|
|
||||||
{
|
|
||||||
~MAP
|
|
||||||
{
|
|
||||||
required = true;
|
|
||||||
blindcopy = true;
|
|
||||||
nodebuild = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
THINGS
|
|
||||||
{
|
|
||||||
required = true;
|
|
||||||
nodebuild = true;
|
|
||||||
allowempty = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
LINEDEFS
|
|
||||||
{
|
|
||||||
required = true;
|
|
||||||
nodebuild = true;
|
|
||||||
allowempty = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
SIDEDEFS
|
|
||||||
{
|
|
||||||
required = true;
|
|
||||||
nodebuild = true;
|
|
||||||
allowempty = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
VERTEXES
|
|
||||||
{
|
|
||||||
required = true;
|
|
||||||
nodebuild = true;
|
|
||||||
allowempty = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
SEGS
|
|
||||||
{
|
|
||||||
required = false;
|
|
||||||
nodebuild = true;
|
|
||||||
allowempty = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
SSECTORS
|
|
||||||
{
|
|
||||||
required = false;
|
|
||||||
nodebuild = true;
|
|
||||||
allowempty = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
NODES
|
|
||||||
{
|
|
||||||
required = false;
|
|
||||||
nodebuild = true;
|
|
||||||
allowempty = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTORS
|
|
||||||
{
|
|
||||||
required = true;
|
|
||||||
nodebuild = true;
|
|
||||||
allowempty = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
REJECT
|
|
||||||
{
|
|
||||||
required = false;
|
|
||||||
nodebuild = true;
|
|
||||||
allowempty = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
BLOCKMAP
|
|
||||||
{
|
|
||||||
required = false;
|
|
||||||
nodebuild = true;
|
|
||||||
allowempty = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
udmfmaplumpnames
|
udmfmaplumpnames
|
||||||
{
|
{
|
||||||
ZNODES
|
ZNODES
|
||||||
|
@ -406,6 +308,12 @@ enums
|
||||||
1 = "Yes";
|
1 = "Yes";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setadd
|
||||||
|
{
|
||||||
|
0 = "Set";
|
||||||
|
1 = "Add";
|
||||||
|
}
|
||||||
|
|
||||||
onoff
|
onoff
|
||||||
{
|
{
|
||||||
0 = "On";
|
0 = "On";
|
||||||
|
@ -437,6 +345,13 @@ enums
|
||||||
2 = "Back";
|
2 = "Back";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
frontbackboth
|
||||||
|
{
|
||||||
|
0 = "Front";
|
||||||
|
1 = "Back";
|
||||||
|
2 = "Front and back";
|
||||||
|
}
|
||||||
|
|
||||||
tangibility
|
tangibility
|
||||||
{
|
{
|
||||||
1 = "Intangible from top";
|
1 = "Intangible from top";
|
||||||
|
@ -444,6 +359,100 @@ enums
|
||||||
4 = "Don't block players";
|
4 = "Don't block players";
|
||||||
8 = "Don't block non-players";
|
8 = "Don't block non-players";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
floorceiling
|
||||||
|
{
|
||||||
|
0 = "Floor";
|
||||||
|
1 = "Ceiling";
|
||||||
|
2 = "Both";
|
||||||
|
}
|
||||||
|
|
||||||
|
scrollcarry
|
||||||
|
{
|
||||||
|
0 = "Scroll and carry";
|
||||||
|
1 = "Scroll";
|
||||||
|
2 = "Carry";
|
||||||
|
}
|
||||||
|
|
||||||
|
scrolltype
|
||||||
|
{
|
||||||
|
0 = "Regular";
|
||||||
|
1 = "Accelerative";
|
||||||
|
2 = "Displacement";
|
||||||
|
}
|
||||||
|
|
||||||
|
comparison
|
||||||
|
{
|
||||||
|
0 = "Equal";
|
||||||
|
1 = "Less than or equal";
|
||||||
|
2 = "Greater than or equal";
|
||||||
|
}
|
||||||
|
|
||||||
|
triggertype
|
||||||
|
{
|
||||||
|
0 = "Continuous";
|
||||||
|
1 = "Once";
|
||||||
|
2 = "Each time on entry";
|
||||||
|
3 = "Each time on entry/exit";
|
||||||
|
}
|
||||||
|
|
||||||
|
xtriggertype
|
||||||
|
{
|
||||||
|
0 = "Continuous";
|
||||||
|
1 = "Each time on entry";
|
||||||
|
2 = "Each time on entry/exit";
|
||||||
|
}
|
||||||
|
|
||||||
|
team
|
||||||
|
{
|
||||||
|
0 = "Red";
|
||||||
|
1 = "Blue";
|
||||||
|
}
|
||||||
|
|
||||||
|
flagcheck
|
||||||
|
{
|
||||||
|
0 = "Has all";
|
||||||
|
1 = "Has any";
|
||||||
|
2 = "Has exactly";
|
||||||
|
3 = "Doesn't have all";
|
||||||
|
4 = "Doesn't have any";
|
||||||
|
}
|
||||||
|
|
||||||
|
maceflags
|
||||||
|
{
|
||||||
|
1 = "Double size";
|
||||||
|
2 = "No sounds";
|
||||||
|
4 = "Player-turnable chain";
|
||||||
|
8 = "Swing instead of spin";
|
||||||
|
16 = "Make chain from end item";
|
||||||
|
32 = "Spawn link at origin";
|
||||||
|
64 = "Clip inside ground";
|
||||||
|
128 = "No distance check";
|
||||||
|
}
|
||||||
|
|
||||||
|
pushablebehavior
|
||||||
|
{
|
||||||
|
0 = "Normal";
|
||||||
|
1 = "Slide";
|
||||||
|
2 = "Immovable";
|
||||||
|
3 = "Classic";
|
||||||
|
}
|
||||||
|
|
||||||
|
monitorrespawn
|
||||||
|
{
|
||||||
|
0 = "Same item";
|
||||||
|
1 = "Random (Weak)";
|
||||||
|
2 = "Random (Strong)";
|
||||||
|
}
|
||||||
|
|
||||||
|
blendmodes
|
||||||
|
{
|
||||||
|
0 = "Translucent";
|
||||||
|
1 = "Add";
|
||||||
|
2 = "Subtract";
|
||||||
|
3 = "Reverse subtract";
|
||||||
|
4 = "Modulate";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Default things filters
|
//Default things filters
|
||||||
|
@ -475,48 +484,32 @@ thingsfilters
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//filter3
|
||||||
|
//{
|
||||||
|
// name = "Normal Gravity";
|
||||||
|
// category = "";
|
||||||
|
// type = -1;
|
||||||
|
//
|
||||||
|
// fields
|
||||||
|
// {
|
||||||
|
// 2 = false;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
filter3
|
//filter4
|
||||||
{
|
//{
|
||||||
name = "Normal Gravity";
|
// name = "Reverse Gravity";
|
||||||
category = "";
|
// category = "";
|
||||||
type = -1;
|
// type = -1;
|
||||||
|
//
|
||||||
fields
|
// fields
|
||||||
{
|
// {
|
||||||
2 = false;
|
// 2 = true;
|
||||||
}
|
// }
|
||||||
|
//}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
filter4
|
|
||||||
{
|
|
||||||
name = "Reverse Gravity";
|
|
||||||
category = "";
|
|
||||||
type = -1;
|
|
||||||
|
|
||||||
fields
|
|
||||||
{
|
|
||||||
2 = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Special linedefs
|
// Special linedefs
|
||||||
speciallinedefs
|
|
||||||
{
|
|
||||||
soundlinedefflag = 64; // See linedefflags
|
|
||||||
singlesidedflag = 1; // See linedefflags
|
|
||||||
doublesidedflag = 4; // See linedefflags
|
|
||||||
impassableflag = 1;
|
|
||||||
upperunpeggedflag = 8;
|
|
||||||
lowerunpeggedflag = 16;
|
|
||||||
repeatmidtextureflag = 1024;
|
|
||||||
pegmidtextureflag = 256;
|
|
||||||
}
|
|
||||||
|
|
||||||
speciallinedefs_udmf
|
speciallinedefs_udmf
|
||||||
{
|
{
|
||||||
soundlinedefflag = "noclimb";
|
soundlinedefflag = "noclimb";
|
||||||
|
@ -527,6 +520,8 @@ speciallinedefs_udmf
|
||||||
lowerunpeggedflag = "dontpegbottom";
|
lowerunpeggedflag = "dontpegbottom";
|
||||||
repeatmidtextureflag = "wrapmidtex";
|
repeatmidtextureflag = "wrapmidtex";
|
||||||
pegmidtextureflag = "midpeg";
|
pegmidtextureflag = "midpeg";
|
||||||
|
slopeskewflag = "skewtd";
|
||||||
|
nomidtextureskewflag = "noskew";
|
||||||
}
|
}
|
||||||
|
|
||||||
scriptlumpnames
|
scriptlumpnames
|
||||||
|
@ -622,4 +617,4 @@ flats
|
||||||
start = "F_START";
|
start = "F_START";
|
||||||
end = "FF_END";
|
end = "FF_END";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,109 +0,0 @@
|
||||||
sectortypes
|
|
||||||
{
|
|
||||||
0 = "Normal";
|
|
||||||
1 = "Damage";
|
|
||||||
2 = "Damage (Water)";
|
|
||||||
3 = "Damage (Fire)";
|
|
||||||
4 = "Damage (Electrical)";
|
|
||||||
5 = "Spikes";
|
|
||||||
6 = "Death Pit (Camera Tilt)";
|
|
||||||
7 = "Death Pit (No Camera Tilt)";
|
|
||||||
8 = "Instant Kill";
|
|
||||||
9 = "Ring Drainer (Floor Touch)";
|
|
||||||
10 = "Ring Drainer (Anywhere in Sector)";
|
|
||||||
11 = "Special Stage Damage";
|
|
||||||
12 = "Space Countdown";
|
|
||||||
13 = "Ramp Sector (double step-up/down)";
|
|
||||||
14 = "Non-Ramp Sector (no step-down)";
|
|
||||||
15 = "Bouncy FOF";
|
|
||||||
16 = "Trigger Line Ex. (Pushable Objects)";
|
|
||||||
32 = "Trigger Line Ex. (Anywhere, All Players)";
|
|
||||||
48 = "Trigger Line Ex. (Floor Touch, All Players)";
|
|
||||||
64 = "Trigger Line Ex. (Anywhere in Sector)";
|
|
||||||
80 = "Trigger Line Ex. (Floor Touch)";
|
|
||||||
96 = "Trigger Line Ex. (Emerald Check)";
|
|
||||||
112 = "Trigger Line Ex. (NiGHTS Mare)";
|
|
||||||
128 = "Check for Linedef Executor on FOFs";
|
|
||||||
144 = "Egg Capsule";
|
|
||||||
160 = "Special Stage Time/Spheres Parameters";
|
|
||||||
176 = "Custom Global Gravity";
|
|
||||||
512 = "Wind/Current";
|
|
||||||
1024 = "Conveyor Belt";
|
|
||||||
1280 = "Speed Pad";
|
|
||||||
4096 = "Star Post Activator";
|
|
||||||
8192 = "Exit/Special Stage Pit/Return Flag";
|
|
||||||
12288 = "CTF Red Team Base";
|
|
||||||
16384 = "CTF Blue Team Base";
|
|
||||||
20480 = "Fan Sector";
|
|
||||||
24576 = "Super Sonic Transform";
|
|
||||||
28672 = "Force Spin";
|
|
||||||
32768 = "Zoom Tube Start";
|
|
||||||
36864 = "Zoom Tube End";
|
|
||||||
40960 = "Circuit Finish Line";
|
|
||||||
45056 = "Rope Hang";
|
|
||||||
49152 = "Intangible to the Camera";
|
|
||||||
}
|
|
||||||
|
|
||||||
gen_sectortypes
|
|
||||||
{
|
|
||||||
first
|
|
||||||
{
|
|
||||||
0 = "Normal";
|
|
||||||
1 = "Damage";
|
|
||||||
2 = "Damage (Water)";
|
|
||||||
3 = "Damage (Fire)";
|
|
||||||
4 = "Damage (Electrical)";
|
|
||||||
5 = "Spikes";
|
|
||||||
6 = "Death Pit (Camera Tilt)";
|
|
||||||
7 = "Death Pit (No Camera Tilt)";
|
|
||||||
8 = "Instant Kill";
|
|
||||||
9 = "Ring Drainer (Floor Touch)";
|
|
||||||
10 = "Ring Drainer (Anywhere in Sector)";
|
|
||||||
11 = "Special Stage Damage";
|
|
||||||
12 = "Space Countdown";
|
|
||||||
13 = "Ramp Sector (double step-up/down)";
|
|
||||||
14 = "Non-Ramp Sector (no step-down)";
|
|
||||||
15 = "Bouncy FOF";
|
|
||||||
}
|
|
||||||
|
|
||||||
second
|
|
||||||
{
|
|
||||||
0 = "Normal";
|
|
||||||
16 = "Trigger Line Ex. (Pushable Objects)";
|
|
||||||
32 = "Trigger Line Ex. (Anywhere, All Players)";
|
|
||||||
48 = "Trigger Line Ex. (Floor Touch, All Players)";
|
|
||||||
64 = "Trigger Line Ex. (Anywhere in Sector)";
|
|
||||||
80 = "Trigger Line Ex. (Floor Touch)";
|
|
||||||
96 = "Trigger Line Ex. (Emerald Check)";
|
|
||||||
112 = "Trigger Line Ex. (NiGHTS Mare)";
|
|
||||||
128 = "Check for Linedef Executor on FOFs";
|
|
||||||
144 = "Egg Capsule";
|
|
||||||
160 = "Special Stage Time/Spheres Parameters";
|
|
||||||
176 = "Custom Global Gravity";
|
|
||||||
}
|
|
||||||
|
|
||||||
third
|
|
||||||
{
|
|
||||||
0 = "Normal";
|
|
||||||
512 = "Wind/Current";
|
|
||||||
1024 = "Conveyor Belt";
|
|
||||||
1280 = "Speed Pad";
|
|
||||||
}
|
|
||||||
|
|
||||||
fourth
|
|
||||||
{
|
|
||||||
0 = "Normal";
|
|
||||||
4096 = "Star Post Activator";
|
|
||||||
8192 = "Exit/Special Stage Pit/Return Flag";
|
|
||||||
12288 = "CTF Red Team Base";
|
|
||||||
16384 = "CTF Blue Team Base";
|
|
||||||
20480 = "Fan Sector";
|
|
||||||
24576 = "Super Sonic Transform";
|
|
||||||
28672 = "Force Spin";
|
|
||||||
32768 = "Zoom Tube Start";
|
|
||||||
36864 = "Zoom Tube End";
|
|
||||||
40960 = "Circuit Finish Line";
|
|
||||||
45056 = "Rope Hang";
|
|
||||||
49152 = "Intangible to the Camera";
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,38 +0,0 @@
|
||||||
/************************************************************************\
|
|
||||||
Ultimate Doom Builder Game Configuration for Sonic Robo Blast 2 Version 2.2
|
|
||||||
\************************************************************************/
|
|
||||||
|
|
||||||
// This is required to prevent accidental use of a different configuration
|
|
||||||
type = "Doom Builder 2 Game Configuration";
|
|
||||||
|
|
||||||
// This is the title to show for this game
|
|
||||||
game = "Sonic Robo Blast 2 - 2.2 (Doom format)";
|
|
||||||
|
|
||||||
// This is the simplified game engine/sourceport name
|
|
||||||
engine = "zdoom";
|
|
||||||
|
|
||||||
// Settings common to all games and all map formats
|
|
||||||
include("Includes\\SRB222_common.cfg", "common");
|
|
||||||
|
|
||||||
// Settings common to Doom map format
|
|
||||||
include("Includes\\SRB222_common.cfg", "mapformat_doom");
|
|
||||||
|
|
||||||
include("Includes\\Game_SRB222.cfg");
|
|
||||||
|
|
||||||
// Script lumps detection
|
|
||||||
scriptlumpnames
|
|
||||||
{
|
|
||||||
include("Includes\\SRB222_misc.cfg", "scriptlumpnames");
|
|
||||||
}
|
|
||||||
|
|
||||||
// THING TYPES
|
|
||||||
thingtypes
|
|
||||||
{
|
|
||||||
include("Includes\\SRB222_things.cfg");
|
|
||||||
}
|
|
||||||
|
|
||||||
//Default things filters
|
|
||||||
thingsfilters
|
|
||||||
{
|
|
||||||
include("Includes\\SRB222_misc.cfg", "thingsfilters");
|
|
||||||
}
|
|
|
@ -25,12 +25,6 @@ scriptlumpnames
|
||||||
include("Includes\\SRB222_misc.cfg", "scriptlumpnames");
|
include("Includes\\SRB222_misc.cfg", "scriptlumpnames");
|
||||||
}
|
}
|
||||||
|
|
||||||
// THING TYPES
|
|
||||||
thingtypes
|
|
||||||
{
|
|
||||||
include("Includes\\SRB222_things.cfg");
|
|
||||||
}
|
|
||||||
|
|
||||||
//Default things filters
|
//Default things filters
|
||||||
thingsfilters
|
thingsfilters
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<ImportGroup Label="PropertySheets" />
|
|
||||||
<PropertyGroup Label="UserMacros" />
|
|
||||||
<PropertyGroup>
|
|
||||||
<IncludePath>$(SolutionDir)libs\fmodex\inc;$(IncludePath)</IncludePath>
|
|
||||||
<LibraryPath>$(SolutionDir)libs\fmodex\lib;$(LibraryPath)</LibraryPath>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemDefinitionGroup />
|
|
||||||
<ItemDefinitionGroup Condition="'$(PlatformTarget)'=='x64'">
|
|
||||||
<Link>
|
|
||||||
<AdditionalDependencies>fmodexL64_vc.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(PlatformTarget)'=='x86'">
|
|
||||||
<Link>
|
|
||||||
<AdditionalDependencies>fmodexL_vc.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemGroup />
|
|
||||||
</Project>
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
Bugs are now managed in the SDL bug tracker, here:
|
Bugs are now managed in the SDL issue tracker, here:
|
||||||
|
|
||||||
https://bugzilla.libsdl.org/
|
https://github.com/libsdl-org/SDL/issues
|
||||||
|
|
||||||
You may report bugs there, and search to see if a given issue has already
|
You may report bugs there, and search to see if a given issue has already
|
||||||
been reported, discussed, and maybe even fixed.
|
been reported, discussed, and maybe even fixed.
|
||||||
|
@ -11,6 +11,6 @@ You may also find help at the SDL forums/mailing list:
|
||||||
|
|
||||||
https://discourse.libsdl.org/
|
https://discourse.libsdl.org/
|
||||||
|
|
||||||
Bug reports are welcome here, but we really appreciate if you use Bugzilla, as
|
Bug reports are welcome here, but we really appreciate if you use the issue
|
||||||
bugs discussed on the mailing list may be forgotten or missed.
|
tracker, as bugs discussed on the mailing list may be forgotten or missed.
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
Simple DirectMedia Layer
|
Simple DirectMedia Layer
|
||||||
Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
|
Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
This software is provided 'as-is', without any express or implied
|
||||||
warranty. In no event will the authors be held liable for any damages
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
|
|
@ -1,6 +1,247 @@
|
||||||
|
|
||||||
This is a list of major changes in SDL's version history.
|
This is a list of major changes in SDL's version history.
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
2.0.20:
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
General:
|
||||||
|
* SDL_RenderGeometryRaw() takes a pointer to SDL_Color, not int. You can cast color data in SDL_PIXELFORMAT_RGBA32 format (SDL_PIXELFORMAT_ABGR8888 on little endian systems) for this parameter.
|
||||||
|
* Improved accuracy of horizontal and vertical line drawing when using OpenGL or OpenGLES
|
||||||
|
* Added the hint SDL_HINT_RENDER_LINE_METHOD to control the method of line drawing used, to select speed, correctness, and compatibility.
|
||||||
|
|
||||||
|
Windows:
|
||||||
|
* Fixed size of custom cursors
|
||||||
|
|
||||||
|
Linux:
|
||||||
|
* Fixed hotplug controller detection, broken in 2.0.18
|
||||||
|
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
2.0.18:
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
General:
|
||||||
|
* The SDL wiki documentation and development headers are automatically kept in sync
|
||||||
|
* Each function has information about in which version of SDL it was introduced
|
||||||
|
* SDL-specific CMake options are now prefixed with 'SDL_'. Be sure to update your CMake build scripts accordingly!
|
||||||
|
* Added the hint SDL_HINT_APP_NAME to let SDL know the name of your application for various places it might show up in system information
|
||||||
|
* Added SDL_RenderGeometry() and SDL_RenderGeometryRaw() to allow rendering of arbitrary shapes using the SDL 2D render API
|
||||||
|
* Added SDL_SetTextureUserData() and SDL_GetTextureUserData() to associate application data with an SDL texture
|
||||||
|
* Added SDL_RenderWindowToLogical() and SDL_RenderLogicalToWindow() to convert between window coordinates and logical render coordinates
|
||||||
|
* Added SDL_RenderSetVSync() to change whether a renderer present is synchronized with vblank at runtime
|
||||||
|
* Added SDL_PremultiplyAlpha() to premultiply alpha on a block of SDL_PIXELFORMAT_ARGB8888 pixels
|
||||||
|
* Added a window event SDL_WINDOWEVENT_DISPLAY_CHANGED which is sent when a window changes what display it's centered on
|
||||||
|
* Added SDL_GetWindowICCProfile() to query a window's ICC profile, and a window event SDL_WINDOWEVENT_ICCPROF_CHANGED that is sent when it changes
|
||||||
|
* Added the hint SDL_HINT_VIDEO_EGL_ALLOW_TRANSPARENCY to allow EGL windows to be transparent instead of opaque
|
||||||
|
* SDL_WaitEvent() has been redesigned to use less CPU in most cases
|
||||||
|
* Added SDL_SetWindowMouseRect() and SDL_GetWindowMouseRect() to confine the mouse cursor to an area of a window
|
||||||
|
* You can now read precise mouse wheel motion using 'preciseX' and 'preciseY' event fields
|
||||||
|
* Added SDL_GameControllerHasRumble() and SDL_GameControllerHasRumbleTriggers() to query whether a game controller supports rumble
|
||||||
|
* Added SDL_JoystickHasRumble() and SDL_JoystickHasRumbleTriggers() to query whether a joystick supports rumble
|
||||||
|
* SDL's hidapi implementation is now available as a public API in SDL_hidapi.h
|
||||||
|
|
||||||
|
Windows:
|
||||||
|
* Improved relative mouse motion over Windows Remote Desktop
|
||||||
|
* Added the hint SDL_HINT_IME_SHOW_UI to show native UI components instead of hiding them (defaults off)
|
||||||
|
|
||||||
|
Windows/UWP:
|
||||||
|
* WGI is used instead of XInput for better controller support in UWP apps
|
||||||
|
|
||||||
|
Linux:
|
||||||
|
* Added the hint SDL_HINT_SCREENSAVER_INHIBIT_ACTIVITY_NAME to set the activity that's displayed by the system when the screensaver is disabled
|
||||||
|
* Added the hint SDL_HINT_LINUX_JOYSTICK_CLASSIC to control whether /dev/input/js* or /dev/input/event* are used as joystick devices
|
||||||
|
* Added the hint SDL_HINT_JOYSTICK_DEVICE to allow the user to specify devices that will be opened in addition to the normal joystick detection
|
||||||
|
* Added SDL_LinuxSetThreadPriorityAndPolicy() for more control over a thread priority on Linux
|
||||||
|
|
||||||
|
Android:
|
||||||
|
* Added support for audio output and capture using AAudio on Android 8.1 and newer
|
||||||
|
* Steam Controller support is disabled by default, and can be enabled by setting the hint SDL_HINT_JOYSTICK_HIDAPI_STEAM to "1" before calling SDL_Init()
|
||||||
|
|
||||||
|
Apple Arcade:
|
||||||
|
* Added SDL_GameControllerGetAppleSFSymbolsNameForButton() and SDL_GameControllerGetAppleSFSymbolsNameForAxis() to support Apple Arcade titles
|
||||||
|
|
||||||
|
iOS:
|
||||||
|
* Added documentation that the UIApplicationSupportsIndirectInputEvents key must be set to true in your application's Info.plist in order to get real Bluetooth mouse events.
|
||||||
|
* Steam Controller support is disabled by default, and can be enabled by setting the hint SDL_HINT_JOYSTICK_HIDAPI_STEAM to "1" before calling SDL_Init()
|
||||||
|
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
2.0.16:
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
General:
|
||||||
|
* Added SDL_FlashWindow() to get a user's attention
|
||||||
|
* Added SDL_GetAudioDeviceSpec() to get the preferred audio format of a device
|
||||||
|
* Added SDL_SetWindowAlwaysOnTop() to dynamically change the SDL_WINDOW_ALWAYS_ON_TOP flag for a window
|
||||||
|
* Added SDL_SetWindowKeyboardGrab() to support grabbing the keyboard independently of the mouse
|
||||||
|
* Added SDL_SoftStretchLinear() to do bilinear scaling between 32-bit software surfaces
|
||||||
|
* Added SDL_UpdateNVTexture() to update streaming NV12/21 textures
|
||||||
|
* Added SDL_GameControllerSendEffect() and SDL_JoystickSendEffect() to allow sending custom trigger effects to the DualSense controller
|
||||||
|
* Added SDL_GameControllerGetSensorDataRate() to get the sensor data rate for PlayStation and Nintendo Switch controllers
|
||||||
|
* Added support for the Amazon Luna game controller
|
||||||
|
* Added rumble support for the Google Stadia controller using the HIDAPI driver
|
||||||
|
* Added SDL_GameControllerType constants for the Amazon Luna and Google Stadia controllers
|
||||||
|
* Added analog rumble for Nintendo Switch Pro controllers using the HIDAPI driver
|
||||||
|
* Reduced CPU usage when using SDL_WaitEvent() and SDL_WaitEventTimeout()
|
||||||
|
|
||||||
|
Windows:
|
||||||
|
* Added SDL_SetWindowsMessageHook() to set a function that is called for all Windows messages
|
||||||
|
* Added SDL_RenderGetD3D11Device() to get the D3D11 device used by the SDL renderer
|
||||||
|
|
||||||
|
Linux:
|
||||||
|
* Greatly improved Wayland support
|
||||||
|
* Added support for audio output and capture using Pipewire
|
||||||
|
* Added the hint SDL_HINT_AUDIO_INCLUDE_MONITORS to control whether PulseAudio recording should include monitor devices
|
||||||
|
* Added the hint SDL_HINT_AUDIO_DEVICE_STREAM_ROLE to describe the role of your application for audio control panels
|
||||||
|
|
||||||
|
Android:
|
||||||
|
* Added SDL_AndroidShowToast() to show a lightweight notification
|
||||||
|
|
||||||
|
iOS:
|
||||||
|
* Added support for mouse relative mode on iOS 14.1 and newer
|
||||||
|
* Added support for the Xbox Series X controller
|
||||||
|
|
||||||
|
tvOS:
|
||||||
|
* Added support for the Xbox Series X controller
|
||||||
|
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
2.0.14:
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
General:
|
||||||
|
* Added support for PS5 DualSense and Xbox Series X controllers to the HIDAPI controller driver
|
||||||
|
* Added game controller button constants for paddles and new buttons
|
||||||
|
* Added game controller functions to get additional information:
|
||||||
|
* SDL_GameControllerGetSerial()
|
||||||
|
* SDL_GameControllerHasAxis()
|
||||||
|
* SDL_GameControllerHasButton()
|
||||||
|
* SDL_GameControllerGetNumTouchpads()
|
||||||
|
* SDL_GameControllerGetNumTouchpadFingers()
|
||||||
|
* SDL_GameControllerGetTouchpadFinger()
|
||||||
|
* SDL_GameControllerHasSensor()
|
||||||
|
* SDL_GameControllerSetSensorEnabled()
|
||||||
|
* SDL_GameControllerIsSensorEnabled()
|
||||||
|
* SDL_GameControllerGetSensorData()
|
||||||
|
* SDL_GameControllerRumbleTriggers()
|
||||||
|
* SDL_GameControllerHasLED()
|
||||||
|
* SDL_GameControllerSetLED()
|
||||||
|
* Added the hint SDL_HINT_JOYSTICK_HIDAPI_PS5 to control whether the HIDAPI driver for PS5 controllers should be used.
|
||||||
|
* Added joystick functions to get additional information:
|
||||||
|
* SDL_JoystickGetSerial()
|
||||||
|
* SDL_JoystickRumbleTriggers()
|
||||||
|
* SDL_JoystickHasLED()
|
||||||
|
* SDL_JoystickSetLED()
|
||||||
|
* Added an API to allow the application to create virtual joysticks:
|
||||||
|
* SDL_JoystickAttachVirtual()
|
||||||
|
* SDL_JoystickDetachVirtual()
|
||||||
|
* SDL_JoystickIsVirtual()
|
||||||
|
* SDL_JoystickSetVirtualAxis()
|
||||||
|
* SDL_JoystickSetVirtualButton()
|
||||||
|
* SDL_JoystickSetVirtualHat()
|
||||||
|
* Added SDL_LockSensors() and SDL_UnlockSensors() to guarantee exclusive access to the sensor list
|
||||||
|
* Added SDL_HAPTIC_STEERING_AXIS to play an effect on the steering wheel
|
||||||
|
* Added the hint SDL_HINT_MOUSE_RELATIVE_SCALING to control whether relative motion is scaled by the screen DPI or renderer logical size
|
||||||
|
* The default value for SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS is now false for better compatibility with modern window managers
|
||||||
|
* Added SDL_GetPreferredLocales() to get the application's current locale setting
|
||||||
|
* Added the hint SDL_HINT_PREFERRED_LOCALES to override your application's default locale setting
|
||||||
|
* Added SDL_OpenURL() to open a URL in the system's default browser
|
||||||
|
* Added SDL_HasSurfaceRLE() to tell whether a surface is currently using RLE encoding
|
||||||
|
* Added SDL_SIMDRealloc() to reallocate memory obtained from SDL_SIMDAlloc()
|
||||||
|
* Added SDL_GetErrorMsg() to get the last error in a thread-safe way
|
||||||
|
* Added SDL_crc32(), SDL_wcscasecmp(), SDL_wcsncasecmp(), SDL_trunc(), SDL_truncf()
|
||||||
|
* Added clearer names for RGB pixel formats, e.g. SDL_PIXELFORMAT_XRGB8888, SDL_PIXELFORMAT_XBGR8888, etc.
|
||||||
|
|
||||||
|
Windows:
|
||||||
|
* Added the RAWINPUT controller driver to support more than 4 Xbox controllers simultaneously
|
||||||
|
* Added the hint SDL_HINT_JOYSTICK_RAWINPUT to control whether the RAWINPUT driver should be used
|
||||||
|
* Added the hint SDL_HINT_JOYSTICK_HIDAPI_CORRELATE_XINPUT to control whether XInput and WGI should be used to for complete controller functionality with the RAWINPUT driver.
|
||||||
|
|
||||||
|
macOS:
|
||||||
|
* Added the SDL_WINDOW_METAL flag to specify that a window should be created with a Metal view
|
||||||
|
* Added SDL_Metal_GetLayer() to get the CAMetalLayer backing a Metal view
|
||||||
|
* Added SDL_Metal_GetDrawableSize() to get the size of a window's drawable, in pixels
|
||||||
|
|
||||||
|
Linux:
|
||||||
|
* Added the hint SDL_HINT_AUDIO_DEVICE_APP_NAME to specify the name that shows up in PulseAudio for your application
|
||||||
|
* Added the hint SDL_HINT_AUDIO_DEVICE_STREAM_NAME to specify the name that shows up in PulseAudio associated with your audio stream
|
||||||
|
* Added the hint SDL_HINT_LINUX_JOYSTICK_DEADZONES to control whether HID defined dead zones should be respected on Linux
|
||||||
|
* Added the hint SDL_HINT_THREAD_PRIORITY_POLICY to specify the thread scheduler policy
|
||||||
|
* Added the hint SDL_HINT_THREAD_FORCE_REALTIME_TIME_CRITICAL to allow time critical threads to use a realtime scheduling policy
|
||||||
|
|
||||||
|
Android:
|
||||||
|
* Added SDL_AndroidRequestPermission() to request a specific system permission
|
||||||
|
* Added the hint SDL_HINT_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO to control whether audio will pause when the application goes intot he background
|
||||||
|
|
||||||
|
OS/2:
|
||||||
|
* Added support for OS/2, see docs/README-os2.md for details
|
||||||
|
|
||||||
|
Emscripten (running in a web browser):
|
||||||
|
* Added the hint SDL_HINT_EMSCRIPTEN_ASYNCIFY to control whether SDL should call emscripten_sleep internally
|
||||||
|
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
2.0.12:
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
General:
|
||||||
|
* Added SDL_GetTextureScaleMode() and SDL_SetTextureScaleMode() to get and set the scaling mode used for a texture
|
||||||
|
* Added SDL_LockTextureToSurface(), similar to SDL_LockTexture() but the locked area is exposed as a SDL surface.
|
||||||
|
* Added new blend mode, SDL_BLENDMODE_MUL, which does a modulate and blend operation
|
||||||
|
* Added the hint SDL_HINT_DISPLAY_USABLE_BOUNDS to override the results of SDL_GetDisplayUsableBounds() for display index 0.
|
||||||
|
* Added the window underneath the finger to the SDL_TouchFingerEvent
|
||||||
|
* Added SDL_GameControllerTypeForIndex(), SDL_GameControllerGetType() to return the type of a game controller (Xbox 360, Xbox One, PS3, PS4, or Nintendo Switch Pro)
|
||||||
|
* Added the hint SDL_HINT_GAMECONTROLLERTYPE to override the automatic game controller type detection
|
||||||
|
* Added SDL_JoystickFromPlayerIndex() and SDL_GameControllerFromPlayerIndex() to get the device associated with a player index
|
||||||
|
* Added SDL_JoystickSetPlayerIndex() and SDL_GameControllerSetPlayerIndex() to set the player index associated with a device
|
||||||
|
* Added the hint SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS to specify whether Nintendo Switch Pro controllers should use the buttons as labeled or swapped to match positional layout. The default is to use the buttons as labeled.
|
||||||
|
* Added support for Nintendo GameCube controllers to the HIDAPI driver, and a hint SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE to control whether this is used.
|
||||||
|
* Improved support for Xbox 360 and Xbox One controllers when using the HIDAPI driver
|
||||||
|
* Added support for many game controllers, including:
|
||||||
|
* 8BitDo FC30 Pro
|
||||||
|
* 8BitDo M30 GamePad
|
||||||
|
* BDA PS4 Fightpad
|
||||||
|
* HORI Fighting Commander
|
||||||
|
* Hyperkin Duke
|
||||||
|
* Hyperkin X91
|
||||||
|
* MOGA XP5-A Plus
|
||||||
|
* NACON GC-400ES
|
||||||
|
* NVIDIA Controller v01.04
|
||||||
|
* PDP Versus Fighting Pad
|
||||||
|
* Razer Raion Fightpad for PS4
|
||||||
|
* Razer Serval
|
||||||
|
* Stadia Controller
|
||||||
|
* SteelSeries Stratus Duo
|
||||||
|
* Victrix Pro Fight Stick for PS4
|
||||||
|
* Xbox One Elite Series 2
|
||||||
|
* Fixed blocking game controller rumble calls when using the HIDAPI driver
|
||||||
|
* Added SDL_zeroa() macro to zero an array of elements
|
||||||
|
* Added SDL_HasARMSIMD() which returns true if the CPU has ARM SIMD (ARMv6+) features
|
||||||
|
|
||||||
|
Windows:
|
||||||
|
* Fixed crash when using the release SDL DLL with applications built with gcc
|
||||||
|
* Fixed performance regression in event handling introduced in 2.0.10
|
||||||
|
* Added support for SDL_SetThreadPriority() for UWP applications
|
||||||
|
|
||||||
|
Linux:
|
||||||
|
* Added the hint SDL_HINT_VIDEO_X11_WINDOW_VISUALID to specify the visual chosen for new X11 windows
|
||||||
|
* Added the hint SDL_HINT_VIDEO_X11_FORCE_EGL to specify whether X11 should use GLX or EGL by default
|
||||||
|
|
||||||
|
iOS / tvOS / macOS:
|
||||||
|
* Added SDL_Metal_CreateView() and SDL_Metal_DestroyView() to create CAMetalLayer-backed NSView/UIView and attach it to the specified window.
|
||||||
|
|
||||||
|
iOS/ tvOS:
|
||||||
|
* Added support for Bluetooth Steam Controllers as game controllers
|
||||||
|
|
||||||
|
tvOS:
|
||||||
|
* Fixed support for surround sound on Apple TV
|
||||||
|
|
||||||
|
Android:
|
||||||
|
* Added SDL_GetAndroidSDKVersion() to return the API level of the current device
|
||||||
|
* Added support for audio capture using OpenSL-ES
|
||||||
|
* Added support for Bluetooth Steam Controllers as game controllers
|
||||||
|
* Fixed rare crashes when the app goes into the background or terminates
|
||||||
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
2.0.10:
|
2.0.10:
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
|
@ -10,8 +10,7 @@ If you are using the older ant build process, it is no longer officially
|
||||||
supported, but you can use the "android-project-ant" directory as a template.
|
supported, but you can use the "android-project-ant" directory as a template.
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
Requirements
|
||||||
Requirements
|
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
Android SDK (version 26 or later)
|
Android SDK (version 26 or later)
|
||||||
|
@ -23,8 +22,7 @@ https://developer.android.com/tools/sdk/ndk/index.html
|
||||||
Minimum API level supported by SDL: 16 (Android 4.1)
|
Minimum API level supported by SDL: 16 (Android 4.1)
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
How the port works
|
||||||
How the port works
|
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
- Android applications are Java-based, optionally with parts written in C
|
- Android applications are Java-based, optionally with parts written in C
|
||||||
|
@ -42,8 +40,7 @@ dispatches to native functions implemented in the SDL library:
|
||||||
src/core/android/SDL_android.c
|
src/core/android/SDL_android.c
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
Building an app
|
||||||
Building an app
|
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
For simple projects you can use the script located at build-scripts/androidbuild.sh
|
For simple projects you can use the script located at build-scripts/androidbuild.sh
|
||||||
|
@ -82,6 +79,23 @@ For more complex projects, follow these instructions:
|
||||||
|
|
||||||
4b. If you want to build manually, run './gradlew installDebug' in the project directory. This compiles the .java, creates an .apk with the native code embedded, and installs it on any connected Android device
|
4b. If you want to build manually, run './gradlew installDebug' in the project directory. This compiles the .java, creates an .apk with the native code embedded, and installs it on any connected Android device
|
||||||
|
|
||||||
|
|
||||||
|
If you already have a project that uses CMake, the instructions change somewhat:
|
||||||
|
|
||||||
|
1. Do points 1 and 2 from the instruction above.
|
||||||
|
2. Edit "<project>/app/build.gradle" to comment out or remove sections containing ndk-build
|
||||||
|
and uncomment the cmake sections. Add arguments to the CMake invocation as needed.
|
||||||
|
3. Edit "<project>/app/jni/CMakeLists.txt" to include your project (it defaults to
|
||||||
|
adding the "src" subdirectory). Note that you'll have SDL2, SDL2main and SDL2-static
|
||||||
|
as targets in your project, so you should have "target_link_libraries(yourgame SDL2 SDL2main)"
|
||||||
|
in your CMakeLists.txt file. Also be aware that you should use add_library() instead of
|
||||||
|
add_executable() for the target containing your "main" function.
|
||||||
|
|
||||||
|
If you wish to use Android Studio, you can skip the last step.
|
||||||
|
|
||||||
|
4. Run './gradlew installDebug' or './gradlew installRelease' in the project directory. It will build and install your .apk on any
|
||||||
|
connected Android device
|
||||||
|
|
||||||
Here's an explanation of the files in the Android project, so you can customize them:
|
Here's an explanation of the files in the Android project, so you can customize them:
|
||||||
|
|
||||||
android-project/app
|
android-project/app
|
||||||
|
@ -90,10 +104,12 @@ Here's an explanation of the files in the Android project, so you can customize
|
||||||
jni/ - directory holding native code
|
jni/ - directory holding native code
|
||||||
jni/Application.mk - Application JNI settings, including target platform and STL library
|
jni/Application.mk - Application JNI settings, including target platform and STL library
|
||||||
jni/Android.mk - Android makefile that can call recursively the Android.mk files in all subdirectories
|
jni/Android.mk - Android makefile that can call recursively the Android.mk files in all subdirectories
|
||||||
|
jni/CMakeLists.txt - Top-level CMake project that adds SDL as a subproject
|
||||||
jni/SDL/ - (symlink to) directory holding the SDL library files
|
jni/SDL/ - (symlink to) directory holding the SDL library files
|
||||||
jni/SDL/Android.mk - Android makefile for creating the SDL shared library
|
jni/SDL/Android.mk - Android makefile for creating the SDL shared library
|
||||||
jni/src/ - directory holding your C/C++ source
|
jni/src/ - directory holding your C/C++ source
|
||||||
jni/src/Android.mk - Android makefile that you should customize to include your source code and any library references
|
jni/src/Android.mk - Android makefile that you should customize to include your source code and any library references
|
||||||
|
jni/src/CMakeLists.txt - CMake file that you may customize to include your source code and any library references
|
||||||
src/main/assets/ - directory holding asset files for your application
|
src/main/assets/ - directory holding asset files for your application
|
||||||
src/main/res/ - directory holding resources for your application
|
src/main/res/ - directory holding resources for your application
|
||||||
src/main/res/mipmap-* - directories holding icons for different phone hardware
|
src/main/res/mipmap-* - directories holding icons for different phone hardware
|
||||||
|
@ -101,8 +117,7 @@ Here's an explanation of the files in the Android project, so you can customize
|
||||||
src/main/java/org/libsdl/app/SDLActivity.java - the Java class handling the initialization and binding to SDL. Be very careful changing this, as the SDL library relies on this implementation. You should instead subclass this for your application.
|
src/main/java/org/libsdl/app/SDLActivity.java - the Java class handling the initialization and binding to SDL. Be very careful changing this, as the SDL library relies on this implementation. You should instead subclass this for your application.
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
Customizing your application name
|
||||||
Customizing your application name
|
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
To customize your application name, edit AndroidManifest.xml and replace
|
To customize your application name, edit AndroidManifest.xml and replace
|
||||||
|
@ -132,8 +147,7 @@ Then replace "SDLActivity" in AndroidManifest.xml with the name of your
|
||||||
class, .e.g. "MyGame"
|
class, .e.g. "MyGame"
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
Customizing your application icon
|
||||||
Customizing your application icon
|
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
Conceptually changing your icon is just replacing the "ic_launcher.png" files in
|
Conceptually changing your icon is just replacing the "ic_launcher.png" files in
|
||||||
|
@ -141,8 +155,7 @@ the drawable directories under the res directory. There are several directories
|
||||||
for different screen sizes.
|
for different screen sizes.
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
Loading assets
|
||||||
Loading assets
|
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
Any files you put in the "app/src/main/assets" directory of your project
|
Any files you put in the "app/src/main/assets" directory of your project
|
||||||
|
@ -170,8 +183,7 @@ disable this behaviour, see for example:
|
||||||
http://ponystyle.com/blog/2010/03/26/dealing-with-asset-compression-in-android-apps/
|
http://ponystyle.com/blog/2010/03/26/dealing-with-asset-compression-in-android-apps/
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
Pause / Resume behaviour
|
||||||
Pause / Resume behaviour
|
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
If SDL_HINT_ANDROID_BLOCK_ON_PAUSE hint is set (the default),
|
If SDL_HINT_ANDROID_BLOCK_ON_PAUSE hint is set (the default),
|
||||||
|
@ -186,13 +198,37 @@ app can continue to operate as it was.
|
||||||
|
|
||||||
However, there's a chance (on older hardware, or on systems under heavy load),
|
However, there's a chance (on older hardware, or on systems under heavy load),
|
||||||
where the GL context can not be restored. In that case you have to listen for
|
where the GL context can not be restored. In that case you have to listen for
|
||||||
a specific message, (which is not yet implemented!) and restore your textures
|
a specific message (SDL_RENDER_DEVICE_RESET) and restore your textures
|
||||||
manually or quit the app (which is actually the kind of behaviour you'll see
|
manually or quit the app.
|
||||||
under iOS, if the OS can not restore your GL context it will just kill your app)
|
|
||||||
|
|
||||||
|
You should not use the SDL renderer API while the app going in background:
|
||||||
|
- SDL_APP_WILLENTERBACKGROUND:
|
||||||
|
after you read this message, GL context gets backed-up and you should not
|
||||||
|
use the SDL renderer API.
|
||||||
|
|
||||||
|
- SDL_APP_DIDENTERFOREGROUND:
|
||||||
|
GL context is restored, and the SDL renderer API is available (unless you
|
||||||
|
receive SDL_RENDER_DEVICE_RESET).
|
||||||
|
|
||||||
|
Mouse / Touch events
|
||||||
================================================================================
|
================================================================================
|
||||||
Threads and the Java VM
|
|
||||||
|
In some case, SDL generates synthetic mouse (resp. touch) events for touch
|
||||||
|
(resp. mouse) devices.
|
||||||
|
To enable/disable this behavior, see SDL_hints.h:
|
||||||
|
- SDL_HINT_TOUCH_MOUSE_EVENTS
|
||||||
|
- SDL_HINT_MOUSE_TOUCH_EVENTS
|
||||||
|
|
||||||
|
Misc
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
For some device, it appears to works better setting explicitly GL attributes
|
||||||
|
before creating a window:
|
||||||
|
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
|
||||||
|
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 6);
|
||||||
|
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
|
||||||
|
|
||||||
|
Threads and the Java VM
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
For a quick tour on how Linux native threads interoperate with the Java VM, take
|
For a quick tour on how Linux native threads interoperate with the Java VM, take
|
||||||
|
@ -207,8 +243,17 @@ your thread automatically anyway (when you make an SDL call), but it'll never
|
||||||
detach it.
|
detach it.
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
If you ever want to use JNI in a native thread (created by "SDL_CreateThread()"),
|
||||||
Using STL
|
it won't be able to find your java class and method because of the java class loader
|
||||||
|
which is different for native threads, than for java threads (eg your "main()").
|
||||||
|
|
||||||
|
the work-around is to find class/method, in you "main()" thread, and to use them
|
||||||
|
in your native thread.
|
||||||
|
|
||||||
|
see:
|
||||||
|
https://developer.android.com/training/articles/perf-jni#faq:-why-didnt-findclass-find-my-class
|
||||||
|
|
||||||
|
Using STL
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
You can use STL in your project by creating an Application.mk file in the jni
|
You can use STL in your project by creating an Application.mk file in the jni
|
||||||
|
@ -220,8 +265,7 @@ For more information go here:
|
||||||
https://developer.android.com/ndk/guides/cpp-support
|
https://developer.android.com/ndk/guides/cpp-support
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
Using the emulator
|
||||||
Using the emulator
|
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
There are some good tips and tricks for getting the most out of the
|
There are some good tips and tricks for getting the most out of the
|
||||||
|
@ -233,8 +277,7 @@ Notice that this software emulator is incredibly slow and needs a lot of disk sp
|
||||||
Using a real device works better.
|
Using a real device works better.
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
Troubleshooting
|
||||||
Troubleshooting
|
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
You can see if adb can see any devices with the following command:
|
You can see if adb can see any devices with the following command:
|
||||||
|
@ -313,8 +356,7 @@ If you need to build without optimization turned on, you can create a file calle
|
||||||
APP_OPTIM := debug
|
APP_OPTIM := debug
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
Memory debugging
|
||||||
Memory debugging
|
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
The best (and slowest) way to debug memory issues on Android is valgrind.
|
The best (and slowest) way to debug memory issues on Android is valgrind.
|
||||||
|
@ -365,8 +407,7 @@ When you're done instrumenting with valgrind, you can disable the wrapper:
|
||||||
adb shell setprop wrap.org.libsdl.app ""
|
adb shell setprop wrap.org.libsdl.app ""
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
Graphics debugging
|
||||||
Graphics debugging
|
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
If you are developing on a compatible Tegra-based tablet, NVidia provides
|
If you are developing on a compatible Tegra-based tablet, NVidia provides
|
||||||
|
@ -379,8 +420,7 @@ The Tegra Graphics Debugger is available from NVidia here:
|
||||||
https://developer.nvidia.com/tegra-graphics-debugger
|
https://developer.nvidia.com/tegra-graphics-debugger
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
Why is API level 16 the minimum required?
|
||||||
Why is API level 16 the minimum required?
|
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
The latest NDK toolchain doesn't support targeting earlier than API level 16.
|
The latest NDK toolchain doesn't support targeting earlier than API level 16.
|
||||||
|
@ -389,8 +429,7 @@ about 99% of the Android devices accessing Google Play support API level 16 or
|
||||||
higher (January 2018).
|
higher (January 2018).
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
A note regarding the use of the "dirty rectangles" rendering technique
|
||||||
A note regarding the use of the "dirty rectangles" rendering technique
|
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
If your app uses a variation of the "dirty rectangles" rendering technique,
|
If your app uses a variation of the "dirty rectangles" rendering technique,
|
||||||
|
@ -408,8 +447,7 @@ screen each frame.
|
||||||
Reference: http://www.khronos.org/registry/egl/specs/EGLTechNote0001.html
|
Reference: http://www.khronos.org/registry/egl/specs/EGLTechNote0001.html
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
Ending your application
|
||||||
Ending your application
|
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
Two legitimate ways:
|
Two legitimate ways:
|
||||||
|
@ -426,8 +464,7 @@ Don't call exit() as it stops the activity badly.
|
||||||
NB: "Back button" can be handled as a SDL_KEYDOWN/UP events, with Keycode
|
NB: "Back button" can be handled as a SDL_KEYDOWN/UP events, with Keycode
|
||||||
SDLK_AC_BACK, for any purpose.
|
SDLK_AC_BACK, for any purpose.
|
||||||
|
|
||||||
================================================================================
|
Known issues
|
||||||
Known issues
|
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
- The number of buttons reported for each joystick is hardcoded to be 36, which
|
- The number of buttons reported for each joystick is hardcoded to be 36, which
|
||||||
|
|
|
@ -15,7 +15,7 @@ platforms:
|
||||||
* Linux
|
* Linux
|
||||||
* VS.NET 2010
|
* VS.NET 2010
|
||||||
* MinGW and Msys
|
* MinGW and Msys
|
||||||
* OS X with support for XCode
|
* macOS, iOS, and tvOS, with support for XCode
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
================================================================================
|
||||||
|
@ -30,3 +30,55 @@ Assuming the source for SDL is located at ~/sdl
|
||||||
cmake ../sdl
|
cmake ../sdl
|
||||||
|
|
||||||
This will build the static and dynamic versions of SDL in the ~/build directory.
|
This will build the static and dynamic versions of SDL in the ~/build directory.
|
||||||
|
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
Usage, iOS/tvOS
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
CMake 3.14+ natively includes support for iOS and tvOS. SDL binaries may be built
|
||||||
|
using Xcode or Make, possibly among other build-systems.
|
||||||
|
|
||||||
|
When using a recent version of CMake (3.14+), it should be possible to:
|
||||||
|
|
||||||
|
- build SDL for iOS, both static and dynamic
|
||||||
|
- build SDL test apps (as iOS/tvOS .app bundles)
|
||||||
|
- generate a working SDL_config.h for iOS (using SDL_config.h.cmake as a basis)
|
||||||
|
|
||||||
|
To use, set the following CMake variables when running CMake's configuration stage:
|
||||||
|
|
||||||
|
- `CMAKE_SYSTEM_NAME=<OS>` (either `iOS` or `tvOS`)
|
||||||
|
- `CMAKE_OSX_SYSROOT=<SDK>` (examples: `iphoneos`, `iphonesimulator`, `iphoneos12.4`, `/full/path/to/iPhoneOS.sdk`,
|
||||||
|
`appletvos`, `appletvsimulator`, `appletvos12.4`, `/full/path/to/AppleTVOS.sdk`, etc.)
|
||||||
|
- `CMAKE_OSX_ARCHITECTURES=<semicolon-separated list of CPU architectures>` (example: "arm64;armv7s;x86_64")
|
||||||
|
|
||||||
|
|
||||||
|
### Examples (for iOS/tvOS):
|
||||||
|
|
||||||
|
- for iOS-Simulator, using the latest, installed SDK:
|
||||||
|
|
||||||
|
`cmake ~/sdl -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64`
|
||||||
|
|
||||||
|
- for iOS-Device, using the latest, installed SDK, 64-bit only
|
||||||
|
|
||||||
|
`cmake ~/sdl -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES=arm64`
|
||||||
|
|
||||||
|
- for iOS-Device, using the latest, installed SDK, mixed 32/64 bit
|
||||||
|
|
||||||
|
`cmake ~/sdl -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES="arm64;armv7s"`
|
||||||
|
|
||||||
|
- for iOS-Device, using a specific SDK revision (iOS 12.4, in this example):
|
||||||
|
|
||||||
|
`cmake ~/sdl -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos12.4 -DCMAKE_OSX_ARCHITECTURES=arm64`
|
||||||
|
|
||||||
|
- for iOS-Simulator, using the latest, installed SDK, and building SDL test apps (as .app bundles):
|
||||||
|
|
||||||
|
`cmake ~/sdl -DSDL_TEST=1 -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64`
|
||||||
|
|
||||||
|
- for tvOS-Simulator, using the latest, installed SDK:
|
||||||
|
|
||||||
|
`cmake ~/sdl -DCMAKE_SYSTEM_NAME=tvOS -DCMAKE_OSX_SYSROOT=appletvsimulator -DCMAKE_OSX_ARCHITECTURES=x86_64`
|
||||||
|
|
||||||
|
- for tvOS-Device, using the latest, installed SDK:
|
||||||
|
|
||||||
|
`cmake ~/sdl -DCMAKE_SYSTEM_NAME=tvOS -DCMAKE_OSX_SYSROOT=appletvos -DCMAKE_OSX_ARCHITECTURES=arm64`
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
Dynamic API
|
# Dynamic API
|
||||||
================================================================================
|
|
||||||
Originally posted by Ryan at:
|
Originally posted on Ryan's Google+ account.
|
||||||
https://plus.google.com/103391075724026391227/posts/TB8UfnDYu4U
|
|
||||||
|
|
||||||
Background:
|
Background:
|
||||||
|
|
||||||
|
@ -35,10 +34,12 @@ So here's what we did:
|
||||||
SDL now has, internally, a table of function pointers. So, this is what SDL_Init
|
SDL now has, internally, a table of function pointers. So, this is what SDL_Init
|
||||||
now looks like:
|
now looks like:
|
||||||
|
|
||||||
UInt32 SDL_Init(Uint32 flags)
|
```c
|
||||||
{
|
UInt32 SDL_Init(Uint32 flags)
|
||||||
return jump_table.SDL_Init(flags);
|
{
|
||||||
}
|
return jump_table.SDL_Init(flags);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
Except that is all done with a bunch of macro magic so we don't have to maintain
|
Except that is all done with a bunch of macro magic so we don't have to maintain
|
||||||
every one of these.
|
every one of these.
|
||||||
|
@ -47,22 +48,26 @@ What is jump_table.SDL_init()? Eventually, that's a function pointer of the real
|
||||||
SDL_Init() that you've been calling all this time. But at startup, it looks more
|
SDL_Init() that you've been calling all this time. But at startup, it looks more
|
||||||
like this:
|
like this:
|
||||||
|
|
||||||
Uint32 SDL_Init_DEFAULT(Uint32 flags)
|
```c
|
||||||
{
|
Uint32 SDL_Init_DEFAULT(Uint32 flags)
|
||||||
SDL_InitDynamicAPI();
|
{
|
||||||
return jump_table.SDL_Init(flags);
|
SDL_InitDynamicAPI();
|
||||||
}
|
return jump_table.SDL_Init(flags);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
SDL_InitDynamicAPI() fills in jump_table with all the actual SDL function
|
SDL_InitDynamicAPI() fills in jump_table with all the actual SDL function
|
||||||
pointers, which means that this _DEFAULT function never gets called again.
|
pointers, which means that this `_DEFAULT` function never gets called again.
|
||||||
First call to any SDL function sets the whole thing up.
|
First call to any SDL function sets the whole thing up.
|
||||||
|
|
||||||
So you might be asking, what was the value in that? Isn't this what the operating
|
So you might be asking, what was the value in that? Isn't this what the operating
|
||||||
system's dynamic loader was supposed to do for us? Yes, but now we've got this
|
system's dynamic loader was supposed to do for us? Yes, but now we've got this
|
||||||
level of indirection, we can do things like this:
|
level of indirection, we can do things like this:
|
||||||
|
|
||||||
export SDL_DYNAMIC_API=/my/actual/libSDL-2.0.so.0
|
```bash
|
||||||
./MyGameThatIsStaticallyLinkedToSDL2
|
export SDL_DYNAMIC_API=/my/actual/libSDL-2.0.so.0
|
||||||
|
./MyGameThatIsStaticallyLinkedToSDL2
|
||||||
|
```
|
||||||
|
|
||||||
And now, this game that is statically linked to SDL, can still be overridden
|
And now, this game that is statically linked to SDL, can still be overridden
|
||||||
with a newer, or better, SDL. The statically linked one will only be used as
|
with a newer, or better, SDL. The statically linked one will only be used as
|
||||||
|
@ -94,7 +99,9 @@ SDL's function pointers (which might be statically linked into a program, or in
|
||||||
a shared library of its own). If so, it loads that library and looks for and
|
a shared library of its own). If so, it loads that library and looks for and
|
||||||
calls a single function:
|
calls a single function:
|
||||||
|
|
||||||
SInt32 SDL_DYNAPI_entry(Uint32 version, void *table, Uint32 tablesize);
|
```c
|
||||||
|
SInt32 SDL_DYNAPI_entry(Uint32 version, void *table, Uint32 tablesize);
|
||||||
|
```
|
||||||
|
|
||||||
That function takes a version number (more on that in a moment), the address of
|
That function takes a version number (more on that in a moment), the address of
|
||||||
the jump table, and the size, in bytes, of the table.
|
the jump table, and the size, in bytes, of the table.
|
||||||
|
@ -116,6 +123,7 @@ Steam Client, this isn't a bad option.
|
||||||
|
|
||||||
Finally, I'm sure some people are reading this and thinking,
|
Finally, I'm sure some people are reading this and thinking,
|
||||||
"I don't want that overhead in my project!"
|
"I don't want that overhead in my project!"
|
||||||
|
|
||||||
To which I would point out that the extra function call through the jump table
|
To which I would point out that the extra function call through the jump table
|
||||||
probably wouldn't even show up in a profile, but lucky you: this can all be
|
probably wouldn't even show up in a profile, but lucky you: this can all be
|
||||||
disabled. You can build SDL without this if you absolutely must, but we would
|
disabled. You can build SDL without this if you absolutely must, but we would
|
||||||
|
|
19
libs/SDL2/docs/README-git.md
Normal file
19
libs/SDL2/docs/README-git.md
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
git
|
||||||
|
=========
|
||||||
|
|
||||||
|
The latest development version of SDL is available via git.
|
||||||
|
Git allows you to get up-to-the-minute fixes and enhancements;
|
||||||
|
as a developer works on a source tree, you can use "git" to mirror that
|
||||||
|
source tree instead of waiting for an official release. Please look
|
||||||
|
at the Git website ( https://git-scm.com/ ) for more
|
||||||
|
information on using git, where you can also download software for
|
||||||
|
macOS, Windows, and Unix systems.
|
||||||
|
|
||||||
|
git clone https://github.com/libsdl-org/SDL
|
||||||
|
|
||||||
|
If you are building SDL via configure, you will need to run autogen.sh
|
||||||
|
before running configure.
|
||||||
|
|
||||||
|
There is a web interface to the Git repository at:
|
||||||
|
http://github.com/libsdl-org/SDL/
|
||||||
|
|
|
@ -1,22 +1,4 @@
|
||||||
Mercurial
|
We are no longer hosted in Mercurial. Please see README-git.md for details.
|
||||||
=========
|
|
||||||
|
|
||||||
The latest development version of SDL is available via Mercurial.
|
Thanks!
|
||||||
Mercurial allows you to get up-to-the-minute fixes and enhancements;
|
|
||||||
as a developer works on a source tree, you can use "hg" to mirror that
|
|
||||||
source tree instead of waiting for an official release. Please look
|
|
||||||
at the Mercurial website ( https://www.mercurial-scm.org/ ) for more
|
|
||||||
information on using hg, where you can also download software for
|
|
||||||
Mac OS X, Windows, and Unix systems.
|
|
||||||
|
|
||||||
hg clone http://hg.libsdl.org/SDL
|
|
||||||
|
|
||||||
If you are building SDL via configure, you will need to run autogen.sh
|
|
||||||
before running configure.
|
|
||||||
|
|
||||||
There is a web interface to the subversion repository at:
|
|
||||||
http://hg.libsdl.org/SDL/
|
|
||||||
|
|
||||||
There is an RSS feed available at that URL, for those that want to
|
|
||||||
track commits in real time.
|
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
iOS
|
iOS
|
||||||
======
|
======
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
Building the Simple DirectMedia Layer for iOS 5.1+
|
Building the Simple DirectMedia Layer for iOS 5.1+
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
|
@ -9,57 +8,29 @@ Requirements: Mac OS X 10.8 or later and the iOS 7+ SDK.
|
||||||
|
|
||||||
Instructions:
|
Instructions:
|
||||||
|
|
||||||
1. Open SDL.xcodeproj (located in Xcode-iOS/SDL) in Xcode.
|
1. Open SDL.xcodeproj (located in Xcode/SDL) in Xcode.
|
||||||
2. Select your desired target, and hit build.
|
2. Select your desired target, and hit build.
|
||||||
|
|
||||||
There are three build targets:
|
|
||||||
- libSDL.a:
|
|
||||||
Build SDL as a statically linked library
|
|
||||||
- testsdl:
|
|
||||||
Build a test program (there are known test failures which are fine)
|
|
||||||
- Template:
|
|
||||||
Package a project template together with the SDL for iPhone static libraries and copies of the SDL headers. The template includes proper references to the SDL library and headers, skeleton code for a basic SDL program, and placeholder graphics for the application icon and startup screen.
|
|
||||||
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
Build SDL for iOS from the command line
|
|
||||||
==============================================================================
|
|
||||||
|
|
||||||
1. cd (PATH WHERE THE SDL CODE IS)/build-scripts
|
|
||||||
2. ./iosbuild.sh
|
|
||||||
|
|
||||||
If everything goes fine, you should see a build/ios directory, inside there's
|
|
||||||
two directories "lib" and "include".
|
|
||||||
"include" contains a copy of the SDL headers that you'll need for your project,
|
|
||||||
make sure to configure XCode to look for headers there.
|
|
||||||
"lib" contains find two files, libSDL2.a and libSDL2main.a, you have to add both
|
|
||||||
to your XCode project. These libraries contain three architectures in them,
|
|
||||||
armv6 for legacy devices, armv7, and i386 (for the simulator).
|
|
||||||
By default, iosbuild.sh will autodetect the SDK version you have installed using
|
|
||||||
xcodebuild -showsdks, and build for iOS >= 3.0, you can override this behaviour
|
|
||||||
by setting the MIN_OS_VERSION variable, ie:
|
|
||||||
|
|
||||||
MIN_OS_VERSION=4.2 ./iosbuild.sh
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
Using the Simple DirectMedia Layer for iOS
|
Using the Simple DirectMedia Layer for iOS
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
FIXME: This needs to be updated for the latest methods
|
1. Run Xcode and create a new project using the iOS Game template, selecting the Objective C language and Metal game technology.
|
||||||
|
2. In the main view, delete all files except for Assets and LaunchScreen
|
||||||
|
3. Right click the project in the main view, select "Add Files...", and add the SDL project, Xcode/SDL/SDL.xcodeproj
|
||||||
|
4. Select the project in the main view, go to the "Info" tab and under "Custom iOS Target Properties" remove the line "Main storyboard file base name"
|
||||||
|
5. Select the project in the main view, go to the "Build Settings" tab, select "All", and edit "Header Search Path" and drag over the SDL "Public Headers" folder from the left
|
||||||
|
6. Select the project in the main view, go to the "Build Phases" tab, select "Link Binary With Libraries", and add SDL2.framework from "Framework-iOS"
|
||||||
|
7. Select the project in the main view, go to the "General" tab, scroll down to "Frameworks, Libraries, and Embedded Content", and select "Embed & Sign" for the SDL library.
|
||||||
|
8. In the main view, expand SDL -> Library Source -> main -> uikit and drag SDL_uikit_main.c into your game files
|
||||||
|
9. Add the source files that you would normally have for an SDL program, making sure to have #include "SDL.h" at the top of the file containing your main() function.
|
||||||
|
10. Add any assets that your application needs.
|
||||||
|
11. Enjoy!
|
||||||
|
|
||||||
Here is the easiest method:
|
|
||||||
1. Build the SDL library (libSDL2.a) and the iPhone SDL Application template.
|
|
||||||
2. Install the iPhone SDL Application template by copying it to one of Xcode's template directories. I recommend creating a directory called "SDL" in "/Developer/Platforms/iOS.platform/Developer/Library/Xcode/Project Templates/" and placing it there.
|
|
||||||
3. Start a new project using the template. The project should be immediately ready for use with SDL.
|
|
||||||
|
|
||||||
Here is a more manual method:
|
TODO: Add information regarding App Store requirements such as icons, etc.
|
||||||
1. Create a new iOS view based application.
|
|
||||||
2. Build the SDL static library (libSDL2.a) for iOS and include them in your project. Xcode will ignore the library that is not currently of the correct architecture, hence your app will work both on iOS and in the iOS Simulator.
|
|
||||||
3. Include the SDL header files in your project.
|
|
||||||
4. Remove the ApplicationDelegate.h and ApplicationDelegate.m files -- SDL for iOS provides its own UIApplicationDelegate. Remove MainWindow.xib -- SDL for iOS produces its user interface programmatically.
|
|
||||||
5. Delete the contents of main.m and program your app as a regular SDL program instead. You may replace main.m with your own main.c, but you must tell Xcode not to use the project prefix file, as it includes Objective-C code.
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
Notes -- Retina / High-DPI and window sizes
|
Notes -- Retina / High-DPI and window sizes
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
|
@ -88,7 +59,7 @@ orthographic projection matrix using the size in screen coordinates
|
||||||
(SDL_GetWindowSize()) can be used in order to display content at the same scale
|
(SDL_GetWindowSize()) can be used in order to display content at the same scale
|
||||||
no matter whether a Retina device is used or not.
|
no matter whether a Retina device is used or not.
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
Notes -- Application events
|
Notes -- Application events
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
|
@ -151,7 +122,6 @@ e.g.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
Notes -- Accelerometer as Joystick
|
Notes -- Accelerometer as Joystick
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
|
@ -159,7 +129,7 @@ SDL for iPhone supports polling the built in accelerometer as a joystick device.
|
||||||
|
|
||||||
The main thing to note when using the accelerometer with SDL is that while the iPhone natively reports accelerometer as floating point values in units of g-force, SDL_JoystickGetAxis() reports joystick values as signed integers. Hence, in order to convert between the two, some clamping and scaling is necessary on the part of the iPhone SDL joystick driver. To convert SDL_JoystickGetAxis() reported values BACK to units of g-force, simply multiply the values by SDL_IPHONE_MAX_GFORCE / 0x7FFF.
|
The main thing to note when using the accelerometer with SDL is that while the iPhone natively reports accelerometer as floating point values in units of g-force, SDL_JoystickGetAxis() reports joystick values as signed integers. Hence, in order to convert between the two, some clamping and scaling is necessary on the part of the iPhone SDL joystick driver. To convert SDL_JoystickGetAxis() reported values BACK to units of g-force, simply multiply the values by SDL_IPHONE_MAX_GFORCE / 0x7FFF.
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
Notes -- OpenGL ES
|
Notes -- OpenGL ES
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
|
@ -179,7 +149,7 @@ OpenGL ES on iOS doesn't use the traditional system-framebuffer setup provided i
|
||||||
|
|
||||||
The above objects can be obtained via SDL_GetWindowWMInfo() (in SDL_syswm.h).
|
The above objects can be obtained via SDL_GetWindowWMInfo() (in SDL_syswm.h).
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
Notes -- Keyboard
|
Notes -- Keyboard
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
|
@ -195,7 +165,12 @@ SDL_bool SDL_IsTextInputActive()
|
||||||
-- returns whether or not text events are enabled (and the onscreen keyboard is visible)
|
-- returns whether or not text events are enabled (and the onscreen keyboard is visible)
|
||||||
|
|
||||||
|
|
||||||
|
Notes -- Mouse
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
|
iOS now supports Bluetooth mice on iPad, but by default will provide the mouse input as touch. In order for SDL to see the real mouse events, you should set the key UIApplicationSupportsIndirectInputEvents to true in your Info.plist
|
||||||
|
|
||||||
|
|
||||||
Notes -- Reading and Writing files
|
Notes -- Reading and Writing files
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
|
@ -215,7 +190,7 @@ When your SDL based iPhone application starts up, it sets the working directory
|
||||||
More information on this subject is available here:
|
More information on this subject is available here:
|
||||||
http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Introduction/Introduction.html
|
http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Introduction/Introduction.html
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
Notes -- iPhone SDL limitations
|
Notes -- iPhone SDL limitations
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
|
@ -228,7 +203,23 @@ Textures:
|
||||||
Loading Shared Objects:
|
Loading Shared Objects:
|
||||||
This is disabled by default since it seems to break the terms of the iOS SDK agreement for iOS versions prior to iOS 8. It can be re-enabled in SDL_config_iphoneos.h.
|
This is disabled by default since it seems to break the terms of the iOS SDK agreement for iOS versions prior to iOS 8. It can be re-enabled in SDL_config_iphoneos.h.
|
||||||
|
|
||||||
|
|
||||||
|
Notes -- CoreBluetooth.framework
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
|
SDL_JOYSTICK_HIDAPI is disabled by default. It can give you access to a lot
|
||||||
|
more game controller devices, but it requires permission from the user before
|
||||||
|
your app will be able to talk to the Bluetooth hardware. "Made For iOS"
|
||||||
|
branded controllers do not need this as we don't have to speak to them
|
||||||
|
directly with raw bluetooth, so many apps can live without this.
|
||||||
|
|
||||||
|
You'll need to link with CoreBluetooth.framework and add something like this
|
||||||
|
to your Info.plist:
|
||||||
|
|
||||||
|
<key>NSBluetoothPeripheralUsageDescription</key>
|
||||||
|
<string>MyApp would like to remain connected to nearby bluetooth Game Controllers and Game Pads even when you're not using the app.</string>
|
||||||
|
|
||||||
|
|
||||||
Game Center
|
Game Center
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
|
@ -266,7 +257,7 @@ e.g.
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
Deploying to older versions of iOS
|
Deploying to older versions of iOS
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
|
|
27
libs/SDL2/docs/README-kmsbsd.md
Normal file
27
libs/SDL2/docs/README-kmsbsd.md
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
KMSDRM on *BSD
|
||||||
|
==================================================
|
||||||
|
|
||||||
|
KMSDRM is supported on FreeBSD and OpenBSD. DragonFlyBSD works but requires being a root user. NetBSD isn't supported yet because the application will crash when creating the KMSDRM screen.
|
||||||
|
|
||||||
|
WSCONS support has been brought back, but only as an input backend. It will not be brought back as a video backend to ease maintenance.
|
||||||
|
|
||||||
|
OpenBSD note: Note that the video backend assumes that the user has read/write permissions to the /dev/drm* devices.
|
||||||
|
|
||||||
|
|
||||||
|
SDL2 WSCONS input backend features
|
||||||
|
===================================================
|
||||||
|
1. It is keymap-aware; it will work properly with different keymaps.
|
||||||
|
2. It has mouse support.
|
||||||
|
3. Accent input is supported.
|
||||||
|
4. Compose keys are supported.
|
||||||
|
5. AltGr and Meta Shift keys work as intended.
|
||||||
|
|
||||||
|
Partially working or no input on OpenBSD/NetBSD.
|
||||||
|
==================================================
|
||||||
|
|
||||||
|
The WSCONS input backend needs read/write access to the /dev/wskbd* devices, without which it will not work properly. /dev/wsmouse must also be read/write accessible, otherwise mouse input will not work.
|
||||||
|
|
||||||
|
Partially working or no input on FreeBSD.
|
||||||
|
==================================================
|
||||||
|
|
||||||
|
The evdev devices are only accessible to the root user by default. Edit devfs rules to allow access to such devices. The /dev/kbd* devices are also only accessible to the root user by default. Edit devfs rules to allow access to such devices.
|
|
@ -9,25 +9,35 @@ at runtime, and you won't get a missing library error, at least with the
|
||||||
default configuration parameters.
|
default configuration parameters.
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
Build Dependencies
|
Build Dependencies
|
||||||
================================================================================
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
Ubuntu 13.04, all available features enabled:
|
|
||||||
|
|
||||||
sudo apt-get install build-essential mercurial make cmake autoconf automake \
|
Ubuntu 20.04, all available features enabled:
|
||||||
libtool libasound2-dev libpulse-dev libaudio-dev libx11-dev libxext-dev \
|
|
||||||
libxrandr-dev libxcursor-dev libxi-dev libxinerama-dev libxxf86vm-dev \
|
|
||||||
libxss-dev libgl1-mesa-dev libesd0-dev libdbus-1-dev libudev-dev \
|
|
||||||
libgles1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libibus-1.0-dev \
|
|
||||||
fcitx-libs-dev libsamplerate0-dev libsndio-dev
|
|
||||||
|
|
||||||
Ubuntu 16.04+ can also add "libwayland-dev libxkbcommon-dev wayland-protocols"
|
sudo apt-get install build-essential git make cmake autoconf automake \
|
||||||
to that command line for Wayland support.
|
libtool pkg-config libasound2-dev libpulse-dev libaudio-dev libjack-dev \
|
||||||
|
libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev \
|
||||||
|
libxinerama-dev libxxf86vm-dev libxss-dev libgl1-mesa-dev libdbus-1-dev \
|
||||||
|
libudev-dev libgles2-mesa-dev libegl1-mesa-dev libibus-1.0-dev \
|
||||||
|
fcitx-libs-dev libsamplerate0-dev libsndio-dev libwayland-dev \
|
||||||
|
libxkbcommon-dev libdrm-dev libgbm-dev
|
||||||
|
|
||||||
|
Fedora 35, all available features enabled:
|
||||||
|
|
||||||
|
sudo yum install gcc git-core make cmake autoconf automake libtool \
|
||||||
|
alsa-lib-devel pulseaudio-libs-devel nas-devel pipewire-devel \
|
||||||
|
libX11-devel libXext-devel libXrandr-devel libXcursor-devel libXfixes-devel \
|
||||||
|
libXi-devel libXinerama-devel libXxf86vm-devel libXScrnSaver-devel \
|
||||||
|
dbus-devel ibus-devel fcitx-devel systemd-devel mesa-libGL-devel \
|
||||||
|
libxkbcommon-devel mesa-libGLES-devel mesa-libEGL-devel vulkan-devel \
|
||||||
|
wayland-devel wayland-protocols-devel libdrm-devel mesa-libgbm-devel \
|
||||||
|
libusb-devel pipewire-jack-audio-connection-kit-devel libdecor-devel \
|
||||||
|
libsamplerate-devel
|
||||||
|
|
||||||
NOTES:
|
NOTES:
|
||||||
- This includes all the audio targets except arts, because Ubuntu pulled the
|
- This includes all the audio targets except arts and esd, because Ubuntu
|
||||||
artsc0-dev package, but in theory SDL still supports it.
|
(and/or Debian) pulled their packages, but in theory SDL still supports them.
|
||||||
|
The sndio audio target is also unavailable on Fedora.
|
||||||
- libsamplerate0-dev lets SDL optionally link to libresamplerate at runtime
|
- libsamplerate0-dev lets SDL optionally link to libresamplerate at runtime
|
||||||
for higher-quality audio resampling. SDL will work without it if the library
|
for higher-quality audio resampling. SDL will work without it if the library
|
||||||
is missing, so it's safe to build in support even if the end user doesn't
|
is missing, so it's safe to build in support even if the end user doesn't
|
||||||
|
@ -37,9 +47,8 @@ NOTES:
|
||||||
configure script to include DirectFB support. Send patches. :)
|
configure script to include DirectFB support. Send patches. :)
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
Joystick does not work
|
Joystick does not work
|
||||||
================================================================================
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
If you compiled or are using a version of SDL with udev support (and you should!)
|
If you compiled or are using a version of SDL with udev support (and you should!)
|
||||||
there's a few issues that may cause SDL to fail to detect your joystick. To
|
there's a few issues that may cause SDL to fail to detect your joystick. To
|
||||||
|
@ -69,8 +78,8 @@ you need to set up an udev rule to force this variable.
|
||||||
A combined rule for the Saitek Pro Flight Rudder Pedals to fix both issues looks
|
A combined rule for the Saitek Pro Flight Rudder Pedals to fix both issues looks
|
||||||
like:
|
like:
|
||||||
|
|
||||||
SUBSYSTEM=="input", ATTRS{idProduct}=="0763", ATTRS{idVendor}=="06a3", MODE="0666", ENV{ID_INPUT_JOYSTICK}="1"
|
SUBSYSTEM=="input", ATTRS{idProduct}=="0763", ATTRS{idVendor}=="06a3", MODE="0666", ENV{ID_INPUT_JOYSTICK}="1"
|
||||||
SUBSYSTEM=="input", ATTRS{idProduct}=="0764", ATTRS{idVendor}=="06a3", MODE="0666", ENV{ID_INPUT_JOYSTICK}="1"
|
SUBSYSTEM=="input", ATTRS{idProduct}=="0764", ATTRS{idVendor}=="06a3", MODE="0666", ENV{ID_INPUT_JOYSTICK}="1"
|
||||||
|
|
||||||
You can set up similar rules for your device by changing the values listed in
|
You can set up similar rules for your device by changing the values listed in
|
||||||
idProduct and idVendor. To obtain these values, try:
|
idProduct and idVendor. To obtain these values, try:
|
||||||
|
|
286
libs/SDL2/docs/README-macos.md
Normal file
286
libs/SDL2/docs/README-macos.md
Normal file
|
@ -0,0 +1,286 @@
|
||||||
|
# Mac OS X (aka macOS).
|
||||||
|
|
||||||
|
These instructions are for people using Apple's Mac OS X (pronounced
|
||||||
|
"ten"), which in newer versions is just referred to as "macOS".
|
||||||
|
|
||||||
|
From the developer's point of view, macOS is a sort of hybrid Mac and
|
||||||
|
Unix system, and you have the option of using either traditional
|
||||||
|
command line tools or Apple's IDE Xcode.
|
||||||
|
|
||||||
|
# Command Line Build
|
||||||
|
|
||||||
|
To build SDL using the command line, use the standard configure and make
|
||||||
|
process:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
../configure
|
||||||
|
make
|
||||||
|
sudo make install
|
||||||
|
```
|
||||||
|
|
||||||
|
CMake is also known to work, although it continues to be a work in progress:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake -DCMAKE_BUILD_TYPE=Release ..
|
||||||
|
make
|
||||||
|
sudo make install
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
You can also build SDL as a Universal library (a single binary for both
|
||||||
|
64-bit Intel and ARM architectures), by using the build-scripts/clang-fat.sh
|
||||||
|
script.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
CC=$PWD/../build-scripts/clang-fat.sh ../configure
|
||||||
|
make
|
||||||
|
sudo make install
|
||||||
|
```
|
||||||
|
|
||||||
|
This script builds SDL with 10.6 ABI compatibility on 64-bit Intel and 11.0
|
||||||
|
ABI compatibility on ARM64 architectures. For best compatibility you
|
||||||
|
should compile your application the same way.
|
||||||
|
|
||||||
|
Please note that building SDL requires at least Xcode 4.6 and the 10.7 SDK
|
||||||
|
(even if you target back to 10.6 systems). PowerPC support for Mac OS X has
|
||||||
|
been officially dropped as of SDL 2.0.2. 32-bit Intel, using an older Xcode
|
||||||
|
release, is still supported at the time of this writing, but current Xcode
|
||||||
|
releases no longer support it, and eventually neither will SDL.
|
||||||
|
|
||||||
|
To use the library once it's built, you essential have two possibilities:
|
||||||
|
use the traditional autoconf/automake/make method, or use Xcode.
|
||||||
|
|
||||||
|
|
||||||
|
# Caveats for using SDL with Mac OS X
|
||||||
|
|
||||||
|
If you register your own NSApplicationDelegate (using [NSApp setDelegate:]),
|
||||||
|
SDL will not register its own. This means that SDL will not terminate using
|
||||||
|
SDL_Quit if it receives a termination request, it will terminate like a
|
||||||
|
normal app, and it will not send a SDL_DROPFILE when you request to open a
|
||||||
|
file with the app. To solve these issues, put the following code in your
|
||||||
|
NSApplicationDelegate implementation:
|
||||||
|
|
||||||
|
|
||||||
|
```objc
|
||||||
|
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
|
||||||
|
{
|
||||||
|
if (SDL_GetEventState(SDL_QUIT) == SDL_ENABLE) {
|
||||||
|
SDL_Event event;
|
||||||
|
event.type = SDL_QUIT;
|
||||||
|
SDL_PushEvent(&event);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NSTerminateCancel;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
|
||||||
|
{
|
||||||
|
if (SDL_GetEventState(SDL_DROPFILE) == SDL_ENABLE) {
|
||||||
|
SDL_Event event;
|
||||||
|
event.type = SDL_DROPFILE;
|
||||||
|
event.drop.file = SDL_strdup([filename UTF8String]);
|
||||||
|
return (SDL_PushEvent(&event) > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# Using the Simple DirectMedia Layer with a traditional Makefile
|
||||||
|
|
||||||
|
An existing autoconf/automake build system for your SDL app has good chances
|
||||||
|
to work almost unchanged on macOS. However, to produce a "real" Mac binary
|
||||||
|
that you can distribute to users, you need to put the generated binary into a
|
||||||
|
so called "bundle", which is basically a fancy folder with a name like
|
||||||
|
"MyCoolGame.app".
|
||||||
|
|
||||||
|
To get this build automatically, add something like the following rule to
|
||||||
|
your Makefile.am:
|
||||||
|
|
||||||
|
```make
|
||||||
|
bundle_contents = APP_NAME.app/Contents
|
||||||
|
APP_NAME_bundle: EXE_NAME
|
||||||
|
mkdir -p $(bundle_contents)/MacOS
|
||||||
|
mkdir -p $(bundle_contents)/Resources
|
||||||
|
echo "APPL????" > $(bundle_contents)/PkgInfo
|
||||||
|
$(INSTALL_PROGRAM) $< $(bundle_contents)/MacOS/
|
||||||
|
```
|
||||||
|
|
||||||
|
You should replace `EXE_NAME` with the name of the executable. `APP_NAME` is
|
||||||
|
what will be visible to the user in the Finder. Usually it will be the same
|
||||||
|
as `EXE_NAME` but capitalized. E.g. if `EXE_NAME` is "testgame" then `APP_NAME`
|
||||||
|
usually is "TestGame". You might also want to use `@PACKAGE@` to use the
|
||||||
|
package name as specified in your configure.ac file.
|
||||||
|
|
||||||
|
If your project builds more than one application, you will have to do a bit
|
||||||
|
more. For each of your target applications, you need a separate rule.
|
||||||
|
|
||||||
|
If you want the created bundles to be installed, you may want to add this
|
||||||
|
rule to your Makefile.am:
|
||||||
|
|
||||||
|
```make
|
||||||
|
install-exec-hook: APP_NAME_bundle
|
||||||
|
rm -rf $(DESTDIR)$(prefix)/Applications/APP_NAME.app
|
||||||
|
mkdir -p $(DESTDIR)$(prefix)/Applications/
|
||||||
|
cp -r $< /$(DESTDIR)$(prefix)Applications/
|
||||||
|
```
|
||||||
|
|
||||||
|
This rule takes the Bundle created by the rule from step 3 and installs them
|
||||||
|
into "$(DESTDIR)$(prefix)/Applications/".
|
||||||
|
|
||||||
|
Again, if you want to install multiple applications, you will have to augment
|
||||||
|
the make rule accordingly.
|
||||||
|
|
||||||
|
But beware! That is only part of the story! With the above, you end up with
|
||||||
|
a barebones .app bundle, which is double-clickable from the Finder. But
|
||||||
|
there are some more things you should do before shipping your product...
|
||||||
|
|
||||||
|
1. The bundle right now probably is dynamically linked against SDL. That
|
||||||
|
means that when you copy it to another computer, *it will not run*,
|
||||||
|
unless you also install SDL on that other computer. A good solution
|
||||||
|
for this dilemma is to static link against SDL. On OS X, you can
|
||||||
|
achieve that by linking against the libraries listed by
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sdl-config --static-libs
|
||||||
|
```
|
||||||
|
|
||||||
|
instead of those listed by
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sdl-config --libs
|
||||||
|
```
|
||||||
|
|
||||||
|
Depending on how exactly SDL is integrated into your build systems, the
|
||||||
|
way to achieve that varies, so I won't describe it here in detail
|
||||||
|
|
||||||
|
2. Add an 'Info.plist' to your application. That is a special XML file which
|
||||||
|
contains some meta-information about your application (like some copyright
|
||||||
|
information, the version of your app, the name of an optional icon file,
|
||||||
|
and other things). Part of that information is displayed by the Finder
|
||||||
|
when you click on the .app, or if you look at the "Get Info" window.
|
||||||
|
More information about Info.plist files can be found on Apple's homepage.
|
||||||
|
|
||||||
|
|
||||||
|
As a final remark, let me add that I use some of the techniques (and some
|
||||||
|
variations of them) in [Exult](https://github.com/exult/exult) and
|
||||||
|
[ScummVM](https://github.com/scummvm/scummvm); both are available in source on
|
||||||
|
the net, so feel free to take a peek at them for inspiration!
|
||||||
|
|
||||||
|
|
||||||
|
# Using the Simple DirectMedia Layer with Xcode
|
||||||
|
|
||||||
|
These instructions are for using Apple's Xcode IDE to build SDL applications.
|
||||||
|
|
||||||
|
## First steps
|
||||||
|
|
||||||
|
The first thing to do is to unpack the Xcode.tar.gz archive in the
|
||||||
|
top level SDL directory (where the Xcode.tar.gz archive resides).
|
||||||
|
Because Stuffit Expander will unpack the archive into a subdirectory,
|
||||||
|
you should unpack the archive manually from the command line:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd [path_to_SDL_source]
|
||||||
|
tar zxf Xcode.tar.gz
|
||||||
|
```
|
||||||
|
|
||||||
|
This will create a new folder called Xcode, which you can browse
|
||||||
|
normally from the Finder.
|
||||||
|
|
||||||
|
## Building the Framework
|
||||||
|
|
||||||
|
The SDL Library is packaged as a framework bundle, an organized
|
||||||
|
relocatable folder hierarchy of executable code, interface headers,
|
||||||
|
and additional resources. For practical purposes, you can think of a
|
||||||
|
framework as a more user and system-friendly shared library, whose library
|
||||||
|
file behaves more or less like a standard UNIX shared library.
|
||||||
|
|
||||||
|
To build the framework, simply open the framework project and build it.
|
||||||
|
By default, the framework bundle "SDL.framework" is installed in
|
||||||
|
/Library/Frameworks. Therefore, the testers and project stationary expect
|
||||||
|
it to be located there. However, it will function the same in any of the
|
||||||
|
following locations:
|
||||||
|
|
||||||
|
* ~/Library/Frameworks
|
||||||
|
* /Local/Library/Frameworks
|
||||||
|
* /System/Library/Frameworks
|
||||||
|
|
||||||
|
## Build Options
|
||||||
|
|
||||||
|
There are two "Build Styles" (See the "Targets" tab) for SDL.
|
||||||
|
"Deployment" should be used if you aren't tweaking the SDL library.
|
||||||
|
"Development" should be used to debug SDL apps or the library itself.
|
||||||
|
|
||||||
|
## Building the Testers
|
||||||
|
|
||||||
|
Open the SDLTest project and build away!
|
||||||
|
|
||||||
|
## Using the Project Stationary
|
||||||
|
|
||||||
|
Copy the stationary to the indicated folders to access it from
|
||||||
|
the "New Project" and "Add target" menus. What could be easier?
|
||||||
|
|
||||||
|
## Setting up a new project by hand
|
||||||
|
|
||||||
|
Some of you won't want to use the Stationary so I'll give some tips:
|
||||||
|
|
||||||
|
(this is accurate as of Xcode 12.5.)
|
||||||
|
|
||||||
|
* Click "File" -> "New" -> "Project...
|
||||||
|
* Choose "macOS" and then "App" from the "Application" section.
|
||||||
|
* Fill out the options in the next window. User interface is "XIB" and
|
||||||
|
Language is "Objective-C".
|
||||||
|
* Remove "main.m" from your project
|
||||||
|
* Remove "MainMenu.xib" from your project
|
||||||
|
* Remove "AppDelegates.*" from your project
|
||||||
|
* Add "\$(HOME)/Library/Frameworks/SDL.framework/Headers" to include path
|
||||||
|
* Add "\$(HOME)/Library/Frameworks" to the frameworks search path
|
||||||
|
* Add "-framework SDL -framework Foundation -framework AppKit" to "OTHER_LDFLAGS"
|
||||||
|
* Add your files
|
||||||
|
* Clean and build
|
||||||
|
|
||||||
|
## Building from command line
|
||||||
|
|
||||||
|
Use `xcode-build` in the same directory as your .pbxproj file
|
||||||
|
|
||||||
|
## Running your app
|
||||||
|
|
||||||
|
You can send command line args to your app by either invoking it from
|
||||||
|
the command line (in *.app/Contents/MacOS) or by entering them in the
|
||||||
|
Executables" panel of the target settings.
|
||||||
|
|
||||||
|
# Implementation Notes
|
||||||
|
|
||||||
|
Some things that may be of interest about how it all works...
|
||||||
|
|
||||||
|
## Working directory
|
||||||
|
|
||||||
|
In SDL 1.2, the working directory of your SDL app is by default set to its
|
||||||
|
parent, but this is no longer the case in SDL 2.0. SDL2 does change the
|
||||||
|
working directory, which means it'll be whatever the command line prompt
|
||||||
|
that launched the program was using, or if launched by double-clicking in
|
||||||
|
the finger, it will be "/", the _root of the filesystem_. Plan accordingly!
|
||||||
|
You can use SDL_GetBasePath() to find where the program is running from and
|
||||||
|
chdir() there directly.
|
||||||
|
|
||||||
|
|
||||||
|
## You have a Cocoa App!
|
||||||
|
|
||||||
|
Your SDL app is essentially a Cocoa application. When your app
|
||||||
|
starts up and the libraries finish loading, a Cocoa procedure is called,
|
||||||
|
which sets up the working directory and calls your main() method.
|
||||||
|
You are free to modify your Cocoa app with generally no consequence
|
||||||
|
to SDL. You cannot, however, easily change the SDL window itself.
|
||||||
|
Functionality may be added in the future to help this.
|
||||||
|
|
||||||
|
# Bug reports
|
||||||
|
|
||||||
|
Bugs are tracked at [the GitHub issue tracker](https://github.com/libsdl-org/SDL/issues/).
|
||||||
|
Please feel free to report bugs there!
|
||||||
|
|
92
libs/SDL2/docs/README-os2.md
Normal file
92
libs/SDL2/docs/README-os2.md
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
Simple DirectMedia Layer 2 for OS/2 & eComStation
|
||||||
|
================================================================================
|
||||||
|
SDL port for OS/2, authored by Andrey Vasilkin <digi@os2.snc.ru>, 2016
|
||||||
|
|
||||||
|
|
||||||
|
OpenGL and audio capture not supported by this port.
|
||||||
|
|
||||||
|
Additional optional environment variables:
|
||||||
|
|
||||||
|
SDL_AUDIO_SHARE
|
||||||
|
Values: 0 or 1, default is 0
|
||||||
|
Initializes the device as shareable or exclusively acquired.
|
||||||
|
|
||||||
|
SDL_VIDEODRIVER
|
||||||
|
Values: DIVE or VMAN, default is DIVE
|
||||||
|
Use video subsystem: Direct interface video extensions (DIVE) or
|
||||||
|
Video Manager (VMAN).
|
||||||
|
|
||||||
|
You may significantly increase video output speed with OS4 kernel and patched
|
||||||
|
files vman.dll and dive.dll or with latest versions of ACPI support and video
|
||||||
|
driver Panorama.
|
||||||
|
|
||||||
|
Latest versions of OS/4 kernel:
|
||||||
|
http://gus.biysk.ru/os4/
|
||||||
|
(Info: https://www.os2world.com/wiki/index.php/Phoenix_OS/4)
|
||||||
|
|
||||||
|
Patched files vman.dll and dive.dll:
|
||||||
|
http://gus.biysk.ru/os4/test/pached_dll/PATCHED_DLL.RAR
|
||||||
|
|
||||||
|
|
||||||
|
Compiling:
|
||||||
|
----------
|
||||||
|
|
||||||
|
Open Watcom 1.9 or newer is tested. For the new Open Watcom V2 fork, see:
|
||||||
|
https://github.com/open-watcom/ and https://open-watcom.github.io
|
||||||
|
WATCOM environment variable must to be set to the Open Watcom install
|
||||||
|
directory. To compile, run: wmake -f Makefile.os2
|
||||||
|
|
||||||
|
|
||||||
|
Installing:
|
||||||
|
-----------
|
||||||
|
|
||||||
|
- eComStation:
|
||||||
|
|
||||||
|
If you have previously installed SDL2, make a Backup copy of SDL2.dll
|
||||||
|
located in D:\ecs\dll (where D: is disk on which installed eComStation).
|
||||||
|
Stop all programs running with SDL2. Copy SDL2.dll to D:\ecs\dll
|
||||||
|
|
||||||
|
- OS/2:
|
||||||
|
|
||||||
|
Copy SDL2.dll to any directory on your LIBPATH. If you have a previous
|
||||||
|
version installed, close all SDL2 applications before replacing the old
|
||||||
|
copy. Also make sure that any other older versions of DLLs are removed
|
||||||
|
from your system.
|
||||||
|
|
||||||
|
|
||||||
|
Joysticks in SDL2:
|
||||||
|
------------------
|
||||||
|
|
||||||
|
The joystick code in SDL2 is a direct forward-port from the SDL-1.2 version.
|
||||||
|
Here is the original documentation from SDL-1.2:
|
||||||
|
|
||||||
|
The Joystick detection only works for standard joysticks (2 buttons, 2 axes
|
||||||
|
and the like). Therefore, if you use a non-standard joystick, you should
|
||||||
|
specify its features in the SDL_OS2_JOYSTICK environment variable in a batch
|
||||||
|
file or CONFIG.SYS, so SDL applications can provide full capability to your
|
||||||
|
device. The syntax is:
|
||||||
|
|
||||||
|
SET SDL_OS2_JOYSTICK=[JOYSTICK_NAME] [AXES] [BUTTONS] [HATS] [BALLS]
|
||||||
|
|
||||||
|
So, it you have a Gravis GamePad with 4 axes, 2 buttons, 2 hats and 0 balls,
|
||||||
|
the line should be:
|
||||||
|
|
||||||
|
SET SDL_OS2_JOYSTICK=Gravis_GamePad 4 2 2 0
|
||||||
|
|
||||||
|
If you want to add spaces in your joystick name, just surround it with
|
||||||
|
quotes or double-quotes:
|
||||||
|
|
||||||
|
SET SDL_OS2_JOYSTICK='Gravis GamePad' 4 2 2 0
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
SET SDL_OS2_JOYSTICK="Gravis GamePad" 4 2 2 0
|
||||||
|
|
||||||
|
Note however that Balls and Hats are not supported under OS/2, and the
|
||||||
|
value will be ignored... but it is wise to define these correctly because
|
||||||
|
in the future those can be supported.
|
||||||
|
|
||||||
|
Also the number of buttons is limited to 2 when using two joysticks,
|
||||||
|
4 when using one joystick with 4 axes, 6 when using a joystick with 3 axes
|
||||||
|
and 8 when using a joystick with 2 axes. Notice however these are limitations
|
||||||
|
of the Joystick Port hardware, not OS/2.
|
|
@ -9,10 +9,22 @@ Credit to
|
||||||
|
|
||||||
Building
|
Building
|
||||||
--------
|
--------
|
||||||
To build for the PSP, make sure psp-config is in the path and run:
|
To build SDL2 library for the PSP, make sure psp-config is in the path and run:
|
||||||
make -f Makefile.psp
|
make -f Makefile.psp
|
||||||
|
|
||||||
|
|
||||||
|
Getting PSP toolchain
|
||||||
|
---------------------
|
||||||
|
https://github.com/pspdev/psptoolchain
|
||||||
|
|
||||||
|
Running on PPSSPP Emulator
|
||||||
|
--------------------------
|
||||||
|
https://github.com/hrydgard/ppsspp
|
||||||
|
( https://github.com/hrydgard/ppsspp/wiki/Build-instructions )
|
||||||
|
|
||||||
|
Compiling an HelloWorld
|
||||||
|
-----------------------
|
||||||
|
https://psp-dev.org/doku.php?id=tutorial:hello_world
|
||||||
|
|
||||||
To Do
|
To Do
|
||||||
------
|
------
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
Raspberry Pi
|
Raspberry Pi
|
||||||
================================================================================
|
============
|
||||||
|
|
||||||
Requirements:
|
Requirements:
|
||||||
|
|
||||||
Raspbian (other Linux distros may work as well).
|
Raspbian (other Linux distros may work as well).
|
||||||
|
|
||||||
================================================================================
|
Features
|
||||||
Features
|
--------
|
||||||
================================================================================
|
|
||||||
|
|
||||||
* Works without X11
|
* Works without X11
|
||||||
* Hardware accelerated OpenGL ES 2.x
|
* Hardware accelerated OpenGL ES 2.x
|
||||||
|
@ -16,9 +15,8 @@ Raspbian (other Linux distros may work as well).
|
||||||
* Hotplugging of input devices via UDEV
|
* Hotplugging of input devices via UDEV
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
Raspbian Build Dependencies
|
||||||
Raspbian Build Dependencies
|
---------------------------
|
||||||
================================================================================
|
|
||||||
|
|
||||||
sudo apt-get install libudev-dev libasound2-dev libdbus-1-dev
|
sudo apt-get install libudev-dev libasound2-dev libdbus-1-dev
|
||||||
|
|
||||||
|
@ -28,18 +26,17 @@ OpenGL ES 2.x, it usually comes pre-installed, but in any case:
|
||||||
sudo apt-get install libraspberrypi0 libraspberrypi-bin libraspberrypi-dev
|
sudo apt-get install libraspberrypi0 libraspberrypi-bin libraspberrypi-dev
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
NEON
|
||||||
NEON
|
----
|
||||||
================================================================================
|
|
||||||
|
|
||||||
If your Pi has NEON support, make sure you add -mfpu=neon to your CFLAGS so
|
If your Pi has NEON support, make sure you add -mfpu=neon to your CFLAGS so
|
||||||
that SDL will select some otherwise-disabled highly-optimized code. The
|
that SDL will select some otherwise-disabled highly-optimized code. The
|
||||||
original Pi units don't have NEON, the Pi2 probably does, and the Pi3
|
original Pi units don't have NEON, the Pi2 probably does, and the Pi3
|
||||||
definitely does.
|
definitely does.
|
||||||
|
|
||||||
================================================================================
|
|
||||||
Cross compiling from x86 Linux
|
Cross compiling from x86 Linux
|
||||||
================================================================================
|
------------------------------
|
||||||
|
|
||||||
To cross compile SDL for Raspbian from your desktop machine, you'll need a
|
To cross compile SDL for Raspbian from your desktop machine, you'll need a
|
||||||
Raspbian system root and the cross compilation tools. We'll assume these tools
|
Raspbian system root and the cross compilation tools. We'll assume these tools
|
||||||
|
@ -92,9 +89,8 @@ To be able to deploy this to /usr/local in the Raspbian system you need to fix u
|
||||||
|
|
||||||
perl -w -pi -e "s#$PWD/rpi-sdl2-installed#/usr/local#g;" ./rpi-sdl2-installed/lib/libSDL2.la ./rpi-sdl2-installed/lib/pkgconfig/sdl2.pc ./rpi-sdl2-installed/bin/sdl2-config
|
perl -w -pi -e "s#$PWD/rpi-sdl2-installed#/usr/local#g;" ./rpi-sdl2-installed/lib/libSDL2.la ./rpi-sdl2-installed/lib/pkgconfig/sdl2.pc ./rpi-sdl2-installed/bin/sdl2-config
|
||||||
|
|
||||||
================================================================================
|
Apps don't work or poor video/audio performance
|
||||||
Apps don't work or poor video/audio performance
|
-----------------------------------------------
|
||||||
================================================================================
|
|
||||||
|
|
||||||
If you get sound problems, buffer underruns, etc, run "sudo rpi-update" to
|
If you get sound problems, buffer underruns, etc, run "sudo rpi-update" to
|
||||||
update the RPi's firmware. Note that doing so will fix these problems, but it
|
update the RPi's firmware. Note that doing so will fix these problems, but it
|
||||||
|
@ -108,17 +104,15 @@ See here how to configure this setting: http://elinux.org/RPiconfig
|
||||||
Using a fixed gpu_mem=128 is the best option (specially if you updated the
|
Using a fixed gpu_mem=128 is the best option (specially if you updated the
|
||||||
firmware, using CMA probably won't work, at least it's the current case).
|
firmware, using CMA probably won't work, at least it's the current case).
|
||||||
|
|
||||||
================================================================================
|
No input
|
||||||
No input
|
--------
|
||||||
================================================================================
|
|
||||||
|
|
||||||
Make sure you belong to the "input" group.
|
Make sure you belong to the "input" group.
|
||||||
|
|
||||||
sudo usermod -aG input `whoami`
|
sudo usermod -aG input `whoami`
|
||||||
|
|
||||||
================================================================================
|
No HDMI Audio
|
||||||
No HDMI Audio
|
-------------
|
||||||
================================================================================
|
|
||||||
|
|
||||||
If you notice that ALSA works but there's no audio over HDMI, try adding:
|
If you notice that ALSA works but there's no audio over HDMI, try adding:
|
||||||
|
|
||||||
|
@ -128,9 +122,8 @@ to your config.txt file and reboot.
|
||||||
|
|
||||||
Reference: http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5062
|
Reference: http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5062
|
||||||
|
|
||||||
================================================================================
|
Text Input API support
|
||||||
Text Input API support
|
----------------------
|
||||||
================================================================================
|
|
||||||
|
|
||||||
The Text Input API is supported, with translation of scan codes done via the
|
The Text Input API is supported, with translation of scan codes done via the
|
||||||
kernel symbol tables. For this to work, SDL needs access to a valid console.
|
kernel symbol tables. For this to work, SDL needs access to a valid console.
|
||||||
|
@ -160,9 +153,9 @@ this determining the CAPS LOCK behavior:
|
||||||
|
|
||||||
sudo dpkg-reconfigure locales
|
sudo dpkg-reconfigure locales
|
||||||
|
|
||||||
================================================================================
|
|
||||||
OpenGL problems
|
OpenGL problems
|
||||||
================================================================================
|
---------------
|
||||||
|
|
||||||
If you have desktop OpenGL headers installed at build time in your RPi or cross
|
If you have desktop OpenGL headers installed at build time in your RPi or cross
|
||||||
compilation environment, support for it will be built in. However, the chipset
|
compilation environment, support for it will be built in. However, the chipset
|
||||||
|
@ -177,9 +170,8 @@ environment variable:
|
||||||
|
|
||||||
export SDL_RENDER_DRIVER=opengles2
|
export SDL_RENDER_DRIVER=opengles2
|
||||||
|
|
||||||
================================================================================
|
Notes
|
||||||
Notes
|
-----
|
||||||
================================================================================
|
|
||||||
|
|
||||||
* When launching apps remotely (via SSH), SDL can prevent local keystrokes from
|
* When launching apps remotely (via SSH), SDL can prevent local keystrokes from
|
||||||
leaking into the console only if it has root privileges. Launching apps locally
|
leaking into the console only if it has root privileges. Launching apps locally
|
||||||
|
|
41
libs/SDL2/docs/README-riscos.md
Normal file
41
libs/SDL2/docs/README-riscos.md
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
RISC OS
|
||||||
|
=======
|
||||||
|
|
||||||
|
Requirements:
|
||||||
|
|
||||||
|
* RISC OS 3.5 or later.
|
||||||
|
* [SharedUnixLibrary](http://www.riscos.info/packages/LibraryDetails.html#SharedUnixLibraryarm).
|
||||||
|
* [DigitalRenderer](http://www.riscos.info/packages/LibraryDetails.html#DRendererarm), for audio support.
|
||||||
|
* [Iconv](http://www.netsurf-browser.org/projects/iconv/), for `SDL_iconv` and related functions.
|
||||||
|
|
||||||
|
|
||||||
|
Compiling:
|
||||||
|
----------
|
||||||
|
|
||||||
|
Currently, SDL2 for RISC OS only supports compiling with GCCSDK under Linux. Both the autoconf and CMake build systems are supported.
|
||||||
|
|
||||||
|
The following commands can be used to build SDL2 for RISC OS using autoconf:
|
||||||
|
|
||||||
|
./configure --host=arm-unknown-riscos --prefix=$GCCSDK_INSTALL_ENV --disable-gcc-atomics
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
The following commands can be used to build SDL2 for RISC OS using CMake:
|
||||||
|
|
||||||
|
cmake -Bbuild-riscos -DCMAKE_TOOLCHAIN_FILE=$GCCSDK_INSTALL_ENV/toolchain-riscos.cmake -DRISCOS=ON -DCMAKE_INSTALL_PREFIX=$GCCSDK_INSTALL_ENV -DCMAKE_BUILD_TYPE=Release -DSDL_GCC_ATOMICS=OFF
|
||||||
|
cmake --build build-riscos
|
||||||
|
cmake --build build-riscos --target install
|
||||||
|
|
||||||
|
|
||||||
|
Current level of implementation
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
The video driver currently provides full screen video support with keyboard and mouse input. Windowed mode is not yet supported, but is planned in the future. Only software rendering is supported.
|
||||||
|
|
||||||
|
The filesystem APIs return either Unix-style paths or RISC OS-style paths based on the value of the `__riscosify_control` symbol, as is standard for UnixLib functions.
|
||||||
|
|
||||||
|
The audio, loadso, thread and timer APIs are currently provided by UnixLib.
|
||||||
|
|
||||||
|
GCC atomics are currently broken on some platforms, meaning it's currently necessary to compile with `--disable-gcc-atomics` using autotools or `-DSDL_GCC_ATOMICS=OFF` using CMake.
|
||||||
|
|
||||||
|
The joystick, locale and power APIs are not yet implemented.
|
114
libs/SDL2/docs/README-visualc.md
Normal file
114
libs/SDL2/docs/README-visualc.md
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
Using SDL with Microsoft Visual C++
|
||||||
|
===================================
|
||||||
|
|
||||||
|
### by [Lion Kimbro](mailto:snowlion@sprynet.com) with additions by [James Turk](mailto:james@conceptofzero.net)
|
||||||
|
|
||||||
|
You can either use the precompiled libraries from the [SDL](https://www.libsdl.org/download.php) web site, or you can build SDL
|
||||||
|
yourself.
|
||||||
|
|
||||||
|
### Building SDL
|
||||||
|
|
||||||
|
0. To build SDL, your machine must, at a minimum, have the DirectX9.0c SDK installed. It may or may not be retrievable from
|
||||||
|
the [Microsoft](https://www.microsoft.com) website, so you might need to locate it [online](https://duckduckgo.com/?q=directx9.0c+sdk+download&t=h_&ia=web).
|
||||||
|
_Editor's note: I've been able to successfully build SDL using Visual Studio 2019 **without** the DX9.0c SDK_
|
||||||
|
|
||||||
|
1. Open the Visual Studio solution file at `./VisualC/SDL.sln`.
|
||||||
|
|
||||||
|
2. Your IDE will likely prompt you to upgrade this solution file to whatever later version of the IDE you're using. In the `Retarget Projects` dialog,
|
||||||
|
all of the affected project files should be checked allowing you to use the latest `Windows SDK Version` you have installed, along with
|
||||||
|
the `Platform Toolset`.
|
||||||
|
|
||||||
|
If you choose *NOT* to upgrade to use the latest `Windows SDK Version` or `Platform Toolset`, then you'll need the `Visual Studio 2010 Platform Toolset`.
|
||||||
|
|
||||||
|
3. Build the `.dll` and `.lib` files by right clicking on each project in turn (Projects are listed in the _Workspace_
|
||||||
|
panel in the _FileView_ tab), and selecting `Build`.
|
||||||
|
|
||||||
|
You may get a few warnings, but you should not get any errors.
|
||||||
|
|
||||||
|
Later, we will refer to the following `.lib` and `.dll` files that have just been generated:
|
||||||
|
|
||||||
|
- `./VisualC/Win32/Debug/SDL2.dll` or `./VisualC/Win32/Release/SDL2.dll`
|
||||||
|
- `./VisualC/Win32/Debug/SDL2.lib` or `./VisualC/Win32/Release/SDL2.lib`
|
||||||
|
- `./VisualC/Win32/Debug/SDL2main.lib` or `./VisualC/Win32/Release/SDL2main.lib`
|
||||||
|
|
||||||
|
_Note for the `x64` versions, just replace `Win32` in the path with `x64`_
|
||||||
|
|
||||||
|
### Creating a Project with SDL
|
||||||
|
|
||||||
|
- Create a project as a `Win32 Application`.
|
||||||
|
|
||||||
|
- Create a C++ file for your project.
|
||||||
|
|
||||||
|
- Set the C runtime to `Multi-threaded DLL` in the menu:
|
||||||
|
`Project|Settings|C/C++ tab|Code Generation|Runtime Library `.
|
||||||
|
|
||||||
|
- Add the SDL `include` directory to your list of includes in the menu:
|
||||||
|
`Project|Settings|C/C++ tab|Preprocessor|Additional include directories `
|
||||||
|
|
||||||
|
*VC7 Specific: Instead of doing this, I find it easier to add the
|
||||||
|
include and library directories to the list that VC7 keeps. Do this by
|
||||||
|
selecting Tools|Options|Projects|VC++ Directories and under the "Show
|
||||||
|
Directories For:" dropbox select "Include Files", and click the "New
|
||||||
|
Directory Icon" and add the [SDLROOT]\\include directory (e.g. If you
|
||||||
|
installed to c:\\SDL\\ add c:\\SDL\\include). Proceed to change the
|
||||||
|
dropbox selection to "Library Files" and add [SDLROOT]\\lib.*
|
||||||
|
|
||||||
|
The "include directory" I am referring to is the `./include` folder.
|
||||||
|
|
||||||
|
Now we're going to use the files that we had created earlier in the *Build SDL* step.
|
||||||
|
|
||||||
|
Copy the following file into your Project directory:
|
||||||
|
|
||||||
|
- `SDL2.dll`
|
||||||
|
|
||||||
|
Add the following files to your project (It is not necessary to copy them to your project directory):
|
||||||
|
|
||||||
|
- `SDL2.lib`
|
||||||
|
- `SDL2main.lib`
|
||||||
|
|
||||||
|
To add them to your project, right click on your project, and select
|
||||||
|
`Add files to project`.
|
||||||
|
|
||||||
|
**Instead of adding the files to your project, it is more desirable to add them to the linker options: Project|Properties|Linker|Command Line
|
||||||
|
and type the names of the libraries to link with in the "Additional Options:" box. Note: This must be done for each build configuration
|
||||||
|
(e.g. Release,Debug).**
|
||||||
|
|
||||||
|
### Hello SDL2
|
||||||
|
|
||||||
|
Here's a sample SDL snippet to verify everything is setup in your IDE:
|
||||||
|
|
||||||
|
```
|
||||||
|
#include "SDL.h"
|
||||||
|
|
||||||
|
int main( int argc, char* argv[] )
|
||||||
|
{
|
||||||
|
const int WIDTH = 640;
|
||||||
|
const int HEIGHT = 480;
|
||||||
|
SDL_Window* window = NULL;
|
||||||
|
SDL_Renderer* renderer = NULL;
|
||||||
|
|
||||||
|
SDL_Init(SDL_INIT_VIDEO);
|
||||||
|
window = SDL_CreateWindow("SDL2 Test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WIDTH, HEIGHT, SDL_WINDOW_SHOWN);
|
||||||
|
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
|
||||||
|
|
||||||
|
SDL_DestroyRenderer(renderer);
|
||||||
|
SDL_DestroyWindow(window);
|
||||||
|
SDL_Quit();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### That's it!
|
||||||
|
|
||||||
|
I hope that this document has helped you get through the most difficult part of using the SDL: installing it.
|
||||||
|
Suggestions for improvements should be posted to the [Github Issues](https://github.com/libsdl-org/SDL/issues).
|
||||||
|
|
||||||
|
### Credits
|
||||||
|
|
||||||
|
Thanks to [Paulus Esterhazy](mailto:pesterhazy@gmx.net), for the work on VC++ port.
|
||||||
|
|
||||||
|
This document was originally called "VisualC.txt", and was written by [Sam Lantinga](mailto:slouken@libsdl.org).
|
||||||
|
|
||||||
|
Later, it was converted to HTML and expanded into the document that you see today by [Lion Kimbro](mailto:snowlion@sprynet.com).
|
||||||
|
|
||||||
|
Minor Fixes and Visual C++ 7 Information (In Green) was added by [James Turk](mailto:james@conceptofzero.net)
|
30
libs/SDL2/docs/README-vita.md
Normal file
30
libs/SDL2/docs/README-vita.md
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
PS Vita
|
||||||
|
=======
|
||||||
|
SDL port for the Sony Playstation Vita and Sony Playstation TV
|
||||||
|
|
||||||
|
Credit to
|
||||||
|
* xerpi and rsn8887 for initial (vita2d) port
|
||||||
|
* vitasdk/dolcesdk devs
|
||||||
|
* CBPS discord (Namely Graphene and SonicMastr)
|
||||||
|
|
||||||
|
Building
|
||||||
|
--------
|
||||||
|
To build for the PSVita, make sure you have vitasdk and cmake installed and run:
|
||||||
|
```
|
||||||
|
cmake -S. -Bbuild -DCMAKE_TOOLCHAIN_FILE=${VITASDK}/share/vita.toolchain.cmake -DCMAKE_BUILD_TYPE=Release
|
||||||
|
cmake --build build
|
||||||
|
cmake --install build
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Notes
|
||||||
|
-----
|
||||||
|
* gles1/gles2 support and renderers are disabled by default and can be enabled by configuring with `-DVIDEO_VITA_PVR=ON`
|
||||||
|
These renderers support 720p and 1080i resolutions. These can be specified with:
|
||||||
|
`SDL_setenv("VITA_RESOLUTION", "720", 1);` and `SDL_setenv("VITA_RESOLUTION", "1080", 1);`
|
||||||
|
* gles2 support via PIB is disabled by default and can be enabled by configuring with `-DVIDEO_VITA_PIB=ON`
|
||||||
|
* By default SDL emits mouse events for touch events on every touchscreen.
|
||||||
|
Vita has two touchscreens, so it's recommended to use `SDL_SetHint(SDL_HINT_TOUCH_MOUSE_EVENTS, "0");` and handle touch events instead.
|
||||||
|
Individual touchscreens can be disabled with:
|
||||||
|
`SDL_setenv("VITA_DISABLE_TOUCH_FRONT", "1", 1);` and `SDL_setenv("VITA_DISABLE_TOUCH_BACK", "1", 1);`
|
||||||
|
* Support for L2/R2/R3/R3 buttons, haptic feedback and gamepad led only available on PSTV, or when using external ds4 gamepad on vita.
|
|
@ -352,38 +352,41 @@ source file, such as, "main.cpp".
|
||||||
your project, and open the file in Visual C++'s text editor.
|
your project, and open the file in Visual C++'s text editor.
|
||||||
7. Copy and paste the following code into the new file, then save it.
|
7. Copy and paste the following code into the new file, then save it.
|
||||||
|
|
||||||
|
```c
|
||||||
#include <SDL.h>
|
#include <SDL.h>
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
SDL_DisplayMode mode;
|
SDL_DisplayMode mode;
|
||||||
SDL_Window * window = NULL;
|
SDL_Window * window = NULL;
|
||||||
SDL_Renderer * renderer = NULL;
|
SDL_Renderer * renderer = NULL;
|
||||||
SDL_Event evt;
|
SDL_Event evt;
|
||||||
|
SDL_bool keep_going = SDL_TRUE;
|
||||||
|
|
||||||
|
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
|
||||||
|
return 1;
|
||||||
|
} else if (SDL_GetCurrentDisplayMode(0, &mode) != 0) {
|
||||||
|
return 1;
|
||||||
|
} else if (SDL_CreateWindowAndRenderer(mode.w, mode.h, SDL_WINDOW_FULLSCREEN, &window, &renderer) != 0) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
|
while (keep_going) {
|
||||||
return 1;
|
while (SDL_PollEvent(&evt)) {
|
||||||
|
if ((evt.type == SDL_KEYDOWN) && (evt.key.keysym.sym == SDLK_ESCAPE)) {
|
||||||
|
keep_going = SDL_FALSE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SDL_GetCurrentDisplayMode(0, &mode) != 0) {
|
SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255);
|
||||||
return 1;
|
SDL_RenderClear(renderer);
|
||||||
}
|
SDL_RenderPresent(renderer);
|
||||||
|
|
||||||
if (SDL_CreateWindowAndRenderer(mode.w, mode.h, SDL_WINDOW_FULLSCREEN, &window, &renderer) != 0) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
while (SDL_PollEvent(&evt)) {
|
|
||||||
}
|
|
||||||
|
|
||||||
SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255);
|
|
||||||
SDL_RenderClear(renderer);
|
|
||||||
SDL_RenderPresent(renderer);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDL_Quit();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
#### 6.B. Adding code and assets ####
|
#### 6.B. Adding code and assets ####
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ SDL is written in C, works natively with C++, and there are bindings
|
||||||
available for several other languages, including C# and Python.
|
available for several other languages, including C# and Python.
|
||||||
|
|
||||||
This library is distributed under the zlib license, which can be found
|
This library is distributed under the zlib license, which can be found
|
||||||
in the file "COPYING.txt".
|
in the file "LICENSE.txt".
|
||||||
|
|
||||||
The best way to learn how to use SDL is to check out the header files in
|
The best way to learn how to use SDL is to check out the header files in
|
||||||
the "include" subdirectory and the programs in the "test" subdirectory.
|
the "include" subdirectory and the programs in the "test" subdirectory.
|
||||||
|
@ -35,10 +35,11 @@ More documentation and FAQs are available online at [the wiki](http://wiki.libsd
|
||||||
- [DynAPI](README-dynapi.md)
|
- [DynAPI](README-dynapi.md)
|
||||||
- [Emscripten](README-emscripten.md)
|
- [Emscripten](README-emscripten.md)
|
||||||
- [Gesture](README-gesture.md)
|
- [Gesture](README-gesture.md)
|
||||||
- [Mercurial](README-hg.md)
|
- [Git](README-git.md)
|
||||||
- [iOS](README-ios.md)
|
- [iOS](README-ios.md)
|
||||||
- [Linux](README-linux.md)
|
- [Linux](README-linux.md)
|
||||||
- [OS X](README-macosx.md)
|
- [OS X](README-macosx.md)
|
||||||
|
- [OS/2](README-os2.md)
|
||||||
- [Native Client](README-nacl.md)
|
- [Native Client](README-nacl.md)
|
||||||
- [Pandora](README-pandora.md)
|
- [Pandora](README-pandora.md)
|
||||||
- [Supported Platforms](README-platforms.md)
|
- [Supported Platforms](README-platforms.md)
|
||||||
|
@ -49,15 +50,16 @@ More documentation and FAQs are available online at [the wiki](http://wiki.libsd
|
||||||
- [WinCE](README-wince.md)
|
- [WinCE](README-wince.md)
|
||||||
- [Windows](README-windows.md)
|
- [Windows](README-windows.md)
|
||||||
- [WinRT](README-winrt.md)
|
- [WinRT](README-winrt.md)
|
||||||
|
- [PSVita](README-vita.md)
|
||||||
|
|
||||||
If you need help with the library, or just want to discuss SDL related
|
If you need help with the library, or just want to discuss SDL related
|
||||||
issues, you can join the [developers mailing list](http://www.libsdl.org/mailing-list.php)
|
issues, you can join the [SDL Discourse](https://discourse.libsdl.org/),
|
||||||
|
which can be used as a web forum or a mailing list, at your preference.
|
||||||
|
|
||||||
If you want to report bugs or contribute patches, please submit them to
|
If you want to report bugs or contribute patches, please submit them to
|
||||||
[bugzilla](https://bugzilla.libsdl.org/)
|
[our bug tracker](https://github.com/libsdl-org/SDL/issues)
|
||||||
|
|
||||||
Enjoy!
|
Enjoy!
|
||||||
|
|
||||||
|
|
||||||
Sam Lantinga <mailto:slouken@libsdl.org>
|
Sam Lantinga <mailto:slouken@libsdl.org>
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -39,7 +39,7 @@ while test $# -gt 0; do
|
||||||
echo $exec_prefix
|
echo $exec_prefix
|
||||||
;;
|
;;
|
||||||
--version)
|
--version)
|
||||||
echo 2.0.10
|
echo 2.0.20
|
||||||
;;
|
;;
|
||||||
--cflags)
|
--cflags)
|
||||||
echo -I${prefix}/include/SDL2 -Dmain=SDL_main
|
echo -I${prefix}/include/SDL2 -Dmain=SDL_main
|
||||||
|
@ -49,7 +49,7 @@ while test $# -gt 0; do
|
||||||
;;
|
;;
|
||||||
--static-libs)
|
--static-libs)
|
||||||
# --libs|--static-libs)
|
# --libs|--static-libs)
|
||||||
echo -L${exec_prefix}/lib -lmingw32 -lSDL2main -lSDL2 -mwindows -Wl,--no-undefined -Wl,--dynamicbase -Wl,--nxcompat -lm -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lsetupapi -lversion -luuid -static-libgcc
|
echo -L${exec_prefix}/lib -lmingw32 -lSDL2main -lSDL2 -mwindows -Wl,--dynamicbase -Wl,--nxcompat -lm -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lsetupapi -lversion -luuid
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "${usage}" 1>&2
|
echo "${usage}" 1>&2
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue