61 target_dir = self.build_lib
62 circt_dir = os.path.abspath(
63 os.path.join(os.path.dirname(__file__),
"..",
"..",
".."))
64 cmake_build_dir = os.getenv(
"CIRCT_CMAKE_BUILD_DIR")
65 if not cmake_build_dir:
66 cmake_build_dir = os.path.join(circt_dir,
"build")
67 cmake_install_dir = os.path.join(cmake_build_dir,
"..",
"install")
68 llvm_dir = os.getenv(
"CIRCT_LLVM_DIR")
70 llvm_dir = os.path.join(circt_dir,
"llvm",
"llvm")
73 exist_ninja = shutil.which(
"ninja")
is not None
74 cmake_generator = [
"-G",
"Ninja"]
if exist_ninja
else []
77 exist_lld = shutil.which(
"lld")
is not None
78 cmake_linker = [
"-DLLVM_USE_LINKER=lld"]
if exist_lld
else []
81 link_jobs = os.getenv(
"CIRCT_PARALLEL_LINK_JOBS")
82 cmake_link_jobs = [
"-DLLVM_PARALLEL_LINK_JOBS={}".format(int(link_jobs))
83 ]
if link_jobs
else []
86 "-DCMAKE_BUILD_TYPE=Release",
87 "-DCMAKE_INSTALL_PREFIX={}".format(os.path.abspath(cmake_install_dir)),
92 "-DCMAKE_OSX_DEPLOYMENT_TARGET=10.15",
93 "-DPython3_EXECUTABLE={}".format(sys.executable.replace(
"\\",
"/")),
94 "-DLLVM_ENABLE_PROJECTS=mlir",
95 "-DLLVM_EXTERNAL_PROJECTS=circt",
96 "-DLLVM_EXTERNAL_CIRCT_SOURCE_DIR={}".format(circt_dir),
97 "-DLLVM_TARGETS_TO_BUILD=host",
98 "-DMLIR_ENABLE_BINDINGS_PYTHON=ON",
99 "-DMLIR_BINDINGS_PYTHON_NB_DOMAIN=circt",
100 "-DCIRCT_BINDINGS_PYTHON_ENABLED=ON",
101 "-DCIRCT_RELEASE_TAG_ENABLED=ON",
102 "-DCIRCT_RELEASE_TAG=firtool"
103 ] + cmake_link_jobs + cmake_linker + cmake_generator
109 if platform.system() ==
"Linux":
110 python_libdir = sysconfig.get_config_var(
'LIBDIR')
111 python_library = sysconfig.get_config_var(
'LIBRARY')
112 if python_libdir
and not os.path.isabs(python_library):
113 python_library = os.path.join(python_libdir, python_library)
114 if python_library
and not os.path.exists(python_library):
115 print(
"Detected static linked python. Faking a library for cmake.")
116 fake_libdir = os.path.join(cmake_build_dir,
"fake_python",
"lib")
117 os.makedirs(fake_libdir, exist_ok=
True)
118 fake_library = os.path.join(fake_libdir,
119 sysconfig.get_config_var(
'LIBRARY'))
120 subprocess.check_call([
"ar",
"q", fake_library])
121 cmake_args.append(
"-DPython3_LIBRARY:PATH={}".format(fake_library))
123 os.makedirs(cmake_build_dir, exist_ok=
True)
124 if os.path.exists(cmake_install_dir):
125 shutil.rmtree(cmake_install_dir)
126 cmake_cache_file = os.path.join(cmake_build_dir,
"CMakeCache.txt")
127 if os.path.exists(cmake_cache_file):
128 os.remove(cmake_cache_file)
129 subprocess.check_call([
"cmake", llvm_dir] + cmake_args, cwd=cmake_build_dir)
130 subprocess.check_call(
131 [
"cmake",
"--build",
".",
"--target",
"install-CIRCTPythonModules"],
133 if os.path.exists(target_dir):
134 os.remove(target_dir)
135 shutil.copytree(os.path.join(cmake_install_dir,
"python_packages",