| return False | return False | ||||
| def have_sccache() -> bool: | |||||
| try: | |||||
| subprocess.check_output(['sccache', '--version']) | |||||
| return True | |||||
| except FileNotFoundError: | |||||
| return False | |||||
| def _create_compile_command(opts: BuildOptions, cpp_file: Path, | def _create_compile_command(opts: BuildOptions, cpp_file: Path, | ||||
| obj_file: Path) -> List[str]: | obj_file: Path) -> List[str]: | ||||
| if not opts.is_msvc: | if not opts.is_msvc: | ||||
| ] | ] | ||||
| if have_ccache(): | if have_ccache(): | ||||
| cmd.insert(0, 'ccache') | cmd.insert(0, 'ccache') | ||||
| elif have_sccache(): | |||||
| cmd.insert(0, 'sccache') | |||||
| if opts.static: | if opts.static: | ||||
| cmd.append('-static') | cmd.append('-static') | ||||
| if opts.debug: | if opts.debug: | ||||
| '/EHsc', | '/EHsc', | ||||
| '/std:c++latest', | '/std:c++latest', | ||||
| '/permissive-', | '/permissive-', | ||||
| '/experimental:preprocessor', | |||||
| '/wd5105', # winbase.h | |||||
| '/DWIN32_LEAN_AND_MEAN', | |||||
| '/DNOMINMAX', | |||||
| '/DFMT_HEADER_ONLY=1', | '/DFMT_HEADER_ONLY=1', | ||||
| '/D_CRT_SECURE_NO_WARNINGS', | |||||
| '/diagnostics:caret', | |||||
| f'/I{ROOT / "src"}', | f'/I{ROOT / "src"}', | ||||
| str(cpp_file), | str(cpp_file), | ||||
| '/c', | '/c', | ||||
| f'/Fo{obj_file}', | f'/Fo{obj_file}', | ||||
| ] | ] | ||||
| if have_ccache(): | |||||
| cmd.insert(0, 'ccache') | |||||
| elif have_sccache(): | |||||
| cmd.insert(0, 'sccache') | |||||
| if opts.debug: | if opts.debug: | ||||
| cmd.extend(('/Od', '/DEBUG', '/Z7')) | cmd.extend(('/Od', '/DEBUG', '/Z7')) | ||||
| else: | else: | ||||
| f'Compile command ({cmd}) failed for {cpp_file}:\n{res.stdout.decode()}' | f'Compile command ({cmd}) failed for {cpp_file}:\n{res.stdout.decode()}' | ||||
| ) | ) | ||||
| stdout: str = res.stdout.decode() | stdout: str = res.stdout.decode() | ||||
| fname_head = f'{cpp_file.name}\r\n' | |||||
| fname_head = f'{cpp_file.name}\n' | |||||
| if stdout.startswith(fname_head): | if stdout.startswith(fname_head): | ||||
| stdout = stdout[len(fname_head):] | stdout = stdout[len(fname_head):] | ||||
| if stdout: | if stdout: |