aboutsummaryrefslogtreecommitdiff
path: root/build.py
diff options
context:
space:
mode:
authorJakob Stendahl <jakobste@uio.no>2021-01-11 13:41:18 +0100
committerJakob Stendahl <jakobste@uio.no>2021-01-11 13:41:18 +0100
commitd17bc0fc4bb057378fadf3f9feb0de1df60d611a (patch)
treeca3069eeacb0b7379cb289d87be932956e449d9c /build.py
parent19d65c7b2e287223113ab916e103638c5c5003f5 (diff)
downloadhoverbit-ble-d17bc0fc4bb057378fadf3f9feb0de1df60d611a.tar.gz
hoverbit-ble-d17bc0fc4bb057378fadf3f9feb0de1df60d611a.zip
:sparkles: Add working bluetooth receiver
Diffstat (limited to 'build.py')
-rwxr-xr-xbuild.py168
1 files changed, 168 insertions, 0 deletions
diff --git a/build.py b/build.py
new file mode 100755
index 0000000..594c5d7
--- /dev/null
+++ b/build.py
@@ -0,0 +1,168 @@
+#!/usr/bin/env python
+
+# The MIT License (MIT)
+
+# Copyright (c) 2017 Lancaster University.
+
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+# DEALINGS IN THE SOFTWARE.
+
+import os
+import sys
+import optparse
+import platform
+import json
+import shutil
+import re
+from utils.python.codal_utils import system, build, read_json, checkgit, read_config, update, revision, printstatus, status, get_next_version, lock, delete_build_folder, generate_docs
+
+parser = optparse.OptionParser(usage="usage: %prog target-name-or-url [options]", description="This script manages the build system for a codal device. Passing a target-name generates a codal.json for that devices, to list all devices available specify the target-name as 'ls'.")
+parser.add_option('-c', '--clean', dest='clean', action="store_true", help='Whether to clean before building. Applicable only to unix based builds.', default=False)
+parser.add_option('-t', '--test-platforms', dest='test_platform', action="store_true", help='Specify whether the target platform is a test platform or not.', default=False)
+parser.add_option('-l', '--lock', dest='lock_target', action="store_true", help='Create target-lock.json, updating patch version', default=False)
+parser.add_option('-b', '--branch', dest='branch', action="store_true", help='With -l, use vX.X.X-BRANCH.Y', default=False)
+parser.add_option('-m', '--minor', dest='update_minor', action="store_true", help='With -l, update minor version', default=False)
+parser.add_option('-M', '--major', dest='update_major', action="store_true", help='With -l, update major version', default=False)
+parser.add_option('-V', '--version', dest='version', metavar="VERSION", help='With -l, set the version; use "-V v0.0.1" to bootstrap', default=False)
+parser.add_option('-u', '--update', dest='update', action="store_true", help='git pull target and libraries', default=False)
+parser.add_option('-s', '--status', dest='status', action="store_true", help='git status target and libraries', default=False)
+parser.add_option('-r', '--revision', dest='revision', action="store", help='Checkout a specific revision of the target', default=False)
+parser.add_option('-d', '--dev', dest='dev', action="store_true", help='enable developer mode (does not use target-locked.json)', default=False)
+parser.add_option('-g', '--generate-docs', dest='generate_docs', action="store_true", help='generate documentation for the current target', default=False)
+
+(options, args) = parser.parse_args()
+
+if not os.path.exists("build"):
+ os.mkdir("build")
+
+if options.lock_target:
+ lock(options)
+ exit(0)
+
+if options.update:
+ update()
+ exit(0)
+
+if options.status:
+ status()
+ exit(0)
+
+if options.revision:
+ revision(options.revision)
+ exit(0)
+
+# out of source build!
+os.chdir("build")
+
+test_json = read_json("../utils/targets.json")
+
+# configure the target a user has specified:
+if len(args) == 1:
+
+ target_name = args[0]
+ target_config = None
+
+ # list all targets
+ if target_name == "ls":
+ for json_obj in test_json:
+ s = "%s: %s" % (json_obj["name"], json_obj["info"])
+ if "device_url" in json_obj.keys():
+ s += "(%s)" % json_obj["device_url"]
+ print(s)
+ exit(0)
+
+ # cycle through out targets and check for a match
+ for json_obj in test_json:
+ if json_obj["name"] != target_name:
+ continue
+
+ del json_obj["device_url"]
+ del json_obj["info"]
+
+ target_config = json_obj
+ break
+
+ if target_config == None and target_name.startswith("http"):
+ target_config = {
+ "name": re.sub("^.*/", "", target_name),
+ "url": target_name,
+ "branch": "master",
+ "type": "git"
+ }
+
+ if target_config == None:
+ print("'" + target_name + "'" + " is not a valid target.")
+ exit(1)
+
+ # developer mode is for users who wish to contribute, it will clone and checkout commitable branches.
+ if options.dev:
+ target_config["dev"] = True
+
+ config = {
+ "target":target_config
+ }
+
+ with open("../codal.json", 'w') as codal_json:
+ json.dump(config, codal_json, indent=4)
+
+ # remove the build folder, a user could be swapping targets.
+ delete_build_folder()
+
+
+elif len(args) > 1:
+ print("Too many arguments supplied, only one target can be specified.")
+ exit(1)
+
+if not options.test_platform:
+
+ if not os.path.exists("../codal.json"):
+ print("No target specified in codal.json, does codal.json exist?")
+ exit(1)
+
+ if options.generate_docs:
+ generate_docs()
+ exit(0)
+
+ build(options.clean)
+ exit(0)
+
+for json_obj in test_json:
+
+ # some platforms aren't supported by travis, ignore them when testing.
+ if "test_ignore" in json_obj:
+ print("ignoring: " + json_obj["name"])
+ continue
+
+ # ensure we have a clean build tree.
+ delete_build_folder()
+
+ # clean libs
+ if os.path.exists("../libraries"):
+ shutil.rmtree('../libraries')
+
+ # configure the target and tests...
+ config = {
+ "target":json_obj,
+ "output":".",
+ "application":"libraries/"+json_obj["name"]+"/tests/"
+ }
+
+ with open("../codal.json", 'w') as codal_json:
+ json.dump(config, codal_json, indent=4)
+
+ build(True, True)