Skip to content

Commit e4aa2a9

Browse files
authored
Linux & Macos support for the Unreal Engine plugin (#873)
1 parent 951d312 commit e4aa2a9

File tree

15 files changed

+371
-76
lines changed

15 files changed

+371
-76
lines changed

.gitignore

+5-1
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,12 @@ cmake-build-*/
9797
UnrealEngine/Plugins/JSBSimFlightDynamicsModel/Binaries
9898
UnrealEngine/Plugins/JSBSimFlightDynamicsModel/Intermediate
9999
UnrealEngine/Plugins/JSBSimFlightDynamicsModel/Resources/JSBSim
100-
UnrealEngine/Plugins/JSBSimFlightDynamicsModel/Source/ThirdParty/JSBSim
100+
UnrealEngine/Plugins/JSBSimFlightDynamicsModel/Source/ThirdParty/JSBSim/Lib
101+
UnrealEngine/Plugins/JSBSimFlightDynamicsModel/Source/ThirdParty/JSBSim/LibDebug
102+
UnrealEngine/Plugins/JSBSimFlightDynamicsModel/Source/ThirdParty/JSBSim/Include
101103
UnrealEngine/Binaries
102104
UnrealEngine/DerivedDataCache
103105
UnrealEngine/Intermediate
104106
UnrealEngine/Saved
107+
UnrealEngine/UEReferenceApp.xcworkspace
108+
UnrealEngine/UEReferenceApp.sln

JSBSimForUnrealLinux.sh

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#!/bin/bash
2+
3+
# make build folder and cd into it
4+
mkdir -p build
5+
cd build
6+
7+
# build the jsbsim library with cmake
8+
cmake -DBUILD_SHARED_LIBS=ON -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_CXX_FLAGS="-stdlib=libc++" ..
9+
make -j4
10+
11+
# cd back to the root directory
12+
cd ..
13+
14+
# set the unreal plugin folder for use in the script
15+
UNREAL_PLUGIN_FOLDER=./UnrealEngine/Plugins/JSBSimFlightDynamicsModel
16+
UNREAL_PLUGIN_INCLUDE_FOLDER=$UNREAL_PLUGIN_FOLDER/Source/ThirdParty/JSBSim/Include
17+
UNREAL_PLUGIN_LIB_FOLDER=$UNREAL_PLUGIN_FOLDER/Source/ThirdParty/JSBSim/Lib/Linux
18+
UNREAL_PLUGIN_RESOURCES_FOLDER=$UNREAL_PLUGIN_FOLDER/Resources/JSBSim
19+
20+
echo "Copying JSBSim header files to Unreal plugin folder: $UNREAL_PLUGIN_INCLUDE_FOLDER"
21+
22+
# make the unreal plugin thirdparty/jsbsim/include folder
23+
rm -rf $UNREAL_PLUGIN_INCLUDE_FOLDER
24+
mkdir -p $UNREAL_PLUGIN_INCLUDE_FOLDER
25+
# copy the include files (.h,.hxx) from src (and its subdirectories) into unreal
26+
# plugin thirdparty/jsbsim/include folder, keeping the same directory structure
27+
# as in src. Since we're on macos, we use rsync instead of cp to preserve the
28+
# directory structure
29+
30+
# Copy headers
31+
rsync -avm --include='*.h' --include='*.hpp' --include='*.hxx' -f 'hide,! */' src/ UnrealEngine/Plugins/JSBSimFlightDynamicsModel/Source/ThirdParty/JSBSim/Include/
32+
33+
echo "Copying JSBSim library to Unreal plugin folder:
34+
$UNREAL_PLUGIN_LIB_FOLDER"
35+
# make the unreal plugin thirdparty/jsbsim/lib folder
36+
mkdir -p $UNREAL_PLUGIN_LIB_FOLDER
37+
# copy the jsbsim library from the build folder into the unreal plugin
38+
# thirdparty/jsbsim/lib folder
39+
# cp ./build/src/libJSBSim.a $UNREAL_PLUGIN_LIB_FOLDER/.
40+
cp ./build/src/*.so $UNREAL_PLUGIN_LIB_FOLDER/.
41+
42+
echo "Copying JSBSim resources to Unreal plugin folder:
43+
$UNREAL_PLUGIN_RESOURCES_FOLDER"
44+
# make the unreal plugin resources folder
45+
mkdir -p $UNREAL_PLUGIN_RESOURCES_FOLDER
46+
# copy the aircraft, engine, and systems folders into the unreal plugin resources folder
47+
cp -r ./aircraft $UNREAL_PLUGIN_FOLDER/Resources/JSBSim/.
48+
cp -r ./engine $UNREAL_PLUGIN_FOLDER/Resources/JSBSim/.
49+
cp -r ./systems $UNREAL_PLUGIN_FOLDER/Resources/JSBSim/.

JSBSimForUnrealMac.sh

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#!/bin/bash
2+
3+
# make build folder and cd into it
4+
mkdir -p build
5+
cd build
6+
7+
# build the jsbsim library with cmake
8+
cmake -DBUILD_SHARED_LIBS=ON -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_CXX_FLAGS="-stdlib=libc++" ..
9+
make -j4
10+
11+
# cd back to the root directory
12+
cd ..
13+
14+
# set the unreal plugin folder for use in the script
15+
UNREAL_PLUGIN_FOLDER=./UnrealEngine/Plugins/JSBSimFlightDynamicsModel
16+
UNREAL_PLUGIN_INCLUDE_FOLDER=$UNREAL_PLUGIN_FOLDER/Source/ThirdParty/JSBSim/Include
17+
UNREAL_PLUGIN_LIB_FOLDER=$UNREAL_PLUGIN_FOLDER/Source/ThirdParty/JSBSim/Lib/Mac
18+
UNREAL_PLUGIN_RESOURCES_FOLDER=$UNREAL_PLUGIN_FOLDER/Resources/JSBSim
19+
20+
echo "Copying JSBSim header files to Unreal plugin folder: $UNREAL_PLUGIN_INCLUDE_FOLDER"
21+
22+
# make the unreal plugin thirdparty/jsbsim/include folder
23+
rm -rf $UNREAL_PLUGIN_INCLUDE_FOLDER
24+
mkdir -p $UNREAL_PLUGIN_INCLUDE_FOLDER
25+
# copy the include files (.h,.hxx) from src (and its subdirectories) into unreal
26+
# plugin thirdparty/jsbsim/include folder, keeping the same directory structure
27+
# as in src. Since we're on macos, we use rsync instead of cp to preserve the
28+
# directory structure
29+
30+
# Copy headers
31+
rsync -avm --include='*.h' --include='*.hpp' --include='*.hxx' -f 'hide,! */' src/ UnrealEngine/Plugins/JSBSimFlightDynamicsModel/Source/ThirdParty/JSBSim/Include/
32+
33+
echo "Copying JSBSim library to Unreal plugin folder:
34+
$UNREAL_PLUGIN_LIB_FOLDER"
35+
# make the unreal plugin thirdparty/jsbsim/lib folder
36+
mkdir -p $UNREAL_PLUGIN_LIB_FOLDER
37+
# copy the jsbsim library from the build folder into the unreal plugin
38+
# thirdparty/jsbsim/lib folder
39+
# cp ./build/src/libJSBSim.a $UNREAL_PLUGIN_LIB_FOLDER/.
40+
cp ./build/src/*.dylib $UNREAL_PLUGIN_LIB_FOLDER/.
41+
42+
echo "Copying JSBSim resources to Unreal plugin folder:
43+
$UNREAL_PLUGIN_RESOURCES_FOLDER"
44+
# make the unreal plugin resources folder
45+
mkdir -p $UNREAL_PLUGIN_RESOURCES_FOLDER
46+
# copy the aircraft, engine, and systems folders into the unreal plugin resources folder
47+
cp -r ./aircraft $UNREAL_PLUGIN_FOLDER/Resources/JSBSim/.
48+
cp -r ./engine $UNREAL_PLUGIN_FOLDER/Resources/JSBSim/.
49+
cp -r ./systems $UNREAL_PLUGIN_FOLDER/Resources/JSBSim/.

UnrealEngine/.gitignore

-13
This file was deleted.

UnrealEngine/CleanProject.sh

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/bin/bash
2+
3+
rm -rf *.vs
4+
rm -rf Saved
5+
rm -rf Binaries
6+
rm -rf Build
7+
rm -rf Intermediate
8+
rm -rf DerivedDataCache
9+
rm -rf Script
10+
11+
rm -rf Plugins\JSBSimFlightDynamicsModel\Binaries
12+
rm -rf Plugins\JSBSimFlightDynamicsModel\Intermediate

UnrealEngine/Config/DefaultInput.ini

-1
Original file line numberDiff line numberDiff line change
@@ -185,4 +185,3 @@ DefaultTouchInterface=/Engine/MobileResources/HUD/DefaultVirtualJoysticks.Defaul
185185
+DeviceConfigurations=(VendorID="06A3",ProductID="0763",AxisProperties=((Key=GenericUSBController_Axis3),(Key=GenericUSBController_Axis4),(Key=GenericUSBController_Axis5,Offset=-0.500000),(Key=GenericUSBController_Axis4),(Key=GenericUSBController_Axis5),(Key=GenericUSBController_Axis6),(Key=GenericUSBController_Axis7),(Key=GenericUSBController_Axis8),(Key=GenericUSBController_Axis9),(Key=GenericUSBController_Axis10),(Key=GenericUSBController_Axis11),(Key=GenericUSBController_Axis12),(Key=GenericUSBController_Axis13),(Key=GenericUSBController_Axis14),(Key=GenericUSBController_Axis15),(Key=GenericUSBController_Axis16)),ButtonProperties=((Key=GenericUSBController_Button1),(Key=GenericUSBController_Button2),(Key=GenericUSBController_Button3),(Key=GenericUSBController_Button4),(Key=GenericUSBController_Button5),(Key=GenericUSBController_Button6),(Key=GenericUSBController_Button7),(Key=GenericUSBController_Button8),(Key=GenericUSBController_Button9),(Key=GenericUSBController_Button10),(Key=GenericUSBController_Button11),(Key=GenericUSBController_Button12),(Key=GenericUSBController_Button13),(Key=GenericUSBController_Button14),(Key=GenericUSBController_Button15),(Key=GenericUSBController_Button16),(Key=GenericUSBController_Button17),(Key=GenericUSBController_Button18),(Key=GenericUSBController_Button19),(Key=GenericUSBController_Button20),(Key=GenericUSBController_Button21),(Key=GenericUSBController_Button22),(Key=GenericUSBController_Button23),(Key=GenericUSBController_Button24),(Key=GenericUSBController_Button25),(Key=GenericUSBController_Button26),(Key=GenericUSBController_Button27),(Key=GenericUSBController_Button28),(Key=GenericUSBController_Button29),(Key=GenericUSBController_Button30),(Key=GenericUSBController_Button31),(Key=GenericUSBController_Button32),(Key=GenericUSBController_Button33),(Key=GenericUSBController_Button34),(Key=GenericUSBController_Button35),(Key=GenericUSBController_Button36),(Key=GenericUSBController_Button37),(Key=GenericUSBController_Button38),(Key=GenericUSBController_Button39),(Key=GenericUSBController_Button40)))
186186
+DeviceConfigurations=(VendorID="294B",ProductID="1901",AxisProperties=((Key=GenericUSBController_Axis6),(Key=GenericUSBController_Axis7),(Key=GenericUSBController_Axis8),(Key=GenericUSBController_Axis9),(Key=GenericUSBController_Axis10),(Key=GenericUSBController_Axis11,bInverted=True,Offset=1.000000),(Key=GenericUSBController_Axis7),(Key=GenericUSBController_Axis8),(Key=GenericUSBController_Axis9),(Key=GenericUSBController_Axis10),(Key=GenericUSBController_Axis11),(Key=GenericUSBController_Axis12),(Key=GenericUSBController_Axis13),(Key=GenericUSBController_Axis14),(Key=GenericUSBController_Axis15),(Key=GenericUSBController_Axis16)),ButtonProperties=((Key=GenericUSBController_Button1),(Key=GenericUSBController_Button2),(Key=GenericUSBController_Button3),(Key=GenericUSBController_Button4),(Key=GenericUSBController_Button5),(Key=GenericUSBController_Button6),(Key=GenericUSBController_Button7),(Key=GenericUSBController_Button8),(Key=GenericUSBController_Button9),(Key=GenericUSBController_Button10),(Key=GenericUSBController_Button11),(Key=GenericUSBController_Button12),(Key=GenericUSBController_Button13),(Key=GenericUSBController_Button14),(Key=GenericUSBController_Button15),(Key=GenericUSBController_Button16),(Key=GenericUSBController_Button17),(Key=GenericUSBController_Button18),(Key=GenericUSBController_Button19),(Key=GenericUSBController_Button20),(Key=GenericUSBController_Button21),(Key=GenericUSBController_Button22),(Key=GenericUSBController_Button23),(Key=GenericUSBController_Button24),(Key=GenericUSBController_Button25),(Key=GenericUSBController_Button26),(Key=GenericUSBController_Button27),(Key=GenericUSBController_Button28),(Key=GenericUSBController_Button29),(Key=GenericUSBController_Button30),(Key=GenericUSBController_Button31),(Key=GenericUSBController_Button32),(Key=GenericUSBController_Button33),(Key=GenericUSBController_Button34),(Key=GenericUSBController_Button35),(Key=GenericUSBController_Button36),(Key=GenericUSBController_Button37),(Key=GenericUSBController_Button38),(Key=GenericUSBController_Button39),(Key=GenericUSBController_Button40)))
187187
bRegisterDefaultDevice=True
188-

UnrealEngine/Plugins/JSBSimFlightDynamicsModel/Source/JSBSimFlightDynamicsModel/Private/JSBSimMovementComponent.cpp

+23-11
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,22 @@
44
#include "JSBSimMovementComponent.h"
55
#include "JSBSimModule.h"
66

7-
#pragma warning( push )
8-
97
// UE treats warning as errors. JSBSim has some warnings in its include files, so if we don't catch them inside this push/pop pragma, we won't be able to build...
10-
11-
#pragma warning( disable : 4263 ) // FGOutputType.h(151): warning C4263: 'bool JSBSim::FGOutputType::Run(void)': member function does not override any base class virtual member function
12-
#pragma warning( disable : 4264 ) // FGOutputType.h(215): warning C4264: 'bool JSBSim::FGModel::Run(bool)': no override available for virtual member function from base 'JSBSim::FGModel'; function is hidden --- And others
13-
#pragma warning( disable : 4005 ) // compiler.h(58): warning C4005: 'DEPRECATED': macro redefinition with UE_5.0\Engine\Source\Runtime\Core\Public\Windows\WindowsPlatformCompilerPreSetup.h(55): note: see previous definition of 'DEPRECATED'
14-
#pragma warning( disable : 4458 ) // FGXMLElement.h(369): error C4458: declaration of 'name' hides class member
8+
// FGOutputType.h(151): warning C4263: 'bool JSBSim::FGOutputType::Run(void)': member function does not override any base class virtual member function
9+
// FGOutputType.h(215): warning C4264: 'bool JSBSim::FGModel::Run(bool)': no override available for virtual member function from base 'JSBSim::FGModel'; function is hidden --- And others
10+
// compiler.h(58): warning C4005: 'DEPRECATED': macro redefinition with UE_5.0\Engine\Source\Runtime\Core\Public\Windows\WindowsPlatformCompilerPreSetup.h(55): note: see previous definition of 'DEPRECATED'
11+
// FGXMLElement.h(369): error C4458: declaration of 'name' hides class member
12+
#ifdef _MSC_VER
13+
#pragma warning( push )
14+
#pragma warning( disable : 4263 )
15+
#pragma warning( disable : 4264 )
16+
#pragma warning( disable : 4005 )
17+
#pragma warning( disable : 4458 )
18+
#elif defined(__clang__)
19+
#pragma clang diagnostic push
20+
#pragma clang diagnostic ignored "-Woverloaded-virtual"
21+
#pragma clang diagnostic ignored "-Wshadow"
22+
#endif
1523

1624
#include "FGFDMExec.h"
1725
#include "math/FGLocation.h"
@@ -35,7 +43,11 @@
3543
#include "Interfaces/IPluginManager.h"
3644
#include "simgear/props/props.hxx"
3745

46+
#ifdef _MSC_VER
3847
#pragma warning( pop )
48+
#elif defined(__clang__)
49+
#pragma clang diagnostic pop
50+
#endif
3951

4052
#include "UEGroundCallback.h"
4153

@@ -406,11 +418,11 @@ void UJSBSimMovementComponent::InitializeJSBSim()
406418
FString AircraftPath(TEXT("aircraft"));
407419
FString EnginePath(TEXT("engine"));
408420
FString SystemPath(TEXT("systems"));
409-
Exec->SetRootDir(SGPath(*RootDir));
410-
Exec->SetAircraftPath(SGPath(*AircraftPath));
411-
Exec->SetEnginePath(SGPath(*EnginePath));
412-
Exec->SetSystemsPath(SGPath(*SystemPath));
413421

422+
Exec->SetRootDir(SGPath(TCHAR_TO_UTF8(*RootDir)));
423+
Exec->SetAircraftPath(SGPath(TCHAR_TO_UTF8(*AircraftPath)));
424+
Exec->SetEnginePath(SGPath(TCHAR_TO_UTF8(*EnginePath)));
425+
Exec->SetSystemsPath(SGPath(TCHAR_TO_UTF8(*SystemPath)));
414426
// Prepare Initial Conditions
415427
TrimNeeded = true;
416428

UnrealEngine/Plugins/JSBSimFlightDynamicsModel/Source/JSBSimFlightDynamicsModel/Public/UEGroundCallback.h

+15
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,32 @@
22

33
#pragma once
44

5+
// UE treats warning as errors. JSBSim has some warnings in its include files, so if we don't catch them inside this push/pop pragma, we won't be able to build...
6+
// FGOutputType.h(151): warning C4263: 'bool JSBSim::FGOutputType::Run(void)': member function does not override any base class virtual member function
7+
// FGOutputType.h(215): warning C4264: 'bool JSBSim::FGModel::Run(bool)': no override available for virtual member function from base 'JSBSim::FGModel'; function is hidden --- And others
8+
// compiler.h(58): warning C4005: 'DEPRECATED': macro redefinition with UE_5.0\Engine\Source\Runtime\Core\Public\Windows\WindowsPlatformCompilerPreSetup.h(55): note: see previous definition of 'DEPRECATED'
9+
// FGXMLElement.h(369): error C4458: declaration of 'name' hides class member
10+
#ifdef _MSC_VER
511
#pragma warning( push )
612
#pragma warning( disable : 4263 )
713
#pragma warning( disable : 4264 )
814
#pragma warning( disable : 4005 )
915
#pragma warning( disable : 4458 )
16+
#elif defined(__clang__)
17+
#pragma clang diagnostic push
18+
#pragma clang diagnostic ignored "-Woverloaded-virtual"
19+
#pragma clang diagnostic ignored "-Wshadow"
20+
#endif
1021

1122
#include "models/FGInertial.h"
1223
#include "math/FGLocation.h"
1324
#include "math/FGColumnVector3.h"
1425

26+
#ifdef _MSC_VER
1527
#pragma warning( pop )
28+
#elif defined(__clang__)
29+
#pragma clang diagnostic pop
30+
#endif
1631

1732
#include "CoreMinimal.h"
1833

UnrealEngine/Plugins/JSBSimFlightDynamicsModel/Source/JSBSimFlightDynamicsModelEditor/Private/JSBSimMovementCompVisualizer.cpp

+18-2
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,24 @@
33

44
#include "JSBSimMovementCompVisualizer.h"
55
#include "JSBSimMovementComponent.h"
6-
7-
6+
#include "CanvasTypes.h"
7+
8+
// UE treats warning as errors. JSBSim has some warnings in its include files, so if we don't catch them inside this push/pop pragma, we won't be able to build...
9+
// FGOutputType.h(151): warning C4263: 'bool JSBSim::FGOutputType::Run(void)': member function does not override any base class virtual member function
10+
// FGOutputType.h(215): warning C4264: 'bool JSBSim::FGModel::Run(bool)': no override available for virtual member function from base 'JSBSim::FGModel'; function is hidden --- And others
11+
// compiler.h(58): warning C4005: 'DEPRECATED': macro redefinition with UE_5.0\Engine\Source\Runtime\Core\Public\Windows\WindowsPlatformCompilerPreSetup.h(55): note: see previous definition of 'DEPRECATED'
12+
// FGXMLElement.h(369): error C4458: declaration of 'name' hides class member
13+
#ifdef _MSC_VER
814
#pragma warning( push )
915
#pragma warning( disable : 4263 )
1016
#pragma warning( disable : 4264 )
1117
#pragma warning( disable : 4005 )
18+
#pragma warning( disable : 4458 )
19+
#elif defined(__clang__)
20+
#pragma clang diagnostic push
21+
#pragma clang diagnostic ignored "-Woverloaded-virtual"
22+
#pragma clang diagnostic ignored "-Wshadow"
23+
#endif
1224

1325
#include "math/FGColumnVector3.h"
1426
#include "models/FGLGear.h"
@@ -18,7 +30,11 @@
1830
#include "DrawDebugHelpers.h"
1931
#include "Engine/Engine.h"
2032

33+
#ifdef _MSC_VER
2134
#pragma warning( pop )
35+
#elif defined(__clang__)
36+
#pragma clang diagnostic pop
37+
#endif
2238

2339
#define FEET_TO_METER 0.3048
2440
#define METER_TO_FEET 3.2808398950131233595800524934383

0 commit comments

Comments
 (0)