diff --git a/pufferlib/ocean/environment.py b/pufferlib/ocean/environment.py index 6c56a4ea2..3bcaa7dc8 100644 --- a/pufferlib/ocean/environment.py +++ b/pufferlib/ocean/environment.py @@ -1,5 +1,12 @@ import importlib import pufferlib.emulation +import platform +import os + +is_windows = platform.system() == "Windows" +if is_windows: + raylib_dll_path = os.path.abspath(r'raylib-5.5_win64_msvc16\lib') + os.add_dll_directory(raylib_dll_path) def lazy_import(module_path, attr): """ diff --git a/pufferlib/pufferl.py b/pufferlib/pufferl.py index 1a7bacfbf..820ee9020 100644 --- a/pufferlib/pufferl.py +++ b/pufferlib/pufferl.py @@ -6,6 +6,8 @@ import warnings warnings.filterwarnings('error', category=RuntimeWarning) +import platform +is_windows = platform.system() == "Windows" import os import io import sys @@ -616,7 +618,10 @@ def run(self): while not self.stopped: self.cpu_util.append(100*psutil.cpu_percent()/psutil.cpu_count()) mem = psutil.virtual_memory() - self.cpu_mem.append(100*mem.active/mem.total) + if is_windows: + self.cpu_mem.append(100*mem.used/mem.total) + else: + self.cpu_mem.append(100*mem.active/mem.total) if torch.cuda.is_available(): # Monitoring in distributed crashes nvml if torch.distributed.is_initialized(): diff --git a/setup.py b/setup.py index bc4ef4d47..a694492b2 100644 --- a/setup.py +++ b/setup.py @@ -34,7 +34,14 @@ # Build raylib for your platform RAYLIB_URL = 'https://github.com/raysan5/raylib/releases/download/5.5/' -RAYLIB_NAME = 'raylib-5.5_macos' if platform.system() == "Darwin" else 'raylib-5.5_linux_amd64' +system = platform.system() +if system == 'Linux': + RAYLIB_NAME = 'raylib-5.5_linux_amd64' +elif system == 'Darwin': + RAYLIB_NAME = 'raylib-5.5_macos' +elif system == 'Windows': + RAYLIB_NAME = 'raylib-5.5_win64_msvc16' + RLIGHTS_URL = 'https://raw.githubusercontent.com/raysan5/raylib/refs/heads/master/examples/shaders/rlights.h' def download_raylib(platform, ext): @@ -53,7 +60,7 @@ def download_raylib(platform, ext): if not NO_OCEAN: download_raylib('raylib-5.5_webassembly', '.zip') - download_raylib(RAYLIB_NAME, '.tar.gz') + download_raylib(RAYLIB_NAME, '.tar.gz' if platform.system() != "Windows" else '.zip') BOX2D_URL = 'https://github.com/capnspacehook/box2d/releases/latest/download/' BOX2D_NAME = 'box2d-macos-arm64' if platform.system() == "Darwin" else 'box2d-linux-amd64' @@ -124,7 +131,6 @@ def download_box2d(platform): '-O3', ] -system = platform.system() if system == 'Linux': extra_compile_args += [ '-Wno-alloc-size-larger-than', @@ -145,6 +151,8 @@ def download_box2d(platform): '-framework', 'OpenGL', '-framework', 'IOKit', ] +elif system == 'Windows': + pass else: raise ValueError(f'Unsupported system: {system}') @@ -183,8 +191,8 @@ def run(self): self.extensions = [e for e in self.extensions if e.name in extnames] super().run() +RAYLIB_A = f'{RAYLIB_NAME}/lib/raylibdll.lib' if system == "Windows" else f'{RAYLIB_NAME}/lib/libraylib.a' INCLUDE = [f'{BOX2D_NAME}/include', f'{BOX2D_NAME}/src'] -RAYLIB_A = f'{RAYLIB_NAME}/lib/libraylib.a' extension_kwargs = dict( include_dirs=INCLUDE, extra_compile_args=extra_compile_args, @@ -198,7 +206,7 @@ def run(self): c_extension_paths = glob.glob('pufferlib/ocean/**/binding.c', recursive=True) c_extensions = [ Extension( - path.rstrip('.c').replace('/', '.'), + path.rstrip('.c').replace('/', '.').replace('\\', '.'), sources=[path], **extension_kwargs, ) @@ -271,18 +279,19 @@ def run(self): ), ] -# Prevent Conda from injecting garbage compile flags -from distutils.sysconfig import get_config_vars -cfg_vars = get_config_vars() -for key in ('CC', 'CXX', 'LDSHARED'): - if cfg_vars[key]: - cfg_vars[key] = cfg_vars[key].replace('-B /root/anaconda3/compiler_compat', '') - cfg_vars[key] = cfg_vars[key].replace('-pthread', '') - cfg_vars[key] = cfg_vars[key].replace('-fno-strict-overflow', '') +if system != 'Windows': + # Prevent Conda from injecting garbage compile flags + from distutils.sysconfig import get_config_vars + cfg_vars = get_config_vars() + for key in ('CC', 'CXX', 'LDSHARED'): + if cfg_vars[key]: + cfg_vars[key] = cfg_vars[key].replace('-B /root/anaconda3/compiler_compat', '') + cfg_vars[key] = cfg_vars[key].replace('-pthread', '') + cfg_vars[key] = cfg_vars[key].replace('-fno-strict-overflow', '') -for key, value in cfg_vars.items(): - if value and '-fno-strict-overflow' in str(value): - cfg_vars[key] = value.replace('-fno-strict-overflow', '') + for key, value in cfg_vars.items(): + if value and '-fno-strict-overflow' in str(value): + cfg_vars[key] = value.replace('-fno-strict-overflow', '') install_requires = [ 'setuptools', @@ -295,7 +304,7 @@ def run(self): if not NO_TRAIN: install_requires += [ - 'torch>=2.9', + 'torch>=2.6', 'psutil', 'nvidia-ml-py', 'rich',