Trying to install UE4 on Linux Mint 18 Cinnamon Edition. For reference, Mint 18 is based on Ubuntu 16.04 LTS.
I am following this:
./Setup.sh fails on first attempt
$ ./Setup.sh Registering git hooks... (this will override existing ones!) Github build Checking / downloading the latest archives Checking dependencies (excluding Win32, Win64, Mac, HTML5, Android)... Received 1/1 files (0.6/0.6mb; 0.09mb/s; 100%)... Result: 0 Fixing inconsistent case in filenames. Building ThirdParty libraries If you don't see SUCCESS message in the end, then building did not finish properly. In that case, take a look into /home/a/UnrealEngine/Engine/Build/BatchFiles/Linux/BuildThirdParty.log for details. You run Ubuntu or its fork. All dependencies have been already prebuilt. ==> BuildHLSLCC this is the contents of the “BuildThirdParty.log” file referenced in the terminal output:
building hlslcc + cd Source/ThirdParty/hlslcc + P4Open hlslcc/lib/Linux/x86_64-unknown-linux-gnu/libhlslcc.a + for file in '$@' + '[' '!' -e hlslcc/lib/Linux/x86_64-unknown-linux-gnu/libhlslcc.a ']' + '[' -w hlslcc/lib/Linux/x86_64-unknown-linux-gnu/libhlslcc.a ']' + return + cd hlslcc/projects/Linux + make -j4 clean rm -f ../../src/hlslcc_lib/ir_expression_flattening.o ../../src/hlslcc_lib/opt_copy_propagation_elements.o ../../src/hlslcc_lib/hlsl_lexer.o ../../src/hlslcc_lib/PackUniformBuffers.o ../../src/hlslcc_lib/ir_constant_expression.o ../../src/hlslcc_lib/loop_analysis.o ../../src/hlslcc_lib/opt_constant_propagation.o ../../src/hlslcc_lib/strtod.o ../../src/hlslcc_lib/loop_unroll.o ../../src/hlslcc_lib/ir_function_detect_recursion.o ../../src/hlslcc_lib/lower_variable_index_to_cond_assign.o ../../src/hlslcc_lib/ralloc.o ../../src/hlslcc_lib/ir_print_visitor.o ../../src/hlslcc_lib/glsl_types.o ../../src/hlslcc_lib/lower_instructions.o ../../src/hlslcc_lib/glsl_symbol_table.o ../../src/hlslcc_lib/lower_mat_op_to_vec.o ../../src/hlslcc_lib/lower_vec_index_to_swizzle.o ../../src/hlslcc_lib/ir_hierarchical_visitor.o ../../src/hlslcc_lib/lower_if_to_cond_assign.o ../../src/hlslcc_lib/hlslcc.o ../../src/hlslcc_lib/opt_noop_swizzle.o ../../src/hlslcc_lib/opt_constant_variable.o ../../src/hlslcc_lib/lower_jumps.o ../../src/hlslcc_lib/glcpp-parse.o ../../src/hlslcc_lib/ir_function.o ../../src/hlslcc_lib/glsl_parser_extras.o ../../src/hlslcc_lib/lower_vec_index_to_cond_assign.o ../../src/hlslcc_lib/ShaderCompilerCommon.o ../../src/hlslcc_lib/opt_dead_code.o ../../src/hlslcc_lib/hash_table.o ../../src/hlslcc_lib/glcpp-lex.o ../../src/hlslcc_lib/opt_redundant_jumps.o ../../src/hlslcc_lib/opt_tree_grafting.o ../../src/hlslcc_lib/hlsl_parser.o ../../src/hlslcc_lib/ir.o ../../src/hlslcc_lib/opt_copy_propagation.o ../../src/hlslcc_lib/ast_type.o ../../src/hlslcc_lib/lower_noise.o ../../src/hlslcc_lib/opt_array_splitting.o ../../src/hlslcc_lib/ir_variable_refcount.o ../../src/hlslcc_lib/ir_rvalue_visitor.o ../../src/hlslcc_lib/symbol_table.o ../../src/hlslcc_lib/opt_function_inlining.o ../../src/hlslcc_lib/builtin_stubs.o ../../src/hlslcc_lib/lower_vector.o ../../src/hlslcc_lib/lower_texture_projection.o ../../src/hlslcc_lib/loop_controls.o ../../src/hlslcc_lib/lower_clip_distance.o ../../src/hlslcc_lib/hir_field_selection.o ../../src/hlslcc_lib/opt_if_simplification.o ../../src/hlslcc_lib/pp.o ../../src/hlslcc_lib/opt_discard_simplification.o ../../src/hlslcc_lib/ir_track_image_access.o ../../src/hlslcc_lib/opt_swizzle_swizzle.o ../../src/hlslcc_lib/OptValueNumbering.o ../../src/hlslcc_lib/opt_dead_code_local.o ../../src/hlslcc_lib/ir_clone.o ../../src/hlslcc_lib/ast_function.o ../../src/hlslcc_lib/opt_algebraic.o ../../src/hlslcc_lib/ir_import_prototypes.o ../../src/hlslcc_lib/ast_expr.o ../../src/hlslcc_lib/opt_constant_folding.o ../../src/hlslcc_lib/opt_structure_splitting.o ../../src/hlslcc_lib/ir_unused_structs.o ../../src/hlslcc_lib/opt_dead_functions.o ../../src/hlslcc_lib/ir_hv_accept.o ../../src/hlslcc_lib/ir_function_can_inline.o ../../src/hlslcc_lib/ir_validate.o ../../src/hlslcc_lib/ast_to_hir.o ../../src/hlslcc_lib/IRDump.o ../../src/hlslcc_lib/lower_output_reads.o ../../src/hlslcc_lib/lower_discard.o ../../src/hlslcc_lib/ir_basic_block.o ../../src/hlslcc_exe/main.o ../../lib/Linux/x86_64-unknown-linux-gnu/libhlslcc.a ../../bin/Linux/hlslcc_64 + make -j4 clang++ -fPIC -Wno-switch -Wno-unused-value -I../../src/hlslcc_lib -fvisibility=hidden -O2 -std=c++11 -o ../../src/hlslcc_lib/ir_expression_flattening.o -c ../../src/hlslcc_lib/ir_expression_flattening.cpp clang++ -fPIC -Wno-switch -Wno-unused-value -I../../src/hlslcc_lib -fvisibility=hidden -O2 -std=c++11 -o ../../src/hlslcc_lib/opt_copy_propagation_elements.o -c ../../src/hlslcc_lib/opt_copy_propagation_elements.cpp clang++ -fPIC -Wno-switch -Wno-unused-value -I../../src/hlslcc_lib -fvisibility=hidden -O2 -std=c++11 -o ../../src/hlslcc_lib/hlsl_lexer.o -c ../../src/hlslcc_lib/hlsl_lexer.cpp make: clang++: Command not found make: clang++: Command not found Makefile:43: recipe for target '../../src/hlslcc_lib/ir_expression_flattening.o' failed make: clang++: Command not found make: *** [../../src/hlslcc_lib/ir_expression_flattening.o] Error 127 make: *** Waiting for unfinished jobs.... Makefile:43: recipe for target '../../src/hlslcc_lib/opt_copy_propagation_elements.o' failed make: *** [../../src/hlslcc_lib/opt_copy_propagation_elements.o] Error 127 Makefile:43: recipe for target '../../src/hlslcc_lib/hlsl_lexer.o' failed make: *** [../../src/hlslcc_lib/hlsl_lexer.o] Error 127 so i installed clang (apt-get install clang), and ./Setup.sh succeeded. And then “make” failed.
$ make bash "/home/a/UnrealEngine"/Engine/Build/BatchFiles/Linux/Build.sh UE4Client Linux Debug Building UE4Client... Using clang version '3.8.0' (string), 3 (major), 8 (minor), 0 (patch) Performing 165 actions (8 in parallel) [1/165] Compile EnginePrivate.h [3/165] Compile CorePrivatePCH.h [5/165] Compile Paper2D.generated.cpp [2/165] Compile RendererPrivate.h [4/165] Compile Module.Paper2D.cpp [7/165] Compile Module.CustomMeshComponent.cpp [6/165] Compile Module.CableComponent.cpp [8/165] Compile CableComponent.generated.cpp [9/165] Compile Module.ExampleDeviceProfileSelector.cpp [10/165] Compile CustomMeshComponent.generated.cpp [11/165] Compile Module.CharacterAI.cpp [12/165] Compile Module.SlateRemote.cpp [13/165] Compile SlateRemote.generated.cpp [14/165] Compile Module.UdpMessaging.cpp [15/165] Compile UdpMessaging.generated.cpp [16/165] Compile Engine.generated.1.cpp [17/165] Compile Engine.generated.2.cpp [18/165] Compile Engine.generated.4.cpp [19/165] Compile Engine.generated.5.cpp [20/165] Compile Engine.generated.3.cpp [21/165] Compile Module.UMG.cpp [22/165] Compile UMG.generated.cpp [23/165] Compile Module.OnlineSubsystemUtils.cpp [24/165] Compile Module.Launch.cpp [25/165] Compile Module.OpenGLDrv.cpp [27/165] Compile Module.Renderer.6_of_6.cpp [26/165] Compile Module.Renderer.5_of_6.cpp [28/165] Compile Module.Engine.2_of_28.cpp [29/165] Compile Module.MovieSceneCoreTypes.cpp [30/165] Compile Module.Renderer.2_of_6.cpp [31/165] Compile Module.Renderer.3_of_6.cpp [32/165] Compile Module.Renderer.4_of_6.cpp [33/165] Compile OnlineSubsystemUtils.generated.cpp [34/165] Compile Module.Renderer.1_of_6.cpp [35/165] Compile Module.Engine.28_of_28.cpp [36/165] Compile MovieSceneCoreTypes.generated.cpp [37/165] Compile Module.OnlineSubsystemNull.cpp In file included from /home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Client/Debug/Engine/Module.Engine.28_of_28.cpp:9: In file included from /home/a/UnrealEngine/Engine/Source/Runtime/Engine/Private/Vehicles/PhysXVehicleManager.cpp:10: In file included from /home/a/UnrealEngine/Engine/Source/Runtime/Engine/Private/Vehicles/../PhysicsEngine/PhysXSupport.h:11: In file included from Runtime/Engine/Public/PhysXIncludes.h:19: In file included from ThirdParty/PhysX/PhysX-3.3/include/PxPhysicsAPI.h:49: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxBounds3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxTransform.h:37: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxQuat.h:39: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxVec3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxMath.h:50: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxIntrinsics.h:42: ThirdParty/PhysX/PhysX-3.3/include/foundation/unix/PxUnixIntrinsics.h(85,2) : error: all paths through this function will call itself [-Werror,-Winfinite-recursion] { ^ [38/165] Compile Module.SlateRHIRenderer.cpp [39/165] Compile Module.ProfilerService.cpp [40/165] Compile Module.AutomationWorker.cpp 1 error generated. [41/165] Compile Module.MovieSceneCore.cpp [42/165] Compile Module.MediaAssets.cpp [43/165] Compile Module.GameplayTags.cpp [44/165] Compile Module.MoviePlayer.cpp [45/165] Compile Module.GameLiveStreaming.cpp [46/165] Compile MovieSceneCore.generated.cpp [47/165] Compile Module.PhysXFormats.cpp [48/165] Compile MediaAssets.generated.cpp [49/165] Compile GameplayTags.generated.cpp [50/165] Compile Module.ALAudio.cpp [51/165] Compile GameLiveStreaming.generated.cpp In file included from /home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Client/Debug/PhysXFormats/Module.PhysXFormats.cpp:2: In file included from /home/a/UnrealEngine/Engine/Source/Runtime/PhysXFormats/Private/PhysXFormats.cpp:11: In file included from /home/a/UnrealEngine/Engine/Source/Runtime/PhysXFormats/Private/PhysXFormats.h:25: In file included from ThirdParty/PhysX/PhysX-3.3/include/PxPhysicsAPI.h:49: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxBounds3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxTransform.h:37: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxQuat.h:39: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxVec3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxMath.h:50: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxIntrinsics.h:42: ThirdParty/PhysX/PhysX-3.3/include/foundation/unix/PxUnixIntrinsics.h(85,2) : error: all paths through this function will call itself [-Werror,-Winfinite-recursion] { ^ [52/165] Compile Module.StreamingPauseRendering.cpp [53/165] Compile Module.HeadMountedDisplay.cpp 1 error generated. [54/165] Compile MoviePlayer.generated.cpp [55/165] Compile Module.Engine.6_of_28.cpp In file included from /home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Client/Debug/Engine/Module.Engine.6_of_28.cpp:12: In file included from /home/a/UnrealEngine/Engine/Source/Runtime/Engine/Private/HierarchicalInstancedStaticMesh.cpp:10: In file included from Runtime/Engine/Private/InstancedStaticMesh.h:43: In file included from Runtime/Engine/Private/PhysicsEngine/PhysXSupport.h:11: In file included from Runtime/Engine/Public/PhysXIncludes.h:19: In file included from ThirdParty/PhysX/PhysX-3.3/include/PxPhysicsAPI.h:49: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxBounds3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxTransform.h:37: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxQuat.h:39: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxVec3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxMath.h:50: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxIntrinsics.h:42: ThirdParty/PhysX/PhysX-3.3/include/foundation/unix/PxUnixIntrinsics.h(85,2) : error: all paths through this function will call itself [-Werror,-Winfinite-recursion] { ^ [56/165] Compile Module.Engine.21_of_28.cpp [57/165] Compile Module.Engine.15_of_28.cpp 1 error generated. [58/165] Compile Module.Engine.16_of_28.cpp [59/165] Compile Module.Engine.5_of_28.cpp [60/165] Compile Module.Engine.24_of_28.cpp [61/165] Compile Module.Engine.10_of_28.cpp [62/165] Compile Module.Engine.19_of_28.cpp [63/165] Compile Module.Engine.20_of_28.cpp In file included from /home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Client/Debug/Engine/Module.Engine.10_of_28.cpp:26: In file included from /home/a/UnrealEngine/Engine/Source/Runtime/Engine/Private/PrimitiveComponent.cpp:17: In file included from Runtime/Engine/Private/PhysicsEngine/PhysXSupport.h:11: In file included from Runtime/Engine/Public/PhysXIncludes.h:19: In file included from ThirdParty/PhysX/PhysX-3.3/include/PxPhysicsAPI.h:49: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxBounds3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxTransform.h:37: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxQuat.h:39: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxVec3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxMath.h:50: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxIntrinsics.h:42: ThirdParty/PhysX/PhysX-3.3/include/foundation/unix/PxUnixIntrinsics.h(85,2) : error: all paths through this function will call itself [-Werror,-Winfinite-recursion] { ^ [64/165] Compile Module.Engine.7_of_28.cpp [65/165] Compile Module.Engine.8_of_28.cpp 1 error generated. [66/165] Compile Module.Engine.4_of_28.cpp In file included from /home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Client/Debug/Engine/Module.Engine.7_of_28.cpp:18: In file included from /home/a/UnrealEngine/Engine/Source/Runtime/Engine/Private/LevelActor.cpp:11: In file included from Runtime/Engine/Private/PhysicsEngine/PhysXSupport.h:11: In file included from Runtime/Engine/Public/PhysXIncludes.h:19: In file included from ThirdParty/PhysX/PhysX-3.3/include/PxPhysicsAPI.h:49: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxBounds3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxTransform.h:37: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxQuat.h:39: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxVec3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxMath.h:50: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxIntrinsics.h:42: ThirdParty/PhysX/PhysX-3.3/include/foundation/unix/PxUnixIntrinsics.h(85,2) : error: all paths through this function will call itself [-Werror,-Winfinite-recursion] { ^ In file included from /home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Client/Debug/Engine/Module.Engine.8_of_28.cpp:6: In file included from /home/a/UnrealEngine/Engine/Source/Runtime/Engine/Private/LevelTick.cpp:22: In file included from Runtime/Engine/Private/PhysicsEngine/PhysXSupport.h:11: In file included from Runtime/Engine/Public/PhysXIncludes.h:19: In file included from ThirdParty/PhysX/PhysX-3.3/include/PxPhysicsAPI.h:49: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxBounds3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxTransform.h:37: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxQuat.h:39: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxVec3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxMath.h:50: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxIntrinsics.h:42: ThirdParty/PhysX/PhysX-3.3/include/foundation/unix/PxUnixIntrinsics.h(85,2) : error: all paths through this function will call itself [-Werror,-Winfinite-recursion] { ^ In file included from /home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Client/Debug/Engine/Module.Engine.20_of_28.cpp:24: In file included from /home/a/UnrealEngine/Engine/Source/Runtime/Engine/Private/Collision/CollisionConversions.cpp:7: In file included from /home/a/UnrealEngine/Engine/Source/Runtime/Engine/Private/Collision/PhysXCollision.h:12: In file included from /home/a/UnrealEngine/Engine/Source/Runtime/Engine/Private/Collision/../PhysicsEngine/PhysXSupport.h:11: In file included from Runtime/Engine/Public/PhysXIncludes.h:19: In file included from ThirdParty/PhysX/PhysX-3.3/include/PxPhysicsAPI.h:49: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxBounds3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxTransform.h:37: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxQuat.h:39: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxVec3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxMath.h:50: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxIntrinsics.h:42: ThirdParty/PhysX/PhysX-3.3/include/foundation/unix/PxUnixIntrinsics.h(85,2) : error: all paths through this function will call itself [-Werror,-Winfinite-recursion] { ^ In file included from /home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Client/Debug/Engine/Module.Engine.4_of_28.cpp:18: In file included from /home/a/UnrealEngine/Engine/Source/Runtime/Engine/Private/DestructibleActor.cpp:9: In file included from Runtime/Engine/Private/PhysicsEngine/PhysXSupport.h:11: In file included from Runtime/Engine/Public/PhysXIncludes.h:19: In file included from ThirdParty/PhysX/PhysX-3.3/include/PxPhysicsAPI.h:49: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxBounds3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxTransform.h:37: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxQuat.h:39: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxVec3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxMath.h:50: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxIntrinsics.h:42: ThirdParty/PhysX/PhysX-3.3/include/foundation/unix/PxUnixIntrinsics.h(85,2) : error: all paths through this function will call itself [-Werror,-Winfinite-recursion] { ^ [67/165] Compile Module.Engine.13_of_28.cpp [68/165] Compile Module.Engine.9_of_28.cpp In file included from /home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Client/Debug/Engine/Module.Engine.9_of_28.cpp:5: In file included from /home/a/UnrealEngine/Engine/Source/Runtime/Engine/Private/MorphTools.cpp:10: In file included from Runtime/Engine/Private/PhysicsEngine/PhysXSupport.h:11: In file included from Runtime/Engine/Public/PhysXIncludes.h:19: In file included from ThirdParty/PhysX/PhysX-3.3/include/PxPhysicsAPI.h:49: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxBounds3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxTransform.h:37: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxQuat.h:39: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxVec3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxMath.h:50: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxIntrinsics.h:42: ThirdParty/PhysX/PhysX-3.3/include/foundation/unix/PxUnixIntrinsics.h(85,2) : error: all paths through this function will call itself [-Werror,-Winfinite-recursion] { ^ 1 error generated. [69/165] Compile Module.Engine.11_of_28.cpp [70/165] Compile Module.Engine.1_of_28.cpp 1 error generated. [71/165] Compile Module.Engine.12_of_28.cpp [72/165] Compile Module.Engine.27_of_28.cpp In file included from /home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Client/Debug/Engine/Module.Engine.12_of_28.cpp:12: In file included from /home/a/UnrealEngine/Engine/Source/Runtime/Engine/Private/SkeletalMesh.cpp:39: In file included from Runtime/Engine/Private/PhysicsEngine/PhysXSupport.h:11: In file included from Runtime/Engine/Public/PhysXIncludes.h:19: In file included from ThirdParty/PhysX/PhysX-3.3/include/PxPhysicsAPI.h:49: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxBounds3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxTransform.h:37: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxQuat.h:39: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxVec3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxMath.h:50: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxIntrinsics.h:42: ThirdParty/PhysX/PhysX-3.3/include/foundation/unix/PxUnixIntrinsics.h(85,2) : error: all paths through this function will call itself [-Werror,-Winfinite-recursion] { ^ In file included from /home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Client/Debug/Engine/Module.Engine.27_of_28.cpp:3: In file included from /home/a/UnrealEngine/Engine/Source/Runtime/Engine/Private/PhysicsEngine/PhysicsAsset.cpp:12: In file included from /home/a/UnrealEngine/Engine/Source/Runtime/Engine/Private/PhysicsEngine/PhysXSupport.h:11: In file included from Runtime/Engine/Public/PhysXIncludes.h:19: In file included from ThirdParty/PhysX/PhysX-3.3/include/PxPhysicsAPI.h:49: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxBounds3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxTransform.h:37: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxQuat.h:39: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxVec3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxMath.h:50: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxIntrinsics.h:42: ThirdParty/PhysX/PhysX-3.3/include/foundation/unix/PxUnixIntrinsics.h(85,2) : error: all paths through this function will call itself [-Werror,-Winfinite-recursion] { ^ 1 error generated. [73/165] Compile Module.Engine.22_of_28.cpp 1 error generated. 1 error generated. [74/165] Compile Module.Engine.23_of_28.cpp [75/165] Compile Module.Engine.18_of_28.cpp 1 error generated. [76/165] Compile Module.Engine.3_of_28.cpp 1 error generated. [77/165] Compile Module.Engine.17_of_28.cpp [78/165] Compile Module.Engine.14_of_28.cpp [79/165] Compile Module.Engine.26_of_28.cpp In file included from /home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Client/Debug/Engine/Module.Engine.17_of_28.cpp:16: In file included from /home/a/UnrealEngine/Engine/Source/Runtime/Engine/Private/AI/Navigation/RecastNavMeshGenerator.cpp:9: In file included from /home/a/UnrealEngine/Engine/Source/Runtime/Engine/Private/AI/Navigation/../../PhysicsEngine/PhysXSupport.h:11: In file included from Runtime/Engine/Public/PhysXIncludes.h:19: In file included from ThirdParty/PhysX/PhysX-3.3/include/PxPhysicsAPI.h:49: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxBounds3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxTransform.h:37: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxQuat.h:39: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxVec3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxMath.h:50: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxIntrinsics.h:42: ThirdParty/PhysX/PhysX-3.3/include/foundation/unix/PxUnixIntrinsics.h(85,2) : error: all paths through this function will call itself [-Werror,-Winfinite-recursion] { ^ In file included from /home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Client/Debug/Engine/Module.Engine.26_of_28.cpp:5: In file included from /home/a/UnrealEngine/Engine/Source/Runtime/Engine/Private/PhysicsEngine/BodyInstance.cpp:10: In file included from /home/a/UnrealEngine/Engine/Source/Runtime/Engine/Private/PhysicsEngine/PhysXSupport.h:11: In file included from Runtime/Engine/Public/PhysXIncludes.h:19: In file included from ThirdParty/PhysX/PhysX-3.3/include/PxPhysicsAPI.h:49: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxBounds3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxTransform.h:37: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxQuat.h:39: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxVec3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxMath.h:50: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxIntrinsics.h:42: ThirdParty/PhysX/PhysX-3.3/include/foundation/unix/PxUnixIntrinsics.h(85,2) : error: all paths through this function will call itself [-Werror,-Winfinite-recursion] { ^ [80/165] Compile Module.Engine.25_of_28.cpp [81/165] Compile Module.AIModule.2_of_3.cpp [82/165] Compile AIModule.generated.cpp [83/165] Compile Module.AIModule.1_of_3.cpp 1 error generated. [84/165] Compile Module.Landscape.cpp 1 error generated. [85/165] Compile Module.Slate.2_of_4.cpp [86/165] Compile Module.Slate.3_of_4.cpp [87/165] Compile Module.Slate.1_of_4.cpp In file included from /home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Client/Debug/Landscape/Module.Landscape.cpp:4: In file included from /home/a/UnrealEngine/Engine/Source/Runtime/Landscape/Private/LandscapeCollision.cpp:11: In file included from Runtime/Engine/Private/Collision/PhysXCollision.h:12: In file included from Runtime/Engine/Private/Collision/../PhysicsEngine/PhysXSupport.h:11: In file included from Runtime/Engine/Public/PhysXIncludes.h:19: In file included from ThirdParty/PhysX/PhysX-3.3/include/PxPhysicsAPI.h:49: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxBounds3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxTransform.h:37: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxQuat.h:39: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxVec3.h:38: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxMath.h:50: In file included from ThirdParty/PhysX/PhysX-3.3/include/foundation/PxIntrinsics.h:42: ThirdParty/PhysX/PhysX-3.3/include/foundation/unix/PxUnixIntrinsics.h(85,2) : error: all paths through this function will call itself [-Werror,-Winfinite-recursion] { ^ [88/165] Compile Module.AppFramework.cpp 1 error generated. [89/165] Compile Module.Slate.4_of_4.cpp [90/165] Compile Module.AIModule.3_of_3.cpp [91/165] Compile Slate.generated.cpp [92/165] Compile Module.CrashTracker.cpp [93/165] Compile Module.TaskGraph.cpp [94/165] Compile Module.RealtimeProfiler.cpp [95/165] Compile Module.SlateReflector.cpp [96/165] Compile Module.EditorStyle.cpp [97/165] Compile EditorStyle.generated.cpp [98/165] Compile Module.SlateCore.cpp [99/165] Compile Landscape.generated.cpp [100/165] Compile SlateCore.generated.cpp [101/165] Compile Module.Core.2_of_6.cpp [102/165] Compile Module.CoreUObject.1_of_4.cpp [103/165] Compile Module.CoreUObject.3_of_4.cpp [104/165] Compile Module.OnlineSubsystem.cpp [105/165] Compile Module.Core.1_of_6.cpp [106/165] Compile Module.SessionServices.cpp [107/165] Compile Module.AssetRegistry.cpp [108/165] Compile Module.CoreUObject.2_of_4.cpp [109/165] Compile Module.Messaging.cpp [110/165] Compile OnlineSubsystem.generated.cpp [111/165] Compile Module.Serialization.cpp [112/165] Compile Module.CoreUObject.4_of_4.cpp [113/165] Compile EngineSettings.generated.cpp [114/165] Compile Module.EngineSettings.cpp [115/165] Compile Module.InputCore.cpp [116/165] Compile Module.Core.4_of_6.cpp [117/165] Compile InputCore.generated.cpp [118/165] Compile Module.ImageWrapper.cpp In file included from /home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Client/Debug/ImageWrapper/Module.ImageWrapper.cpp:9: In file included from /home/a/UnrealEngine/Engine/Source/Developer/ImageWrapper/Private/JpegImageWrapper.cpp:14: ThirdParty/libJPG/jpgd.cpp(569,51) : error: shifting a negative signed value is undefined [-Werror,-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,66) : error: shifting a negative signed value is undefined [-Werror,-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,81) : error: shifting a negative signed value is undefined [-Werror,-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,96) : error: shifting a negative signed value is undefined [-Werror,-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,111) : error: shifting a negative signed value is undefined [-Werror,-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,126) : error: shifting a negative signed value is undefined [-Werror,-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,141) : error: shifting a negative signed value is undefined [-Werror,-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,156) : error: shifting a negative signed value is undefined [-Werror,-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,171) : error: shifting a negative signed value is undefined [-Werror,-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,186) : error: shifting a negative signed value is undefined [-Werror,-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,202) : error: shifting a negative signed value is undefined [-Werror,-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,218) : error: shifting a negative signed value is undefined [-Werror,-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,234) : error: shifting a negative signed value is undefined [-Werror,-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,250) : error: shifting a negative signed value is undefined [-Werror,-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,266) : error: shifting a negative signed value is undefined [-Werror,-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ [119/165] Compile Module.AutomationMessages.cpp 15 errors generated. [120/165] Compile AutomationMessages.generated.cpp [121/165] Compile Module.SessionMessages.cpp [122/165] Compile SessionMessages.generated.cpp [123/165] Compile EngineMessages.generated.cpp [124/165] Compile Module.EngineMessages.cpp [126/165] Compile ProfilerMessages.generated.cpp [125/165] Compile Module.ProfilerMessages.cpp [127/165] Compile Serialization.generated.cpp [128/165] Compile CoreUObject.generated.cpp [129/165] Compile Module.Core.3_of_6.cpp [130/165] Compile Module.ShaderCore.cpp [131/165] Compile Module.Navmesh.1_of_2.cpp [132/165] Compile Module.Sockets.cpp [133/165] Compile Module.Navmesh.2_of_2.cpp [134/165] Compile Module.AnalyticsET.cpp [135/165] Compile Module.Projects.cpp [136/165] Compile Module.Networking.cpp [137/165] Compile Module.RenderCore.cpp [138/165] Compile Module.HTTP.cpp [139/165] Compile Module.RHI.cpp [140/165] Compile Module.NetworkFile.cpp [141/165] Compile Module.SynthBenchmark.cpp [142/165] Compile Module.NullDrv.cpp [143/165] Compile Module.Core.5_of_6.cpp [144/165] Compile Module.StreamingFile.cpp [145/165] Compile Module.Json.cpp [146/165] Compile Module.Voice.cpp [147/165] Compile Module.PakFile.cpp [148/165] Compile Module.Core.6_of_6.cpp [149/165] Compile Module.Media.cpp [150/165] Compile Module.Analytics.cpp [151/165] Compile Module.DatabaseSupport.cpp [152/165] Compile Module.Advertising.cpp [153/165] Compile Module.SandboxFile.cpp [154/165] Compile Module.ImageCore.cpp [155/165] Compile Module.VectorVM.cpp [156/165] Compile Module.UE4Game.cpp [158/165] Compile UELinkerFixups.cpp [157/165] Archive libUE4Client-CustomMeshComponent-Linux-Debug-Static.a [159/165] Archive libUE4Client-SlateRemote-Linux-Debug-Static.a [160/165] Archive libUE4Client-Paper2D-Linux-Debug-Static.a [161/165] Archive libUE4Client-UdpMessaging-Linux-Debug-Static.a [162/165] Archive libUE4Client-CableComponent-Linux-Debug-Static.a [163/165] Archive libUE4Client-CharacterAI-Linux-Debug-Static.a [164/165] Archive libUE4Client-ExampleDeviceProfileSelector-Linux-Debug-Static.a -------- End Detailed Actions Stats ----------------------------------------------------------- Cumulative action seconds (8 processors): 0.00 building projects, 1858.06 compiling, 0.00 creating app bundles, 0.00 generating debug info, 4.90 linking, 0.00 other UBT execution time: 247.98 seconds Makefile:134: recipe for target 'UE4Client-Linux-Debug' failed make: *** [UE4Client-Linux-Debug] Error 5 Apparently there is a problem with clang. I tried downgrading clang (“apt-get remove clang” and then “apt-get install clang-3.6” and “apt-get install clang+±3.6”), but I got the exact same errors I started with before I entered “apt-get install clang”, with ./Setup.sh.
This problem is referenced here:
And I have asked questions on those posts. They recommend either downgrading clang (doesn’t work for me, as I already explained, it just gives the original problem), or adding lines to a file, but I think the file was changed since that post, because it seems I would be interrupting “functions” (forgive me if I got the term wrong) by adding those lines after line 343 as recommended. I mean line 343 is an if statement, 344 is a bracket, and then line 348 is an “else if” statement. And the lines recommended to be added are a seemingly unrelated if statement.
The file recommended to be edited is called LinuxToolChain.cs. The text of that file is copied below:
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved. using System; using System.Collections.Generic; using System.Text.RegularExpressions; using System.Diagnostics; using System.IO; using Microsoft.Win32; namespace UnrealBuildTool { class LinuxToolChain : UEToolChain { protected static bool CrossCompiling() { return BuildHostPlatform.Current.Platform != UnrealTargetPlatform.Linux; } protected static bool UsingClang() { return !String.IsNullOrEmpty(ClangPath); } private string Which(string name) { Process proc = new Process(); proc.StartInfo.FileName = "/bin/sh"; proc.StartInfo.Arguments = String.Format("-c 'which {0}'", name); proc.StartInfo.UseShellExecute = false; proc.StartInfo.CreateNoWindow = true; proc.StartInfo.RedirectStandardOutput = true; proc.StartInfo.RedirectStandardError = true; proc.Start(); proc.WaitForExit(); string path = proc.StandardOutput.ReadLine(); Log.TraceVerbose(String.Format("which {0} result: ({1}) {2}", name, proc.ExitCode, path)); if (proc.ExitCode == 0 && String.IsNullOrEmpty(proc.StandardError.ReadToEnd())) { return path; } return null; } /** Splits compiler version string into numerical components, leaving unchanged if not known */ private void DetermineCompilerMajMinPatchFromVersionString() { string[] Parts = CompilerVersionString.Split('.'); if (Parts.Length >= 1) { CompilerVersionMajor = Convert.ToInt32(Parts[0]); } if (Parts.Length >= 2) { CompilerVersionMinor = Convert.ToInt32(Parts[1]); } if (Parts.Length >= 3) { CompilerVersionPatch = Convert.ToInt32(Parts[2]); } } /** Queries compiler for the version */ private bool DetermineCompilerVersion() { CompilerVersionString = null; CompilerVersionMajor = -1; CompilerVersionMinor = -1; CompilerVersionPatch = -1; Process Proc = new Process(); Proc.StartInfo.UseShellExecute = false; Proc.StartInfo.CreateNoWindow = true; Proc.StartInfo.RedirectStandardOutput = true; Proc.StartInfo.RedirectStandardError = true; if (!String.IsNullOrEmpty(GCCPath) && File.Exists(GCCPath)) { Proc.StartInfo.FileName = GCCPath; Proc.StartInfo.Arguments = " -dumpversion"; Proc.Start(); Proc.WaitForExit(); if (Proc.ExitCode == 0) { // read just the first string CompilerVersionString = Proc.StandardOutput.ReadLine(); DetermineCompilerMajMinPatchFromVersionString(); } } else if (!String.IsNullOrEmpty(ClangPath) && File.Exists(ClangPath)) { Proc.StartInfo.FileName = ClangPath; Proc.StartInfo.Arguments = " --version"; Proc.Start(); Proc.WaitForExit(); if (Proc.ExitCode == 0) { // read just the first string string VersionString = Proc.StandardOutput.ReadLine(); Regex VersionPattern = new Regex("version \\d+(\\.\\d+)+"); Match VersionMatch = VersionPattern.Match(VersionString); // version match will be like "version 3.3", so remove the "version" if (VersionMatch.Value.StartsWith("version ")) { CompilerVersionString = VersionMatch.Value.Replace("version ", ""); DetermineCompilerMajMinPatchFromVersionString(); } } } else { // icl? } if (!CrossCompiling()) { Console.WriteLine("Using {0} version '{1}' (string), {2} (major), {3} (minor), {4} (patch)", String.IsNullOrEmpty(ClangPath) ? "gcc" : "clang", CompilerVersionString, CompilerVersionMajor, CompilerVersionMinor, CompilerVersionPatch); } return !String.IsNullOrEmpty(CompilerVersionString); } public override void RegisterToolChain() { if (!CrossCompiling()) { // use native linux toolchain string[] ClangNames = { "clang++", "clang++-3.5", "clang++-3.3" }; foreach (var ClangName in ClangNames) { ClangPath = Which(ClangName); if (!String.IsNullOrEmpty(ClangPath)) { break; } } GCCPath = Which("g++"); ArPath = Which("ar"); RanlibPath = Which("ranlib"); // if clang is available, zero out gcc (@todo: support runtime switching?) if (!String.IsNullOrEmpty(ClangPath)) { GCCPath = null; } } else { // use cross linux toolchain if LINUX_ROOT is specified BaseLinuxPath = Environment.GetEnvironmentVariable("LINUX_ROOT"); // don't register if we don't have an LINUX_ROOT specified if (String.IsNullOrEmpty(BaseLinuxPath)) return; BaseLinuxPath = BaseLinuxPath.Replace("\"", ""); // set up the path to our toolchains GCCPath = ""; ClangPath = Path.Combine(BaseLinuxPath, @"bin\clang++.exe"); // ar and ranlib will be switched later to match the architecture ArPath = "ar.exe"; RanlibPath = "ranlib.exe"; } if (!DetermineCompilerVersion()) { Console.WriteLine("\n*** Could not determine version of the compiler, not registering Linux toolchain.\n"); return; } // refuse to use compilers that we know won't work // disable that only if you are a dev and you know what you are doing if (!UsingClang()) { Console.WriteLine("\n*** This version of the engine can only be compiled by clang - refusing to register the Linux toolchain.\n"); return; } else if (CompilerVersionMajor == 3 && CompilerVersionMinor == 4) { Console.WriteLine("\n*** clang 3.4.x is known to miscompile the engine - refusing to register the Linux toolchain.\n"); return; } // Register this tool chain for both Linux if (BuildConfiguration.bPrintDebugInfo) { Console.WriteLine(" Registered for {0}", CPPTargetPlatform.Linux.ToString()); } UEToolChain.RegisterPlatformToolChain(CPPTargetPlatform.Linux, this); } /** Checks if compiler version matches the requirements */ private static bool CompilerVersionGreaterOrEqual(int Major, int Minor, int Patch) { return CompilerVersionMajor > Major || (CompilerVersionMajor == Major && CompilerVersionMinor > Minor) || (CompilerVersionMajor == Major && CompilerVersionMinor == Minor && CompilerVersionPatch >= Patch); } /** Architecture-specific compiler switches */ static string ArchitectureSpecificSwitches(string Architecture) { string Result = ""; if (Architecture.StartsWith("x86_64")) { Result += " -mmmx -msse -msse2"; } else if (Architecture.StartsWith("arm")) { Result += " -fsigned-char"; // FreeType2's ftconfig.h will trigger this Result += " -Wno-deprecated-register"; } return Result; } static string ArchitectureSpecificDefines(string Architecture) { string Result = ""; if (Architecture.StartsWith("x86_64")) { Result += " -D_LINUX64"; } return Result; } /** Gets architecture-specific ar paths */ private static string GetArPath(string Architecture) { if (CrossCompiling()) { return Path.Combine(Path.Combine(BaseLinuxPath, String.Format("bin/{0}-{1}", Architecture, ArPath))); } return ArPath; } /** Gets architecture-specific ranlib paths */ private static string GetRanlibPath(string Architecture) { if (CrossCompiling()) { return Path.Combine(Path.Combine(BaseLinuxPath, String.Format("bin/{0}-{1}", Architecture, RanlibPath))); } return RanlibPath; } static string GetCLArguments_Global(CPPEnvironment CompileEnvironment) { string Result = ""; // build up the commandline common to C and C++ Result += " -c"; Result += " -pipe"; if (CrossCompiling()) { // There are exceptions used in the code base (e.g. UnrealHeadTool). @todo: weed out exceptions // So this flag cannot be used, at least not for native Linux builds. Result += " -fno-exceptions"; // no exceptions Result += " -DPLATFORM_EXCEPTIONS_DISABLED=1"; } else { Result += " -DPLATFORM_EXCEPTIONS_DISABLED=0"; } Result += " -Wall -Werror"; // test without this next line? Result += " -funwind-tables"; // generate unwind tables as they seem to be needed for stack tracing (why??) Result += " -Wsequence-point"; // additional warning not normally included in Wall: warns if order of operations is ambigious //Result += " -Wunreachable-code"; // additional warning not normally included in Wall: warns if there is code that will never be executed - not helpful due to bIsGCC and similar //Result += " -Wshadow"; // additional warning not normally included in Wall: warns if there variable/typedef shadows some other variable - not helpful because we have gobs of code that shadows variables Result += ArchitectureSpecificSwitches(CompileEnvironment.Config.Target.Architecture); Result += " -fno-math-errno"; // do not assume that math ops have side effects Result += " -fno-rtti"; // no run-time type info if (String.IsNullOrEmpty(ClangPath)) { // GCC only option Result += " -fno-strict-aliasing"; Result += " -Wno-sign-compare"; // needed to suppress: comparison between signed and unsigned integer expressions Result += " -Wno-enum-compare"; // Stats2.h triggers this (ALIGNOF(int64) <= DATA_ALIGN) Result += " -Wno-return-type"; // Variant.h triggers this Result += " -Wno-unused-local-typedefs"; Result += " -Wno-multichar"; Result += " -Wno-unused-but-set-variable"; Result += " -Wno-strict-overflow"; // Array.h:518 } else { // Clang only options Result += " -fdiagnostics-format=msvc"; // make diagnostics compatible with MSVC Result += " -Wno-unused-private-field"; // MultichannelTcpSocket.h triggers this, possibly more // this hides the "warning : comparison of unsigned expression < 0 is always false" type warnings due to constant comparisons, which are possible with template arguments Result += " -Wno-tautological-compare"; // this switch is understood by clang 3.5.0, but not clang-3.5 as packaged by Ubuntu 14.04 atm if (CompilerVersionGreaterOrEqual(3, 5, 0)) { Result += " -Wno-undefined-bool-conversion"; // hides checking if 'this' pointer is null } // Suppress clang 3.6.0 warnings if (CompilerVersionGreaterOrEqual(3, 6, 0)) { Result += " -Wno-inconsistent-missing-override"; Result += " -Wno-unused-local-typedef"; Result += " -Wno-null-conversion"; } } Result += " -Wno-unused-variable"; // this will hide the warnings about static functions in headers that aren't used in every single .cpp file Result += " -Wno-unused-function"; // this hides the "enumeration value 'XXXXX' not handled in switch [-Wswitch]" warnings - we should maybe remove this at some point and add UE_LOG(, Fatal, ) to default cases Result += " -Wno-switch"; Result += " -Wno-unknown-pragmas"; // Slate triggers this (with its optimize on/off pragmas) Result += " -Wno-invalid-offsetof"; // needed to suppress warnings about using offsetof on non-POD types. //Result += " -DOPERATOR_NEW_INLINE=FORCENOINLINE"; // shipping builds will cause this warning with "ensure", so disable only in those case if (CompileEnvironment.Config.Target.Configuration == CPPTargetConfiguration.Shipping) { Result += " -Wno-unused-value"; // in shipping, strip as much info as possible Result += " -g0"; Result += " -fomit-frame-pointer"; Result += " -fvisibility=hidden"; // prevents from exporting all symbols (reduces the size of the binary) } else if (CompileEnvironment.Config.Target.Configuration == CPPTargetConfiguration.Debug) { Result += " -fno-inline"; // disable inlining for better debuggability (e.g. callstacks, "skip file" in gdb) } // debug info (bCreateDebugInfo is normally set for all configurations, and we don't want it to affect Development/Shipping performance) if (CompileEnvironment.Config.bCreateDebugInfo && CompileEnvironment.Config.Target.Configuration == CPPTargetConfiguration.Debug) { Result += " -g3"; Result += " -fno-omit-frame-pointer"; Result += " -funwind-tables"; // generate unwind tables as they seem to be needed for stack tracing Result += " -fstack-protector"; //Result += " -fsanitize=address"; // Preferred clang tool for detecting address based errors but unusable for some reason with Module.Engine.7_of_42.cpp } else if (CompileEnvironment.Config.Target.Configuration < CPPTargetConfiguration.Shipping) { Result += " -gline-tables-only"; // include debug info for meaningful callstacks } // optimization level if (CompileEnvironment.Config.Target.Configuration == CPPTargetConfiguration.Debug) { Result += " -O0"; } else { Result += " -O2"; // warning: as of now (2014-09-28), clang 3.5.0 miscompiles PlatformerGame with -O3 (bitfields?) } if (CompileEnvironment.Config.bIsBuildingDLL) { Result += " -fPIC"; } //Result += " -v"; // for better error diagnosis Result += ArchitectureSpecificDefines(CompileEnvironment.Config.Target.Architecture); if (CrossCompiling()) { if (UsingClang()) { Result += String.Format(" -target {0}", CompileEnvironment.Config.Target.Architecture); // Set target triple } Result += String.Format(" --sysroot=\"{0}\"", BaseLinuxPath); } return Result; } static string GetCompileArguments_CPP() { string Result = ""; Result += " -x c++"; Result += " -std=c++11"; return Result; } static string GetCompileArguments_C() { string Result = ""; Result += " -x c"; return Result; } static string GetCompileArguments_MM() { string Result = ""; Result += " -x objective-c++"; Result += " -fobjc-abi-version=2"; Result += " -fobjc-legacy-dispatch"; Result += " -fno-rtti"; Result += " -std=c++11"; return Result; } static string GetCompileArguments_M() { string Result = ""; Result += " -x objective-c"; Result += " -fobjc-abi-version=2"; Result += " -fobjc-legacy-dispatch"; Result += " -std=c++11"; return Result; } static string GetCompileArguments_PCH() { string Result = ""; Result += " -x c++-header"; Result += " -std=c++11"; return Result; } static string GetLinkArguments(LinkEnvironment LinkEnvironment) { string Result = ""; // debugging symbols if (LinkEnvironment.Config.Target.Configuration < CPPTargetConfiguration.Shipping) { Result += " -rdynamic"; // needed for backtrace_symbols()... } else { Result += " -s"; // Strip binaries in Shipping } if (LinkEnvironment.Config.bIsBuildingDLL) { Result += " -shared"; } else { // ignore unresolved symbols in shared libs Result += string.Format(" -Wl,--unresolved-symbols=ignore-in-shared-libs"); } if (UnrealBuildTool.BuildingRocket()) { // strip symbols for Rocket in every configuration Result += " -Wl,-s"; } // RPATH for third party libs Result += " -Wl,-rpath=${ORIGIN}"; Result += " -Wl,-rpath-link=${ORIGIN}"; Result += " -Wl,-rpath=${ORIGIN}/../../../Engine/Binaries/Linux"; Result += " -Wl,-rpath=${ORIGIN}/.."; // for modules that are in sub-folders of the main Engine/Binary/Linux folder // FIXME: really ugly temp solution. Modules need to be able to specify this Result += " -Wl,-rpath=${ORIGIN}/../../../Engine/Binaries/ThirdParty/ICU/icu4c-53_1/Linux/x86_64-unknown-linux-gnu"; if (CrossCompiling()) { if (UsingClang()) { Result += String.Format(" -target {0}", LinkEnvironment.Config.Target.Architecture); // Set target triple } string SysRootPath = BaseLinuxPath.TrimEnd(new char[] { '\\', '/' }); Result += String.Format(" \"--sysroot={0}\"", SysRootPath); } return Result; } static string GetArchiveArguments(LinkEnvironment LinkEnvironment) { return " rc"; } public static void CompileOutputReceivedDataEventHandler(Object Sender, DataReceivedEventArgs e) { string Output = e.Data; if (String.IsNullOrEmpty(Output)) { return; } // Need to match following for clickable links string RegexFilePath = @"^[A-Z]\:([\\\/][A-Za-z0-9_\-\.]*)+\.(cpp|c|mm|m|hpp|h)"; string RegexLineNumber = @"\:\d+\:\d+\:"; string RegexDescription = @"(\serror:\s|\swarning:\s|\snote:\s).*"; // Get Matches string MatchFilePath = Regex.Match(Output, RegexFilePath).Value.Replace("Engine\\Source\\..\\..\\", ""); string MatchLineNumber = Regex.Match(Output, RegexLineNumber).Value; string MatchDescription = Regex.Match(Output, RegexDescription).Value; // If any of the above matches failed, do nothing if (MatchFilePath.Length == 0 || MatchLineNumber.Length == 0 || MatchDescription.Length == 0) { Console.WriteLine(Output); return; } // Convert Path string RegexStrippedPath = @"\\Engine\\.*"; //@"(Engine\/|[A-Za-z0-9_\-\.]*\/).*"; string ConvertedFilePath = Regex.Match(MatchFilePath, RegexStrippedPath).Value; ConvertedFilePath = Path.GetFullPath("..\\.." + ConvertedFilePath); // Extract Line + Column Number string ConvertedLineNumber = Regex.Match(MatchLineNumber, @"\d+").Value; string ConvertedColumnNumber = Regex.Match(MatchLineNumber, @"(?<=:\d+:)\d+").Value; // Write output string ConvertedExpression = " " + ConvertedFilePath + "(" + ConvertedLineNumber + "," + ConvertedColumnNumber + "):" + MatchDescription; Console.WriteLine(ConvertedExpression); // To create clickable vs link } // cache the location of NDK tools static string BaseLinuxPath; static string ClangPath; static string GCCPath; static string ArPath; static string RanlibPath; /** Version string of the current compiler, whether clang or gcc or whatever */ static string CompilerVersionString; /** Major version of the current compiler, whether clang or gcc or whatever */ static int CompilerVersionMajor = -1; /** Minor version of the current compiler, whether clang or gcc or whatever */ static int CompilerVersionMinor = -1; /** Patch version of the current compiler, whether clang or gcc or whatever */ static int CompilerVersionPatch = -1; /** Track which scripts need to be deleted before appending to */ private bool bHasWipedFixDepsScript = false; private static List<FileItem> BundleDependencies = new List<FileItem>(); public override CPPOutput CompileCPPFiles(UEBuildTarget Target, CPPEnvironment CompileEnvironment, List<FileItem> SourceFiles, string ModuleName) { string Arguments = GetCLArguments_Global(CompileEnvironment); string PCHArguments = ""; if (CompileEnvironment.Config.PrecompiledHeaderAction == PrecompiledHeaderAction.Include) { // Add the precompiled header file's path to the include path so Clang can find it. // This needs to be before the other include paths to ensure Clang uses it instead of the source header file. var PrecompiledFileExtension = UEBuildPlatform.BuildPlatformDictionary[UnrealTargetPlatform.Linux].GetBinaryExtension(UEBuildBinaryType.PrecompiledHeader); PCHArguments += string.Format(" -include \"{0}\"", CompileEnvironment.PrecompiledHeaderFile.AbsolutePath.Replace(PrecompiledFileExtension, "")); } // Add include paths to the argument list. foreach (string IncludePath in CompileEnvironment.Config.CPPIncludeInfo.IncludePaths) { Arguments += string.Format(" -I\"{0}\"", IncludePath); } foreach (string IncludePath in CompileEnvironment.Config.CPPIncludeInfo.SystemIncludePaths) { Arguments += string.Format(" -I\"{0}\"", IncludePath); } // Add preprocessor definitions to the argument list. foreach (string Definition in CompileEnvironment.Config.Definitions) { Arguments += string.Format(" -D \"{0}\"", Definition); } var BuildPlatform = UEBuildPlatform.GetBuildPlatformForCPPTargetPlatform(CompileEnvironment.Config.Target.Platform); // Create a compile action for each source file. CPPOutput Result = new CPPOutput(); foreach (FileItem SourceFile in SourceFiles) { Action CompileAction = new Action(ActionType.Compile); string FileArguments = ""; string Extension = Path.GetExtension(SourceFile.AbsolutePath).ToUpperInvariant(); // Add C or C++ specific compiler arguments. if (CompileEnvironment.Config.PrecompiledHeaderAction == PrecompiledHeaderAction.Create) { FileArguments += GetCompileArguments_PCH(); } else if (Extension == ".C") { // Compile the file as C code. FileArguments += GetCompileArguments_C(); } else if (Extension == ".CC") { // Compile the file as C++ code. FileArguments += GetCompileArguments_CPP(); } else if (Extension == ".MM") { // Compile the file as Objective-C++ code. FileArguments += GetCompileArguments_MM(); } else if (Extension == ".M") { // Compile the file as Objective-C code. FileArguments += GetCompileArguments_M(); } else { FileArguments += GetCompileArguments_CPP(); // only use PCH for .cpp files FileArguments += PCHArguments; } // Add the C++ source file and its included files to the prerequisite item list. AddPrerequisiteSourceFile( Target, BuildPlatform, CompileEnvironment, SourceFile, CompileAction.PrerequisiteItems ); if (CompileEnvironment.Config.PrecompiledHeaderAction == PrecompiledHeaderAction.Create) { var PrecompiledFileExtension = UEBuildPlatform.BuildPlatformDictionary[UnrealTargetPlatform.Linux].GetBinaryExtension(UEBuildBinaryType.PrecompiledHeader); // Add the precompiled header file to the produced item list. FileItem PrecompiledHeaderFile = FileItem.GetItemByPath( Path.Combine( CompileEnvironment.Config.OutputDirectory, Path.GetFileName(SourceFile.AbsolutePath) + PrecompiledFileExtension ) ); CompileAction.ProducedItems.Add(PrecompiledHeaderFile); Result.PrecompiledHeaderFile = PrecompiledHeaderFile; // Add the parameters needed to compile the precompiled header file to the command-line. FileArguments += string.Format(" -o \"{0}\"", PrecompiledHeaderFile.AbsolutePath, false); } else { if (CompileEnvironment.Config.PrecompiledHeaderAction == PrecompiledHeaderAction.Include) { CompileAction.bIsUsingPCH = true; CompileAction.PrerequisiteItems.Add(CompileEnvironment.PrecompiledHeaderFile); } var ObjectFileExtension = UEBuildPlatform.BuildPlatformDictionary[UnrealTargetPlatform.Linux].GetBinaryExtension(UEBuildBinaryType.Object); // Add the object file to the produced item list. FileItem ObjectFile = FileItem.GetItemByPath( Path.Combine( CompileEnvironment.Config.OutputDirectory, Path.GetFileName(SourceFile.AbsolutePath) + ObjectFileExtension ) ); CompileAction.ProducedItems.Add(ObjectFile); Result.ObjectFiles.Add(ObjectFile); FileArguments += string.Format(" -o \"{0}\"", ObjectFile.AbsolutePath, false); } // Add the source file path to the command-line. FileArguments += string.Format(" \"{0}\"", SourceFile.AbsolutePath); CompileAction.WorkingDirectory = Path.GetFullPath("."); if (!UsingClang()) { CompileAction.CommandPath = GCCPath; } else { CompileAction.CommandPath = ClangPath; } CompileAction.CommandArguments = Arguments + FileArguments + CompileEnvironment.Config.AdditionalArguments; CompileAction.CommandDescription = "Compile"; CompileAction.StatusDescription = Path.GetFileName(SourceFile.AbsolutePath); CompileAction.bIsGCCCompiler = true; // Don't farm out creation of pre-compiled headers as it is the critical path task. CompileAction.bCanExecuteRemotely = CompileEnvironment.Config.PrecompiledHeaderAction != PrecompiledHeaderAction.Create || BuildConfiguration.bAllowRemotelyCompiledPCHs; CompileAction.OutputEventHandler = new DataReceivedEventHandler(CompileOutputReceivedDataEventHandler); } return Result; } /** Creates an action to archive all the .o files into single .a file */ public FileItem CreateArchiveAndIndex(LinkEnvironment LinkEnvironment) { // Create an archive action Action ArchiveAction = new Action(ActionType.Link); ArchiveAction.WorkingDirectory = Path.GetFullPath("."); bool bUsingSh = BuildHostPlatform.Current.Platform != UnrealTargetPlatform.Win64 && BuildHostPlatform.Current.Platform != UnrealTargetPlatform.Win32; if (bUsingSh) { ArchiveAction.CommandPath = "/bin/sh"; ArchiveAction.CommandArguments = "-c '"; } else { ArchiveAction.CommandPath = "cmd.exe"; ArchiveAction.CommandArguments = "/c \""; } // this will produce a final library ArchiveAction.bProducesImportLibrary = true; // Add the output file as a production of the link action. FileItem OutputFile = FileItem.GetItemByPath(LinkEnvironment.Config.OutputFilePath); ArchiveAction.ProducedItems.Add(OutputFile); ArchiveAction.CommandDescription = "Archive"; ArchiveAction.StatusDescription = Path.GetFileName(OutputFile.AbsolutePath); ArchiveAction.CommandArguments += string.Format("\"{0}\" {1} \"{2}\"", GetArPath(LinkEnvironment.Config.Target.Architecture), GetArchiveArguments(LinkEnvironment), OutputFile.AbsolutePath); // Add the input files to a response file, and pass the response file on the command-line. List<string> InputFileNames = new List<string>(); foreach (FileItem InputFile in LinkEnvironment.InputFiles) { string InputAbsolutePath = InputFile.AbsolutePath.Replace("\\", "/"); InputFileNames.Add(string.Format("\"{0}\"", InputAbsolutePath)); ArchiveAction.PrerequisiteItems.Add(InputFile); ArchiveAction.CommandArguments += string.Format(" \"{0}\"", InputAbsolutePath); } // add ranlib ArchiveAction.CommandArguments += string.Format(" && \"{0}\" \"{1}\"", GetRanlibPath(LinkEnvironment.Config.Target.Architecture), OutputFile.AbsolutePath); // Add the additional arguments specified by the environment. ArchiveAction.CommandArguments += LinkEnvironment.Config.AdditionalArguments; ArchiveAction.CommandArguments.Replace("\\", "/"); if (bUsingSh) { ArchiveAction.CommandArguments += "'"; } else { ArchiveAction.CommandArguments += "\""; } // Only execute linking on the local PC. ArchiveAction.bCanExecuteRemotely = false; return OutputFile; } public FileItem FixDependencies(LinkEnvironment LinkEnvironment, FileItem Executable) { if (!LinkEnvironment.Config.bIsCrossReferenced) { return null; } Log.TraceVerbose("Adding postlink step"); bool bUseCmdExe = BuildHostPlatform.Current.Platform == UnrealTargetPlatform.Win64 || BuildHostPlatform.Current.Platform == UnrealTargetPlatform.Win32; string ShellBinary = bUseCmdExe ? "cmd.exe" : "/bin/sh"; string ExecuteSwitch = bUseCmdExe ? " /C" : ""; // avoid -c so scripts don't need +x string ScriptName = bUseCmdExe ? "FixDependencies.bat" : "FixDependencies.sh"; FileItem FixDepsScript = FileItem.GetItemByFullPath(Path.Combine(LinkEnvironment.Config.LocalShadowDirectory, ScriptName)); Action PostLinkAction = new Action(ActionType.Link); PostLinkAction.WorkingDirectory = Path.GetFullPath("."); PostLinkAction.CommandPath = ShellBinary; PostLinkAction.StatusDescription = string.Format("{0}", Path.GetFileName(Executable.AbsolutePath)); PostLinkAction.CommandDescription = "FixDeps"; PostLinkAction.bCanExecuteRemotely = false; PostLinkAction.CommandArguments = ExecuteSwitch; PostLinkAction.CommandArguments += bUseCmdExe ? " \"" : " -c '"; FileItem OutputFile = FileItem.GetItemByPath(Path.Combine(LinkEnvironment.Config.LocalShadowDirectory, Path.GetFileNameWithoutExtension(Executable.AbsolutePath) + ".link")); // Make sure we don't run this script until the all executables and shared libraries // have been built. PostLinkAction.PrerequisiteItems.Add(Executable); foreach (FileItem Dependency in BundleDependencies) { PostLinkAction.PrerequisiteItems.Add(Dependency); } PostLinkAction.CommandArguments += ShellBinary + ExecuteSwitch + " \"" + FixDepsScript.AbsolutePath + "\" && "; string Touch = bUseCmdExe ? "echo \"\" >> \"{0}\" && copy /b \"{0}\" +,," : "touch \"{0}\""; PostLinkAction.CommandArguments += String.Format(Touch, OutputFile.AbsolutePath); PostLinkAction.CommandArguments += bUseCmdExe ? "\"" : "'"; System.Console.WriteLine("{0} {1}", PostLinkAction.CommandPath, PostLinkAction.CommandArguments); PostLinkAction.ProducedItems.Add(OutputFile); return OutputFile; } public override FileItem LinkFiles(LinkEnvironment LinkEnvironment, bool bBuildImportLibraryOnly) { Debug.Assert(!bBuildImportLibraryOnly); List<string> RPaths = new List<string>(); if (LinkEnvironment.Config.bIsBuildingLibrary || bBuildImportLibraryOnly) { return CreateArchiveAndIndex(LinkEnvironment); } // Create an action that invokes the linker. Action LinkAction = new Action(ActionType.Link); LinkAction.WorkingDirectory = Path.GetFullPath("."); if (String.IsNullOrEmpty(ClangPath)) { LinkAction.CommandPath = GCCPath; } else { LinkAction.CommandPath = ClangPath; } // Get link arguments. LinkAction.CommandArguments = GetLinkArguments(LinkEnvironment); // Tell the action that we're building an import library here and it should conditionally be // ignored as a prerequisite for other actions LinkAction.bProducesImportLibrary = LinkEnvironment.Config.bIsBuildingDLL; // Add the output file as a production of the link action. FileItem OutputFile = FileItem.GetItemByPath(LinkEnvironment.Config.OutputFilePath); OutputFile.bNeedsHotReloadNumbersDLLCleanUp = LinkEnvironment.Config.bIsBuildingDLL; LinkAction.ProducedItems.Add(OutputFile); LinkAction.CommandDescription = "Link"; LinkAction.StatusDescription = Path.GetFileName(OutputFile.AbsolutePath); // Add the output file to the command-line. LinkAction.CommandArguments += string.Format(" -o \"{0}\"", OutputFile.AbsolutePath); // Add the input files to a response file, and pass the response file on the command-line. List<string> InputFileNames = new List<string>(); foreach (FileItem InputFile in LinkEnvironment.InputFiles) { InputFileNames.Add(string.Format("\"{0}\"", InputFile.AbsolutePath.Replace("\\", "/"))); LinkAction.PrerequisiteItems.Add(InputFile); } string ResponseFileName = GetResponseFileName(LinkEnvironment, OutputFile); LinkAction.CommandArguments += string.Format(" -Wl,@\"{0}\"", ResponseFile.Create(ResponseFileName, InputFileNames)); if (LinkEnvironment.Config.bIsBuildingDLL) { LinkAction.CommandArguments += string.Format(" -Wl,-soname={0}", OutputFile); } // Start with the configured LibraryPaths and also add paths to any libraries that // we depend on (libraries that we've build ourselves). List<string> AllLibraryPaths = LinkEnvironment.Config.LibraryPaths; foreach (string AdditionalLibrary in LinkEnvironment.Config.AdditionalLibraries) { string PathToLib = Path.GetDirectoryName(AdditionalLibrary); if (!String.IsNullOrEmpty(PathToLib)) { // make path absolute, because FixDependencies script may be executed in a different directory string AbsolutePathToLib = Path.GetFullPath(PathToLib); if (!AllLibraryPaths.Contains(AbsolutePathToLib)) { AllLibraryPaths.Add(AbsolutePathToLib); } } if ((AdditionalLibrary.Contains("Plugins") || AdditionalLibrary.Contains("Binaries/ThirdParty") || AdditionalLibrary.Contains("Binaries\\ThirdParty")) && Path.GetDirectoryName(AdditionalLibrary) != Path.GetDirectoryName(OutputFile.AbsolutePath)) { string RelativePath = Utils.MakePathRelativeTo(Path.GetDirectoryName(AdditionalLibrary), Path.GetDirectoryName(OutputFile.AbsolutePath)); if (!RPaths.Contains(RelativePath)) { RPaths.Add(RelativePath); LinkAction.CommandArguments += string.Format(" -Wl,-rpath=\"${{ORIGIN}}/{0}\"", RelativePath); } } } LinkAction.CommandArguments += string.Format(" -Wl,-rpath-link=\"{0}\"", Path.GetDirectoryName(OutputFile.AbsolutePath)); // Add the library paths to the argument list. foreach (string LibraryPath in AllLibraryPaths) { // use absolute paths because of FixDependencies script again LinkAction.CommandArguments += string.Format(" -L\"{0}\"", Path.GetFullPath(LibraryPath)); } // add libraries in a library group LinkAction.CommandArguments += string.Format(" -Wl,--start-group"); List<string> EngineAndGameLibraries = new List<string>(); foreach (string AdditionalLibrary in LinkEnvironment.Config.AdditionalLibraries) { if (String.IsNullOrEmpty(Path.GetDirectoryName(AdditionalLibrary))) { // library was passed just like "jemalloc", turn it into -ljemalloc LinkAction.CommandArguments += string.Format(" -l{0}", AdditionalLibrary); } else if (Path.GetExtension(AdditionalLibrary) == ".a") { // static library passed in, pass it along but make path absolute, because FixDependencies script may be executed in a different directory string AbsoluteAdditionalLibrary = Path.GetFullPath(AdditionalLibrary); if (AbsoluteAdditionalLibrary.Contains(" ")) { AbsoluteAdditionalLibrary = string.Format("\"{0}\"", AbsoluteAdditionalLibrary); } LinkAction.CommandArguments += (" " + AbsoluteAdditionalLibrary); LinkAction.PrerequisiteItems.Add(FileItem.GetItemByPath(AdditionalLibrary)); } else { // Skip over full-pathed library dependencies when building DLLs to avoid circular // dependencies. FileItem LibraryDependency = FileItem.GetItemByPath(AdditionalLibrary); var LibName = Path.GetFileNameWithoutExtension(AdditionalLibrary); if (LibName.StartsWith("lib")) { // Remove lib prefix LibName = LibName.Remove(0, 3); } string LibLinkFlag = string.Format(" -l{0}", LibName); if (LinkEnvironment.Config.bIsBuildingDLL && LinkEnvironment.Config.bIsCrossReferenced) { // We are building a cross referenced DLL so we can't actually include // dependencies at this point. Instead we add it to the list of // libraries to be used in the FixDependencies step. EngineAndGameLibraries.Add(LibLinkFlag); if (!LinkAction.CommandArguments.Contains("--allow-shlib-undefined")) { LinkAction.CommandArguments += string.Format(" -Wl,--allow-shlib-undefined"); } } else { LinkAction.PrerequisiteItems.Add(LibraryDependency); LinkAction.CommandArguments += LibLinkFlag; } } } LinkAction.CommandArguments += " -lrt"; // needed for clock_gettime() LinkAction.CommandArguments += " -lm"; // math LinkAction.CommandArguments += string.Format(" -Wl,--end-group"); // Add the additional arguments specified by the environment. LinkAction.CommandArguments += LinkEnvironment.Config.AdditionalArguments; LinkAction.CommandArguments = LinkAction.CommandArguments.Replace("\\\\", "/"); LinkAction.CommandArguments = LinkAction.CommandArguments.Replace("\\", "/"); // prepare a linker script string LinkerScriptPath = Path.Combine(LinkEnvironment.Config.LocalShadowDirectory, "remove-sym.ldscript"); if (!Directory.Exists(LinkEnvironment.Config.LocalShadowDirectory)) { Directory.CreateDirectory(LinkEnvironment.Config.LocalShadowDirectory); } if (File.Exists(LinkerScriptPath)) { File.Delete(LinkerScriptPath); } using (StreamWriter Writer = File.CreateText(LinkerScriptPath)) { Writer.WriteLine("UE4 {"); Writer.WriteLine(" global: *;"); Writer.WriteLine(" local: _Znwm;"); Writer.WriteLine(" _Znam;"); Writer.WriteLine(" _ZdaPv;"); Writer.WriteLine(" _ZdlPv;"); Writer.WriteLine("};"); }; LinkAction.CommandArguments += string.Format(" -Wl,--version-script=\"{0}\"", LinkerScriptPath); // Only execute linking on the local PC. LinkAction.bCanExecuteRemotely = false; // Prepare a script that will run later, once all shared libraries and the executable // are created. This script will be called by action created in FixDependencies() if (LinkEnvironment.Config.bIsCrossReferenced && LinkEnvironment.Config.bIsBuildingDLL) { bool bUseCmdExe = BuildHostPlatform.Current.Platform == UnrealTargetPlatform.Win64 || BuildHostPlatform.Current.Platform == UnrealTargetPlatform.Win32; string ScriptName = bUseCmdExe ? "FixDependencies.bat" : "FixDependencies.sh"; string FixDepsScriptPath = Path.Combine(LinkEnvironment.Config.LocalShadowDirectory, ScriptName); if (!bHasWipedFixDepsScript) { bHasWipedFixDepsScript = true; Log.TraceVerbose("Creating script: {0}", FixDepsScriptPath); StreamWriter Writer = File.CreateText(FixDepsScriptPath); if (bUseCmdExe) { Writer.Write("@echo off\n"); Writer.Write("rem Automatically generated by UnrealBuildTool\n"); Writer.Write("rem *DO NOT EDIT*\n\n"); } else { Writer.Write("#!/bin/sh\n"); Writer.Write("# Automatically generated by UnrealBuildTool\n"); Writer.Write("# *DO NOT EDIT*\n\n"); Writer.Write("set -o errexit\n"); } Writer.Close(); } StreamWriter FixDepsScript = File.AppendText(FixDepsScriptPath); string EngineAndGameLibrariesString = ""; foreach (string Library in EngineAndGameLibraries) { EngineAndGameLibrariesString += Library; } FixDepsScript.Write(string.Format("echo Fixing {0}\n", Path.GetFileName(OutputFile.AbsolutePath))); if (!bUseCmdExe) { FixDepsScript.Write(string.Format("TIMESTAMP=`stat --format %y \"{0}\"`\n", OutputFile.AbsolutePath)); } string FixDepsLine = LinkAction.CommandPath + " " + LinkAction.CommandArguments; string Replace = "-Wl,--allow-shlib-undefined"; FixDepsLine = FixDepsLine.Replace(Replace, EngineAndGameLibrariesString); string OutputFileForwardSlashes = OutputFile.AbsolutePath.Replace("\\", "/"); FixDepsLine = FixDepsLine.Replace(OutputFileForwardSlashes, OutputFileForwardSlashes + ".fixed"); FixDepsLine = FixDepsLine.Replace("$", "\\$"); FixDepsScript.Write(FixDepsLine + "\n"); if (bUseCmdExe) { FixDepsScript.Write(string.Format("move /Y \"{0}.fixed\" \"{0}\"\n", OutputFile.AbsolutePath)); } else { FixDepsScript.Write(string.Format("mv \"{0}.fixed\" \"{0}\"\n", OutputFile.AbsolutePath)); FixDepsScript.Write(string.Format("touch -d \"$TIMESTAMP\" \"{0}\"\n\n", OutputFile.AbsolutePath)); } FixDepsScript.Close(); } //LinkAction.CommandArguments += " -v"; return OutputFile; } public override void CompileCSharpProject(CSharpEnvironment CompileEnvironment, string ProjectFileName, string DestinationFile) { throw new BuildException("Linux cannot compile C# files"); } public override void SetupBundleDependencies(List<UEBuildBinary> Binaries, string GameName) { foreach (UEBuildBinary Binary in Binaries) { BundleDependencies.Add(FileItem.GetItemByPath(Binary.ToString())); } } /** Converts the passed in path from UBT host to compiler native format. */ public override String ConvertPath(String OriginalPath) { if (BuildHostPlatform.Current.Platform == UnrealTargetPlatform.Linux) { return OriginalPath.Replace("\\", "/"); } else { return OriginalPath; } } public override ICollection<FileItem> PostBuild(FileItem Executable, LinkEnvironment BinaryLinkEnvironment) { var OutputFiles = base.PostBuild(Executable, BinaryLinkEnvironment); if (BinaryLinkEnvironment.Config.bIsBuildingDLL || BinaryLinkEnvironment.Config.bIsBuildingLibrary) { return OutputFiles; } FileItem FixDepsOutputFile = FixDependencies(BinaryLinkEnvironment, Executable); if (FixDepsOutputFile != null) { OutputFiles.Add(FixDepsOutputFile); } return OutputFiles; } public override UnrealTargetPlatform GetPlatform() { return UnrealTargetPlatform.Linux; } } } I have deleted “-Werror” from line 285.
And I have also installed libjpeg-dev, on the advice of this post:
Note: also “sudo apt-get install mono-gmcs” returns the error:
The following packages have unmet dependencies: mono-gmcs : Depends: mono-mcs (= 3.12.1-0xamarin1) but 4.6.2.7-0xamarin3 is to be installed E: Unable to correct problems, you have held broken packages. I have mono-mcs installed, and mono-complete installed, though.
Also, “sudo apt-get install fglrx” returned a package not found error. So I installed “fglrx-pxpress” instead
By now, i have followed the instructions on the tutorial specifically for Linux Mint.
I run “make ./SlateViewer” and it returns:
$ make ./SlateViewer bash "/home/a/UnrealEngine"/Engine/Build/BatchFiles/Linux/Build.sh SlateViewer Linux Development Building SlateViewer... Using clang version '3.8.0' (string), 3 (major), 8 (minor), 0 (patch) Performing 37 actions (8 in parallel) [1/37] Compile CorePrivatePCH.h [2/37] Compile Module.Slate.2_of_4.cpp [3/37] Compile Module.Slate.3_of_4.cpp [4/37] Compile Module.Slate.1_of_4.cpp [5/37] Compile Module.AppFramework.cpp [6/37] Compile Module.Slate.4_of_4.cpp [7/37] Compile Module.SlateViewer.cpp [8/37] Compile Slate.generated.cpp [9/37] Compile Module.WebBrowser.cpp [10/37] Compile Module.SlateReflector.cpp [11/37] Compile Module.EditorStyle.cpp [12/37] Compile Module.SourceCodeAccess.cpp [13/37] Compile EditorStyle.generated.cpp [14/37] Compile SourceCodeAccess.generated.cpp [15/37] Compile Module.StandaloneRenderer.cpp [16/37] Compile Module.SlateCore.cpp [17/37] Compile SlateCore.generated.cpp [18/37] Compile Module.Core.2_of_6.cpp [19/37] Compile Module.CoreUObject.1_of_4.cpp [20/37] Compile Module.CoreUObject.3_of_4.cpp [21/37] Compile Module.Core.1_of_6.cpp [22/37] Compile Module.CoreUObject.2_of_4.cpp [23/37] Compile Module.DesktopPlatform.cpp [24/37] Compile Module.CoreUObject.4_of_4.cpp [25/37] Compile Module.Settings.cpp [26/37] Compile Module.InputCore.cpp [27/37] Compile Module.Core.4_of_6.cpp [28/37] Compile Module.ImageWrapper.cpp [29/37] Compile InputCore.generated.cpp In file included from /home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/SlateViewer/Development/ImageWrapper/Module.ImageWrapper.cpp:9: In file included from /home/a/UnrealEngine/Engine/Source/Developer/ImageWrapper/Private/JpegImageWrapper.cpp:14: ThirdParty/libJPG/jpgd.cpp(569,51) : warning: shifting a negative signed value is undefined [-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,66) : warning: shifting a negative signed value is undefined [-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,81) : warning: shifting a negative signed value is undefined [-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,96) : warning: shifting a negative signed value is undefined [-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,111) : warning: shifting a negative signed value is undefined [-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,126) : warning: shifting a negative signed value is undefined [-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,141) : warning: shifting a negative signed value is undefined [-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,156) : warning: shifting a negative signed value is undefined [-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,171) : warning: shifting a negative signed value is undefined [-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,186) : warning: shifting a negative signed value is undefined [-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,202) : warning: shifting a negative signed value is undefined [-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,218) : warning: shifting a negative signed value is undefined [-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,234) : warning: shifting a negative signed value is undefined [-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,250) : warning: shifting a negative signed value is undefined [-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ ThirdParty/libJPG/jpgd.cpp(569,266) : warning: shifting a negative signed value is undefined [-Wshift-negative-value] static const int s_extend_offset[16] = { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; ~~~~^ [30/37] Compile CoreUObject.generated.cpp [31/37] Compile Module.Core.3_of_6.cpp [32/37] Compile Module.Projects.cpp 15 warnings generated. [33/37] Compile Module.Core.5_of_6.cpp [34/37] Compile Module.Json.cpp [35/37] Compile Module.Core.6_of_6.cpp [36/37] Compile Module.CEF3Utils.cpp [37/37] Link SlateViewer -------- End Detailed Actions Stats ----------------------------------------------------------- Cumulative action seconds (8 processors): 0.00 building projects, 755.99 compiling, 0.00 creating app bundles, 0.00 generating debug info, 2.82 linking, 0.00 other UBT execution time: 127.52 seconds This returns basically all the same errors I got before without following the instructions to Linux Mint, and just running make in the Unreal directory. Stuff about “shifting a negative signed value is undefined”.
And of course “./SlateViewer” returns a no such file error.
=== Update ===
new output of “make ./SlateViewer”
make ./SlateViewer bash "/home/a/UnrealEngine"/Engine/Build/BatchFiles/Linux/Build.sh SlateViewer Linux Development Building SlateViewer... Using clang version '3.8.0' (string), 3 (major), 8 (minor), 0 (patch) Target is up to date. I don’t know why the output is different, or what I did, yet, but I will investigate very soon.
“./SlateViewer” still returns a "no such file or directory error though.
“make” is also still erroring:
~/UnrealEngine $ make bash "/home/a/UnrealEngine"/Engine/Build/BatchFiles/Linux/Build.sh UE4Client Linux Debug Building UE4Client... Using clang version '3.8.0' (string), 3 (major), 8 (minor), 0 (patch) Target is up to date. bash "/home/a/UnrealEngine"/Engine/Build/BatchFiles/Linux/Build.sh UE4Client Linux DebugGame Building UE4Client... Using clang version '3.8.0' (string), 3 (major), 8 (minor), 0 (patch) Performing 2 actions (8 in parallel) [1/2] Compile UELinkerFixups.cpp [2/2] Link UE4Client-Linux-DebugGame -------- End Detailed Actions Stats ----------------------------------------------------------- Cumulative action seconds (8 processors): 0.00 building projects, 0.11 compiling, 0.00 creating app bundles, 0.00 generating debug info, 13.73 linking, 0.00 other UBT execution time: 17.46 seconds bash "/home/a/UnrealEngine"/Engine/Build/BatchFiles/Linux/Build.sh UE4Client Linux Shipping Building UE4Client... Using clang version '3.8.0' (string), 3 (major), 8 (minor), 0 (patch) Target is up to date. bash "/home/a/UnrealEngine"/Engine/Build/BatchFiles/Linux/Build.sh UE4Client Linux Test Building UE4Client... Using clang version '3.8.0' (string), 3 (major), 8 (minor), 0 (patch) Target is up to date. bash "/home/a/UnrealEngine"/Engine/Build/BatchFiles/Linux/Build.sh UE4Client Linux Development Building UE4Client... Using clang version '3.8.0' (string), 3 (major), 8 (minor), 0 (patch) Performing 2 actions (8 in parallel) [1/2] Compile UELinkerFixups.cpp [2/2] Link UE4Client -------- End Detailed Actions Stats ----------------------------------------------------------- Cumulative action seconds (8 processors): 0.00 building projects, 0.16 compiling, 0.00 creating app bundles, 0.00 generating debug info, 8.76 linking, 0.00 other UBT execution time: 12.25 seconds bash "/home/a/UnrealEngine"/Engine/Build/BatchFiles/Linux/Build.sh UE4Editor Linux Debug Building UE4Editor... Using clang version '3.8.0' (string), 3 (major), 8 (minor), 0 (patch) /bin/sh -c '/bin/sh "/home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Editor/Debug/FixDependencies.sh" && touch "/home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Editor/Debug/UE4Editor-Linux-Debug.link"' Performing 1 actions (8 in parallel) [1/1] FixDeps UE4Editor-Linux-Debug Fixing libUE4Editor-Landscape-Linux-Debug.so Fixing libUE4Editor-UnrealEd-Linux-Debug.so /home/a/UnrealEngine/Engine/Source/ThirdParty/FBX/2014.2.1/lib/linux/x86_64-unknown-linux-gnu/libfbxsdk.a(fbxutils.o): In function `fbxsdk_2014_2_1::FbxPathUtils::GenerateFileName(char const*, char const*)': fbxutils.cxx:(.text+0x498): warning: the use of `tempnam' is dangerous, better use `mkstemp' Fixing libUE4Editor-GraphEditor-Linux-Debug.so Fixing libUE4Editor-KismetCompiler-Linux-Debug.so Fixing libUE4Editor-SourceControl-Linux-Debug.so Fixing libUE4Editor-Kismet-Linux-Debug.so Fixing libUE4Editor-AIModule-Linux-Debug.so Fixing libUE4Editor-AITestSuite-Linux-Debug.so Fixing libUE4Editor-UMG-Linux-Debug.so Fixing libUE4Editor-CollisionAnalyzer-Linux-Debug.so Fixing libUE4Editor-LogVisualizer-Linux-Debug.so -------- End Detailed Actions Stats ----------------------------------------------------------- Cumulative action seconds (8 processors): 0.00 building projects, 0.00 compiling, 0.00 creating app bundles, 0.00 generating debug info, 32.57 linking, 0.00 other UBT execution time: 43.20 seconds bash "/home/a/UnrealEngine"/Engine/Build/BatchFiles/Linux/Build.sh UE4Editor Linux DebugGame Building UE4Editor... Using clang version '3.8.0' (string), 3 (major), 8 (minor), 0 (patch) /bin/sh -c '/bin/sh "/home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Editor/Development/FixDependencies.sh" && touch "/home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Editor/Development/UE4Editor.link"' Performing 1 actions (8 in parallel) [1/1] FixDeps UE4Editor Fixing libUE4Editor-Landscape.so Fixing libUE4Editor-UnrealEd.so /home/a/UnrealEngine/Engine/Source/ThirdParty/FBX/2014.2.1/lib/linux/x86_64-unknown-linux-gnu/libfbxsdk.a(fbxutils.o): In function `fbxsdk_2014_2_1::FbxPathUtils::GenerateFileName(char const*, char const*)': fbxutils.cxx:(.text+0x498): warning: the use of `tempnam' is dangerous, better use `mkstemp' Fixing libUE4Editor-GraphEditor.so Fixing libUE4Editor-KismetCompiler.so Fixing libUE4Editor-SourceControl.so Fixing libUE4Editor-Kismet.so Fixing libUE4Editor-AIModule.so Fixing libUE4Editor-AITestSuite.so Fixing libUE4Editor-UMG.so Fixing libUE4Editor-CollisionAnalyzer.so Fixing libUE4Editor-LogVisualizer.so -------- End Detailed Actions Stats ----------------------------------------------------------- Cumulative action seconds (8 processors): 0.00 building projects, 0.00 compiling, 0.00 creating app bundles, 0.00 generating debug info, 16.91 linking, 0.00 other UBT execution time: 26.55 seconds bash "/home/a/UnrealEngine"/Engine/Build/BatchFiles/Linux/Build.sh UE4Editor Linux Shipping Building UE4Editor... Using clang version '3.8.0' (string), 3 (major), 8 (minor), 0 (patch) /bin/sh -c '/bin/sh "/home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Editor/Shipping/FixDependencies.sh" && touch "/home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Editor/Shipping/UE4Editor-Linux-Shipping.link"' Performing 35 actions (8 in parallel) [1/35] Compile Module.LevelEditor.2_of_3.cpp [2/35] Compile Module.GameplayDebugger.cpp [3/35] Link UE4Editor-Linux-Shipping /home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Editor/Shipping/Launch/Module.Launch.cpp.o: In function `FFeedbackContextEditor::~FFeedbackContextEditor()': /home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Editor/Shipping/Launch/Module.Launch.cpp:(.text._ZN22FFeedbackContextEditorD2Ev[_ZN22FFeedbackContextEditorD2Ev]+0xa): undefined reference to `vtable for FFeedbackContextEditor' clang: error: linker command failed with exit code 1 (use -v to see invocation) In file included from /home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Editor/Shipping/GameplayDebugger/Module.GameplayDebugger.cpp:3: /home/a/UnrealEngine/Engine/Source/Developer/GameplayDebugger/Private/GameplayDebugger.cpp(233,9) : error: use of undeclared identifier 'Extender' return Extender; ^ In file included from /home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Editor/Shipping/GameplayDebugger/Module.GameplayDebugger.cpp:5: /home/a/UnrealEngine/Engine/Source/Developer/GameplayDebugger/Private/GameplayDebuggingComponent.cpp(632,27) : error: use of undeclared identifier 'EQSLocalData' if (++CurrentEQSIndex >= EQSLocalData.Num()) ^ In file included from /home/a/UnrealEngine/Engine/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Editor/Shipping/LevelEditor/Module.LevelEditor.2_of_3.cpp:18: /home/a/UnrealEngine/Engine/Source/Editor/LevelEditor/Private/SLevelViewport.cpp(3371,69) : error: no member named 'GetExecBind' in 'UPlayerInput' FKeyBind Binding = TargetPlayer->PlayerController->PlayerInput->GetExecBind(TEXT("ShowMouseCursor")); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ 2 errors generated. 1 error generated. -------- End Detailed Actions Stats ----------------------------------------------------------- ERROR: UBT ERROR: Failed to produce item: /home/a/UnrealEngine/Engine/Binaries/Linux/libUE4Editor-LevelEditor-Linux-Shipping.so Cumulative action seconds (8 processors): 0.00 building projects, 21.80 compiling, 0.00 creating app bundles, 0.00 generating debug info, 0.69 linking, 0.00 other UBT execution time: 21.46 seconds Makefile:155: recipe for target 'UE4Editor-Linux-Shipping' failed make: *** [UE4Editor-Linux-Shipping] Error 5 Okay, I am changing directories to Engine/Binaries/Linux (even though there’s no mention of that on the tutorial on wiki in the section about installing slateviewer for linux mint), and entering ./SlateViewer, and I get the following error:
./SlateViewer: error while loading shared libraries: libLND.so: cannot open shared object file: No such file or directory more stuff
a@a ~/UnrealEngine $ cd Engine/Binaries/Linux a@a ~/UnrealEngine/Engine/Binaries/Linux $ LD_LIBRARY_PATH=${HOME}/UnrealEngine/Engine/Source/ThirdParty/LinuxNativeDialogs/UELinuxNativeDialogs/lib/Linux/x86_64-unknown-linux-gnu/ ./SlateViewer Trying to load: libLND-qt5.so LND loaded backend: qt5 Using binned. LogModuleManager:Warning: ModuleManager: Module 'PakFile' not found - its StaticallyLinkedModuleInitializers function is null. LogModuleManager:Warning: ModuleManager: Module 'SandboxFile' not found - its StaticallyLinkedModuleInitializers function is null. LogModuleManager:Warning: ModuleManager: Module 'StreamingFile' not found - its StaticallyLinkedModuleInitializers function is null. LogModuleManager:Warning: ModuleManager: Module 'NetworkFile' not found - its StaticallyLinkedModuleInitializers function is null. LogInit: Version: 4.7.6-0+++depot+UE4-Releases+4.7 LogInit: API Version: 0 LogInit: Compiled (64-bit): Dec 8 2016 23:09:52 LogInit: Compiled with Clang: 3.8.0 (tags/RELEASE_380/final) LogInit: Build Configuration: Development LogInit: Branch Name: ++depot+UE4-Releases+4.7 LogInit: Command line: LogInit: Base directory: /home/a/UnrealEngine/Engine/Binaries/Linux/ LogInit: Rocket: 0 [2016.12.09-21.10.25:038][ 0]LogTaskGraph: Started task graph with 3 named threads and 6 total threads. [2016.12.09-21.10.25:053][ 0]LogInit: Presizing for 0 objects not considered by GC, pre-allocating 0 bytes. [2016.12.09-21.10.25:074][ 0]LogInit: Object subsystem initialized [2016.12.09-21.10.25:074][ 0]LogInit: Linux hardware info: [2016.12.09-21.10.25:074][ 0]LogInit: - this process' id (pid) is 19806, parent process' id (ppid) is 27962 [2016.12.09-21.10.25:075][ 0]LogInit: - we are not running under debugger [2016.12.09-21.10.25:075][ 0]LogInit: - machine network name is 'zamza' [2016.12.09-21.10.25:075][ 0]LogInit: - we're logged in locally [2016.12.09-21.10.25:075][ 0]LogInit: - Number of physical cores available for the process: 4 [2016.12.09-21.10.25:075][ 0]LogInit: - Number of logical cores available for the process: 8 [2016.12.09-21.10.25:075][ 0]LogInit: - Memory allocator used: binned [2016.12.09-21.10.25:075][ 0]LogInit: Linux-specific commandline switches: [2016.12.09-21.10.25:075][ 0]LogInit: -nodwarf (currently OFF): suppress parsing of DWARF debug info (callstacks will be generated faster, but won't have line numbers) [2016.12.09-21.10.25:075][ 0]LogInit: -ansimalloc - use malloc()/free() from libc (useful for tools like valgrind and electric fence) [2016.12.09-21.10.25:075][ 0]LogInit: -jemalloc - use jemalloc for all memory allocation [2016.12.09-21.10.25:075][ 0]LogInit: -binnedmalloc - use binned malloc for all memory allocation [2016.12.09-21.10.25:075][ 0]LogInit: -httpproxy=ADDRESS:PORT - redirects HTTP requests to a proxy (only supported if compiled with libcurl) [2016.12.09-21.10.25:075][ 0]LogInit: -reuseconn - allow libcurl to reuse HTTP connections (only matters if compiled with libcurl) [2016.12.09-21.10.25:075][ 0]LogInit: -virtmemkb=NUMBER - sets process virtual memory (address space) limit (overrides VirtualMemoryLimitInKB value from .ini) [2016.12.09-21.10.25:075][ 0]LogInit: - Physical RAM available (not considering process quota): 16 GB (15982 MB, 16366020 KB, 16758804480 bytes) [2016.12.09-21.10.25:147][ 0]LogTextLocalizationManager: The requested culture ('en_US') has no localization data; parent culture's ('en') localization data will be used. [2016.12.09-21.10.25:374][ 0]LogInit: Initializing SDL. libGL error: No matching fbConfigs or visuals found libGL error: failed to load driver: swrast X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 154 (GLX) Minor opcode of failed request: 3 (X_GLXCreateContext) Value in failed request: 0x0 Serial number of failed request: 96 Current serial number in output stream: 97 and more stuff
$ LD_LIBRARY_PATH=${HOME}/UnrealEngine/Engine/Source/ThirdParty/LinuxNativeDialogs/UELinuxNativeDialogs/lib/Linux/x86_64-unknown-linux-gnu/ ./UE4Editor Using binned. Trying to load: libLND-qt5.so LND loaded backend: qt5 Increasing per-process limit of core file size to infinity. LogInit:Display: Running engine without a game LogInit: Version: 4.7.6-0+++depot+UE4-Releases+4.7 LogInit: API Version: 0 LogInit: Compiled (64-bit): Dec 9 2016 03:15:27 LogInit: Compiled with Clang: 3.8.0 (tags/RELEASE_380/final) LogInit: Build Configuration: Development LogInit: Branch Name: ++depot+UE4-Releases+4.7 LogInit: Command line: LogInit: Base directory: /home/a/UnrealEngine/Engine/Binaries/Linux/ LogInit: Rocket: 0 [2016.12.09-21.16.28:080][ 0]LogTaskGraph: Started task graph with 3 named threads and 6 total threads. [2016.12.09-21.16.28:779][ 0]LogOnline:Warning: No default platform service specified for OnlineSubsystem [2016.12.09-21.16.29:576][ 0]LogInit: Presizing for 0 objects not considered by GC, pre-allocating 0 bytes. [2016.12.09-21.16.29:720][ 0]LogInit: Object subsystem initialized [2016.12.09-21.16.29:894][ 0]LogInit: Initializing SDL. libGL error: No matching fbConfigs or visuals found libGL error: failed to load driver: swrast X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 154 (GLX) Minor opcode of failed request: 3 (X_GLXCreateContext) Value in failed request: 0x0 Serial number of failed request: 96 Current serial number in output stream: 97