westquote / SquidTasks

C++14 coroutine-based task library for games
MIT License
125 stars 11 forks source link

PS4/PS5 Documentation #10

Open kbaxtrom opened 2 years ago

kbaxtrom commented 2 years ago

We're testing the integration here for PS4/PS5 with UE4 and are hitting some compiler errors. Can you clarify the documentation for consoles or add some example integration documentation?

TasksCommonPrivate.h(178,10): fatal error: 'experimental/coroutine' file not found

include <experimental/coroutine>

TasksCommonPrivate.h(59,28): error : expected class name struct static_false : std::false_type

Your GDC Talk was great!

spicard12 commented 2 years ago

We are trying to integrate SquidTasks into our engine and we are hitting the same compilation errors.

We contacted Sony about it for PS5 and their response was that coroutines weren't supported on PS5 :

Although some C++20 feature are either fully or partially supported in the compiler, there is no SDK standard library support for C++20, as the SDK standard library targets C++17. Since the coroutines feature requires the "coroutine" header file (not present in the SDK) then this is one of those C++20 features that definitely won't work at this time.

So, unfortunately, coroutines are not supported and there is no current ETA to have them on the PS5's SDK.

So, I'm definitely interested too in knowing how you went around solving this issue in The Pathless.

And kudos for your great GDC talk!

westquote commented 2 years ago

While we cannot publicly discuss details of the PS5 SDK, we can say that there exists a block of code in TasksCommonPrivate.h (starting at line 94) that is intended to be used for Clang distributions that do not include or <experimental/coroutine>. Can you identify a reason why this preprocessor block might not be being used during compilation? As a possible workaround, you could modify that file to force it to unconditionally use that block.

Please let us know anything you find!

spicard12 commented 2 years ago

In our case, it ended up being an issue with _STL_COMPILER_PREPROCESSOR not being defined. Fixing this and making sure that block of code was used during compilation fixed our issue.

Thanks for the prompt help @westquote !

kbaxtrom commented 2 years ago

@spicard12 out of curiosity where did you put that definition?

We also found that forcing the conditional also worked. Similar modifications were necessary to the PlatformToolChain but those were very straightforward based on the example.

spicard12 commented 2 years ago

@kbaxtrom, for the moment, I just added the macro definition to the clang command-line with : -D "_STL_COMPILER_PREPROCESSOR"

We're just in the prototyping phase right now to see if SquidTasks works well for what we want to accomplish (it does so far), so we're not at the clean integration part yet, hence the "hacky way" to fix the issue for now.