Skip to content

Commit 077d933

Browse files
roxellbhcopeland
authored andcommitted
tuxmake: accept kconfig targets as positional arguments
Positional arguments ending in "config" are now treated as the kconfig value when --kconfig is not set explicitly. Matches the behavior of plain make: tuxmake --target-arch=x86_64 defconfig tuxmake --target-arch=arm multi_v7_defconfig tuxmake --target-arch=arm allmodconfig Explicit --kconfig wins if both are given. Signed-off-by: Anders Roxell <anders.roxell@linaro.org>
1 parent 5067be7 commit 077d933

6 files changed

Lines changed: 39 additions & 8 deletions

File tree

test/test_build.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,15 @@ def test_multiple_make_targets(self, linux):
140140
assert "make:drivers/mmc/" in names
141141
assert "make:kernel/livepatch/patch.o" in names
142142

143+
def test_no_duplicate_when_positional_and_flag(self, linux):
144+
b = Build(
145+
tree=linux,
146+
targets=["drivers/mmc/"],
147+
make_target=["drivers/mmc/"],
148+
)
149+
names = [t.name for t in b.targets]
150+
assert names.count("make:drivers/mmc/") == 1
151+
143152

144153
class TestKconfig:
145154
def test_kconfig_default(self, linux, Popen):

test/test_cli.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,15 +74,25 @@ def test_make_target(self, builder):
7474
tuxmake("--make-target=drivers/mmc/")
7575
assert args(builder).make_target == ["drivers/mmc/"]
7676

77-
def test_make_target_forces_empty_targets(self, builder):
78-
tuxmake("--make-target=drivers/mmc/")
79-
assert args(builder).targets == []
80-
8177
def test_make_target_with_positional(self, builder):
8278
tuxmake("config", "--make-target=drivers/mmc/")
8379
assert args(builder).targets == ["config"]
8480
assert args(builder).make_target == ["drivers/mmc/"]
8581

82+
def test_positional_kconfig(self, builder):
83+
tuxmake("defconfig")
84+
assert args(builder).kconfig == "defconfig"
85+
assert not getattr(args(builder), "targets", [])
86+
87+
def test_positional_kconfig_allmodconfig(self, builder):
88+
tuxmake("allmodconfig")
89+
assert args(builder).kconfig == "allmodconfig"
90+
91+
def test_explicit_kconfig_wins_over_positional(self, builder):
92+
tuxmake("--kconfig=tinyconfig", "defconfig")
93+
assert args(builder).kconfig == "tinyconfig"
94+
assert "defconfig" not in getattr(args(builder), "targets", [])
95+
8696

8797
class TestMakeVariables:
8898
def test_basic(self, builder):

test/test_cmdline.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ def test_make_target(self, cmdline):
6565
build = Build(targets=[], make_target=["drivers/mmc/"])
6666
cmd = cmdline.reproduce(build)
6767
assert "--make-target=drivers/mmc/" in cmd
68+
assert "make:drivers/mmc/" not in cmd
6869

6970
def test_debug(self, cmdline):
7071
cmd = cmdline.reproduce(Build(debug=True))

tuxmake/build.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,10 +247,12 @@ def __init__(
247247
self.make_target = make_target or []
248248
if self.make_target:
249249
self.add_target("config")
250+
existing = {t.name for t in self.targets}
250251
for mt in self.make_target:
251252
target = MakeTarget(mt, self, self.compression)
252-
self.__ordering_only_targets__[target.name] = False
253-
self.targets.append(target)
253+
if target.name not in existing:
254+
self.__ordering_only_targets__[target.name] = False
255+
self.targets.append(target)
254256
self.cleanup_targets()
255257
self.extend_kconfig()
256258

tuxmake/cli.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from datetime import timedelta
22
import os
33
import pathlib
4+
import re
45
import subprocess
56
import shlex
67
import sys
@@ -141,6 +142,14 @@ def format_yes_no(b, length):
141142
options.make_variables = dict((arg.split("=") for arg in key_values))
142143
options.targets = [arg for arg in options.targets if "=" not in arg]
143144

145+
kconfig_re = re.compile(r"^[\w\-]+config$")
146+
for arg in list(options.targets):
147+
if kconfig_re.match(arg):
148+
if not options.kconfig:
149+
options.kconfig = arg
150+
options.targets.remove(arg)
151+
break
152+
144153
build_args = {
145154
k: v
146155
for k, v in options.__dict__.items()
@@ -159,8 +168,6 @@ def format_yes_no(b, length):
159168
"results_hooks",
160169
]
161170
}
162-
if options.make_target and not options.targets:
163-
build_args["targets"] = []
164171
try:
165172
if options.download_all_korg_gcc_toolchains:
166173
with tempfile.TemporaryDirectory() as _tmpdir:

tuxmake/cmdline.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,8 @@ def reproduce(self, build):
337337
for k, v in build.make_variables.items():
338338
cmd.append(f"{k}={v}")
339339
for target in build.targets:
340+
if target.name.startswith("make:"):
341+
continue
340342
cmd.append(target.name)
341343

342344
return cmd

0 commit comments

Comments
 (0)