# xds-cli: command-line tool for XDS `xds-cli` is a command-line tool for X(cross) Development System. ## Configuration `xds-cli` configuration is defined either by environment variables or by setting command line options. Configuration through environment variables may also be defined in a file that will be sourced by `xds-cli` on start-up. Use `--config|-c` option or set `XDS_CONFIG` environment variable to specify the config file to use. So configuration is driven either by environment variables or by command line options or using a config file knowing that the following priority order is used: 1. use option value (for example use project ID set by `--id` option), 1. else use variable `XDS_xxx` (for example `XDS_PROJECT_ID` variable) when a config file is specified with `--config|-c` option, 1. else use `XDS_xxx` (for example `XDS_PROJECT_ID`) environment variable **Note:** All parameters after a double dash (--) are considered as the command to execute on xds-server. ### Global Options / Configuration variables Following is the list of global options across all sub-commands. __`--config|-c` option or `XDS_CONFIG` env variable__ Env config file to source on startup __`--log|-l` option or `XDS_LOGLEVEL` env variable__ Logging level, supported levels are: - panic - fatal - error - warn - info - debug Default level is "error". **`--rpath` option or `XDS_PATH` env variable** Relative path into project **`timestamp|-ts` option or `XDS_TIMESTAMP` env variable** Prefix output with timestamp **`url` option or `XDS_AGENT_URL` env variable** Local XDS agent url (default: "localhost:8800") ## Commands ### projects `projects` (short `prj`) command should be used to managed XDS projects. This command supports following sub-commands: ```bash add, a Add a new project get Get a property of a project list, ls List existing projects remove, rm Remove an existing project sync Force synchronization of project sources ``` Here are some usage examples: ```bash # Create/declare a new project xds-cli prj add --label "ABeautifulName" --type pm -p /home/seb/xds-workspace/myProject -sp /home/devel/xds-workspace/myProject # List projects xds-cli prj ls # Delete an existing project xds-cli prj rm 8e49 ``` ### sdks `sdks` (alias `sdk`) command should be used to managed cross SDKs. This command supports following sub-commands: ```bash add, a Add a new SDK get Get a property of a SDK list, ls List installed SDKs remove, rm Remove an existing SDK ``` Here are some usage examples: ```bash # List existing SDKs xds-cli sdks ls # Get SDK info xds-cli sdks get c64d ``` ### exec `exec` command should be used to exec command through XDS system. For example you can use this command to build your project in XDS system. This command supports following sub-commands: `exec` command options are: **`--id` option or `XDS_PROJECT_ID` env variable (**mandatory option**)** project ID you want to build **`--rpath` (short `-p`) or `XDS_RPATH` env variable** relative path into project **`--sdkid` (alias `--sdk`) or `XDS_SDK_ID` env variable (**mandatory option**)** Cross Sdk ID to use to build project. Here are some usage examples: ```bash cd $MY_PROJECT_DIR mkdir build # Generate build system using cmake xds-cli exec --id=4021 --sdkid=c226 -- "cd build && cmake .." # Build the project xds-cli exec --id=4021 --sdkid=c226 -- "cd build && make all" ``` In case of `xds-agent` is not running on default url:port (that is `localhost:8800`) You can specify the url using `--url` option : ```bash xds-cli --url=http://localhost:8800 exec --id=4021 --sdkid=c226 -- "cd build && make all" ``` ### misc `misc` command allows to execute miscellaneous sub-commands such as: ```bash version, v Get version of XDS agent and XDS server status, sts Get XDS configuration status (including XDS server connection) ``` Here are some usage examples: ```bash xds-cli misc version --verbose xds-cli misc sts ``` ## How to build ### Dependencies Install [Go](https://golang.org/doc/install) and some other tools. Refer to [Prerequisites chapter](./0_Abstract.html#prerequisites) for more details. ### Building Clone this repo into your `$GOPATH/src/gerrit.automotivelinux.org/gerrit/src/xds` and use delivered Makefile: ```bash export GOPATH=$(realpath ~/workspace_go) mkdir -p $GOPATH/src/gerrit.automotivelinux.org/gerrit/src/xds cd $GOPATH/src/gerrit.automotivelinux.org/gerrit/src/xds git clone https://gerrit.automotivelinux.org/gerrit/src/xds/xds-cli # or git clone ssh://YOUR_USERNAME@gerrit.automotivelinux.org:29418/src/xds/xds-cli cd xds-cli make ``` ## Debug Visual Studio Code launcher settings can be found into `.vscode/launch.json`. >**Tricks:** > >To debug both `xds-cli` and `xds-agent` (REST API part) or common code `xds-common`, it may be useful use the same local sources. > >So you should replace `xds-agent` + `xds-common` in `vendor` directory by a symlink. > >So clone first `xds-agent` + `xds-common` sources next to `xds-cli` directory. You should have the following tree: ```bash tree -L 5 --charset=ascii src/ src/ `-- gerrit.automotivelinux.org `-- gerrit `-- src `-- xds |-- backup.sh |-- xds-agent |-- xds-cli |-- xds-common |-- xds-docs |-- xds-gdb `-- xds-server ``` Then invoke `vendor/debug` Makefile rule to create a symlink inside vendor directory : ```bash cd src/gerrit.automotivelinux.org/gerrit/src/xds/xds-cli make vendor/debug ```