Shouldn't those be reported upstream then?
Shouldn't those be reported upstream then?
Sick sad world.
This MR fixes two bugs:
And introduces a feature:
In file included from apps/opencs/model/world/pathgrid.hpp:7,
from apps/opencs/model/world/idcollection.hpp:15,
from apps/opencs/model/world/idcollection.cpp:1:
In constructor ‘constexpr ESM::Pathgrid::Pathgrid(ESM::Pathgrid&&)’,
inlined from ‘constexpr CSMWorld::Pathgrid::Pathgrid(CSMWorld::Pathgrid&&)’ at apps/opencs/model/world/pathgrid.hpp:24:12,
inlined from ‘constexpr CSMWorld::Record<CSMWorld::Pathgrid>::Record(CSMWorld::Record<CSMWorld::Pathgrid>&&)’ at apps/opencs/model/world/record.hpp:39:12,
inlined from ‘std::__detail::__unique_ptr_t<_Tp> std::make_unique(_Args&& ...) [with _Tp = CSMWorld::Record<CSMWorld::Pathgrid>; _Args = {CSMWorld::Record<CSMWorld::Pathgrid>}]’ at /usr/include/c++/13.2.1/bits/unique_ptr.h:1070:30,
inlined from ‘std::unique_ptr<CSMWorld::RecordBase> CSMWorld::Record<ESXRecordT>::modifiedCopy() const [with ESXRecordT = CSMWorld::Pathgrid]’ at apps/opencs/model/world/record.hpp:92:116:
components/esm3/loadpgrd.hpp:19:12: warning: ‘<unnamed>.CSMWorld::Record<CSMWorld::Pathgrid>::mBase.CSMWorld::Pathgrid::<unnamed>.ESM::Pathgrid::mData’ may be used uninitialized [-Wmaybe-uninitialized]
19 | struct Pathgrid
| ^~~~~~~~
In file included from apps/opencs/model/world/idcollection.hpp:8:
apps/opencs/model/world/record.hpp: In member function ‘std::unique_ptr<CSMWorld::RecordBase> CSMWorld::Record<ESXRecordT>::modifiedCopy() const [with ESXRecordT = CSMWorld::Pathgrid]’:
apps/opencs/model/world/record.hpp:92:53: note: ‘<anonymous>’ declared here
92 | return std::make_unique<Record<ESXRecordT>>(Record<ESXRecordT>(State_ModifiedOnly, nullptr, &(this->get())));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
apps/benchmarks/settings/access.cpp: In function ‘void {anonymous}::localStatic(benchmark::State&)’:
apps/benchmarks/settings/access.cpp:43:37: warning: ‘typename std::enable_if<(std::is_trivially_copyable<_Tp>::value && (sizeof (Tp) <= sizeof (Tp*)))>::type benchmark::DoNotOptimize(const Tp&) [with Tp = float; typename std::enable_if<(std::is_trivially_copyable<_Tp>::value && (sizeof (Tp) <= sizeof (Tp*)))>::type = void]’ is deprecated: The const-ref version of this method can permit undesired compiler optimizations in benchmarks [-Wdeprecated-declarations]
43 | benchmark::DoNotOptimize(v);
| ~~~~~~~~~~~~~~~~~~~~~~~~^~~
In file included from apps/opencs/model/world/pathgrid.hpp:7,
from apps/opencs/model/world/idcollection.hpp:15,
from apps/opencs/model/world/idcollection.cpp:1:
In constructor ‘constexpr ESM::Pathgrid::Pathgrid(ESM::Pathgrid&&)’,
inlined from ‘constexpr CSMWorld::Pathgrid::Pathgrid(CSMWorld::Pathgrid&&)’ at apps/opencs/model/world/pathgrid.hpp:24:12,
inlined from ‘constexpr CSMWorld::Record<CSMWorld::Pathgrid>::Record(CSMWorld::Record<CSMWorld::Pathgrid>&&)’ at apps/opencs/model/world/record.hpp:39:12,
inlined from ‘std::__detail::__unique_ptr_t<_Tp> std::make_unique(_Args&& ...) [with _Tp = CSMWorld::Record<CSMWorld::Pathgrid>; _Args = {CSMWorld::Record<CSMWorld::Pathgrid>}]’ at /usr/include/c++/13.2.1/bits/unique_ptr.h:1070:30,
inlined from ‘std::unique_ptr<CSMWorld::RecordBase> CSMWorld::Record<ESXRecordT>::modifiedCopy() const [with ESXRecordT = CSMWorld::Pathgrid]’ at apps/opencs/model/world/record.hpp:92:116:
components/esm3/loadpgrd.hpp:19:12: warning: ‘<unnamed>.CSMWorld::Record<CSMWorld::Pathgrid>::mBase.CSMWorld::Pathgrid::<unnamed>.ESM::Pathgrid::mData’ may be used uninitialized [-Wmaybe-uninitialized]
19 | struct Pathgrid
| ^~~~~~~~
In file included from apps/opencs/model/world/idcollection.hpp:8:
apps/opencs/model/world/record.hpp: In member function ‘std::unique_ptr<CSMWorld::RecordBase> CSMWorld::Record<ESXRecordT>::modifiedCopy() const [with ESXRecordT = CSMWorld::Pathgrid]’:
apps/opencs/model/world/record.hpp:92:53: note: ‘<anonymous>’ declared here
92 | return std::make_unique<Record<ESXRecordT>>(Record<ESXRecordT>(State_ModifiedOnly, nullptr, &(this->get())));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
apps/benchmarks/settings/access.cpp: In function ‘void {anonymous}::localStatic(benchmark::State&)’:
apps/benchmarks/settings/access.cpp:43:37: warning: ‘typename std::enable_if<(std::is_trivially_copyable<_Tp>::value && (sizeof (Tp) <= sizeof (Tp*)))>::type benchmark::DoNotOptimize(const Tp&) [with Tp = float; typename std::enable_if<(std::is_trivially_copyable<_Tp>::value && (sizeof (Tp) <= sizeof (Tp*)))>::type = void]’ is deprecated: The const-ref version of this method can permit undesired compiler optimizations in benchmarks [-Wdeprecated-declarations]
43 | benchmark::DoNotOptimize(v);
| ~~~~~~~~~~~~~~~~~~~~~~~~^~~
JSON is useful if the output has to be processed by other script or filtered. For example:
scripts/osg_stats.py --stats_table_format=json --stats 'Frame duration' osg_stats.*.log | jq
row_table = dict(zip(metrics, row.values()))
this should work, and if you're feeling fancy, you can even:
table = [dict(zip(metrics, row.values())) for row in stats]
JPH::Vec3 mTerrainScale = JPH::Vec3(128.0f, 1.0f, -128.0f); // NOTE: jolt heightfield is Y up, it's rotated below
If it's "No implementation" on purpose, no need for a comment I think. If it's more of a todo, "TODO: implementation" would be clearer
This comment is now wrong I think
Would be it be worth having a debug message here, so that we can tell modders to fix their meshes?
Is there a particular reason to not use the latest (4.0.2) release instead of a random commit?
I feel like broken snapping (behind an option) is better than no snapping at all.
Actual working CCache support for MSVC.
The caveat is that it's impossible to make it work with MSBuild/devenv.exe
as they don't respect CMake's compiler launcher option and always use cl.exe
directly.
It turned out that it already Just Worked for Ninja Release builds when elsid's new precompiled-header-disabling option was enabled. I just needed to wire up before_script.msvc.sh
so it'd actually do that.
Enabling Debug and RelWithDebInfo builds just required switching from /Zi
build-the-PDB-as-we-go debug symbols to /Z7
embedded debug symbols. It turns out that this wasn't as invasive as we previously thought - as long as the linker's got the /DEBUG
flag it needed anyway, it'll strip the debug symbols out of the binary and create a PDB. However, the file size still ended up significantly bigger, and the internet says that the linker will refuse to do link-time optimisation (/LTCG
) when it's doing this, so we need to remember not to use CCache for actual release builds, where we override the default Release configuration build flags to add /Zi
(which would get turned into /Z7
) and still want LTO.
Size comparisons:
thing | size with /Z7
|
size with /Zi
|
---|---|---|
openmw.exe |
59,709,952 bytes | 35,689,984 bytes |
openmw.pdb |
1,148,252,160 bytes | 798,830,592 bytes |
I've not switched over the CI to use Ninja instead of MSBuild. Part of the reason is the size difference, but mainly it's because I'm concerned that MSBuild is the most unique build system we support, so the most likely thing to break in MRs that change the CMake, so it's important that we actually run it. If we can figure out filtering jobs so they only run when CMake stuff and the prebuild scripts are altered by an MR, I'd be okay making it so only Ninja builds happen by default, but MSBuild jobs happen in push pipelines and in MRs affecting the relevant files. That would still end up saving us a lot of CI minutes overall.
if [ -n "$USE_CCACHE" ]; then
if [ -n "$NMAKE" ] || [ -n "$NINJA" ]; then
add_cmake_opts "-DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DPRECOMPILE_HEADERS_WITH_MSVC=OFF"
else
echo "Ignoring -C (CCache) as it is incompatible with Visual Studio CMake generators"
fi
fi
Can you install gdb
and try again?
jvoisin (9b0cf1b7) at 08 Mar 14:38
Update the deprecation checks