mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2025-11-16 12:34:33 +00:00
- Implemented vDSO functionality for the RISC-V architecture, including the necessary source files and linker scripts. - Introduced a new `vdso_sys.c` file for RISC-V, containing functions to handle time retrieval using the vDSO mechanism. - Created architecture-specific linker scripts (`vdso.lds.S`) for both AArch64 and RISC-V. - Updated the build system to support vDSO compilation for RISC-V, including necessary adjustments in `SConstruct` files. - Refactored existing vDSO code to improve compatibility and maintainability across architectures. - Adjusted the maximum number of PTY devices in the terminal configuration from 64 to 32 for better resource management. - Fixed minor issues in existing code, including correcting the path for the vDSO shared library and ensuring proper function definitions.
53 lines
1.8 KiB
Python
53 lines
1.8 KiB
Python
import os
|
|
import rtconfig
|
|
import subprocess
|
|
from building import *
|
|
|
|
group = []
|
|
cwd = GetCurrentDir()
|
|
CPPPATH = [cwd, cwd + "/kernel"]
|
|
list = os.listdir(cwd)
|
|
src = Glob('kernel/*.c') + Glob('kernel/*.S')
|
|
|
|
if not GetDepend(['RT_USING_VDSO']):
|
|
Return('group')
|
|
|
|
if rtconfig.ARCH != "aarch64" and rtconfig.ARCH != "risc-v":
|
|
# not supported arch
|
|
src = []
|
|
else:
|
|
if not hasattr(rtconfig, 'CPP') or rtconfig.CPP is None:
|
|
rtconfig.CPP = rtconfig.PREFIX + 'cpp'
|
|
if not hasattr(rtconfig, 'CPPFLAGS') or rtconfig.CPPFLAGS is None:
|
|
rtconfig.CPPFLAGS = ' -E -P -x assembler-with-cpp'
|
|
|
|
if not os.path.exists(cwd + "/user" + "/arch" +"/" + rtconfig.ARCH + "/vdso.lds"):
|
|
Preprocessing("user/arch/" + rtconfig.ARCH + "/vdso.lds.S", ".lds", CPPPATH=[cwd])
|
|
|
|
vdso_arch = os.path.join(cwd, 'user',"arch", rtconfig.ARCH)
|
|
|
|
process_env = os.environ.copy()
|
|
if hasattr(rtconfig, 'EXEC_PATH') and rtconfig.EXEC_PATH is not None:
|
|
process_env['RTT_EXEC_PATH'] = rtconfig.EXEC_PATH
|
|
if hasattr(rtconfig, 'PREFIX') and rtconfig.PREFIX is not None:
|
|
process_env['RTT_CC_PREFIX'] = rtconfig.PREFIX
|
|
if hasattr(rtconfig, 'DEVICE') and rtconfig.DEVICE is not None:
|
|
process_env['RTT_DEVICE'] = rtconfig.DEVICE
|
|
|
|
command = ["scons", "-C", vdso_arch]
|
|
clean_command = ["scons", "-C", vdso_arch, "--clean"]
|
|
|
|
if not GetOption('clean'):
|
|
result = subprocess.run(command, env=process_env, check=True)
|
|
else:
|
|
result = subprocess.run(clean_command, env=process_env, check=True)
|
|
|
|
if result.returncode == 0:
|
|
print("Command executed successfully")
|
|
else:
|
|
print("Command failed with exit code:", result.returncode)
|
|
exit(1)
|
|
|
|
group = DefineGroup('vDSO', src, depend = ['RT_USING_SMART','RT_USING_VDSO'], CPPPATH = CPPPATH)
|
|
Return('group')
|