Merge remote-tracking branch 'refs/remotes/origin/master'
Some checks failed
Build / package-dist (push) Has been cancelled
Build / build-macos (push) Waiting to run
Build / build-windows (push) Waiting to run
Build / build-linux (push) Has been cancelled

This commit is contained in:
2025-02-12 08:50:37 -06:00
12 changed files with 404 additions and 64 deletions

View File

@@ -1,50 +1,301 @@
name: Build (Release + Cross)
name: Build
on:
push:
branches: [ "master" ]
pull_request:
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
# 1) Native Linux build
- os: ubuntu-latest
name: "Linux (Release)"
target: "release"
# ===============================================================
# LINUX BUILD
# ===============================================================
build-linux:
runs-on: ubuntu-latest
steps:
# 1) Check out code
- name: Check Out Code
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.x"
- name: Install Meson and Ninja
run: |
python -m pip install --upgrade pip
pip install meson ninja
- name: Install Dependencies for Cross (mingw)
if: ${{ matrix.target == 'crosswin' }}
# 2) Install system dependencies + ccache
- name: Install Dependencies
run: |
sudo apt-get update
sudo apt-get install -y mingw-w64
# Add any other packages needed for cross compilation
sudo apt-get install -y \
libasound2-dev libpulse-dev libudev-dev \
libwayland-dev wayland-protocols libxkbcommon-dev \
libx11-dev libxext-dev libxrandr-dev libxcursor-dev \
libxi-dev libxinerama-dev libxss-dev \
libegl1-mesa-dev libgl1-mesa-dev \
cmake ninja-build git build-essential binutils mold meson pkg-config \
ccache
- name: Build
run: make ${{ matrix.target }}
# 3) Configure ccache
- name: Configure ccache
run: |
echo "CMAKE_C_COMPILER_LAUNCHER=ccache" >> $GITHUB_ENV
echo "CMAKE_CXX_COMPILER_LAUNCHER=ccache" >> $GITHUB_ENV
- name: Upload Artifact
# 4) Cache ccache
- name: Cache ccache
uses: actions/cache@v3
with:
path: ~/.ccache
key: ccache-linux-${{ hashFiles('**/*.c', '**/*.cpp', '**/*.h', '**/CMakeLists.txt', '**/meson.build') }}
restore-keys: |
ccache-linux-
# 5) Cache SDL3 (Linux)
- name: Cache SDL3 (Linux)
uses: actions/cache@v3
with:
path: |
sdl3
sdl3-build
key: sdl3-linux-${{ hashFiles('sdl3/CMakeLists.txt') }}
# 6) Build SDL3 (Linux)
- name: Build SDL3 (Linux)
run: |
if [ ! -d "sdl3/.git" ]; then
echo "Cloning SDL3 repository..."
git clone --depth 1 --branch main https://github.com/libsdl-org/SDL.git sdl3
else
echo "SDL3 source is already present (possibly from cache)."
fi
mkdir -p sdl3-build
cd sdl3-build
cmake ../sdl3 -GNinja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="${PWD}/installed_sdl3" \
-DSDL_SHARED=ON \
-DSDL_STATIC=OFF
ninja
ninja install
# 7) Build Prosperon (Linux)
- name: Build Prosperon (Linux)
run: |
export PKG_CONFIG_PATH="${PWD}/sdl3-build/installed_sdl3/lib/pkgconfig:$PKG_CONFIG_PATH"
meson setup build_dbg -Dbuildtype=debugoptimized
meson compile -C build_dbg
# 8) Create minimal artifact folder (Linux)
- name: Create artifact folder (Linux)
run: |
mkdir _pack
cp build_dbg/prosperon _pack/
# Adjust wildcard if there's a versioned libSDL3. e.g. libSDL3-0.600.0.so
cp sdl3-build/installed_sdl3/lib/libSDL3.so _pack/
# 9) Upload artifact (Linux)
- name: Upload Artifact (Linux)
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.name }}-artifacts
# If your build output folders differ, adjust accordingly:
name: prosperon-artifacts-linux
path: _pack
# ===============================================================
# MACOS BUILD (Using Homebrew SDL3)
# ===============================================================
build-macos:
runs-on: macos-latest
steps:
# 1) Check out code
- name: Check Out Code
uses: actions/checkout@v3
# 2) Install dependencies (SDL3 via Homebrew) + ccache
- name: Install Dependencies (macOS)
run: |
brew update
brew install sdl3 meson ninja cmake ccache
# 3) Configure ccache
- name: Configure ccache
run: |
echo "CMAKE_C_COMPILER_LAUNCHER=ccache" >> $GITHUB_ENV
echo "CMAKE_CXX_COMPILER_LAUNCHER=ccache" >> $GITHUB_ENV
# 4) Cache ccache
- name: Cache ccache
uses: actions/cache@v3
with:
path: ~/Library/Caches/ccache
key: ccache-macos-${{ hashFiles('**/*.c', '**/*.cpp', '**/*.h', '**/CMakeLists.txt', '**/meson.build') }}
restore-keys: |
ccache-macos-
# 5) Build Prosperon (macOS) linking against Homebrew's SDL3
- name: Build Prosperon (macOS)
run: |
# Ensure pkg-config can find Homebrew's SDL3 .pc files
export PKG_CONFIG_PATH="$(brew --prefix sdl3)/lib/pkgconfig:$PKG_CONFIG_PATH"
meson setup build_macos -Dbuildtype=debugoptimized
meson compile -C build_macos
# 6) Copy SDL3 .dylib from Homebrew for packaging
- name: Copy SDL3 library for packaging
run: |
SDL3_PREFIX=$(brew --prefix sdl3)
mkdir -p sdl3-macos
# Copy all versions of the SDL3 dynamic library
cp -a "${SDL3_PREFIX}/lib/libSDL3*.dylib" sdl3-macos/ || echo "No .dylib found, ignoring"
# 7) Create minimal artifact folder (macOS)
- name: Create artifact folder (macOS)
run: |
mkdir _pack
cp build_macos/prosperon _pack/
cp sdl3-macos/libSDL3*.dylib _pack/ || echo "No .dylib found, ignoring"
# 8) Upload artifact (macOS)
- name: Upload Artifact (macOS)
uses: actions/upload-artifact@v4
with:
name: prosperon-artifacts-macos
path: _pack
# ===============================================================
# WINDOWS BUILD (Cross-compiling on Ubuntu)
# ===============================================================
build-windows:
runs-on: ubuntu-latest
steps:
# 1) Check out code
- name: Check Out Code
uses: actions/checkout@v3
# 2) Install dependencies (MinGW, etc.) + ccache
- name: Install Dependencies (Windows Cross)
run: |
sudo apt-get update
sudo apt-get install -y \
mingw-w64 cmake ninja-build git build-essential \
binutils pkg-config meson ccache
# 3) Configure ccache for cross-compiler
- name: Configure ccache
run: |
echo "CMAKE_C_COMPILER_LAUNCHER=ccache" >> $GITHUB_ENV
echo "CMAKE_CXX_COMPILER_LAUNCHER=ccache" >> $GITHUB_ENV
# 4) Cache ccache
- name: Cache ccache
uses: actions/cache@v3
with:
path: ~/.ccache
key: ccache-win-${{ hashFiles('**/*.c', '**/*.cpp', '**/*.h', '**/CMakeLists.txt', '**/meson.build') }}
restore-keys: |
ccache-win-
# 5) Cache SDL3 (Windows cross)
- name: Cache SDL3 (Windows cross)
uses: actions/cache@v3
with:
path: |
build_dbg
build_release
build_win
sdl3-win
sdl3-build-win
key: sdl3-win-${{ hashFiles('sdl3-win/CMakeLists.txt') }}
# 6) Build SDL3 (Windows cross)
- name: Build SDL3 (Windows cross)
run: |
if [ ! -d "sdl3-win/.git" ]; then
echo "Cloning SDL3 for Windows cross..."
git clone --depth 1 --branch main https://github.com/libsdl-org/SDL.git sdl3-win
else
echo "SDL3-win source already present (possibly from cache)."
fi
mkdir -p sdl3-build-win
cd sdl3-build-win
cmake ../sdl3-win -GNinja \
-DCMAKE_SYSTEM_NAME=Windows \
-DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc \
-DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-g++ \
-DCMAKE_RC_COMPILER=x86_64-w64-mingw32-windres \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="${PWD}/installed_sdl3_win" \
-DSDL_SHARED=ON \
-DSDL_STATIC=OFF
ninja
ninja install
# 7) Expose local SDL3 (Windows cross) for pkg-config
- name: Configure PKG_CONFIG_PATH (Windows cross)
run: |
echo "PKG_CONFIG_PATH=${GITHUB_WORKSPACE}/sdl3-build-win/installed_sdl3_win/lib/pkgconfig:$PKG_CONFIG_PATH" >> $GITHUB_ENV
# 8) Build Prosperon (Windows cross)
- name: Build Prosperon (Windows cross)
run: |
meson setup -Dbuildtype=debugoptimized --cross-file mingw32.cross build_win
meson compile -C build_win
# 9) Create minimal artifact folder (Windows)
- name: Create package folder
run: |
mkdir _pack
cp build_win/prosperon.exe _pack/
cp sdl3-build-win/installed_sdl3_win/bin/SDL3.dll _pack/
# 10) Upload artifacts (Windows cross)
- name: Upload Artifact (Windows cross)
uses: actions/upload-artifact@v4
with:
name: prosperon-artifacts-windows
path: _pack
package-dist:
# This job depends on the three builds completing successfully.
needs: [build-linux, build-macos, build-windows]
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v3
- name: Download Linux Artifacts
uses: actions/download-artifact@v4
with:
name: prosperon-artifacts-linux
path: linux_artifacts
- name: Download macOS Artifacts
uses: actions/download-artifact@v4
with:
name: prosperon-artifacts-macos
path: macos_artifacts
- name: Download Windows Artifacts
uses: actions/download-artifact@v4
with:
name: prosperon-artifacts-windows
path: windows_artifacts
- name: Create the Dist Folder
run: |
mkdir dist
cp README.md dist/
cp license.txt dist/
cp -r examples dist/
# Make subdirectories for each platform
mkdir dist/linux
mkdir dist/macos
mkdir dist/win
# -------------------
# Copy artifacts in
# -------------------
cp linux_artifacts/* dist/linux/
cp macos_artifacts/* dist/macos/
cp windows_artifacts/* dist/win/
- name: Upload Final Dist
uses: actions/upload-artifact@v4
with:
name: prosperon-dist
path: dist

32
license.txt Normal file
View File

@@ -0,0 +1,32 @@
Prosperon Commercial License
Last Updated: February 11, 2025
Grant of License
Upon purchasing a Prosperon license, Pockle World LLC (“Licensor”) grants you (“Licensee”) a non-exclusive, worldwide, commercial license to use the Prosperon game engine (the “Software”) to develop, publish, and distribute one or more video game or interactive software products (the “Products”).
Closed-Source Restriction
The Software is currently closed-source. Licensee shall not redistribute or disclose the Prosperon engine source code, in whole or in part, unless expressly permitted by Pockle World LLC.
Permitted Usage
Licensee may create and distribute compiled or packaged Products that incorporate or depend upon the Software, for commercial or non-commercial purposes, without owing royalties or additional fees to Licensor (beyond the initial purchase).
Ownership and Copyright
The Software is owned by Pockle World LLC. All rights not expressly granted in this License are reserved by Pockle World LLC.
Modifications
You may modify the scripts of your own Projects, but you may not share or distribute any modifications to the Prosperon engines proprietary binaries, libraries, or source code itself.
No Warranty
THE SOFTWARE IS PROVIDED “AS IS,” WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
Limitation of Liability
IN NO EVENT SHALL LICENSOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE.
Term and Termination
This License shall remain in effect perpetually, unless you fail to comply with any term of this License. In such event, your rights under this License will terminate immediately without notice from Pockle World LLC.
Support and Updates
Purchase of the Software includes access to all updates through Prosperon v1.X. Additional support plans may be purchased separately.
Governing Law
This License shall be governed by and construed in accordance with the laws of the jurisdiction in which Pockle World LLC is located, without regard to conflict-of-law principles.

View File

@@ -56,7 +56,7 @@ endif
if host_machine.system() == 'linux'
deps += cc.find_library('asound', required:true)
deps += [dependency('x11'), dependency('xi'), dependency('xcursor'), dependency('egl'), dependency('gl')]
link += '-fuse-ld=mold' # use mold, which is very fast, for debug builds
# link += '-fuse-ld=mold' # use mold, which is very fast, for debug builds
endif
if host_machine.system() == 'windows'
@@ -99,8 +99,10 @@ deps += dependency('physfs', static:true)
deps += dependency('threads')
deps += dependency('chipmunk')
if get_option('chipmunk')
deps += dependency('qjs-chipmunk', static:false)
# deps += dependency('qjs-chipmunk', static:false)
endif
if get_option('enet')
@@ -127,8 +129,8 @@ if get_option('editor')
foreach imgui : imsrc
sources += tp / 'imgui' / imgui
endforeach
sub_dmon = subproject('qjs-dmon')
dmon_dep = sub_dmon.get_variable('qjs_dmon_dep')
# sub_dmon = subproject('qjs-dmon')
# dmon_dep = sub_dmon.get_variable('qjs_dmon_dep')
endif
includers = []
@@ -186,5 +188,3 @@ prosperon = custom_target('prosperon',
prosperon_dep = declare_dependency(
link_with:prosperon
)
test('sanity', prosperon)

View File

@@ -5,7 +5,7 @@ ar = 'x86_64-w64-mingw32-ar'
windres = 'x86_64-w64-mingw32-windres'
strip = 'x86_64-w64-mingw32-strip'
exe_wrapper = 'wine'
pkgconfig = 'x86_64-w64-mingw32-pkg-config'
pkg-config = 'pkg-config'
[host_machine]
system = 'windows'
@@ -15,4 +15,3 @@ endian = 'little'
[properties]
needs_exe_wrapper = false

View File

@@ -8,7 +8,6 @@ plugins:
extra_css:
- style.css
theme:
name: material
navigation_depth: 3
@@ -18,6 +17,9 @@ theme:
- content.action.view
- navigation.prune
- navigation.indexes
- search.suggest
- search.highlight
- toc.follow
icon:
view: material/eye
palette:
@@ -27,6 +29,9 @@ extra:
social:
- icon: fontawesome/brands/x-twitter
link: https://x.com/@pockleworld
analytics:
provider: google
property: G-85ECSFGCBV
markdown_extensions:
- admonition

View File

@@ -69,6 +69,52 @@ Cmdline.register_order(
"Play the game in a web browser.",
);
Cmdline.register_order(
"makedoc",
function() {
var doc = use('doc')
var gs = ['console', 'prosperon', 'actor', 'use']
Object.getOwnPropertyDescriptor(prosperon.c_types.transform, 'pos')[prosperon.DOC] = 'TEST DOC'
console.log(Object.getOwnPropertyDescriptor(prosperon.c_types.transform,'pos')[prosperon.DOC])
for (var g of gs)
io.slurpwrite(`.src/docs/api/${g}.md`, doc.writeDocFile(globalThis[g], g))
var coredocs = io.enumerate("scripts/modules", 0)
coredocs = coredocs.filter(x => io.match("**/*.js", x)).map(x => x.name())
var TYPEPATH = '.src/docs/api/types/'
for (var c in prosperon.c_types) {
io.slurpwrite(`${TYPEPATH}${c}.md`, doc.writeDocFile(prosperon.c_types[c], c))
}
var APIPATH = '.src/docs/api/modules/'
for (var m of coredocs) {
var u = use(m)
var path = `${APIPATH}${m}.md`
io.slurpwrite(path, doc.writeDocFile(u, m))
}
var DULLPATH = '.src/docs/dull/'
var mixins = ['Object', 'String', 'Array', 'Map', 'WeakMap', 'Symbol','Set', 'WeakSet', 'ArrayBuffer', 'Function']
for (var m of mixins) {
var path = `${DULLPATH}${m}.md`
io.slurpwrite(path, doc.writeDocFile(globalThis[m].prototype, m))
}
var dullgpath = '.src/docs/dull/globals/'
var globals = ['Object', 'String', 'Array', 'Symbol', 'Number', 'Error','Function', 'Math']
for (var m of globals) {
var path = `${dullgpath}${m}.md`
io.slurpwrite(path, doc.writeDocFile(globalThis[m], m))
}
"Make documentation."
})
Cmdline.register_order(
"play",
function (argv) {

View File

@@ -280,23 +280,23 @@ var doc = {writeDocFile: writeDocFile}
doc[prosperon.DOC] = `
Provides a consistent way to create documentation for prosperon elements. Objects are documented by adding docstrings directly to object-like things (functions, objects, ...), or to an object's own "doc object".
Docstrings are set to the symbol `prosperon.DOC`
Docstrings are set to the symbol \`prosperon.DOC\`
```js
\`\`\`js
// Suppose we have a module that returns a function
function greet(name) { console.log("Hello, " + name) }
// We can attach a docstring
greet.doc = `
greet.doc = \`
Greets the user by name.
:param name: The name of the person to greet.
`
\`
// A single function is a valid return!
return greet
```
\`\`\`
```js
\`\`\`js
// Another way is to add a docstring object to an object
var greet = {
hello() { console.log('hello!') }
@@ -305,7 +305,7 @@ var greet = {
greet[prosperon.DOC] = {}
greet[prosperon.DOC][prosperon.DOC] = 'An object full of different greeter functions'
greet[prosperon.DOC].hello = 'A greeter that says, "hello!"'
```
\`\`\`
`
return doc

View File

@@ -6,6 +6,7 @@ var geometry = use('geometry')
var draw = use('draw2d')
var graphics = use('graphics')
var util = use('util')
var input = use('input')
var lay_ctx = layout.make_context();

View File

@@ -7,6 +7,8 @@ var os = use('os')
var event = use('event')
var imgui = use('imgui')
var tracy = use('tracy')
var waittime = 1/240
var last_frame_time = 0
var frame_t = 0

View File

@@ -5282,7 +5282,7 @@ JSC_CCALL(cmd_render_pass,
return JS_ThrowTypeError(js, "render_pass: colorTargets must be an array");
uint32_t colorCount = js_arrlen(js, colorTargetsVal);
SDL_GPUColorTargetInfo colortars[colorCount] = {};
SDL_GPUColorTargetInfo colortars[colorCount];
SDL_GPUDepthStencilTargetInfo depthtar;
int has_depth = 0;

View File

@@ -1,2 +1,13 @@
[wrap-redirect]
filename = qjs-chipmunk2d/subprojects/chipmunk.wrap
[wrap-file]
directory = Chipmunk2D-Chipmunk-7.0.3
source_url = https://github.com/slembcke/Chipmunk2D/archive/Chipmunk-7.0.3.tar.gz
source_filename = Chipmunk2D-Chipmunk-7.0.3.tar.gz
source_hash = 1e6f093812d6130e45bdf4cb80280cb3c93d1e1833d8cf989d554d7963b7899a
patch_filename = chipmunk_7.0.3-1_patch.zip
patch_url = https://wrapdb.mesonbuild.com/v2/chipmunk_7.0.3-1/get_patch
patch_hash = 90e5e1be7712812cd303974910c37e7c4f2d2c8060312521b3a7995daa54f66a
wrapdb_version = 7.0.3-1
[provide]
chipmunk = chipmunk_dep

View File

@@ -1,7 +0,0 @@
[wrap-git]
url = https://github.com/johnalanbrook/qjs-chipmunk2d.git
revision = head
depth = 1
[provide]
qjs-chipmunk = qjs_chipmunk_dep