Browse Source

Fix language detection (based on file extension)

Update build script to build our deps

Run the bootstrap builds in their respective directory
default_compile_flags
vector-of-bool 5 years ago
parent
commit
63b206fd7b
4 changed files with 40 additions and 20 deletions
  1. +12
    -1
      src/dds/toolchain/toolchain.cpp
  2. +1
    -1
      tools/bootstrap.py
  3. +19
    -14
      tools/build.py
  4. +8
    -4
      tools/self_build.py

+ 12
- 1
src/dds/toolchain/toolchain.cpp View File

@@ -102,6 +102,17 @@ vector<string> toolchain::definition_args(std::string_view s) const noexcept {
vector<string> toolchain::create_compile_command(const compile_file_spec& spec) const noexcept {
vector<string> flags;

language lang = spec.lang;
if (lang == language::automatic) {
if (spec.source_path.extension() == ".c" || spec.source_path.extension() == ".C") {
lang = language::c;
} else {
lang = language::cxx;
}
}

auto& cmd_template = lang == language::c ? _c_compile : _cxx_compile;

for (auto&& inc_dir : spec.include_dirs) {
auto inc_args = include_args(inc_dir);
extend(flags, inc_args);
@@ -117,7 +128,7 @@ vector<string> toolchain::create_compile_command(const compile_file_spec& spec)
}

vector<string> command;
for (auto arg : _cxx_compile) {
for (auto arg : cmd_template) {
if (arg == "<FLAGS>") {
extend(command, flags);
} else {

+ 1
- 1
tools/bootstrap.py View File

@@ -60,6 +60,7 @@ def _build_bootstrap_phase(ph: str, bts_dir: Path,
f'--cxx={args.cxx}',
],
env=env,
cwd=bts_dir,
)


@@ -92,7 +93,6 @@ def main(argv: Sequence[str]) -> int:
exe = _run_boot_phase(phase, args)

print(f'A bootstrapped DDS executable has been generated: {exe}')

return 0



+ 19
- 14
tools/build.py View File

@@ -10,6 +10,11 @@ import sys
import shutil
import tempfile

from dds_ci import paths
from self_build import self_build
from self_deps_get import self_deps_get
from self_deps_build import self_deps_build

ROOT = Path(__file__).parent.parent.absolute()
BUILD_DIR = ROOT / '_build'

@@ -25,13 +30,17 @@ def _generate_toolchain(cxx: str):
comp_id = 'MSVC'
flags += '/experimental:preprocessor '
link_flags += 'rpcrt4.lib '
else:
flags += '-fconcepts'
flags += ' -DSPDLOG_COMPILED_LIB'
content = f'''
Compiler-ID: {comp_id}
C++-Compiler: {cxx}
C++-Version: C++17
Debug: True
Flags: {flags}
Link-Flags: {link_flags}'''
Link-Flags: {link_flags}
'''
print('Using generated toolchain file: ' + content)
f.write(content.encode('utf-8'))
f.close()
@@ -47,25 +56,21 @@ def main(argv: Sequence[str]) -> int:

dds_bootstrap_env_key = 'DDS_BOOTSTRAP_PREV_EXE'
if dds_bootstrap_env_key not in os.environ:
raise RuntimeError(
'A previous-phase bootstrapped executable must be available via $DDS_BOOTSTRAP_PREV_EXE'
)
dds_exe = os.environ[dds_bootstrap_env_key]
raise RuntimeError('A previous-phase bootstrapped executable '
'must be available via $DDS_BOOTSTRAP_PREV_EXE')

print(f'Using previously built DDS executable: {dds_exe}')
dds_exe = Path(os.environ[dds_bootstrap_env_key])

if BUILD_DIR.exists():
shutil.rmtree(BUILD_DIR)

print(f'Using previously built DDS executable: {dds_exe}')
self_deps_get(dds_exe, paths.SELF_TEST_REPO_DIR)

with _generate_toolchain(args.cxx) as tc_fpath:
subprocess.check_call([
dds_exe,
'build',
'-A',
f'-T{tc_fpath}',
f'-p{ROOT}',
f'--out={BUILD_DIR}',
])
self_deps_build(dds_exe, tc_fpath, paths.SELF_TEST_REPO_DIR,
ROOT / 'remote.dds')
self_build(dds_exe, toolchain=tc_fpath, dds_flags=['--apps'])

return 0


+ 8
- 4
tools/self_build.py View File

@@ -1,7 +1,7 @@
#!/usr/bin/env python3
import argparse
from pathlib import Path
from typing import List, NamedTuple
from typing import List, NamedTuple, Iterable
import shutil
import subprocess
import sys
@@ -11,7 +11,11 @@ from dds_ci import cli, proc
ROOT = Path(__file__).parent.parent.absolute()


def self_build(exe: Path, *, toolchain: str, lmi_path: Path = None):
def self_build(exe: Path,
*,
toolchain: str,
lmi_path: Path = None,
dds_flags: Iterable[str] = ()):
# Copy the exe to another location, as windows refuses to let a binary be
# replaced while it is executing
new_exe = ROOT / '_dds.bootstrap-test.exe'
@@ -20,7 +24,7 @@ def self_build(exe: Path, *, toolchain: str, lmi_path: Path = None):
proc.check_run(
new_exe,
'build',
'--full',
dds_flags,
('--toolchain', toolchain),
('-I', lmi_path) if lmi_path else (),
)
@@ -33,7 +37,7 @@ def main(argv: List[str]) -> int:
cli.add_tc_arg(parser)
cli.add_dds_exe_arg(parser)
args = parser.parse_args(argv)
self_build(Path(args.exe), args.toolchain)
self_build(Path(args.exe), toolchain=args.toolchain, dds_flags=['--full'])
return 0



Loading…
Cancel
Save