From 6db7d503a369bad005197403f4d4483bb0eea587 Mon Sep 17 00:00:00 2001 From: Micah Acinapura Date: Thu, 25 Jun 2020 18:55:20 -0400 Subject: [PATCH] Linux fixes clang (#1216) * Changes to work on Linux. * Multiple small fixes for Linux. * Changes to have trails working on Linux again. * Bring back AA Trail Lines on Linux. * Included new branch with correction in cfitsio library linking. * Updated SGCT. * Changes to work on Linux. * Remove extra #endif * Changes to compile in Clang on Linux. * Other fixes. * Bring back some of the changes lost and updated clang building commands. * requiring 10.15 for sgct, upadating sgct Co-authored-by: Jonathas Co-authored-by: Tom Schober Co-authored-by: Alexander Bock --- apps/OpenSpace/CMakeLists.txt | 2 +- apps/OpenSpace/ext/sgct | 2 +- apps/OpenSpace/main.cpp | 6 +- .../scene/digitaluniverse/starorbits.asset | 2 +- ext/ghoul | 2 +- modules/base/rendering/renderabletrail.cpp | 24 +++-- modules/base/rendering/renderabletrail.h | 7 +- .../rendering/renderabledumeshes.cpp | 2 +- modules/fitsfilereader/ext/cfitsio | 2 +- modules/volume/envelope.cpp | 14 +-- .../cmake/patch/cmake/cef_variables.cmake | 2 +- src/interaction/joystickcamerastates.cpp | 4 +- src/interaction/orbitalnavigator.cpp | 10 +- src/interaction/websocketcamerastates.cpp | 3 +- src/rendering/renderable.cpp | 2 +- src/scene/scenegraphnode.cpp | 2 + .../set_openspace_compile_settings.cmake | 94 ++++++++++++++++++- 17 files changed, 148 insertions(+), 32 deletions(-) diff --git a/apps/OpenSpace/CMakeLists.txt b/apps/OpenSpace/CMakeLists.txt index 1d2ad1b9b9..4f948c3257 100644 --- a/apps/OpenSpace/CMakeLists.txt +++ b/apps/OpenSpace/CMakeLists.txt @@ -78,7 +78,7 @@ endif () ##### if (APPLE) set(MACOSX_BUNDLE_ICON_FILE openspace.icns) - set(CMAKE_OSX_DEPLOYMENT_TARGET "10.14" CACHE STRING "Minimum OS X deployment version" FORCE) + set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version" FORCE) set(CMAKE_XCODE_ATTRIBUTE_OTHER_CODE_SIGN_FLAGS "--deep" CACHE STRING "Other Code Signing Flags" FORCE) endif () diff --git a/apps/OpenSpace/ext/sgct b/apps/OpenSpace/ext/sgct index 1ab6980ccc..c164947107 160000 --- a/apps/OpenSpace/ext/sgct +++ b/apps/OpenSpace/ext/sgct @@ -1 +1 @@ -Subproject commit 1ab6980ccc825a68094fcda950e73312fb89cc3c +Subproject commit c1649471074314a5aebfc6b7726eae4e3955c8ea diff --git a/apps/OpenSpace/main.cpp b/apps/OpenSpace/main.cpp index 62297dde05..204f1d5334 100644 --- a/apps/OpenSpace/main.cpp +++ b/apps/OpenSpace/main.cpp @@ -43,7 +43,11 @@ #include //#include #include +#ifdef _WIN32 #define GLFW_EXPOSE_NATIVE_WIN32 +#else +#define GLFW_INCLUDE_NONE +#endif #include #include #include @@ -1294,7 +1298,7 @@ int main(int argc, char** argv) { Engine::create(cluster, callbacks, config); } catch (const std::runtime_error& e) { - LFATAL("main", e.what()); + LFATALC("main", e.what()); Engine::destroy(); global::openSpaceEngine.deinitialize(); ghoul::deinitialize(); diff --git a/data/assets/scene/digitaluniverse/starorbits.asset b/data/assets/scene/digitaluniverse/starorbits.asset index 2b07b5a6f1..b240a57024 100644 --- a/data/assets/scene/digitaluniverse/starorbits.asset +++ b/data/assets/scene/digitaluniverse/starorbits.asset @@ -67,7 +67,7 @@ local kapteynsOrbit = { Color = {1.0, 1.0, 1.0}, Transparency = 1.0, ScaleFactor = 1.0, - File = speck .. "/starorbits-kapteynsStar.speck", + File = speck .. "/starorbits-KapteynsStar.speck", MeshColor = {{0.6, 0.6, 0.6}}, --LabelFile = speck .. "/1ld.label", TextColor = { 0.0, 0.2, 0.5, 1.0 }, diff --git a/ext/ghoul b/ext/ghoul index d35be27b61..3048e4837b 160000 --- a/ext/ghoul +++ b/ext/ghoul @@ -1 +1 @@ -Subproject commit d35be27b61140e76d8283999d9faee16977b1bfc +Subproject commit 3048e4837b8f96b555d5dd326f0b68289ad0ac37 diff --git a/modules/base/rendering/renderabletrail.cpp b/modules/base/rendering/renderabletrail.cpp index 8ad12a9d93..46dc11cdcd 100644 --- a/modules/base/rendering/renderabletrail.cpp +++ b/modules/base/rendering/renderabletrail.cpp @@ -34,15 +34,24 @@ #include #include +#include + namespace { constexpr const char* ProgramName = "EphemerisProgram"; constexpr const char* KeyTranslation = "Translation"; - +#ifdef __APPLE__ + constexpr const std::array UniformNames = { + "opacity", "modelViewTransform", "projectionTransform", "color", "useLineFade", + "lineFade", "vertexSortingMethod", "idOffset", "nVertices", "stride", "pointSize", + "renderPhase" + }; +#else constexpr const std::array UniformNames = { "opacity", "modelViewTransform", "projectionTransform", "color", "useLineFade", "lineFade", "vertexSortingMethod", "idOffset", "nVertices", "stride", "pointSize", "renderPhase", "resolution", "lineWidth" }; +#endif // The possible values for the _renderingModes property enum RenderingMode { @@ -334,7 +343,7 @@ void RenderableTrail::render(const RenderData& data, RendererTasks&) { if (renderLines) { #ifdef __APPLE__ - glLineWidth(1.f); + glLineWidth(1); #else glLineWidth(ceil((2.f * 1.f + _appearance.lineWidth) * std::sqrt(2.f))); #endif @@ -366,12 +375,11 @@ void RenderableTrail::render(const RenderData& data, RendererTasks&) { p->setUniform(c.nVertices, nVertices); - #ifndef __APPLE__ - glm::ivec2 resolution = global::renderEngine.renderingResolution(); - p->setUniform(c.resolution, resolution); - - p->setUniform(c.lineWidth, ceil((2.f * 1.f + lw) * std::sqrt(2.f))); - #endif +#if !defined(__APPLE__) + glm::ivec2 resolution = global::renderEngine.renderingResolution(); + p->setUniform(c.resolution, resolution); + p->setUniform(c.lineWidth, std::ceil((2.f * 1.f + lw) * std::sqrt(2.f))); +#endif if (renderPoints) { // The stride parameter determines the distance between larger points and diff --git a/modules/base/rendering/renderabletrail.h b/modules/base/rendering/renderabletrail.h index e2a0eb088d..7c6338ea75 100644 --- a/modules/base/rendering/renderabletrail.h +++ b/modules/base/rendering/renderabletrail.h @@ -182,10 +182,15 @@ private: /// Program object used to render the data stored in RenderInformation ghoul::opengl::ProgramObject* _programObject = nullptr; - +#ifdef __APPLE__ + UniformCache(opacity, modelView, projection, color, useLineFade, + lineFade, vertexSorting, idOffset, nVertices, stride, + pointSize, renderPhase) _uniformCache; +#else UniformCache(opacity, modelView, projection, color, useLineFade, lineFade, vertexSorting, idOffset, nVertices, stride, pointSize, renderPhase, resolution, lineWidth) _uniformCache; +#endif }; } // namespace openspace diff --git a/modules/digitaluniverse/rendering/renderabledumeshes.cpp b/modules/digitaluniverse/rendering/renderabledumeshes.cpp index a9ce646b08..32ab42b076 100644 --- a/modules/digitaluniverse/rendering/renderabledumeshes.cpp +++ b/modules/digitaluniverse/rendering/renderabledumeshes.cpp @@ -1,4 +1,4 @@ -/***************************************************************************************** + /***************************************************************************************** * * * OpenSpace * * * diff --git a/modules/fitsfilereader/ext/cfitsio b/modules/fitsfilereader/ext/cfitsio index 3b6730fd43..cc814c7ebe 160000 --- a/modules/fitsfilereader/ext/cfitsio +++ b/modules/fitsfilereader/ext/cfitsio @@ -1 +1 @@ -Subproject commit 3b6730fd434779a5b0260396ccf78d3548165715 +Subproject commit cc814c7ebe50d8bbfa9808dc6a16cac2a70ded42 diff --git a/modules/volume/envelope.cpp b/modules/volume/envelope.cpp index 8ce6f6ed3a..21f5cfdad3 100644 --- a/modules/volume/envelope.cpp +++ b/modules/volume/envelope.cpp @@ -26,6 +26,8 @@ #include +#include + using json = nlohmann::json; namespace openspace::volume { @@ -57,8 +59,8 @@ bool Envelope::operator!=(const Envelope& env) const { iter != _points.end(); ++iter, ++envIter) { - if (abs(iter->position.first - envIter->position.first) > MinDist || - abs(iter->position.second - envIter->position.second) > MinDist || + if (std::fabs(iter->position.first - envIter->position.first) > MinDist || + std::fabs(iter->position.second - envIter->position.second) > MinDist || iter->color != envIter->color) { return true; @@ -118,12 +120,12 @@ glm::vec4 Envelope::valueAtPosition(float pos) const { else { return { normalizeColor( - beforeIter->color * (abs(pos - afterIter->position.first) / dist) + - afterIter->color * (abs(pos - beforeIter->position.first) / dist) + beforeIter->color * (std::fabs(pos - afterIter->position.first) / dist) + + afterIter->color * (std::fabs(pos - beforeIter->position.first) / dist) ), - beforeIter->position.second * (abs(pos - afterIter->position.first) / dist) + + beforeIter->position.second * (std::fabs(pos - afterIter->position.first) / dist) + afterIter->position.second * - (abs(pos - beforeIter->position.first) / dist) + (std::fabs(pos - beforeIter->position.first) / dist) }; } } diff --git a/modules/webbrowser/cmake/patch/cmake/cef_variables.cmake b/modules/webbrowser/cmake/patch/cmake/cef_variables.cmake index d534b80192..e3b0839699 100644 --- a/modules/webbrowser/cmake/patch/cmake/cef_variables.cmake +++ b/modules/webbrowser/cmake/patch/cmake/cef_variables.cmake @@ -305,7 +305,7 @@ if(OS_MACOSX) endforeach() # Target SDK. - set(CEF_TARGET_SDK "10.14") + set(CEF_TARGET_SDK "10.15") list(APPEND CEF_COMPILER_FLAGS -mmacosx-version-min=${CEF_TARGET_SDK} ) diff --git a/src/interaction/joystickcamerastates.cpp b/src/interaction/joystickcamerastates.cpp index 072de2d672..351379d7c3 100644 --- a/src/interaction/joystickcamerastates.cpp +++ b/src/interaction/joystickcamerastates.cpp @@ -29,6 +29,8 @@ #include #include +#include + namespace openspace::interaction { JoystickCameraStates::JoystickCameraStates(double sensitivity, double velocityScaleFactor) @@ -53,7 +55,7 @@ void JoystickCameraStates::updateStateFromInput(const InputState& inputState, bool hasValue = true; float value = inputState.joystickAxis(i); - if (abs(value) <= t.deadzone) { + if (std::fabs(value) <= t.deadzone) { value = 0.f; hasValue = false; } diff --git a/src/interaction/orbitalnavigator.cpp b/src/interaction/orbitalnavigator.cpp index 2a49c21a82..b383eef56e 100644 --- a/src/interaction/orbitalnavigator.cpp +++ b/src/interaction/orbitalnavigator.cpp @@ -29,6 +29,8 @@ #include #include +#include + namespace { constexpr const char* _loggerCat = "OrbitalNavigator"; @@ -244,10 +246,10 @@ OrbitalNavigator::OrbitalNavigator() , _retargetAim(RetargetAimInfo) , _followAnchorNodeRotationDistance(FollowAnchorNodeInfo, 5.0f, 0.0f, 20.f) , _minimumAllowedDistance(MinimumDistanceInfo, 10.0f, 0.0f, 10000.f) - , _velocitySensitivity(VelocityZoomControlInfo, 0.02f, 0.01f, 0.15f) - , _applyLinearFlight(ApplyLinearFlightInfo, false) , _flightDestinationDistance(FlightDestinationDistInfo, 2e8f, 0.0f, 1e10f) , _flightDestinationFactor(FlightDestinationFactorInfo, 1E-4, 1E-6, 0.5) + , _applyLinearFlight(ApplyLinearFlightInfo, false) + , _velocitySensitivity(VelocityZoomControlInfo, 0.02f, 0.01f, 0.15f) , _mouseSensitivity(MouseSensitivityInfo, 15.0f, 1.0f, 50.f) , _joystickSensitivity(JoystickSensitivityInfo, 10.0f, 1.0f, 50.f) , _websocketSensitivity(WebsocketSensitivityInfo, 10.0f, 1.0f, 50.f) @@ -467,7 +469,7 @@ void OrbitalNavigator::updateCameraStateFromStates(double deltaTime) { // Fly towards the flight destination distance. When getting closer than // arrivalThreshold terminate the flight - if (abs(distFromCameraToFocus - _flightDestinationDistance) > arrivalThreshold) { + if (std::fabs(distFromCameraToFocus - _flightDestinationDistance) > arrivalThreshold) { pose.position = moveCameraAlongVector( pose.position, distFromCameraToFocus, @@ -1080,7 +1082,7 @@ glm::dquat OrbitalNavigator::interpolateLocalRotation(double deltaTime, // Retrieving the angle of a quaternion uses acos on the w component, which can // have numerical instability for values close to 1.0 constexpr double Epsilon = 1.0e-13; - if (abs((abs(result.w) - 1.0)) < Epsilon || angle(result) < 0.01) { + if (std::fabs((std::fabs(result.w) - 1.0)) < Epsilon || angle(result) < 0.01) { _retargetAnchorInterpolator.end(); } return result; diff --git a/src/interaction/websocketcamerastates.cpp b/src/interaction/websocketcamerastates.cpp index 9fefc15d02..c97bb5901a 100644 --- a/src/interaction/websocketcamerastates.cpp +++ b/src/interaction/websocketcamerastates.cpp @@ -29,6 +29,7 @@ #include #include #include +#include namespace openspace::interaction { @@ -54,7 +55,7 @@ void WebsocketCameraStates::updateStateFromInput(const InputState& inputState, } float value = inputState.websocketAxis(i); - bool hasValue = abs(value) > t.deadzone; + bool hasValue = std::fabs(value) > t.deadzone; if (!hasValue) { value = 0.f; diff --git a/src/rendering/renderable.cpp b/src/rendering/renderable.cpp index cc3bbbfb51..be742c6fc4 100644 --- a/src/rendering/renderable.cpp +++ b/src/rendering/renderable.cpp @@ -115,8 +115,8 @@ Renderable::Renderable(const ghoul::Dictionary& dictionary) : properties::PropertyOwner({ "Renderable" }) , _enabled(EnabledInfo, true) , _opacity(OpacityInfo, 1.f, 0.f, 1.f) - , _renderableType(RenderableTypeInfo, "Renderable") , _boundingSphere(BoundingSphereInfo, 0.f, 0.f, 3e10f) + , _renderableType(RenderableTypeInfo, "Renderable") { ZoneScoped diff --git a/src/scene/scenegraphnode.cpp b/src/scene/scenegraphnode.cpp index cd5ee2fcf3..32147034f9 100644 --- a/src/scene/scenegraphnode.cpp +++ b/src/scene/scenegraphnode.cpp @@ -38,6 +38,8 @@ #include #include "scenegraphnode_doc.inl" +#include + namespace { constexpr const char* _loggerCat = "SceneGraphNode"; constexpr const char* KeyRenderable = "Renderable"; diff --git a/support/cmake/set_openspace_compile_settings.cmake b/support/cmake/set_openspace_compile_settings.cmake index 61efb29938..6d9db59af3 100644 --- a/support/cmake/set_openspace_compile_settings.cmake +++ b/support/cmake/set_openspace_compile_settings.cmake @@ -102,7 +102,7 @@ function (set_openspace_compile_settings project) "/ZI" # Edit and continue support ) endif () - elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang") + elseif (NOT LINUX AND CMAKE_CXX_COMPILER_ID MATCHES "Clang") if (OPENSPACE_WARNINGS_AS_ERRORS) target_compile_options(${project} PRIVATE "-Werror") endif () @@ -111,6 +111,97 @@ function (set_openspace_compile_settings project) ${project} PRIVATE "-stdlib=libc++" + "-std=gnu++17" + "-Wall" + "-Wextra" + "-Wabstract-vbase-init" + "-Warray-bounds-pointer-arithmetic" + "-Wassign-enum" + "-Wauto-import" + "-Wbad-function-cast" + "-Wbitfield-constant-conversion" + "-Wcast-calling-convention" + "-Wcast-qual" + "-Wchar-subscripts" + "-Wcomma" + "-Wcomment" + "-Wcomplex-component-init" + "-Wconditional-uninitialized" + "-Wdate-time" + "-Wdeprecated-implementations" + "-Wdollar-in-identifier-extension" + "-Wduplicate-enum" + "-Wduplicate-method-match" + "-Wempty-body" + "-Wformat-pedantic" + "-Wheader-hygiene" + "-Widiomatic-parentheses" + "-Wimplicit-fallthrough" + "-Wimport-preprocessor-directive-pedantic" + "-Winconsistent-missing-override" + "-Winfinite-recursion" + "-Wkeyword-macro" + "-Wlanguage-extension-token" + "-Wloop-analysis" + "-Wmethod-signatures" + "-Wmicrosoft-end-of-file" + "-Wmicrosoft-enum-forward-reference" + "-Wmicrosoft-fixed-enum" + "-Wmicrosoft-flexible-array" + "-Wmismatched-tags" + "-Wmissing-field-initializers" + "-Wmissing-noreturn" + "-Wnewline-eof" + "-Wnon-virtual-dtor" + "-Wold-style-cast" + "-Woverloaded-virtual" + "-Wpessimizing-move" + "-Wpointer-arith" + "-Wpragmas" + "-Wredundant-move" + "-Wreorder" + "-Wsemicolon-before-method-body" + # "-Wshadow-field" + "-Wshadow-field-in-constructor" + # "-Wshadow-all" Add this again once the Properties don't throw warnings --abock + "-Wshift-sign-overflow" + "-Wshorten-64-to-32" + "-Wsign-compare" + "-Wstring-conversion" + "-Wtautological-compare" + "-Wthread-safety" + "-Wundef" + "-Wundefined-reinterpret-cast" + "-Wuninitialized" + "-Wunneeded-internal-declaration" + "-Wunneeded-member-function" + "-Wunreachable-code-break" + "-Wunreachable-code-loop-increment" + "-Wunreachable-code-return" + "-Wunused-exception-parameter" + "-Wunused-label" + "-Wunused-local-typedef" + "-Wunused-macros" + "-Wunused-parameter" + "-Wunused-private-field" + "-Wunused-result" + "-Wunused-variable" + "-Wused-but-marked-unused" + "-Wvariadic-macros" + "-Wvla" + "-Wzero-length-array" + "-Wno-missing-braces" + ) + elseif (LINUX AND CMAKE_CXX_COMPILER_ID MATCHES "Clang") + if (OPENSPACE_WARNINGS_AS_ERRORS) + target_compile_options(${project} PRIVATE "-Werror") + endif () + + target_compile_options( + ${project} + PRIVATE + "-stdlib=libstdc++" + "-std=gnu++17" "-Wall" "-Wextra" "-Wabstract-vbase-init" @@ -215,7 +306,6 @@ function (set_openspace_compile_settings project) "-Wuseless-cast" "-Wlogical-op" "-Wint-in-bool-context" - "-Wno-write-strings" "-Wnon-virtual-dtor" "-Wold-style-cast"