diff --git a/azure-pipelines.yml b/azure-pipelines.yml new file mode 100644 index 0000000..97a16a9 --- /dev/null +++ b/azure-pipelines.yml @@ -0,0 +1,165 @@ +# Xcode +# Build, test, and archive an Xcode workspace on macOS. +# Add steps that install certificates, test, sign, and distribute an app, save build artifacts, and more: +# https://docs.microsoft.com/azure/devops/pipelines/languages/xcode + +trigger: + branches: + include: + # Build all branches starting with 'ms-' This is useful when making and testing chanes made to this file + - ms-* + tags: + include: + - '*' + # pr: + # - '*' +variables: + xpcBuildOutputPath: xpcPlugin/XPlaneConnect/ + xpcArtifactNameLinux: xpc-linux + xpcArtifactNameMac: xpc-macos + xpcArtifactNameWindows: xpc-windows + xpcPackageName: XPlaneConnect + + # The Github Release tasks requires a GH 'service connection' to be setup in the MS Azure Account + # This connection must be setup in with a GH token in the MS Azure Project Settings + # + # https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/github-release?view=azure-devops + # https://docs.microsoft.com/en-us/azure/devops/pipelines/library/service-endpoints?view=azure-devops&tabs=yaml#sep-github + xpcGitHubConnection: xpc_gh + + +stages: + - stage: Build + jobs: + - job: macOS + pool: + vmImage: 'macos-latest' + + steps: + - task: Xcode@5 + inputs: + actions: 'build' + scheme: '' + sdk: 'macosx10.14' + configuration: 'Release' + xcWorkspacePath: 'xpcPlugin/xpcPlugin.xcodeproj' + xcodeVersion: 'default' # Options: 8, 9, 10, default, specifyPath + - task: PublishPipelineArtifact@0 + inputs: + artifactName: '$(xpcArtifactNameMac)' + targetPath: '$(xpcBuildOutputPath)' + + - job: Linux + pool: + vmImage: 'ubuntu-latest' + + steps: + - script: | + sudo add-apt-repository ppa:ubuntu-toolchain-r/test + sudo apt-get update + sudo apt-get install -y g++-5 mesa-common-dev g++-multilib g++-5-multilib + displayName: 'apt install' + + - script: | + cd xpcPlugin + cmake . + make + displayName: 'make' + + - task: PublishPipelineArtifact@0 + inputs: + artifactName: 'xpc-linux' + targetPath: '$(xpcBuildOutputPath)' + + - job: Windows + pool: + vmImage: 'vs2017-win2016' + + variables: + solution: 'xpcPlugin/xpcPlugin/xpcPlugin.sln' + buildPlatform: 'Win32|x64' + buildConfiguration: 'Release' + appxPackageDir: '$(build.artifactStagingDirectory)\AppxPackages\\' + + steps: + - task: NuGetToolInstaller@0 + + - task: NuGetCommand@2 + inputs: + restoreSolution: '$(solution)' + + - task: VSBuild@1 + inputs: + platform: 'Win32' + solution: '$(solution)' + configuration: '$(buildConfiguration)' + msbuildArgs: '/p:AppxBundlePlatforms="$(buildPlatform)" /p:AppxPackageDir="$(appxPackageDir)" /p:AppxBundle=Always /p:UapAppxPackageBuildMode=StoreUpload' + + - task: VSBuild@1 + inputs: + platform: 'x64' + solution: '$(solution)' + configuration: '$(buildConfiguration)' + msbuildArgs: '/p:AppxBundlePlatforms="$(buildPlatform)" /p:AppxPackageDir="$(appxPackageDir)" /p:AppxBundle=Always /p:UapAppxPackageBuildMode=StoreUpload' + + - task: Bash@3 + inputs: + targetType: 'inline' + script: | + rm $(xpcBuildOutputPath)/win.exp + rm $(xpcBuildOutputPath)/win.lib + rm $(xpcBuildOutputPath)/64/win.exp + rm $(xpcBuildOutputPath)/64/win.lib + + - task: PublishPipelineArtifact@0 + inputs: + artifactName: '$(xpcArtifactNameWindows)' + targetPath: '$(xpcBuildOutputPath)' + + - stage: Deploy + jobs: + - job: Package_Binaries + displayName: 'Package Binaries' + pool: + vmImage: 'ubuntu-latest' + + steps: + - task: DownloadPipelineArtifact@0 + inputs: + artifactName: '$(xpcArtifactNameMac)' + targetPath: $(System.DefaultWorkingDirectory)/$(xpcPackageName) + - task: DownloadPipelineArtifact@0 + inputs: + artifactName: '$(xpcArtifactNameLinux)' + targetPath: $(System.DefaultWorkingDirectory)/$(xpcPackageName) + + - task: DownloadPipelineArtifact@0 + inputs: + artifactName: '$(xpcArtifactNameWindows)' + targetPath: $(System.DefaultWorkingDirectory)/$(xpcPackageName) + + - task: PublishPipelineArtifact@0 + inputs: + artifactName: '$(xpcPackageName)' + targetPath: $(System.DefaultWorkingDirectory)/$(xpcPackageName) + + # Archive Files + - task: ArchiveFiles@2 + inputs: + rootFolderOrFile: '$(System.DefaultWorkingDirectory)/$(xpcPackageName)' + includeRootFolder: true + archiveType: 'zip' + archiveFile: '$(Build.ArtifactStagingDirectory)/$(xpcPackageName).zip' + + # Uploads the .zip to GitHub and creates a new "Release" with the commit tag + # This tasks runs only on pushed tags + - task: GitHubRelease@0 + inputs: + gitHubConnection: '$(xpcGitHubConnection)' + repositoryName: '$(Build.Repository.Name)' + action: 'create' + target: '$(Build.SourceVersion)' + tagSource: 'auto' + tag: $(tagName) + assets: '$(Build.ArtifactStagingDirectory)/$(xpcPackageName).zip' + isPreRelease: true \ No newline at end of file diff --git a/xpcPlugin/CMakeLists.txt b/xpcPlugin/CMakeLists.txt index 69f2db6..a82a220 100644 --- a/xpcPlugin/CMakeLists.txt +++ b/xpcPlugin/CMakeLists.txt @@ -12,6 +12,9 @@ SET(CMAKE_C_COMPILER gcc) SET(CMAKE_CXX_COMPILER g++) SET(CMAKE_CXX_STANDARD 11) +SET(XPC_OUTPUT_DIR "XPlaneConnect") +SET(XPC_OUTPUT_NAME "lin") + add_library(xpc64 SHARED XPCPlugin.cpp DataManager.cpp Drawing.cpp @@ -21,6 +24,8 @@ add_library(xpc64 SHARED XPCPlugin.cpp Timer.cpp UDPSocket.cpp) set_target_properties(xpc64 PROPERTIES PREFIX "" SUFFIX ".xpl") +set_target_properties(xpc64 PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${XPC_OUTPUT_DIR}/64) +set_target_properties(xpc64 PROPERTIES OUTPUT_NAME ${XPC_OUTPUT_NAME}) set_target_properties(xpc64 PROPERTIES COMPILE_FLAGS "-m64 -fno-stack-protector" LINK_FLAGS "-shared -rdynamic -nodefaultlibs -undefined_warning -m64 -fno-stack-protector") add_library(xpc32 SHARED XPCPlugin.cpp @@ -32,6 +37,8 @@ add_library(xpc32 SHARED XPCPlugin.cpp Timer.cpp UDPSocket.cpp) set_target_properties(xpc32 PROPERTIES PREFIX "" SUFFIX ".xpl") +set_target_properties(xpc32 PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${XPC_OUTPUT_DIR}) +set_target_properties(xpc32 PROPERTIES OUTPUT_NAME ${XPC_OUTPUT_NAME}) set_target_properties(xpc32 PROPERTIES COMPILE_FLAGS "-m32 -fno-stack-protector" LINK_FLAGS "-shared -rdynamic -nodefaultlibs -undefined_warning -m32 -fno-stack-protector") # Switch install targets when uncommenting the 32 bit line above. diff --git a/xpcPlugin/DataManager.cpp b/xpcPlugin/DataManager.cpp index a2acd60..6e66abb 100644 --- a/xpcPlugin/DataManager.cpp +++ b/xpcPlugin/DataManager.cpp @@ -522,7 +522,7 @@ namespace XPC Log::FormatLine(LOG_ERROR, "DMAN", "ERROR: invalid DREF %s", dref.c_str()); return; } - if (isnan(values[0])) + if (std::isnan(values[0])) { Log::WriteLine(LOG_ERROR, "DMAN", "ERROR: Value must be a number (NaN received)"); return; @@ -632,7 +632,7 @@ namespace XPC Log::WriteLine(LOG_INFO, "DMAN", "Not actually setting gear because of default value"); return; } - if (isnan(gear) || gear < 0 || gear > 1) + if (std::isnan(gear) || gear < 0 || gear > 1) { Log::WriteLine(LOG_ERROR, "DMAN", "ERROR: Gear value must be between 0 and 1"); return; @@ -662,7 +662,7 @@ namespace XPC { Log::FormatLine(LOG_INFO, "DMAN", "Setting position (%f, %f, %f) for aircraft %i", pos[0], pos[1], pos[2], aircraft); - if (isnan(pos[0] + pos[1] + pos[2])) + if (std::isnan(pos[0] + pos[1] + pos[2])) { Log::WriteLine(LOG_ERROR, "DMAN", "ERROR: Position must be a number (NaN received)"); return; @@ -712,7 +712,7 @@ namespace XPC { Log::FormatLine(LOG_INFO, "DMAN", "Setting orientation (%f, %f, %f) for aircraft %i", orient[0], orient[1], orient[2], aircraft); - if (isnan(orient[0] + orient[1] + orient[2])) + if (std::isnan(orient[0] + orient[1] + orient[2])) { Log::WriteLine(LOG_ERROR, "DMAN", "ERROR: Orientation must be a number (NaN received)"); return; @@ -763,7 +763,7 @@ namespace XPC { Log::FormatLine(LOG_INFO, "DMAN", "Setting flaps (value:%f)", value); - if (isnan(value)) + if (std::isnan(value)) { Log::WriteLine(LOG_ERROR, "DMAN", "ERROR: Flap value must be a number (NaN received)"); return; diff --git a/xpcPlugin/MessageHandlers.cpp b/xpcPlugin/MessageHandlers.cpp index 04310c8..cc4ee18 100644 --- a/xpcPlugin/MessageHandlers.cpp +++ b/xpcPlugin/MessageHandlers.cpp @@ -25,6 +25,7 @@ #include #include +#include #define MULTICAST_GROUP "239.255.1.1" #define MULITCAST_PORT 49710 diff --git a/xpcPlugin/Timer.h b/xpcPlugin/Timer.h index 8fd909d..b2269d4 100644 --- a/xpcPlugin/Timer.h +++ b/xpcPlugin/Timer.h @@ -7,6 +7,7 @@ #include #include #include +#include #include #include diff --git a/xpcPlugin/XPlaneConnect/64/lin.xpl b/xpcPlugin/XPlaneConnect/64/lin.xpl deleted file mode 100644 index e3da4df..0000000 Binary files a/xpcPlugin/XPlaneConnect/64/lin.xpl and /dev/null differ diff --git a/xpcPlugin/XPlaneConnect/64/win.xpl b/xpcPlugin/XPlaneConnect/64/win.xpl deleted file mode 100644 index 3fde49b..0000000 Binary files a/xpcPlugin/XPlaneConnect/64/win.xpl and /dev/null differ diff --git a/xpcPlugin/XPlaneConnect/lin.xpl b/xpcPlugin/XPlaneConnect/lin.xpl deleted file mode 100644 index d2ecfa8..0000000 Binary files a/xpcPlugin/XPlaneConnect/lin.xpl and /dev/null differ diff --git a/xpcPlugin/XPlaneConnect/mac.xpl b/xpcPlugin/XPlaneConnect/mac.xpl deleted file mode 100755 index 398019a..0000000 Binary files a/xpcPlugin/XPlaneConnect/mac.xpl and /dev/null differ diff --git a/xpcPlugin/XPlaneConnect/win.xpl b/xpcPlugin/XPlaneConnect/win.xpl deleted file mode 100644 index 19aecf0..0000000 Binary files a/xpcPlugin/XPlaneConnect/win.xpl and /dev/null differ diff --git a/xpcPlugin/xpcPlugin.xcodeproj/project.pbxproj b/xpcPlugin/xpcPlugin.xcodeproj/project.pbxproj index 4a5138b..4a4fe23 100755 --- a/xpcPlugin/xpcPlugin.xcodeproj/project.pbxproj +++ b/xpcPlugin/xpcPlugin.xcodeproj/project.pbxproj @@ -304,12 +304,14 @@ D607B19C09A556E400699BC3 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ARCHS = "$(ARCHS_STANDARD)"; CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; CLANG_ENABLE_MODULES = YES; CLANG_LINK_OBJC_RUNTIME = NO; CLANG_WARN_CXX0X_EXTENSIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = NO; + CONFIGURATION_BUILD_DIR = ./XPlaneConnect/; CURRENT_PROJECT_VERSION = 0.24; GCC_ENABLE_OBJC_EXCEPTIONS = NO; GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = NO; @@ -344,12 +346,14 @@ D607B19D09A556E400699BC3 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ARCHS = "$(ARCHS_STANDARD)"; CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; CLANG_ENABLE_MODULES = YES; CLANG_LINK_OBJC_RUNTIME = NO; CLANG_WARN_CXX0X_EXTENSIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = NO; + CONFIGURATION_BUILD_DIR = ./XPlaneConnect/; CURRENT_PROJECT_VERSION = 0.24; GCC_ENABLE_OBJC_EXCEPTIONS = NO; GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = NO; diff --git a/xpcPlugin/xpcPlugin/xpcPlugin.sln b/xpcPlugin/xpcPlugin/xpcPlugin.sln index e34eb3d..c734f1b 100644 --- a/xpcPlugin/xpcPlugin/xpcPlugin.sln +++ b/xpcPlugin/xpcPlugin/xpcPlugin.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.31101.0 +# Visual Studio 2015 +VisualStudioVersion = 15.0.28307.168 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xpcPlugin", "xpcPlugin.vcxproj", "{6AEF5D28-2701-44FF-AE10-1DEF07C5CAEA}" EndProject diff --git a/xpcPlugin/xpcPlugin/xpcPlugin.vcxproj b/xpcPlugin/xpcPlugin/xpcPlugin.vcxproj index 0660444..d46ed92 100644 --- a/xpcPlugin/xpcPlugin/xpcPlugin.vcxproj +++ b/xpcPlugin/xpcPlugin/xpcPlugin.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -28,25 +28,25 @@ DynamicLibrary true - v140 + $(DefaultPlatformToolset) MultiByte DynamicLibrary true - v140 + $(DefaultPlatformToolset) MultiByte DynamicLibrary true - v140 + $(DefaultPlatformToolset) MultiByte DynamicLibrary true - v140 + $(DefaultPlatformToolset) MultiByte @@ -121,7 +121,7 @@ NotUsing - EnableAllWarnings + Level3 Full IBM=1;XPLM200;%(PreprocessorDefinitions) OldStyle @@ -171,7 +171,7 @@ NotUsing - EnableAllWarnings + Level3 Full IBM=1;XPLM200;%(PreprocessorDefinitions)