setup.py: fully automate secp256k1 extension module build
The secp256k1 library is now cloned from Github and built automatically. It’s linked statically to the extension mod, so that the resulting wheel can run on a system without libsecp256k1 installed.
This commit is contained in:
parent
1b1b511a09
commit
25fb862390
1 changed files with 30 additions and 7 deletions
37
setup.py
37
setup.py
|
|
@ -1,16 +1,39 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys,os
|
||||
from setuptools import setup,Extension
|
||||
from setuptools.command.build_ext import build_ext
|
||||
from subprocess import run,PIPE
|
||||
|
||||
cache_path = os.path.join(os.environ['HOME'],'.cache','mmgen')
|
||||
ext_path = os.path.join(cache_path,'secp256k1')
|
||||
|
||||
def build_libsecp256k1():
|
||||
if not os.path.exists(cache_path):
|
||||
os.makedirs(cache_path)
|
||||
if not os.path.exists(ext_path):
|
||||
run(['git','clone','https://github.com/bitcoin-core/secp256k1.git'],check=True,cwd=cache_path)
|
||||
if not os.path.exists(os.path.join(ext_path,'.libs/libsecp256k1.a')):
|
||||
run(['./autogen.sh'],check=True,cwd=ext_path)
|
||||
run(['./configure','CFLAGS=-g -O2 -fPIC'],check=True,cwd=ext_path)
|
||||
run(['make','-j4'],check=True,cwd=ext_path)
|
||||
|
||||
have_msys2 = run(['uname','-s'],stdout=PIPE,check=True).stdout.startswith(b'MSYS_NT')
|
||||
if have_msys2:
|
||||
print('MSYS2 system detected')
|
||||
|
||||
setup(ext_modules=[Extension(
|
||||
name = 'mmgen.secp256k1',
|
||||
sources = ['extmod/secp256k1mod.c'],
|
||||
libraries = ['secp256k1'] + ([],['gmp'])[have_msys2],
|
||||
library_dirs = ['/usr/local/lib',r'C:\msys64\mingw64\lib',r'C:\msys64\usr\lib'],
|
||||
include_dirs = ['/usr/local/include',r'C:\msys64\mingw64\include',r'C:\msys64\usr\include'],
|
||||
)])
|
||||
class my_build_ext(build_ext):
|
||||
def build_extension(self,ext):
|
||||
build_libsecp256k1()
|
||||
build_ext.build_extension(self,ext)
|
||||
|
||||
setup(
|
||||
cmdclass = { 'build_ext': my_build_ext },
|
||||
ext_modules = [Extension(
|
||||
name = 'mmgen.secp256k1',
|
||||
sources = ['extmod/secp256k1mod.c'],
|
||||
libraries = ([],['gmp'])[have_msys2],
|
||||
extra_objects = [os.path.join(ext_path,'.libs/libsecp256k1.a')],
|
||||
include_dirs = [os.path.join(ext_path,'include')],
|
||||
)]
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue