28 lines
1.7 KiB
Python
28 lines
1.7 KiB
Python
"""Compile the actual production CI wrapper body against deterministic CI doubles."""
|
|
from pathlib import Path
|
|
import subprocess
|
|
import tempfile
|
|
|
|
root = Path(__file__).resolve().parents[1]
|
|
header = (root / 'include/Domito.h').read_text(encoding='utf-8-sig')
|
|
start = header.index('#if (NTDDI_VERSION >= NTDDI_WIN10)\n// Native forwards')
|
|
end = header.index('#define DOMITO_CI_SOURCE_EMBEDDED', start)
|
|
constants_header = (root / 'include/Domito.MinCrypt.h').read_text(encoding='utf-8-sig')
|
|
constants = '\n'.join(line for line in constants_header.splitlines()
|
|
if line.startswith(('#define DOMITO_CI_VALIDATE_FLAG_', '#define MINCRYPT_MAX_HASH_LENGTH', '#define MINCRYPT_SHA')))
|
|
source = (root / 'src/Domito.CodeIntegrity.Validation.cpp').read_text(encoding='utf-8-sig')
|
|
source = source.replace('#include "Domito.Internal.h"', '')
|
|
with tempfile.TemporaryDirectory(prefix='domito-ci-validation-') as temporary:
|
|
directory = Path(temporary)
|
|
(directory / 'ci-validation-api.inc').write_text(constants + '\n' + header[start:end], encoding='utf-8')
|
|
(directory / 'ci-validation-under-test.inc').write_text(source, encoding='utf-8')
|
|
for branch in ['x64', 'other']:
|
|
program = directory / (branch + '.exe')
|
|
flags = ['/DDOMITO_TEST_OTHER_ARCH'] if branch == 'other' else []
|
|
subprocess.run(['cl','/nologo','/EHsc','/W4','/WX','/std:c++17',
|
|
'/DNTDDI_VERSION=0x0A000008','/DNTDDI_WIN10=0x0A000000',
|
|
'/I' + str(directory), *flags, str(Path(__file__).with_name('ci-validation-tests.cpp')),
|
|
'/Fe' + str(program), '/Fo' + str(directory / (branch + '.obj'))],
|
|
cwd=directory, check=True)
|
|
subprocess.run([str(program)], check=True)
|