Skip to content

Commit c5efb92

Browse files
mcsprivankravets
authored andcommitted
PlatformIO: generate core_version.h when using feature/stage (#5917)
* platformio: generate core_version.h when using feature/stage * quote command line * Modify CPPFLAGS conditionally
1 parent 4e0e4e4 commit c5efb92

File tree

2 files changed

+88
-28
lines changed

2 files changed

+88
-28
lines changed

tools/makecorever.py

Lines changed: 50 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -21,31 +21,53 @@
2121
import os
2222
import subprocess
2323

24-
parser = argparse.ArgumentParser(description='Generate core_version.h')
25-
parser.add_argument('-b', '--build_path', action='store', required=True, help='build.path variable')
26-
parser.add_argument('-p', '--platform_path', action='store', required=True, help='platform.path variable')
27-
parser.add_argument('-v', '--version', action='store', required=True, help='version variable')
28-
29-
args = parser.parse_args()
30-
31-
core = args.build_path + '/core'
32-
try:
33-
os.makedirs(core)
34-
except:
35-
pass
36-
37-
out = open(core + '/core_version.h', "w")
38-
39-
try:
40-
p = subprocess.Popen(['git', '--git-dir', args.platform_path + '/.git', 'rev-parse', '--short=8', 'HEAD'], stdout = subprocess.PIPE )
41-
git_ver = '0x' + p.stdout.readlines()[0].strip()
42-
p = subprocess.Popen(['git', '--git-dir', args.platform_path + '/.git', 'describe', '--tags'], stdout = subprocess.PIPE )
43-
git_desc = p.stdout.readlines()[0].strip()
44-
except:
45-
git_ver = '0xffffffff'
46-
git_desc = args.version
47-
48-
out.write('#define ARDUINO_ESP8266_GIT_VER ' + git_ver + '\n')
49-
out.write('#define ARDUINO_ESP8266_GIT_DESC ' + git_desc + '\n')
50-
51-
out.close()
24+
25+
def generate(path, platform_path, git_ver="0xffffffff", git_desc="unspecified"):
26+
def git(*args):
27+
cmd = ["git", "-C", platform_path]
28+
cmd.extend(args)
29+
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True)
30+
return proc.stdout.readlines()[0].strip()
31+
32+
try:
33+
git_ver = git("rev-parse", "--short=8", "HEAD")
34+
git_desc = git("describe", "--tags")
35+
except:
36+
pass
37+
38+
with open(path, "w") as out:
39+
out.write("#define ARDUINO_ESP8266_GIT_VER 0x{}\n".format(git_ver))
40+
out.write("#define ARDUINO_ESP8266_GIT_DESC {}\n".format(git_desc))
41+
42+
43+
if __name__ == "__main__":
44+
parser = argparse.ArgumentParser(description="Generate core_version.h")
45+
46+
parser.add_argument(
47+
"-b", "--build_path", action="store", required=True, help="build.path variable"
48+
)
49+
parser.add_argument(
50+
"-p",
51+
"--platform_path",
52+
action="store",
53+
required=True,
54+
help="platform.path variable",
55+
)
56+
parser.add_argument(
57+
"-v", "--version", action="store", required=True, help="version variable"
58+
)
59+
parser.add_argument("-i", "--include_dir", default="core")
60+
61+
args = parser.parse_args()
62+
63+
include_dir = os.path.join(args.build_path, args.include_dir)
64+
try:
65+
os.makedirs(include_dir)
66+
except:
67+
pass
68+
69+
generate(
70+
os.path.join(include_dir, "core_version.h"),
71+
args.platform_path,
72+
git_desc=args.version,
73+
)

tools/platformio-build.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424

2525
# Extends: https://github.com/platformio/platform-espressif8266/blob/develop/builder/main.py
2626

27+
import os
28+
import subprocess
29+
2730
from os.path import isdir, join
2831

2932
from SCons import Builder, Util
@@ -220,6 +223,41 @@ def scons_patched_match_splitext(path, suffixes=None):
220223
"Generating LD script $TARGET"))
221224
env.Depends("$BUILD_DIR/$PROGNAME$PROGSUFFIX", app_ld)
222225

226+
#
227+
# Dynamic core_version.h for staging builds
228+
#
229+
230+
def platform_txt_version(default):
231+
with open(join(FRAMEWORK_DIR, "platform.txt"), "r") as platform_txt:
232+
for line in platform_txt:
233+
if not line:
234+
continue
235+
k, delim, v = line.partition("=")
236+
if not delim:
237+
continue
238+
if k == "version":
239+
return v.strip()
240+
241+
return default
242+
243+
if isdir(join(FRAMEWORK_DIR, ".git")):
244+
cmd = '"$PYTHONEXE" "{script}" -b "$BUILD_DIR" -p "{framework_dir}" -v {version}'
245+
fmt = {
246+
"script": join(FRAMEWORK_DIR, "tools", "makecorever.py"),
247+
"framework_dir": FRAMEWORK_DIR,
248+
"version": platform_txt_version("unspecified")
249+
}
250+
251+
env.Prepend(CPPPATH=[
252+
join("$BUILD_DIR", "core")
253+
])
254+
core_version = env.Command(
255+
join("$BUILD_DIR", "core", "core_version.h"),
256+
join(FRAMEWORK_DIR, ".git"),
257+
env.VerboseAction(cmd.format(**fmt), "Generating $TARGET")
258+
)
259+
env.Depends("$BUILD_DIR/$PROGNAME$PROGSUFFIX", core_version)
260+
223261

224262
#
225263
# Target: Build Core Library

0 commit comments

Comments
 (0)