@@ -0,0 +1,5 @@ | |||
{ | |||
"compiler_id": 'gnu', | |||
"cxx_version": 'c++17', | |||
"cxx_compiler": 'g++-9', | |||
} |
@@ -0,0 +1,4 @@ | |||
{ | |||
"compiler_id": 'msvc', | |||
"cxx_version": "c++17" | |||
} |
@@ -1,5 +1,7 @@ | |||
import pytest | |||
from subprocess import CalledProcessError | |||
import time | |||
import pytest | |||
from dds_ci import paths | |||
from dds_ci.testing import Project, PackageJSON | |||
@@ -29,6 +31,7 @@ def test_build_simple(tmp_project: Project) -> None: | |||
tmp_project.write('src/f.cpp', r'void f() {}') | |||
tmp_project.build() | |||
# Writing again will build again: | |||
time.sleep(0.2) # Sleep long enough to register a file change | |||
tmp_project.write('src/f.cpp', r'bad again') | |||
with pytest.raises(CalledProcessError): | |||
tmp_project.build() |
@@ -79,6 +79,7 @@ def test_partial_build_rebuild(test_project: Project) -> None: | |||
with pytest.raises(subprocess.CalledProcessError): | |||
test_project.build() | |||
# Pause long enough for timestamps to change | |||
test_project.write('src/2.cpp', ''' | |||
#include "./values.hpp" | |||
@@ -86,7 +86,7 @@ class DDSWrapper: | |||
:param build_root: The root directory where the output will be written. | |||
:param jobs: The number of jobs to use. Default is CPU-count + 2 | |||
""" | |||
toolchain = toolchain or tc_mod.get_default_test_toolchain() | |||
toolchain = toolchain or tc_mod.get_default_audit_toolchain() | |||
jobs = jobs or multiprocessing.cpu_count() + 2 | |||
self.run([ | |||
'build', | |||
@@ -99,7 +99,7 @@ class DDSWrapper: | |||
]) | |||
def build_deps(self, args: proc.CommandLine, *, toolchain: Optional[Path] = None) -> None: | |||
toolchain = toolchain or tc_mod.get_default_test_toolchain() | |||
toolchain = toolchain or tc_mod.get_default_audit_toolchain() | |||
self.run([ | |||
'build-deps', | |||
f'--toolchain={toolchain}', |
@@ -78,7 +78,7 @@ def test_build(dds: DDSWrapper, args: CommandArguments) -> DDSWrapper: | |||
Execute the build that generates the test-mode executable. Uses the given 'dds' | |||
to build the new dds. Returns a DDSWrapper around the generated test executable. | |||
""" | |||
test_tc = args.test_toolchain or toolchain.get_default_test_toolchain() | |||
test_tc = args.test_toolchain or toolchain.get_default_audit_toolchain() | |||
build_dir = paths.BUILD_DIR | |||
with toolchain.fixup_toolchain(test_tc) as new_tc: | |||
dds.build(toolchain=new_tc, root=paths.PROJECT_ROOT, build_root=build_dir, jobs=args.jobs) | |||
@@ -110,7 +110,7 @@ def main_build(dds: DDSWrapper, args: CommandArguments) -> int: | |||
""" | |||
main_tc = args.toolchain or ( | |||
# If we are in rapid-dev mode, use the test toolchain, which had audit/debug enabled | |||
toolchain.get_default_toolchain() if not args.rapid else toolchain.get_default_test_toolchain()) | |||
toolchain.get_default_toolchain() if not args.rapid else toolchain.get_default_audit_toolchain()) | |||
with toolchain.fixup_toolchain(main_tc) as new_tc: | |||
try: | |||
dds.build(toolchain=new_tc, root=paths.PROJECT_ROOT, build_root=paths.BUILD_DIR, jobs=args.jobs) |
@@ -10,6 +10,8 @@ from typing import Iterator, Optional | |||
PROJECT_ROOT = Path(__file__).absolute().parent.parent.parent | |||
#: The <repo>/tools directory | |||
TOOLS_DIR = PROJECT_ROOT / 'tools' | |||
#: The <repo>/tests directory | |||
TESTS_DIR = PROJECT_ROOT / 'tests' | |||
#: The default build directory | |||
BUILD_DIR = PROJECT_ROOT / '_build' | |||
#: The directory were w prebuild/bootstrapped results will go, and scratch space for the build |
@@ -36,7 +36,7 @@ def fixup_toolchain(json_file: Pathish) -> Iterator[Path]: | |||
yield new_json | |||
def get_default_test_toolchain() -> Path: | |||
def get_default_audit_toolchain() -> Path: | |||
""" | |||
Get the default toolchain that should be used for dev and test based on the | |||
host platform. | |||
@@ -47,13 +47,25 @@ def get_default_test_toolchain() -> Path: | |||
return paths.TOOLS_DIR / 'gcc-9-test.jsonc' | |||
if sys.platform == 'win32': | |||
return paths.TOOLS_DIR / 'msvc-audit.jsonc' | |||
if sys.platform in 'linux': | |||
if sys.platform == 'linux': | |||
return paths.TOOLS_DIR / 'gcc-9-audit.jsonc' | |||
if sys.platform == 'darwin': | |||
return paths.TOOLS_DIR / 'gcc-9-audit-macos.jsonc' | |||
raise RuntimeError(f'Unable to determine the default toolchain (sys.platform is {sys.platform!r})') | |||
def get_default_test_toolchain() -> Path: | |||
""" | |||
Get the default toolchain that should be used by tests that need a toolchain | |||
to use for executing dds. | |||
""" | |||
if sys.platform == 'win32': | |||
return paths.TESTS_DIR / 'msvc.tc.jsonc' | |||
if sys.platform in ('linux', 'darwin'): | |||
return paths.TESTS_DIR / 'gcc-9.tc.jsonc' | |||
raise RuntimeError(f'Unable to determine the default toolchain (sys.platform is {sys.platform!r})') | |||
def get_default_toolchain() -> Path: | |||
""" | |||
Get the default toolchain that should be used to generate the release executable |