From 8c79da7bfa9b2664e8e5431b9153aa2ac0fe96cb Mon Sep 17 00:00:00 2001 From: Adal Chiriliuc Date: Wed, 7 Dec 2022 23:47:20 +0200 Subject: [PATCH 1/8] added support for Windows build --- setup.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index a6ba6e3..3ebbef7 100644 --- a/setup.py +++ b/setup.py @@ -33,11 +33,18 @@ if platform.system() == 'Darwin': aimrocks_extra_compile_args += ['-mmacosx-version-min=10.7', '-stdlib=libc++'] aimrocks_extra_link_args += ["-Wl,-rpath,@loader_path"] +elif platform.system() == 'Windows': + aimrocks_extra_compile_args = ['/std:c++latest', '/permissive-', '/W3', '/O2', '/EHsc', '/GL'] + aimrocks_extra_link_args = ['/LTCG'] else: aimrocks_extra_link_args += ["-Wl,-rpath,$ORIGIN"] -third_party_install_dir = os.environ.get('AIM_DEP_DIR', '/usr/local') -third_party_deps = ['rocksdb'] +if platform.system() == 'Windows': + third_party_install_dir = os.environ.get('AIM_DEP_DIR', '../vcpkg/installed/x64-windows-static-md') + third_party_deps = ['rocksdb', 'bz2', 'lz4', 'snappy', 'zlib', 'zstd', 'rpcrt4', 'shlwapi'] +else: + third_party_install_dir = os.environ.get('AIM_DEP_DIR', '/usr/local') + third_party_deps = ['rocksdb'] third_party_lib_dir = os.path.join(third_party_install_dir, 'lib') third_party_libs = glob(os.path.join(third_party_lib_dir, 'librocksdb.*')) @@ -75,7 +82,7 @@ language='c++', include_dirs=[local_include_dir], library_dirs=[third_party_lib_dir], - libraries=['rocksdb'], + libraries=third_party_deps, ) ] From e30c27ed6d6a057ed8faf42aad5aee139b4f323e Mon Sep 17 00:00:00 2001 From: Adal Chiriliuc Date: Wed, 7 Dec 2022 23:47:42 +0200 Subject: [PATCH 2/8] fix test for Windows --- tests/test_memtable.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/test_memtable.py b/tests/test_memtable.py index 103c773..75a1cc2 100644 --- a/tests/test_memtable.py +++ b/tests/test_memtable.py @@ -14,6 +14,7 @@ def test_open_skiplist_memtable_factory(): try: test_db = aimrocks.DB(os.path.join(loc, "test"), opts) finally: + del test_db shutil.rmtree(loc) @@ -26,4 +27,5 @@ def test_open_vector_memtable_factory(): try: test_db = aimrocks.DB(os.path.join(loc, "test"), opts) finally: + del test_db shutil.rmtree(loc) From 61b3486f52f5cc2ee1254fdb8ff26dad522f6071 Mon Sep 17 00:00:00 2001 From: Adal Chiriliuc Date: Thu, 8 Dec 2022 14:11:15 +0200 Subject: [PATCH 3/8] more robust test --- tests/test_memtable.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_memtable.py b/tests/test_memtable.py index 75a1cc2..531c85f 100644 --- a/tests/test_memtable.py +++ b/tests/test_memtable.py @@ -13,8 +13,8 @@ def test_open_skiplist_memtable_factory(): loc = tempfile.mkdtemp() try: test_db = aimrocks.DB(os.path.join(loc, "test"), opts) - finally: del test_db + finally: shutil.rmtree(loc) @@ -26,6 +26,6 @@ def test_open_vector_memtable_factory(): loc = tempfile.mkdtemp() try: test_db = aimrocks.DB(os.path.join(loc, "test"), opts) - finally: del test_db + finally: shutil.rmtree(loc) From 83c4aadd5419f762f657df5d2bb77da46ab36747 Mon Sep 17 00:00:00 2001 From: Adal Chiriliuc Date: Thu, 8 Dec 2022 15:01:01 +0200 Subject: [PATCH 4/8] copy Windows libs --- setup.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 3ebbef7..a36a029 100644 --- a/setup.py +++ b/setup.py @@ -41,13 +41,19 @@ if platform.system() == 'Windows': third_party_install_dir = os.environ.get('AIM_DEP_DIR', '../vcpkg/installed/x64-windows-static-md') - third_party_deps = ['rocksdb', 'bz2', 'lz4', 'snappy', 'zlib', 'zstd', 'rpcrt4', 'shlwapi'] + third_party_deps = ['rocksdb', 'bz2', 'lz4', 'snappy', 'zlib', 'zstd'] else: third_party_install_dir = os.environ.get('AIM_DEP_DIR', '/usr/local') third_party_deps = ['rocksdb'] third_party_lib_dir = os.path.join(third_party_install_dir, 'lib') -third_party_libs = glob(os.path.join(third_party_lib_dir, 'librocksdb.*')) +if platform.system() == 'Windows': + third_party_libs = [ + os.path.join(third_party_lib_dir, lib + '.lib') for lib in third_party_deps + ] + third_party_deps += ['rpcrt4', 'shlwapi'] # Windows system libs used by rocksdb +else: + third_party_libs = glob(os.path.join(third_party_lib_dir, 'librocksdb.*')) third_party_headers = [os.path.join(third_party_install_dir, 'include/rocksdb')] From c1d7d43610992ba504a98e5117d829b51853c84e Mon Sep 17 00:00:00 2001 From: Adal Chiriliuc Date: Thu, 8 Dec 2022 15:01:26 +0200 Subject: [PATCH 5/8] add Windows libs to package manifest --- MANIFEST.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MANIFEST.in b/MANIFEST.in index 27cd7f8..eb7254d 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,2 +1,2 @@ include requirements.txt -recursive-include src *.hpp *.pxd *.pyx *.h *.hxx *.pyi *.so* *.dylib* +recursive-include src *.hpp *.pxd *.pyx *.h *.hxx *.pyi *.lib *.so* *.dylib* From 93c85615b03011657c9c054e182f5b80fdccce64 Mon Sep 17 00:00:00 2001 From: Adal Chiriliuc Date: Thu, 8 Dec 2022 15:01:50 +0200 Subject: [PATCH 6/8] added Windows libs to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index f61a629..28d9139 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ dist *.eggs src/aimrocks/lib_rocksdb.cpp *.so +*.lib *.dylib lib*.so.* __pycache__ From 6da5cf8bded64f771f2d7ea72b37b17e58d48f58 Mon Sep 17 00:00:00 2001 From: Adal Chiriliuc Date: Thu, 8 Dec 2022 16:21:50 +0200 Subject: [PATCH 7/8] formatting --- setup.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index a36a029..4e29bfc 100644 --- a/setup.py +++ b/setup.py @@ -49,7 +49,8 @@ third_party_lib_dir = os.path.join(third_party_install_dir, 'lib') if platform.system() == 'Windows': third_party_libs = [ - os.path.join(third_party_lib_dir, lib + '.lib') for lib in third_party_deps + os.path.join(third_party_lib_dir, lib + '.lib') + for lib in third_party_deps ] third_party_deps += ['rpcrt4', 'shlwapi'] # Windows system libs used by rocksdb else: From 8ffc5ffd714ba55ad0c80bb1b347527715f5ee63 Mon Sep 17 00:00:00 2001 From: Adal Chiriliuc Date: Thu, 8 Dec 2022 16:26:29 +0200 Subject: [PATCH 8/8] added support for Windows build --- src/aimrocks/lib_utils.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/aimrocks/lib_utils.py b/src/aimrocks/lib_utils.py index 40e2dc7..c9f53aa 100644 --- a/src/aimrocks/lib_utils.py +++ b/src/aimrocks/lib_utils.py @@ -17,9 +17,20 @@ def get_lib_dir(): return path def get_libs(): - return [ + libs = [ 'rocksdb', ] + if platform.system() == 'Windows': + libs += [ + 'bz2', + 'lz4', + 'snappy', + 'zlib', + 'zstd', + 'rpcrt4', + 'shlwapi', + ] + return libs def get_lib_filename(name, lib_dir): if platform.system() == 'Darwin':