Commit Graph

5915 Commits

Author SHA1 Message Date
Tobiasz Laskowski
d1369f1aaa Fix merge error from 985e0994d9 2025-08-18 18:40:13 +01:00
Tobiasz Laskowski
985e0994d9 Fix unicode system path conversions on linux
For non windows platforms, we previously just passed char* into wstring,
which didn't perform the necessary conversion into utf32 which is
expected when hxcpp converts a wchar string to a hxstring on platforms
where wchar has 4 bytes.
2025-08-18 09:32:28 -07:00
Tobiasz Laskowski
c81d70c303 Fix NULL handling in GetDirectory(DESKTOP)
If HOME is NULL, we cannot return here immediately, since we haven't
called `System::GCExitBlocking()`. This currently causes:
```
Critical Error: Allocating from a GC-free thread
```

This is already handled correctly for `USER` and `DOCUMENTS`, however
`DESKTOP` was missed out in f6e38208d3
2025-08-18 08:41:28 -07:00
Tobiasz Laskowski
cbcb5f029e Fix crash on null returns from sdl path functions
On android SDL_GetBasePath is not implemented and returns NULL, which
means that calling strlen causes a crash:

1f21aae242/src/filesystem/android/SDL_sysfilesystem.c (L35-L40)

According to sdl docs, SDL_GetPrefPath can also return NULL, so we also
need to check for that:
https://wiki.libsdl.org/SDL2/SDL_GetPrefPath#return-value
https://wiki.libsdl.org/SDL2/SDL_GetBasePath#return-value
2025-08-18 08:39:58 -07:00
Tobiasz Laskowski
99e986ce39 Fix typos in mbedtls xml includes 2025-08-15 15:13:38 -07:00
Thomas Cashman
52ad5b1b24 Fix GetDirectory UTF16 encoding issue 2025-08-14 09:43:29 -07:00
Josh Tynjala
a999a7b219 Assets: document getImage() result behavior
Multiple calls to getImage() with the same ID may return a new Image instance on
some targets, but the same Image instance on other targets.
2025-08-11 15:02:49 -07:00
Joseph Cloutier
40f4798d7a Implement Promise.completeAsync().
Compared to `new Future()`, this offers:

- The option to run on the main thread.
- The option to send progress events.
- The ability to interrupt the job by calling `promise.error()`.
2025-08-05 03:35:26 -04:00
Joseph Cloutier
1e47c4d0be Fix tinyfiledialogs compatibility with zenity. 2025-07-24 15:47:19 -04:00
Josh Tynjala
b9fecd2ab0 IOSHelper: more refinements to selecting a physical device for lime test ios (closes #1957)
Followup to 6f2f88ca74

Now checks for devices with filters in the following order of preference:

1. State == 'connected' AND transportType == 'wired'
2. State == 'connected' AND transportType == 'localNetwork'
3. State == 'available (paired)' AND transportType == 'wired'
3. State == 'available (paired)' AND transportType == 'localNetwork'

Also adds developerModeStatus == 'enabled' filter as a requirement for all checks.

If the app is meant to be iPhone-only or iPad-only, adds the appropriate filter for that too.
2025-07-23 10:32:50 -07:00
Josh Tynjala
f8229bf7ae AndroidPlatform: target-sdk-version 35 is the current minimum requirement for new apps 2025-07-21 08:55:06 -07:00
Josh Tynjala
67d2261f11 actions: compile Android with NDK r28c
Needed for required 16KB native library alignment
2025-07-21 08:37:30 -07:00
player-03
3c86d2cd39 Simplify logic in createCanvas().
I assume we used `untyped __js__` to get around incomplete externs, but Haxe 3.2 updated the externs, and they've included the second argument ever since.
2025-07-13 21:15:39 -04:00
Joseph Cloutier
e8b031a8a8 Implement ThreadPool.onUncaughtError.
This restores the behavior of `onError` to what it was in 8.1.0.
2025-07-13 20:10:33 -04:00
player-03
112664aa35 Fix deprecation warning. 2025-07-13 19:48:01 -04:00
Josh Tynjala
7b5a5e1d0a Set hl-ver for Lime's bundled HashLink
Haxe 5 defaults to 1.15, but we're currently still bundling an older version. So we need to specify hl-ver or it won't work properly because Haxe 5 will produce code that older HashLink isn't compatible with.

If hl-ver is already specified, or if a custom HL_PATH is defined, does not set hl-ver because that may be undesirable.
2025-07-09 10:24:20 -07:00
Josh Tynjala
ae5751c230 HashLink 1.13
Tested on macOS, Linux, and Windows. Works better with Haxe 5 than HashLink 1.12 did. This upgrade is easier than 1.14 and presumably 1.15, which we can still do later.
2025-07-09 10:24:20 -07:00
player-03
f6393fc107 Overhaul ThreadPool job scheduling. (#1837, #1958)
* Store the job's thread in `JobData`.

Since we're storing more and more in `JobData`, and the background thread only needs three bits of that data, I added those to `ThreadEvent` so we don't have to pass the full object. This may improve performance in HTML5 specifically, where passing a class instance incurs an overhead.

* Allow a single `ThreadPool` to run jobs in both modes.

* Remove unnecessary `@:forward.new`.

* Improve check for whether to call `Thread.returnMessage()`.

Now that thread pools can manage both types of job at once, we can't rely on `mode` to determine whether we're on a background thread. Honestly, I shouldn't have relied on it in the first place.

* Improve `ThreadPool.isMainThread()`.

No need to set `__mainThread` based on `isWorker()` when `isWorker()` already gives the information we're after.

* Correct and clarify documentation.

* Start new jobs immediately when a slot opens up.

For single-threaded jobs, this means a pool can now handle multiple per frame. For multi-threaded jobs, this only slightly reduces the delay between jobs.

* Fix missing function call.

* Add missing import.

Forgot this when overriding the "send" functions.

* Simplify comment.

It's a private variable, so all it really needs to do is mention the location it gets used.

* Don't count the main thread in `currentThreads`.

Plus, alphabetize the variables.

In 8.2.0, a single-threaded pool would report `currentThreads == 1` when running a job, meaning it counted the main thread. But in retrospect, this was both redundant (with `activeJobs`) and unexpected, so I'm counting it as a bug.

* Update documentation.

* Remove redundant check.

All the jobs in `__multiThreadedJobs` are already known to be running in multi-threaded mode. This is left over from when pools were locked to a single mode.

* Handle error case differently.

We still need to throw an error when `mode` is `MULTI_THREADED`, but this can now vary per job, so the check must happen during `run()`.

Also, the old error message was out of date. You can't pass a function to the `ThreadPool` constructor.

* Remove unnecessary `#if`s.

On other targets, it will return `true`, which will be inlined and optimized out. The conditional compilation just added clutter.

* Rewrite `ThreadPool` to use `Deque` on native targets.

Using the flag `lime_threads_deque` to distinguish between this and the old approach. Hopefully someday we can remove this flag, once we implement something akin to `Deque` in HTML5.

That aside, the hardest part is keeping track of the state of each thread. That's why there's so much more complexity: whenever the main thread sends a message to a worker, it needs to wait for confirmation, but also not send any more messages while waiting. And the code that tracks all this needs to work in both modes (with and without `Deque`).

* Bug fix: `firstLoop = false` can get skipped.

* Fix misplaced `#if`.

* Add missing `#if`.

* Make sure all events are received before removing the update listener.

After all jobs are done, threads will send `EXIT` events. These must be processed before removing `__update`, otherwise they'll linger in the queue until the next job starts.

* Keep better track of how many threads are idle.

Previously, while a thread was exiting, `ThreadPool` could think it was still idle. This would cause it not to spin up a new thread for the next job, leading to a pending job with no threads available to handle it.

* Remove redundant code.

* Fix null pointer error.

* Fix bugs in `cancel()` and `cancelJob()`.

* Don't shut down a `ThreadPool` while work events are queued.

Co-authored-by: Barış Yıldırım <25794892+barisyild@users.noreply.github.com>

* Add missing `#if`.

---------

Co-authored-by: Barış Yıldırım <25794892+barisyild@users.noreply.github.com>
2025-07-07 16:22:41 -04:00
Josh Tynjala
4be7cc924e FileDialog: if the defaultPath passed to browse() is a directory, fixes issue where parent directory was used as default path instead
Tiny file dialogs seems to choose the parent directory if the path doesn't end with a separator.
2025-06-20 14:04:57 -07:00
unknown
6450e5b2c3 Set some window properties upon creation 2025-06-10 13:17:36 -07:00
Josh Tynjala
0f6f01287a actions: add pip3 to python3 execs that need to be removed 2025-06-09 15:25:52 -07:00
Josh Tynjala
95e63398c8 CommandLineTools: fix ability to specify <haxelib version/> in project with local .haxelib directory
If the version of Lime tools doesn't match the version of Lime specified by <haxelib version/>, and Lime is found in .haxelib, append the -nolocalrepocheck option to avoid redundantly checking for .haxelib again and potentially comparing to a path resolved without accounting for <haxelib version/> yet.
2025-06-05 08:48:56 -07:00
Josh Tynjala
3802d51e5c templates: use mobile-web-app-capable in index.html template instead of apple-mobile-web-app-capable
Similar fix to openfl/openfl@8aadc573b7
2025-06-04 13:41:08 -07:00
Josh Tynjala
f4d2965426 Merge branch 'develop' into 8.3.0-Dev 2025-06-04 11:36:03 -07:00
Josh Tynjala
c1f79fbfba actions: use ubuntu-22.04 because GitHub removed ubuntu-20.04 2025-05-05 10:19:03 -07:00
Josh Tynjala
09b6d151ad FileDialog: uses SINGLE_THREADED ThreadPool on all Windows targets to prevent application hang (closes #1946) (references #1849)
Previously, it seemed that only Windows HashLink would hang when opening a FileDialog, but I was able to reproduce #1946 on Windows CPP too. Not sure why I couldn't before because I don't see any obvious changes to FileDialog or ThreadPool that would cause it to happen now, but not when it was affecting HashLink previously.

Does not seem to affect other operating systems.

We might consider going back to BackgroundWorker instead, which we used in Lime 8.1 and older.
2025-05-05 09:47:25 -07:00
Josh Tynjala
bc8f9df60f zlib 1.2.13
Upgrading required to compile with latest Xcode and macOS SDK
2025-04-14 15:28:26 -07:00
Josh Tynjala
97466c6360 png 1.6.46
Upgrading required to compile with latest Xcode and macOS SDK
2025-04-14 15:28:01 -07:00
Josh Tynjala
241edd9d10 efsw 1.4.1
Upgrading required to compile with latest Xcode and macOS SDK
2025-04-14 15:27:24 -07:00
Chris Speciale
aadf0789b1 [ci] use the latest haxelib version 2025-04-10 11:49:27 -04:00
Chris Speciale
236e143a8e [fix] Extract values before locking to avoid deadlock with GC
Attempts to fix reported freezes/crashes related to possible gc contention related to: https://github.com/openfl/lime/issues/1943
2025-04-10 11:20:12 -04:00
Chris Speciale
b10d845ca0 Create MAINTAINERS.md 2025-04-02 10:55:52 -04:00
Barış Yıldırım
12d3ee5916 curl encoding support added 2025-03-21 10:56:23 -04:00
Josh Tynjala
a9f72d65d9 XCodeHelper: if project.xml contains <config:ios device="ipad"/>, default to ipad simulator instead of iphone simulator 2025-03-18 11:10:25 -07:00
Josh Tynjala
9d10e10f5f XCodeHelper: improve selection of default iPhone and iPad simulator
Falls back to any ipad- or iphone- simulator, if necessary
2025-03-18 11:10:25 -07:00
Josh Tynjala
6e869172b1 IOSHelper: use xcrun simctl boot deviceID to ensure that correct device is running
If the simulator was already running with a different device, it might not start the selected device
2025-03-18 11:10:25 -07:00
Josh Tynjala
c6cd26f699 AIRHelper: allow customization of the AIR simulator's screensize and screenDPI 2025-03-18 09:32:01 -07:00
Chris Speciale
63d6deeec3 Merge pull request #1929 from tobil4sk/ci-stable-android-ndk
[ci] Run against stable android ndk
2025-03-16 14:21:29 -04:00
Tobiasz Laskowski
60d10e16fe [ci] Avoid duplicate android artifact upload 2025-03-15 23:21:07 +00:00
Tobiasz Laskowski
cf5c66d889 [ci] Run against stable android ndk 2025-03-15 23:08:11 +00:00
Chris Speciale
844222e99d Merge branch 'develop' into 8.3.0-Dev 2025-03-14 06:53:14 -04:00
Chris Speciale
6f5bc336f3 Merge branch 'develop' into 8.3.0-Dev 2025-03-14 06:47:14 -04:00
Chris Speciale
49a08c6920 Merge pull request #1927 from tobil4sk/android-openal-c++11
Apply -std=c++11 to openal-soft build on android
2025-03-14 06:38:13 -04:00
Tobiasz Laskowski
52072d1f21 Apply -std=c++11 to openal-soft build on android
openal-soft assumes that aligned_alloc is available with c++17. Newer
android ndks set c++17 by default, however they do not expose
aligned_alloc without setting min sdk version to 28.

We can avoid this issue by forcing openal to be compiled with c++11.

Also note, we have HXCPP_CPP11 defined, however, hxcpp ignores this for
the android toolchain.  This means we must set it explicitly

See:
f5e0eef34d/common/almalloc.cpp (L15)
2025-03-14 10:04:25 +00:00
Chris Speciale
1dd2acf479 Merge branch 'develop' into 8.3.0-Dev 2025-03-14 05:30:43 -04:00
Chris Speciale
20c9bec3bc Update Build.xml
Hxcpp doesn't respect HXCPP_CPP11 for android. We can avoid this issue just by adding -std=c++11 here. This resolves a conflict with openal soft 1.20.1 for android builds. This works because the library assumes c++17 and invokes a function that isn't available in android sdk below 28.
2025-03-14 05:29:18 -04:00
Chris Speciale
e41dc949fe Revert "Merge pull request #1924 from tobil4sk/update-openal-1.21.1"
This reverts commit 3f0179657b, reversing
changes made to 80aaaaef9f.
2025-03-14 05:16:24 -04:00
Tobiasz Laskowski
b709a5bb0d Fix old android ndk error not showing
The error flag is not valid inside `<files />`, so this wasn't actually
doing anything.

The error now shows properly
2025-03-14 07:41:17 +00:00
Chris Speciale
ee1d56e864 Android: Revert to sdk 21 as default minimumSdkVersion
Minimum SDK 28 is no longer required to build android after updating openal to 1.21.1. See: https://github.com/openfl/lime/pull/1924

Closes https://github.com/openfl/lime/issues/1923
2025-03-14 01:45:05 -04:00
Chris Speciale
3f0179657b Merge pull request #1924 from tobil4sk/update-openal-1.21.1
Update openal soft to 1.21.1
2025-03-14 01:39:16 -04:00