Table of ContentsInstalling XDS client tools xds-agent is a client tool that must run on your...
Transcript of Table of ContentsInstalling XDS client tools xds-agent is a client tool that must run on your...
1.1
1.2
1.3
1.3.1
1.3.2
1.3.3
1.3.4
1.3.5
1.4
1.4.1
1.4.2
1.4.3
1.4.4
TableofContents
Introduction
Documentrevisions
Part1-GettingStartedforUsers
Installingxdsclienttools
Installingxds-server
InstallingAGLSDKs
CreateyourfirstAGLapplication
DebugyourfirstAGLapplication
Part2-XDSinternals
xds-server
xds-agent
xds-exec
xds-gdb
Introduction
X(cross)DevelopmentSystemisatoolthatallowsusertoeasilycrossbuildapplications.
Thisdocumentationisavailable:
online:http://docs.automotivelinux.org/docs/devguides/en/dev/#xcross-development-system-user's-
guide
PDFfile:http://iot.bzh/download/public/2017/XDS/docs/XDS_UsersGuide.pdf
Meta Data
Title X(cross)DevelopmentSystem
Author SebastienDouheret
Description
Keywords AGL,XDS,cross,Development,Iotbzh
Language English
Published PublishedOctober2017asanelectronicbook
Updated ThuOct19201710:04:41GMT+0200(CEST)
Collection Open-source
Website http://iot.bzh
Documentrevisions
Date Version Designation Author
Sept2017 0.1 Initialrelease S.Douheret[Iot.bzh]
Oct2017 0.2 Variousupdatetomatchnewbehavior S.Douheret[Iot.bzh]
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 4October2017
GettingStartedforUsers
Abstract
X(cross)DevelopmentSystem (XDS) is set of tools that provide amulti-platform for cross development
withnear-zeroinstallation.
Thisdocumentationisavailable:
online:http://docs.automotivelinux.org/docs/devguides/en/dev/#xcross-development-system-user's-
guide
PDFfile:http://iot.bzh/download/public/2017/XDS/docs/XDS_UsersGuide.pdf
ThefirstgoalofXDSistoprovideamulti-platformcrossdevelopmenttoolwithnear-zeroinstallation.The
secondgoalistokeepapplicationsourceslocally(onuser'smachine)tomakeitcompatiblewithexistingIT
policies(e.g.corporatebackuporSCM),andletusertocontinuetoworkasusual(usehisfavoriteeditor,
keepperformancewhileediting/browsingsources).
ThetwomainblocksthatcomposeXDSaretheclientpart(xds-agent)runningontheuser'smachineand
theserverpart(xds-server)runningsomewhereinacontaineroronaservermachine(onlocalnetworkor
cloud).
{::style="width:98%;"}
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 5October2017
The client part (xds-agent) is portable and is running on Linux, Windows or MacOS machine and the
following3mainconfigurationsaresupported:
standalone(orlocal)config
On-Premise(localnetwork)
SaaS(Cloudbased)
{::style="width:98%;"}
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 6October2017
InstallingXDSclienttools
xds-agentisaclienttoolthatmustrunonyourmachine(user/developerhost)tobeabletouseXDS.
InstallationofotherXDSclient tools,suchas xds-execor xds-gdb is optional and depends ofwhat you
wanttodo:
xds-exec:commandlinetooltointeractwithXDS(alsousedbyIDEintegration).
xds-gdb:requestedfordebuggingapplication.
Installpackagesfordebiandistrotype
#'DISTRO'canbesetto{xUbuntu_16.04,xUbuntu_16.10,xUbuntu_17.04,Debian_8.0,Debian_9.0}
seb@laptop~$exportDISTRO="xUbuntu_16.04"
seb@laptop~$wget-O-http://download.opensuse.org/repositories/isv:/LinuxAutomotive:/app-Development/${DISTRO}/Re
lease.key|sudoapt-keyadd-
seb@laptop~$sudobash-c"cat>>/etc/apt/sources.list.d/AGL.list<<EOF
debhttp://download.opensuse.org/repositories/isv:/LinuxAutomotive:/app-Development/${DISTRO}/./
EOF"
seb@laptop~$sudoapt-getupdate
seb@laptop~$sudoapt-getinstallagl-xds-agent
seb@laptop~$sudoapt-getinstallagl-xds-exec
seb@laptop~$sudoapt-getinstallagl-xds-gdb
InstallpackagesforopenSUSEdistrotype
#DISTROcanbesetto{openSUSE_Leap_42.2,openSUSE_Leap_42.3,openSUSE_Tumbleweed}
seb@laptop~$exportDISTRO="openSUSE_Leap_42.2"
seb@laptop~$sudozypperarhttp://download.opensuse.org/repositories/isv:/LinuxAutomotive:/app-Development/${DISTR
O}/isv:LinuxAutomotive:app-Development.repo
seb@laptop~$sudozypperref
seb@laptop~$sudozypperinstallagl-xds-agent
seb@laptop~$sudozypperinstallagl-xds-exec
seb@laptop~$sudozypperinstallagl-xds-gdb
Installforotherplatforms(Windows/MacOS)
Installxds-agent:
1. Downloadthelatestreleasedtarballfromgithubreleasespage.
2. Thenunzipthetarballanywhereintoyourlocaldisk(forexample:/opt/AGL/xdsorC:\AGL\xds).
3. AddbinarytoPATH:
MacOs:createthe.bash_profilenano.bash_profileandaddexportPATH="/opt/AGL/xds/xds-
agent:$PATH
Windows:changethesystempathviacontrolpanelorsystemsettingsorsetxpath
"C:\AGK\xds\xds-agent;%path%"
repeatthepreviousstepstoinstallothertoolsdependingofyourneeds:
xds-exec:requestedforcommandlineandIDEintegration.(releasedtarballlink).
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 7October2017
xds-gdb:requestedfordebuggingapplication.(releasedtarballlink).
Startxds-agent
XDS-agentisaclienttoolthatmustrunonyourlocal/userdevelopmentmachinewhenyouuseXDS.
For Linux distro, a user systemd service is provided, so you just need to enable if youwant to start it
automaticallyatbootandyoucanalsostartitimmediatelyusingfollowingcommands:
#Enablexds-agentserviceatboot
seb@laptop~$systemctl--userenablexds-agent.service
#Manuallystartxds-agentservice
seb@laptop~$systemctl--userstartxds-agent.service
#Getstatusandlogofxds-agentservice
seb@laptop~$systemctl--userstatusxds-agent.service
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 8October2017
InstallingXDSserver
Dependingofyourconfiguration,thisstepisnecessaryornot.
Inotherwordsyouareadeveloperandplantouse/connecttoanexisting xds-server running on
your local network (On-Premise config) or in the Cloud (SaaS config), you don't need to install the
serverpartandyoucanskipthisstep.
For others (standalone config or administrators that want to install an On-Premise solution) xds-server
mustbeinstalled.
Severalinstallationtypesaresupported:
Installtype SupportedOS Sectiontorefer
Container LinuxorMacOS seeInstallationbasedonDockercontainer
VirtualMachine Linux,MacOSorWindows seeInstallationbasedonVirtualBoxappliance
Native Linux seeNativeinstallation
InstallationbasedonDockercontainer
Prerequisites
Dockerisinstalledonthehostmachine,pleaserefertoDockerdocumentationformoredetails.
Getthecontainer
Loadthepre-buildAGLSDKdockerimageincludingxds-server:
seb@laptop~$wget-O-http://iot.bzh/download/public/2017/XDS/docker/docker_agl_worker-xds-latest.tar.xz|dockerl
oad
Youshouldgetdocker.automotivelinux.org/agl/worker-xds:X.Yimage
#Listimagethatwejustload
seb@laptop~$dockerimages"docker.automotivelinux.org/agl/worker-xds*"
docker.automotivelinux.org/agl/worker-xds4.0786d65b2792c6daysago654MB
Createandstartanewcontainer
Useprovidedscripttocreateanewdockercontainerandstartit:
#Getscript
seb@laptop~$wgethttps://raw.githubusercontent.com/iotbzh/xds-server/master/scripts/xds-docker-create-container.sh
#CreatenewXDSworkercontainer
seb@laptop~$bash./xds-docker-create-container.sh
#Checkthatnewcontainerisrunning
seb@laptop~$dockerps|grepworker-xds
b985d81af40cdocker.automotivelinux.org/agl/worker-xds:3.99.1"/usr/bin/wait_for..."6daysago
Up4hours0.0.0.0:8000->8000/tcp,0.0.0.0:69->69/udp,0.0.0.0:10809->10809/tcp,0.0.0.0:2222->22/tcp
agl-xds-seb@laptop-0-seb
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 9October2017
Notethatyoucanalsoaddanewshareddirectoryusing --volumeoptioninordertouseforexamplewith
Path-Mappingfoldertype.
#CreatenewXDSworkercontainerandshareextra'$HOME/my-workspace'directory
seb@laptop~$bash./xds-docker-create-container.sh--volume/my-workspace:$HOME/my-workspace
Checkifxds-serverisrunning
xds-serverisautomaticallystartedasaserviceoncontainerstartup.
Tocheckifxds-serveriscorrectlyinstallandrunning,youcanaccessthewebinterface,whatwecallthe
"Dashboard",usingawebbrowser:
#ifcontainerisrunningonyourlocalhost
#(elsereplacelocalhostbythenameortheipofthemachinerunningthecontainer)
seb@laptop~$xdg-openhttp://localhost:8000
xds-serverisnowupandrunning,youcannowinstallAGLSDKs,pleaserefertochapternamed"Installing
AGLSDKs"
Containersettings
Thiscontainer(ID=0)exposesfollowingports:
8000:xds-servertoserveXDSDashboard
69:TFTP
2222:ssh
Thiscontaineralsocreatesthefollowingvolumes(sharingdirectoriesbetweeninsideandoutsidedocker):
Directoryonhost Directoryinsidedocker
Comment
$HOME/xds-workspace
/home/devel/xds-workspace
XDSprojectsworkspacelocation
$HOME/xds-workspace/.xdt_0
/xdt locationtostoreSDKs
$USER_VOLUME $USER_VOLUME userpath,see--volumeoptionofxds-docker-create-container.shscript
Pleaserefertopart2-xds-serverdocumentationforadditionalinfo.
InstallationbasedonVirtualBoxappliance
comingsoon...
Nativeinstallation
Youcanchosetoinstallxds-server'natively'insteadofwithinadockercontainerbutonlyLinuxhostOSes
aresupportedandtestedfornativeinstallation!
Installpackagesfordebiandistrotype
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 10October2017
#'DISTRO'canbesetto{xUbuntu_16.04,xUbuntu_16.10,xUbuntu_17.04,Debian_8.0,Debian_9.0}
seb@laptop~$exportDISTRO="xUbuntu_16.04"
seb@laptop~$wget-O-http://download.opensuse.org/repositories/isv:/LinuxAutomotive:/app-Development/${DISTRO}/Re
lease.key|sudoapt-keyadd-
seb@laptop~$sudobash-c"cat>>/etc/apt/sources.list.d/AGL.list<<EOF
debhttp://download.opensuse.org/repositories/isv:/LinuxAutomotive:/app-Development/${DISTRO}/./
EOF"
seb@laptop~$sudoapt-getupdate
seb@laptop~$sudoapt-getinstallagl-xds-server
InstallpackagesforopenSUSEdistrotype
#DISTROcanbesetto{openSUSE_Leap_42.2,openSUSE_Leap_42.3,openSUSE_Tumbleweed}
seb@laptop~$exportDISTRO="openSUSE_Leap_42.2"
seb@laptop~$sudozypperarhttp://download.opensuse.org/repositories/isv:/LinuxAutomotive:/app-Development/${DISTR
O}/isv:LinuxAutomotive:app-Development.repo
seb@laptop~$sudozypperref
seb@laptop~$sudozypperinstallagl-xds-server
Configurexds-server
Optionalstep:nothingtodoifyoukeepdefaultsettings
When xds-server is started as a systemd service, default environment variables are set into
/etc/default/xds-serverfile.
xds-server configuration is also driven by a JSON config file (config.json), and default JSON config is
/etc/xds-server/config.json.
Note:youcanuseyourownJSONconfigbysettingsAPP_CONFIGvariableof/etc/default/xds-
serverfiletoyourfile,forexample/home/MYUSER/.xds/server/config.json
SupportedfieldsinJSONconfigurationfileare:
httpPort:HTTPportofclientwebapp/dashboard
webAppDir:locationofclientdashboard(default:webapp/dist)
shareRootDir:rootdirectorywhereprojectswillbecopied
logsDir:directorytostorelogs(eg.syncthingoutput)
sdkRootDir:rootdirectorywherecrossSDKsareinstalled
syncthing.binDir:syncthingbinariesdirectory(default:executabledirectory)
syncthing.home":syncthinghomedirectory(usually.../syncthing-config)
syncthing.gui-address:syncthingguiurl(defaulthttp://localhost:8385)
syncthing.gui-apikey:syncthingapi-keytouse(defaultauto-generated)
Allfieldsareoptionalandexamplebelowcorrespondstothedefaultvalues:
{
"httpPort":8000,
"webAppDir":"webapp/dist",
"shareRootDir":"${HOME}/.xds-server/projects",
"logsDir":"/tmp/logs",
"sdkRootDir":"/xdt/sdk",
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 11October2017
"syncthing":{
"binDir":"./bin",
"home":"${HOME}/.xds-server/syncthing-config",
"gui-address":"http://localhost:8385",
"gui-apikey":"123456789",
}
}
Note:environmentvariablesaresupportedbyusing${MY_VAR}syntax.
Start/Stopxds-server
xds-servercanbemanagedasasystemdservicewiththefollowingcommands:
#StatusXDSserver:
seb@laptop~$systemctl--userstatusxds-server.service
#StopXDSserver
seb@laptop~$systemctl--userstopxds-server.service
#StartXDSserver
seb@laptop~$systemctl--userstartxds-server.service
#GetXDSserverlogs
seb@laptop~$systemctl--user--unit=xds-server.service--output=cat
Tocheckifxds-serveriscorrectlyinstallandrunning,youcanaccessthewebinterface,whatwecallthe
"Dashboard",usingawebbrowser:
seb@laptop~$xdg-openhttp://localhost:8000
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 12October2017
InstallingAGLSDKs
TobuildyourAGLservicesorAGLapplicationsusingXDSyoumustinstallaSDKmatchingthetarget/board
youwanttouse.ASDKisapackagethatincludesalltoolsyouneedtocross-buildandcross-debugyour
service/application.
YoucangeneratetheAGLSDKfor theboardyouwanttouseoryoucandownloadapre-packagedAGL
SDK.
InstallingSDKcross-toolchain
xds-serverusesSDKcross-toolchaininstalledintodirectorypointedby sdkRootDirsetting(see xds-server
configurationchapterformoredetails).
Fornow,youcanonlyinstallSDKusingabashscriptbutinanearfutureyouwillbeabletomanageSDKs
usingXDSDashboard.
SotoinstallaSDK,useprovidedinstall-agl-sdksscript:
#Optional-Logintothecontainer(onlynecessarywhenxds-serverisrunningwithinadockercontainer)
seb@laptop~$ssh-p2222devel@localhost
#Forexample,InstallARM64SDK(automaticdownload)
devel@docker~$sudo/opt/AGL/xds/server/xds-utils/install-agl-sdks.sh--archaarch64
YoumayalsowanttoinstallanSDKthatyoubuiltmanually(seePart1-SDK-compilation-installation)
#Optional-Logintothecontainer(onlynecessarywhenxds-serverisrunningwithinadockercontainer)
seb@laptop~$ssh-p2222devel@localhost
#InstallIntelcorei7-64SDK(usinganSDKtarballthathasbeenbuiltordownloadedmanually)
devel@docker~$sudo/opt/AGL/xds/server/xds-utils/install-agl-sdks.sh--archcorei7-64--file/tmp/poky-agl-glibc-x8
6_64-agl-demo-platform-crosssdk-corei7-64-toolchain-
4.0.1.sh
Warning:duetosomelimitation,youneedfornowtorestartxds-serverinordertomake
newinstalledSDKvisible/available.
seb@laptop~$ssh-p2222devel@localhost
devel@docker~$systemctl--userrestartxds-server.service
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 13October2017
CreateyourfirstAGLapplication
Prerequisites
xds-agentisrunningonyourmachine(seeInstallingXDSclienttoolspreviouschapter)
xds-serverisrunninglocallyinadockercontainerorisaccessibleonyournetwork(seeInstalling
XDSserverpreviouschapter)
oneormoreSDKhavebeeninstalled(seeInstallingAGLSDKspreviouschapter)
XDSconfigurationiscorrect:inotherwords,alltablelinesareblueinconfigurationpageofXDS
Dashboard.
Setup
Let'suseforexamplehelloworld-native-application,soyouneedfirsttoclonethisprojectintoadirectory
thatwillbeaccessiblebyxds-server.Dependingoftheprojectsharingmethod:
Cloudsync:youcancloneprojectanywhereonyourlocaldisk,
Pathmapping:youmustcloneprojectinto$HOME/xds-workspacedirectory.
Note: : helloworld-native-application project is an AGL project based on app-templates
(includedasagitsubmodule).ThisCMaketemplating,usedtodevelopapplicationwiththe
AGLApplication Framework,will automatically generatemakefile rules (eg. remote-target-
populate)orscripts(eg.build/target/xxxscripts).
Formoreinfoaboutapp-template,pleaserefertothisdocumentation.
Cloneproject
cd$HOME/xds-workspace
gitclone--recursivehttps://github.com/iotbzh/helloworld-native-application.git
DeclareprojectintoXDS
UseXDSDashboardtodeclareyourproject.OpenabrowserandconnecttoXDSDashboard.URLdepends
ofyourconfig,forexamplehttp://localhost:8000
Clickcogicon
{::style="display:inline;padding:0;"}toopenconfigurationpanelandthencreate/declareanewproject
bywiththeplusicon
{::style="display:inline;padding:0;"}ofProjectsbar.
SetSharingTypeandpathsaccordingtoyoursetup.
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 14October2017
{::style="width:90%;"}
NotethatXDScreatesafilename xds-project.conf(ifnotalreadyexists)whenyoudeclareanewproject
usingXDSDashboard.ThisfilemaybeveryusefulwhenyouwilluseXDSclienttoolssuchasxds-exec(see
nextchapter).
Note:whenyouselect Pathmapping,youmustcloneyourproject into $HOME/xds-workspace
directory (named "Local Path" in modal window) and "Server Path" must be set to
/home/devel/xds-workspace/xxxwherexxx isyourprojectdirectoryname.Ifyouselect Cloud
Sync,youcancloneyourprojectwhereyouwantonyourlocaldisk.
BuildfromXDSdashboard
Openthebuildpage(icon
{::style="display:inline;padding:0;"}),thenselectyourProjectandtheCrossSDKyouwanttouseand
clickonClean/Pre-Build/Build/Populatebuttonstoexecutevariousbuildactions.
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 15October2017
{::style="width:90%;"}
Buildfromcommandline
Youneedtodeterminewhichistheuniqueidofyourproject.YoucanfindthisIDinprojectpageofXDS
dashboard or you can get it from command line using the --list option. This option lists all existing
projectsID:
xds-exec--list
Listofexistingprojects:
CKI7R47-UWNDQC3_myProject
CKI7R47-UWNDQC3_test2
CKI7R47-UWNDQC3_test3
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 16October2017
Note:XDStools, including xds-execare installedbydefault in /opt/AGL/bindirectoryand this
pathhasbeenadded intoyourPATHvariable. If it isnot thecase, justadd itmanuallyusing
exportPATH=${PATH}:/opt/AGL/bincommandline.
Nowtoreferyourproject,justuse--idoptionoruseXDS_PROJECT_IDenvironmentvariable.
YouarenowreadytouseXDStoforexamplecrossbuildyourproject.Hereisanexampletobuildaproject
basedonCMakefile:
#Gointoyourprojectdirectoryandcreateabuilddirectory
cd$MY_PROJECT_DIR
mkdirbuild
#Generatebuildsystemusingcmake
xds-exec--id=CKI7R47-UWNDQC3_myProject--sdkid=poky-agl_aarch64_4.0.1--url=http://localhost:8000--cdbuild&&cma
ke..
#Buildtheproject
xds-exec--id=CKI7R47-UWNDQC3_myProject--sdkid=poky-agl_aarch64_4.0.1--url=http://localhost:8000--cdbuild&&mak
eall
To avoid to set project id, xds server url, ... at each command line, you can define these settings as
environmentvariablewithinanenvfileandjustset --configoptionor source filebeforeexecutingxds-
exec.
XDScreatesafilenamexds-project.conf(onlyifnotalreadyexists)whenyoudeclareanewprojectusing
XDSDashboard.Usethisfilewith--configoption.
Forexample,theequivalenceofabovecommandis:
#MY_PROJECT_DIR=/home/seb/xds-workspace/helloworld-native-application
cd$MY_PROJECT_DIR
#Editandpotentiallyadaptxds-project.conffilethathasbeencreated
#automaticallyonprojectdeclarationusingXDSDashboard
vixds-project.conf
#XDSprojectsettings
exportXDS_SERVER_URL=localhost:8000
exportXDS_PROJECT_ID=cde3b382-9d3b-11e7_helloworld-native-application
exportXDS_SDK_ID=poky-agl_aarch64_4.0.1
#Createbuilddirectoryandinvokecmakeandthenbuildproject
xds-exec--configxds-project.conf--"mkdir-pbuild&&cdbuild&&cmake.."
cdbuild&&xds-exec--makeall
#Orequivalentbyfirstsourcingconffile(avoidtoset--configoption)
sourcexds-project.conf
xds-exec--"mkdir-pbuild&&cdbuild&&cmake.."
cdbuild&&xds-exec--makeall
Note:allparametersafteradoubledash(--)areconsideredasthecommandtoexecuteon
xds-server.
BuildfromIDE
FirstcreateanXDSconfigfileorreusethepreviousone,forexampleweusehereaarch64SDKtocross
buildapplicationforaRenesasGen3board.
#createfileatrootdirectoryofyourproject
#forexample:
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 17October2017
#MY_PROJECT_DIR=/home/seb/xds-workspace/helloworld-native-application
cat>$MY_PROJECT_DIR/xds-project.conf<<EOF
exportXDS_SERVER_URL=localhost:8000
exportXDS_PROJECT_ID=cde3b382-9d3b-11e7_helloworld-native-application
exportXDS_SDK_ID=poky-agl_aarch64_3.99.3
EOF
NetBeans
This chapter will show you how to create 2 configurations, one to compile your project natively (using
nativeGNUgcc)andonetocross-compileyourprojectusingXDS.Youcaneasilyswitchfromonetoother
configurationusingmenuRun->SetProjectConfiguration.
Netbeans8.x:
OpenmenuTools->Options
OpenC/C++tab,inBuildToolssub-tab,clickonAddbutton:
Then,youshouldsetMakeCommandandDebuggerCommandtopointtoxdstools:
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 18October2017
FinallyclickonOKbutton.
Nowcreatewe firstdeclareproject intoNetBeansandcreate firstanativeconfiguration.Todo that,
openmenuFile->NewProject
SelectC/C++ProjectwithExistingSources;ClickonNextbutton
SpecifyyourprojectdirectoryandsetSelectConfigurationModetoCustom.KeepToolCollection
toDefaultGNU inorder tocreateanativeconfiguration basedonnativeGNUGCC. Finally click on
Nextbutton.
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 19October2017
JustupdateRuninFolderfieldandadd build_nativesuffixsothatresultingbuildfileswillbelocated
intobuild_nativesub-directory.KeepallotherssettingstodefaultvalueandclickonNextbutton.
Click several times onNext button (always keep default settings) and click on Finish button to
completecreationofnativeconfiguration.
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 20October2017
Nowwewill createacrossconfiguration basedonXDS tools. Edit project properties (usingmenu
File -> Project Properties) to add a new configuration that will use XDS to cross-compile your
applicationforexampleforaRenesasGen3board.
inBuild category, clickonManageConfigurations button and thenNew button to add a new
configurationnamedforexample"Gen3board"
ClickonSetActivebutton
SelectPre-Buildsub-category,andset:
WorkingDirectory:build_gen3
CommandLine:xds-exec-c../xds-project.conf--cmake-DRSYNC_TARGET=root@renesas-gen3-
DRSYNC_PREFIX=/opt..
Pre-buildFirst:ticked
SelectMakesub-category,andset:
WorkingDirectory:build_gen3
BuildCommand:xds-exec-c../xds-project.conf--makeremote-target-populate
CleanCommand:xds-exec-c../xds-project.conf--makeclean
SelectRunsub-category,andset:
RunCommand:target/[email protected]
RunDirectory:build-gen3
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 21October2017
ClickonOKbuttontosavesettings
By changing configuration fromDefault toGen3board, you can now simply compile your helloworld
applicationnatively(Defaultconfiguration)orcross-compileyourapplicationthroughXDSfortheRenesas
Gen3board(Gen3boardconfiguration).
VisualStudioCode
OpenyourprojectinVSCode
cd$MY_PROJECT_DIR
code.&
Addnewtasks:pressCtrl+Shift+PandselecttheTasks:ConfigureTaskcommandandyouwillseealistof
taskrunnertemplates.
And define your own tasks, here is an example to build helloworld-native-application AGL helloworld
applicationbasedoncmaketemplate.
{
"version":"2.0.0",
"type":"shell",
"presentation":{
"reveal":"always"
},
"tasks":[
{
"taskName":"clean",
"command":"/bin/rm-rf${workspaceFolder}/build/*&&mkdir-pbuild&&echoCleanupdone.",
"problemMatcher":[]
},
{
"taskName":"pre-build",
"group":"build",
"command":"/opt/AGL/bin/xds-exec--rpathbuild--configxds-project.conf--cmake-DRSYNC_TARGET=root@re
nesas-gen3-DRSYNC_PREFIX=/opt../",
"problemMatcher":[
"$gcc"
]
},
{
"taskName":"build",
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 22October2017
"group":"build",
"command":"/opt/AGL/bin/xds-exec--rpathbuild--configxds-project.conf--makewidget",
"problemMatcher":[
"$gcc"
]
},
{
"taskName":"populate",
"command":"/opt/AGL/bin/xds-exec--rpathbuild--configxds-project.conf--makewidget-target-install",
"problemMatcher":[]
}
]
}
Note:Youcanalsoaddyourownkeybindingstotrigabovetasks,forexample:
//Build
{
"key":"alt+f9",
"command":"workbench.action.tasks.runTask",
"args":"clean"
},
{
"key":"alt+f10",
"command":"workbench.action.tasks.runTask",
"args":"pre-build"
},
{
"key":"alt+f11",
"command":"workbench.action.tasks.runTask",
"args":"build"
},
{
"key":"alt+f12",
"command":"workbench.action.tasks.runTask",
"args":"populate"
},
MoredetailsaboutVSCkeybindingshere
MoredetailsaboutVSCtaskshere
QtCreator
Pleaserefertoagl-hello-qmlproject.ThankstoDennisforprovidingthisusefulexample.
OthersIDE
Comingsoon...
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 23October2017
DebugyourfirstAGLapplication
Debugisbasedongdbandyouneedtousexds-gdbasawrapperongdbtocross-debugyourapplication.
Thistoolallowsyoutodebuganapplicationbuiltwithanxds-serverwithouttheneedtoinstallgdborany
crosstool.Twodebuggingmodelsaresupported:
1. nativedebugging
2. XDSremotedebuggingrequiringanXDSserverandallowingcrossdebugyourapplication.
BydefaultXDSremotedebugisusedandyouneedtodefineXDS_NATIVE_GDBvariabletousenativegdb
debugmodeinstead.
SEEALSO:xds-server,awebserverusedtoremotelycrossbuildapplications.SEEALSO:xds-
exec, wrappers on exec command that allows to cross build your application through xds-
server.
Configuration
xds-gdbconfigurationisdefinedbyvariables(seelistedbelow).Thesevariablesmaybesetusing:
environmentvariables(inherited),
oraconfigfilesetwithXDS_CONFIGenvironmentvariable,forexample:
XDS_CONFIG=/tmp/my_xds_gdb_config.envxds-gdb
orbysettingvariableswithinagdbinifile(seedetailsbelow),
ora"user"configfilelocatedinfollowingdirectory(firstfoundistaken):
1. $(CURRENT_DIRECTORY)/.xds-gdb.env
2. $(CURRENT_DIRECTORY)/../xds-gdb.env
3. $(CURRENT_DIRECTORY)/target/xds-gdb.env
4. $(HOME)/.config/xds/xds-gdb.env
ConfigurationVariables
XDS_CONFIGConfigfiledefining XDS_xxxconfigurationvariables.Variablesofthisfilewilloverwriteinherited
environmentvariables.Variablesdefinitionmaybeprefixedornotby"export"keyword.Hereisanexample
ofconfigurationfile
#forexample:
#MY_PROJECT_DIR=/home/seb/xds-workspace/helloworld-native-application
cat>$MY_PROJECT_DIR/xds-gen3.conf<<EOF
exportXDS_SERVER_URL=http://docker:8000
exportXDS_PROJECT_ID=IW7B4EE-DBY4Z74_myProject
exportXDS_SDK_ID=poky-agl_aarch64_4.0.1
EOF
XDS_LOGLEVEL
Setlogginglevel(supportedlevels:panic,fatal,error,warn,info,debug)
XDS_LOGFILE
Setloggingfile,default/tmp/xds-gdb.log.
XDS_NATIVE_GDB
UsenativegdbmodeinsteadofremoteXDSservermode.
XDS_PROJECT_ID(mandatorywithXDSservermode)
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 24October2017
ProjectIDyouwanttobuild
XDS_RPATH
Relativepathintoproject
XDS_SDK_ID(mandatorywithXDSservermode)
CrossSdkIDtousetobuildproject
XDS_SERVER_URL(mandatorywithXDSservermode)
RemoteXDSserverurl
Configurationvariablessetwithingdbinitcommandfile
AboveXDS_xxxvariablesmayalsobedefinedwithingdbinitcommandfile(see--commandor-xoptionof
genuineGdb).Youmustrespectthefollowingsyntax:commentedlineincluding:XDS-ENV:tag
ExampleofgdbinitfilewherewedefineprojectandsdkID:
#:XDS-ENV:XDS_PROJECT_ID=IW7B4EE-DBY4Z74_myProject
#:XDS-ENV:XDS_SDK_ID=poky-agl_aarch64_4.0.1
Usingxds-gdbfromcommandline
XDSremotedebuggingmode
Firsttheprojectyouwanttodebugmustbedeclaredonanxds-serverandthisprojectmayalsohasbeen
builtusingthisxds-server(seexds-serverformoredetails).
Sotodebugityouneedtoknowthexds-serverurl(eg.http://docker:8000),youalsoneedtheprojectand
sdk unique id. You can find these IDs in project page of XDS dashboard or you can get them from
commandlineusingthe--listoption.ThisoptionlistsallexistingprojectsID:
XDS_SERVER_URL=http://docker:8000xds-gdb--list
Nowtoreferyourproject,justsetXDS_PROJECT_IDandXDS_SDK_IDvariables.
Youarenowreadytousexds-gdbtoforexamplecrossdebugyourproject.Hereisanexampletobuildand
debugaprojectbasedonCMakefileandAGLapp-templates:
#Gointoyourprojectdirectory(forexamplehelloworld-native-application)
cd~/xds-workspace
gitclonehttps://github.com/iotbzh/helloworld-native-application.git
cdhelloworld-service
#Declareyourprojectonxds-server
#<fornow,youcanonlydothisstepusingxdsHTMLdashboard(seexds-serverdoc)>
#DefineXDSconfig
cat<<EOF>./xds-config.env
XDS_SERVER_URL=http://docker:8000
XDS_PROJECT_ID=IW7B4EE-DBY4Z74_myProject
XDS_SDK_ID=poky-agl_aarch64_4.0.1
EOF
#Telltoxds-execandxds-gdbwhichisyourconfigfile
exportXDS_CONFIG=../xds-gen3.conf
#Createanewbuilddirectory
mkdirbuild&&cdbuild
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 25October2017
#Startremotecrossbuild
xds-exec--cmake-DRSYNC_TARGET=root@myTarget..
xds-exec--make
xds-exec--makeremote-target-populate
#Startdebugging
xds-gdb-xtarget/[email protected]
Note: : helloworld-native-application project is an AGL project based on app-templates
(includedasagitsubmodule).ThisCMaketemplating,usedtodevelopapplicationwiththe
AGLApplication Framework,will automatically generatemakefile rules (eg. remote-target-
populate)orscripts(eg.build/target/xxxscripts).
Formoreinfoaboutapp-template,pleaserefertothisdocumentation.
Nativedebugging
Toenablenativedebuggingmode,youneedtodefineXDS_NATIVE_GDBvariable.
Usingxds-gdbwithinanIDE
Netbeans
Netbeans8.x:
OpenmenuTools->Options
OpenC/C++tab,inBuildToolssub-tab,clickonAddbutton:
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 26October2017
{::style="width:90%;"}
Then,youshouldsetMakeCommandandDebuggerCommandtopointtoxdstools:
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 27October2017
{::style="width:90%;"}
FinallyclickonOKbutton.
Editprojectproperties(usingmenuFile->ProjectProperties)toupdateDebugsettings:
Besurethat"Gen3board"configurationisselected
SelectRuncategory,andset:
RunCommand:target/[email protected](scriptnamemaydependofRSYNC_TARGET
variableyousetinpre-buildcommand)
RunDirectory:build_gen3
SelectDebugcategory,andset:
Debugcommand:/bin/true
WorkingDirectory:emptyfield
GdbInitFile:target/[email protected](scriptnamemaydependofRSYNC_TARGET
variableyousetinpre-buildcommand)
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 28October2017
{::style="width:90%;"}
ClickonApplyandthenOKbuttontosavesettings
You can now start debugging your application with menu Debug -> Debug Project (or CTRL+F5
shortcut)
OthersIDE
Comingsoon...
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 29October2017
XDSinternals(advanceddocumentation)
Abstract
This2ndpartisthe"technical"documentationofallXDSpieces/toolsthatallowsforexampletofinetune
XDSconfigurationorrebuildallXDStoolsfromscratch.
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 30October2017
XDS-X(cross)DevelopmentSystemServer
xds-serverisawebserverthatallowsusertoremotelycrossbuildapplications.
Thefirstgoalistoprovideamulti-platformcrossdevelopmenttoolwithnear-zeroinstallation.Thesecond
goal is to keep application sources locally (on user's machine) to make it compatible with existing IT
policies(e.g.corporatebackuporSCM),andletusertocontinuetoworkasusual(usehisfavoriteeditor,
keepperformancewhileediting/browsingsources).
Thispowerfulandportablewebserver(writteninGo)exposesaRESTinterfaceoverHTTPandalsoprovides
aWebdashboardtoconfigureprojectsandexecute(fornow)onlybasicscommands.
xds-serverusesSyncthingtooltosynchronizeprojectsfilesfromusermachinetobuildservermachineor
container.
SEEALSO:xds-exec,wrapperson execcommandsthatallowsyoutosendcommandsto xds-
server and for example build your application from command-line or from your favorite IDE
(suchasNetbeansorVisualStudioCode)throughxds-server.
Howtorun
xds-server hasbeendesigned toeasily compileanddebugAGLapplications.That'swhy xds-server has
beenintegratedintoAGLSDKdockercontainer.
Note:FormoreinfoaboutAGLSDKdockercontainer,pleaserefertoAGLSDKQuickSetup
Getthecontainer
Loadthepre-buildAGLSDKdockerimageincludingxds-server:
seb@laptop~$wget-O-http://iot.bzh/download/public/2017/XDS/docker/docker_agl_worker-xds-latest.tar.xz|dockerl
oad
Listcontainer
Youshouldgetdocker.automotivelinux.org/agl/worker-xds:X.Yimage
#Listimagethatwejustbuilt
seb@laptop~$dockerimages|grepworker-xds
docker.automotivelinux.org/agl/worker-xds3.99.1786d65b2792c6daysago602MB
Startxds-serverwithinthecontainer
Useprovidedscripttocreateanewdockerimageandstartanewcontainer:
#Getscript
seb@laptop~$wgethttps://raw.githubusercontent.com/iotbzh/xds-server/master/scripts/xds-docker-create-container.sh
#CreatenewXDSworkercontainer
seb@laptop~$bash./xds-docker-create-container.sh
#Checkthatnewcontainerisrunning
seb@laptop~$dockerps|grepworker-xds
b985d81af40cdocker.automotivelinux.org/agl/worker-xds:3.99.1"/usr/bin/wait_for..."6daysago
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 31October2017
Up4hours0.0.0.0:8000->8000/tcp,0.0.0.0:69->69/udp,0.0.0.0:10809->10809/tcp,0.0.0.0:2222->22/tcp
agl-xds-seb@laptop-0-seb
Notethatyoucanalsoaddanewshareddirectoryusing --volumeoptioninordertouseforexamplewith
Path-Mappingfoldertype.
#CreatenewXDSworkercontainerandshareextra'$HOME/my-workspace'directory
seb@laptop~$bash./xds-docker-create-container.sh--volume/my-workspace:$HOME/my-workspace
Thiscontainer(ID=0)exposesfollowingports:
8000:xds-servertoserveXDSDashboard
69:TFTP
2222:ssh
Manuallysetupdockeruserid
Note:ifyouused xds-docker-create-container.shscripttocreateXDSdockercontainer,user
uid/gidinsidedockerhasalreadybeenchangedbythisscript.
Ifyouplantousepath-mappingsharingtypeforyourprojects,youneedtohavethesameuserid
andgroup id insideandoutsidedocker.Bydefault user andgroupname insidedocker is set devel (id
1664),usefollowingcommandstoreplaceid1664withyouruser/groupid:
#Setdockercontainernametouse(usuallyagl-xds-xxxwherexxxisUSERNAME@MACHINENAME-IDX-NAME)
seb@laptop~$exportCONTAINER_NAME=agl-xds-seb@laptop-0-seb
#Firstkillallprocessesofdeveluser(includingrunningxds-server)
seb@laptop~$dockerexec${CONTAINER_NAME}bash-c"/bin/loginctlkill-userdevel"
#Changeuserandgroupidinsidedockertomatchyourids
seb@laptop~$dockerexec${CONTAINER_NAME}bash-c"usermod-u$(id-u)devel"
seb@laptop~$dockerexec${CONTAINER_NAME}bash-c"groupmod-g$(id-g)devel"
#Updatesomefilesownership
seb@laptop~$dockerexec${CONTAINER_NAME}bash-c"chown-Rdevel:devel/home/devel/tmp/xds*"
#Restartdevelautologinservice
seb@laptop~$dockerexec${CONTAINER_NAME}bash-c"systemctlstartautologin"
#Restartxds-serverasaservice(sshport2222maydependonyourcontainerID)
seb@laptop~$ssh-p2222devel@localhost--"systemctl--userstartxds-server"
Checkifxds-serverisrunning(openXDSDashboard)
xds-serverisautomaticallystartedasaserviceoncontainerstartup.
If the container is running on your localhost, you can access the web interface (what we call the
"Dashboard"):
seb@laptop~$xdg-openhttp://localhost:8000
Ifneededyoucanstatus/stop/startitmanuallyusingfollowingcommands:
#Logintodockercontainer
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 32October2017
seb@laptop~$ssh-p2222devel@localhost
#StatusXDSserver:
devel@docker~$systemctl--userstatusxds-server.service
#StopXDSserver
devel@docker~$systemctl--userstopxds-server.service
#StartXDSserver
devel@docker~$systemctl--userstartxds-server.service
#GetXDSserverlogs
devel@docker~$journalctl--user--unit=xds-server.service--output=cat
ManuallyStartXDSserver
XDSserverisstartedasaservicebySystemd.
/lib/systemd/system/xds-server.service
ThisSystemdservicestartsabashscript/opt/AGL/xds/server/xds-server-start.sh
Ifyouneededyoucanchangedefaultsettingbydefiningspecificenvironmentvariablesin/etc/default/xds-
server.Forexampletocontrolloglevel,justsetLOG_LEVELenvvariableknowingthatsupportedlevelare:
panic,fatal,error,warn,info,debug.
seb@laptop~$ssh-p2222devel@localhost
devel@docker~$echo'LOG_LEVEL=debug'|sudotee--append/etc/default/xds-server>/dev/null
devel@docker~$systemctl--userrestartxds-server.service
devel@docker~$tail-f/tmp/xds-server/logs/xds-server.log
InstallSDKcross-toolchain
xds-server uses SDK cross-toolchain installed into directory pointed by sdkRootDir setting (see
configurationsectionbelowformoredetails).Fornow,youneedto installmanuallySDKcrosstoolchain.
Therearenotembeddedintodockerimagebydefaultbecausethesizeofthesetarballsistoobig.
Useprovidedinstall-agl-sdksscript,forexampletoinstallSDKforARM64andIntelcorei7-64:
seb@laptop~$ssh-p2222devel@localhost
#InstallARM64SDK(automaticdownload)
devel@docker~$sudo/opt/AGL/xds/server/xds-utils/install-agl-sdks.sh--archaarch64
#InstallIntelcorei7-64SDK(usinganSDKtarballthathasbeenbuiltordownloadedmanually)
devel@docker~$sudo/opt/AGL/xds/server/xds-utils/install-agl-sdks.sh--archcorei7-64--file/tmp/poky-agl-glibc-x8
6_64-agl-demo-platform-crosssdk-corei7-64-toolchain-
3.99.1+snapshot.sh
XDSDashboard
xds-serverservesaweb-applicationathttp://localhost:8000whenXDSserverisrunningonyourhost.Just
replace localhostbythehostnameor ipwhenXDSserver is runningonanotherhost.Soyoucannow
connectyourbrowsertothisurlandusewhatwecalltheXDSdashboard.
xdg-openhttp://localhost:8000
Thenfollowinstructionsprovidedbythisdashboard,knowingthatthefirsttimeyouneedtodownloadand
startxds-agentonyourlocalmachine.
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 33October2017
Todownloadthistool,justclickondownloadiconindashboardconfigurationpageordownloadoneofxds-
agentreleasedtarball:https://github.com/iotbzh/xds-agent/releases.
Seealsoxds-agentREADMEfileformoredetails.
Buildxds-serverfromscratch
Dependencies
InstallandsetupGoversion1.7orhighertocompilethistool.
Installnpm
Installgulp
Installnodejs
Ubuntu:
sudoapt-getinstallgolangnpmcurlgitzipunzip
sudonpminstall-ggulp-clin
#InstallLTSversionofnodejs
sudonlts
openSUSE:
sudozypperinstallgonpmgitcurlzipunzip
sudonpminstall-ggulp-clin
#InstallLTSversionofnodejs
sudonlts
Don'tforgettoopennewusersessionafterinstallingthepackages.
Building
Nativebuild
CreateaGOPATHvariable(mustbeafullpath):
exportGOPATH=$(realpath~/workspace_go)
Clonethisrepointoyour$GOPATH/src/github.com/iotbzhandusedeliveredMakefile:
mkdir-p$GOPATH/src/github.com/iotbzh
cd$GOPATH/src/github.com/iotbzh
gitclonehttps://github.com/iotbzh/xds-server.git
cdxds-server
makeall
Andtoinstallxds-server(bydefaultin/opt/AGL/xds/server):
makeinstall
Warning: makefile install rule and default values in configuration file are set to fit the
dockersetup,soyoumayneedtoadaptsomesettingswhenyouwanttoinstallxds-server
natively.
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 34October2017
Note:UsedDESTDIRtospecifyanotherinstalldirectory
makeinstallDESTDIR=$HOME/opt/xds-server
XDSdockerimage
Asanalternative toapre-build image,youcan rebuild thecontainer fromscratch. xds-server has been
integrated as a flavour of AGL SDK docker image. So to rebuild docker image just execute following
commands:
#Clonedocker-worker-generatorgitrepo
gitclonehttps://git.automotivelinux.org/AGL/docker-worker-generator
#Startbuildthatwillcreateadockerimage
cddocker-worker-generator
makebuildFLAVOUR=xds
Configuration
xds-serverconfigurationisdrivenbyaJSONconfigfile(config.json).
Hereisthelogictodeterminewhichconfig.jsonfilewillbeused:
1. fromcommandlineoption:--configmyConfig.json
2. $HOME/.xds-server/config.jsonfile
3. /etc/xds-server/config.jsonfile
4. <xds-serverexecutabledir>/config.jsonfile
Supported fields in configuration file are (all fields are optional and example below corresponds to the
defaultvalues):
httpPort:HTTPportofclientwebapp/dashboard
webAppDir:locationofclientdashboard(default:webapp/dist)
shareRootDir:rootdirectorywhereprojectswillbecopied
logsDir:directorytostorelogs(eg.syncthingoutput)
sdkRootDir:rootdirectorywherecrossSDKsareinstalled
syncthing.binDir:syncthingbinariesdirectory(default:executabledirectory)
syncthing.home":syncthinghomedirectory(usually.../syncthing-config)
syncthing.gui-address:syncthingguiurl(defaulthttp://localhost:8385)
syncthing.gui-apikey:syncthingapi-keytouse(defaultauto-generated)
{
"httpPort":8000,
"webAppDir":"webapp/dist",
"shareRootDir":"${HOME}/.xds-server/projects",
"logsDir":"/tmp/logs",
"sdkRootDir":"/xdt/sdk",
"syncthing":{
"binDir":"./bin",
"home":"${HOME}/.xds-server/syncthing-config",
"gui-address":"http://localhost:8385",
"gui-apikey":"123456789",
}
}
Note:environmentvariablesaresupportedbyusing${MY_VAR}syntax.
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 35October2017
Debugging
XDSserverarchitecture
TheserverpartiswritteninGoandwebapp/dashboard(clientpart)inAngular2.
|
+--bin/wherexds-serverbinaryfilewillbebuilt
|
+--agent-config.json.inexampleofconfig.jsonfile
|
+--glide.yamlGopackagedependencyfile
|
+--lib/sourcesofserverpart(Go)
|
+--main.gomainentrypointofofWebserver(Go)
|
+--Makefilemakefileincluding
|
+--README.mdthisreadme
|
+--scripts/holdvariousscriptsusedforinstallationorstartup
|
+--tools/temporarydirectorytoholddevelopmenttools(likeglide)
|
+--vendor/temporarydirectorytoholdGodependenciespackages
|
+--webapp/sourceclientdashboard(Angular2app)
VisualStudioCodelaunchersettingscanbefoundinto.vscode/launch.json.
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 36October2017
XDS-X(cross)DevelopmentSystemAgent
XDS-agentisaclientthatshouldrunonyourlocal/userdevelopmentmachinewhenyouuseXDS.
Thisagenttakescare,amongothers,ofstartingSyncthingtooltosynchronizeyourprojectfilesfromyour
localhosttoXDSbuildservermachineorcontainer(wherexds-serverisrunning).
SEEALSO:xds-server,awebserverusedtoremotelycrossbuildapplications.
Configuration
xds-agentconfigurationisdrivenbyaJSONconfigfile.Thetarballmentionedinprevioussectionincludes
thisfilewithdefaultsettings.
Hereisthelogictodeterminewhichconffilewillbeused:
1. fromcommandlineoption:--configmyConfig.json
2. $HOME/.xds/agent/agent-config.jsonfile
3. /etc/xds-agent/config.jsonfile
Supported fields in configuration file are (all fields are optional and example below corresponds to the
defaultvalues):
httpPort:httpportofagentRESTinterface
logsDir:directorytostorelogs(eg.syncthingoutput)
xds-apikey:xds-agentapi-keytouse(alwayssetvalueto"1234abcezam")
syncthing.binDir:syncthingbinariesdirectory(default:executabledirectory)
syncthing.home":syncthinghomedirectory(usually.../syncthing-config)
syncthing.gui-address:syncthingguiurl(defaulthttp://localhost:8386)
syncthing.gui-apikey:syncthingapi-keytouse(defaultauto-generated)
{
"httpPort":"8010",
"logsDir":"/tmp/logs",
"xds-apikey":"1234abcezam",
"syncthing":{
"binDir":".",
"home":"${HOME}/.xds/agent/syncthing-config",
"gui-address":"http://localhost:8386",
"gui-apikey":"1234abcezam",
}
}
Note:environmentvariablesaresupportedbyusing${MY_VAR}syntax.
Start-up
Simplytostartxds-agentexecutable
./xds-agent&
Note:ifneedbe,youcanincreaseloglevelbysettingoption--log<level>,supportedlevelare:
panic,fatal,error,warn,info,debug.
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 37October2017
You can now use XDS dashboard and check that connectionwith xds-agent is up. (see also xds-server
README)
Buildxds-agentfromscratch
Dependencies
InstallandsetupGoversion1.8orhighertocompilethistool.
Note:forUbuntu,youcanuseaPPA,seehttps://github.com/golang/go/wiki/Ubuntu
Building
Clonethisrepointoyour$GOPATH/src/github.com/iotbzhandusedeliveredMakefile:
mkdir-p$GOPATH/src/github.com/iotbzh
cd$GOPATH/src/github.com/iotbzh
gitclonehttps://github.com/iotbzh/xds-agent.git
cdxds-agent
makeall
Andtoinstallxds-agent(bydefaultin/usr/local/bin):
makeinstall
Note:UsedDESTDIRtospecifyanotherinstalldirectory
makeinstallDESTDIR=$HOME/opt/xds-agent
Crossbuild
ForexampleonaLinuxmachinetocross-buildforWindows,justfollowthesesteps.
Thefirsttimeyouneedtoinstallallthewindows-amd64standardpackagesonyoursystemwith
#ListallsupportedOS/ARCH
gotooldistlist
#InstallallstandardpackagesforanotherOS/ARCH(eg.windowsamd64)
GOOS=windowsGOARCH=amd64goinstall-v-astd
Thencompileandpackagexds-agentusingprovidedmakefile
exportGOOS=windows
exportGOARCH=amd64
makeall
makepackage
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 38October2017
xds-exec:wrapperonexecforXDS
xds-execisawrapperonexeclinuxcommandforX(cross)DevelopmentSystem.
Aswellas xds-execisawrapperonexeccommandandcanbeusetoexecuteanycommandonaremote
xds-server.
This tool canbeused in lieuof "standard" exec command to execute any commandon a remote xds-
server.Forexampleyoucantrigyourprojectbuildbyexecuting:xds-exec--configconf.env--makebuild
Configuration
xds-execconfigurationisdefinedeitherbyenvironmentvariablesorbysettingcommandlineoptions(see
listedbelow).
Configurationthroughenvironmentvariablesmayalsobedefinedinafilethatwillbesourcedon xds-exec
start-up.Use--config|-coptionorsetXDS_CONFIGenvironmentvariabletospecifytheconfigfilename.
Soconfigurationisdriveneitherbyenvironmentvariablesorbycommandlineoptionsorusingaconfigfile
knowingthatthefollowingpriorityorderisused:
1. useoptionvalue(forexampleuseprojectIDsetby--idoption),
2. elseusevariableXDS_xxx(forexampleXDS_PROJECT_IDvariable)whenaconfigfileisspecifiedwith--
config|-coption,
3. elseuseXDS_xxx(forexampleXDS_PROJECT_ID)environmentvariable
Note:allparametersafteradoubledash(--)areconsideredasthecommandtoexecuteon
xds-server.
ConfigurationOptions/Variables
--idoptionorXDS_PROJECT_IDenvvariable(mandatory)
ProjectIDyouwanttobuild
--config|-coptionorXDS_CONFIGenvvariable
Envconfigfiletosourceonstartup
--log|-loptionorXDS_LOGLEVELenvvariable
Logginglevel,supportedlevelsare:
panic,
fatal,
error,
warn,
info,
debug
Defaultlevelis"error".
--rpathoptionorXDS_PATHenvvariable
Relativepathintoproject
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 39October2017
sdkidoptionorXDS_SDK_IDenvvariable(mandatory)
CrossSdkIDtousetobuildproject
timestamp|-tsoptionorXDS_TIMESTAMPenvvariable
Prefixoutputwithtimestamp
urloptionorXDS_SERVER_URLenvvariable
RemoteXDSserverurl(default:"localhost:8000")
Howtobuild
Prerequisites
YoumustinstallandsetupGoversion1.7orhighertocompilethistool.
Building
Clonethisrepointoyour$GOPATH/src/github.com/iotbzhandusedeliveredMakefile:
exportGOPATH=$(realpath~/workspace_go)
mkdir-p$GOPATH/src/github.com/iotbzh
cd$GOPATH/src/github.com/iotbzh
gitclonehttps://github.com/iotbzh/xds-exec.git
cdxds-exec
make
Debug
VisualStudioCodelaunchersettingscanbefoundinto.vscode/launch.json.
Tricks:Todebugbothxds-exec(clientpart)and xds-server(serverpart),itmaybeusefuluse
thesamelocalsources.Soyoushouldreplace xds-serverin vendordirectorybyasymlink.So
clonefirstxds-serversourcesnexttoxds-execdirectory.Youshouldhavethefollowingtree:
>tree-L3src
src
|--github.com
|--iotbzh
|--xds-exec
|--xds-server
Theninvokevendor/debugMakefileruletocreateasymlinkinsidevendordirectory:
cdsrc/github.com/iotbzh/xds-exec
makevendor/debug
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 40October2017
xds-gdb:wrapperongdbforXDS
xds-gdbisawrapperongdbdebuggerforX(cross)DevelopmentSystem.
Thistoolallowsyoutodebuganapplicationbuiltwithanxds-serverwithouttheneedtoinstallgdborany
crosstool.
Twodebuggingmodelsaresupported:
1. nativedebugging
2. XDSremotedebuggingrequiringanXDSserverandallowingcrossdebugyourapplication.
BydefaultXDSremotedebugisusedandyouneedtodefineXDS_NATIVE_GDBvariabletousenativegdb
debugmodeinstead.
SEEALSO:xds-server,awebserverusedtoremotelycrossbuildapplications.SEEALSO:xds-
exec, wrappers on exec command that allows to cross build your application through xds-
server.
Configuration
xds-gdbconfigurationisdefinedbyvariables(seelistedbelow).Thesevariablesmaybesetusing:
environmentvariables(inherited),
oraconfigfilesetwithXDS_CONFIGenvironmentvariable,forexample:
XDS_CONFIG=/tmp/my_xds_gdb_config.envxds-gdb
orbysettingvariableswithinagdbinifile(seedetailsbelow),
ora"user"configfilelocatedinfollowingdirectory(firstfoundistaken):
1. $(CURRENT_DIRECTORY)/.xds-gdb.env
2. $(CURRENT_DIRECTORY)/../xds-gdb.env
3. $(CURRENT_DIRECTORY)/target/xds-gdb.env
4. $(HOME)/.config/xds/xds-gdb.env
ConfigurationVariables
XDS_CONFIG:ConfigfiledefiningXDS_xxxconfigurationvariables.Variablesofthisfilewilloverwriteinherited
environmentvariables.Variablesdefinitionmaybeprefixedornotby"export"keyword.Hereisanexample
ofconfigfile
cat$HOME/myProject/xds-gdb.env
exportXDS_SERVER_URL=http://xds-docker:8000
exportXDS_PROJECT_ID=IW7B4EE-DBY4Z74_myProject
exportXDS_SDK_ID=poky-agl_aarch64_4.0.1
XDS_LOGLEVEL
Setlogginglevel(supportedlevels:panic,fatal,error,warn,info,debug)
XDS_LOGFILE
Setloggingfile,default/tmp/xds-gdb.log.
XDS_NATIVE_GDB
UsenativegdbmodeinsteadofremoteXDSservermode.
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 41October2017
XDS_PROJECT_ID(mandatorywithXDSservermode)
ProjectIDyouwanttobuild
XDS_RPATH
Relativepathintoproject
XDS_SDK_ID(mandatorywithXDSservermode)
CrossSdkIDtousetobuildproject
XDS_SERVER_URL(mandatorywithXDSservermode)
RemoteXDSserverurl
Configurationvariablessetwithingdbinitcommandfile
AboveXDS_xxxvariablesmayalsobedefinedwithingdbinitcommandfile(see--commandor-xoptionof
genuineGdb).Youmustrespectthefollowingsyntax:commentedlineincluding:XDS-ENV:tag
ExampleofgdbinitfilewherewedefineprojectandsdkID:
#:XDS-ENV:XDS_PROJECT_ID=IW7B4EE-DBY4Z74_myProject
#:XDS-ENV:XDS_SDK_ID=poky-agl_aarch64_4.0.1
Howtobuildxds-gdbfromscratch
Prerequisites
YoumustinstallandsetupGoversion1.7orhighertocompilethistool.
Building
Clonethisrepointoyour$GOPATH/src/github.com/iotbzhandusedeliveredMakefile:
exportGOPATH=$(realpath~/workspace_go)
mkdir-p$GOPATH/src/github.com/iotbzh
cd$GOPATH/src/github.com/iotbzh
gitclonehttps://github.com/iotbzh/xds-gdb.git
cdxds-gdb
make
Debug
VisualStudioCodelaunchersettingscanbefoundinto.vscode/launch.json.
IoT.Bzh X(cross)DevelopmentSystem
Version0.2 42October2017