Skip to content

Commit d6dc6ae

Browse files
committed
grpc: Add targets necessary to cross build grpc and the qps benchmark.
This introduces the following targets for both morello and riscv64: - abseil - c-ares - googlebenchmakr - googletest - grpc - protobuf - re2
1 parent 0144e72 commit d6dc6ae

File tree

6 files changed

+380
-0
lines changed

6 files changed

+380
-0
lines changed

pycheribuild/projects/cross/abseil.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#
2+
# SPDX-License-Identifier: BSD-2-Clause
3+
#
4+
# Copyright (c) 2025 Alfredo Mazzinghi
5+
#
6+
# This software was developed by SRI International, the University of
7+
# Cambridge Computer Laboratory (Department of Computer Science and
8+
# Technology), and Capabilities Limited under Defense Advanced Research
9+
# Projects Agency (DARPA) Contract No. FA8750-24-C-B047 ("DEC").
10+
#
11+
# Redistribution and use in source and binary forms, with or without
12+
# modification, are permitted provided that the following conditions
13+
# are met:
14+
# 1. Redistributions of source code must retain the above copyright
15+
# notice, this list of conditions and the following disclaimer.
16+
# 2. Redistributions in binary form must reproduce the above copyright
17+
# notice, this list of conditions and the following disclaimer in the
18+
# documentation and/or other materials provided with the distribution.
19+
#
20+
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
21+
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23+
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
24+
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25+
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26+
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27+
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28+
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29+
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30+
# SUCH DAMAGE.
31+
#
32+
from .crosscompileproject import BuildType, CrossCompileCMakeProject, GitRepository
33+
from ...config.compilation_targets import CompilationTargets
34+
from ...config.target_info import DefaultInstallDir
35+
36+
37+
class BuildAbseil(CrossCompileCMakeProject):
38+
target = "abseil"
39+
repository = GitRepository("https://github.com/CTSRD-CHERI/abseil-cpp.git", default_branch="cheri-20220623.0")
40+
is_large_source_repository = True
41+
default_build_type = BuildType.DEBUG
42+
native_install_dir = DefaultInstallDir.CHERI_SDK
43+
supported_architectures = (*CompilationTargets.ALL_SUPPORTED_CHERIBSD_TARGETS, *CompilationTargets.ALL_NATIVE)
44+
45+
def setup(self):
46+
super().setup()
47+
self.add_cmake_options(
48+
CMAKE_CXX_STANDARD=17,
49+
BUILD_SHARED_LIBS="ON",
50+
)
51+
self.cross_warning_flags.append("-Wno-error=cheri-capability-misuse")

pycheribuild/projects/cross/c_ares.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#
2+
# SPDX-License-Identifier: BSD-2-Clause
3+
#
4+
# Copyright (c) 2025 Alfredo Mazzinghi
5+
#
6+
# This software was developed by SRI International, the University of
7+
# Cambridge Computer Laboratory (Department of Computer Science and
8+
# Technology), and Capabilities Limited under Defense Advanced Research
9+
# Projects Agency (DARPA) Contract No. FA8750-24-C-B047 ("DEC").
10+
#
11+
# Redistribution and use in source and binary forms, with or without
12+
# modification, are permitted provided that the following conditions
13+
# are met:
14+
# 1. Redistributions of source code must retain the above copyright
15+
# notice, this list of conditions and the following disclaimer.
16+
# 2. Redistributions in binary form must reproduce the above copyright
17+
# notice, this list of conditions and the following disclaimer in the
18+
# documentation and/or other materials provided with the distribution.
19+
#
20+
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
21+
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23+
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
24+
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25+
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26+
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27+
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28+
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29+
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30+
# SUCH DAMAGE.
31+
#
32+
from .crosscompileproject import BuildType, CrossCompileCMakeProject, GitRepository
33+
from ...config.compilation_targets import CompilationTargets
34+
from ...config.target_info import DefaultInstallDir
35+
36+
37+
class BuildCAres(CrossCompileCMakeProject):
38+
target = "c-ares"
39+
repository = GitRepository("https://github.com/c-ares/c-ares.git", default_branch="cares-1_19_1")
40+
is_large_source_repository = True
41+
default_build_type = BuildType.DEBUG
42+
native_install_dir = DefaultInstallDir.CHERI_SDK
43+
supported_architectures = (*CompilationTargets.ALL_SUPPORTED_CHERIBSD_TARGETS, *CompilationTargets.ALL_NATIVE)
44+
45+
def setup(self):
46+
super().setup()
47+
self.add_cmake_options(CARES_BUILD_TESTS="OFF")
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#
2+
# SPDX-License-Identifier: BSD-2-Clause
3+
#
4+
# Copyright (c) 2025 Alfredo Mazzinghi
5+
#
6+
# This software was developed by SRI International, the University of
7+
# Cambridge Computer Laboratory (Department of Computer Science and
8+
# Technology), and Capabilities Limited under Defense Advanced Research
9+
# Projects Agency (DARPA) Contract No. FA8750-24-C-B047 ("DEC").
10+
#
11+
# Redistribution and use in source and binary forms, with or without
12+
# modification, are permitted provided that the following conditions
13+
# are met:
14+
# 1. Redistributions of source code must retain the above copyright
15+
# notice, this list of conditions and the following disclaimer.
16+
# 2. Redistributions in binary form must reproduce the above copyright
17+
# notice, this list of conditions and the following disclaimer in the
18+
# documentation and/or other materials provided with the distribution.
19+
#
20+
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
21+
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23+
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
24+
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25+
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26+
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27+
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28+
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29+
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30+
# SUCH DAMAGE.
31+
#
32+
from .crosscompileproject import BuildType, CrossCompileCMakeProject, GitRepository
33+
from ...config.compilation_targets import CompilationTargets
34+
from ...config.target_info import DefaultInstallDir
35+
36+
37+
class BuildGoogleBenchmark(CrossCompileCMakeProject):
38+
target = "googlebenchmark"
39+
repository = GitRepository("https://github.com/google/benchmark", default_branch="v1.8.2")
40+
dependencies = ("googletest",)
41+
default_build_type = BuildType.RELWITHDEBINFO
42+
native_install_dir = DefaultInstallDir.CHERI_SDK
43+
supported_architectures = (*CompilationTargets.ALL_SUPPORTED_CHERIBSD_TARGETS, *CompilationTargets.ALL_NATIVE)
44+
45+
def setup(self):
46+
super().setup()
47+
self.add_cmake_options(BENCHMARK_ENABLE_TESTING="OFF")
48+
49+
50+
class BuildGoogleTest(CrossCompileCMakeProject):
51+
target = "googletest"
52+
repository = GitRepository("https://github.com/google/googletest", default_branch="v1.13.0")
53+
default_build_type = BuildType.RELWITHDEBINFO
54+
native_install_dir = DefaultInstallDir.CHERI_SDK
55+
supported_architectures = (*CompilationTargets.ALL_SUPPORTED_CHERIBSD_TARGETS, *CompilationTargets.ALL_NATIVE)

pycheribuild/projects/cross/grpc.py

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
#
2+
# SPDX-License-Identifier: BSD-2-Clause
3+
#
4+
# Copyright (c) 2025 Alfredo Mazzinghi
5+
#
6+
# This software was developed by SRI International, the University of
7+
# Cambridge Computer Laboratory (Department of Computer Science and
8+
# Technology), and Capabilities Limited under Defense Advanced Research
9+
# Projects Agency (DARPA) Contract No. FA8750-24-C-B047 ("DEC").
10+
#
11+
# Redistribution and use in source and binary forms, with or without
12+
# modification, are permitted provided that the following conditions
13+
# are met:
14+
# 1. Redistributions of source code must retain the above copyright
15+
# notice, this list of conditions and the following disclaimer.
16+
# 2. Redistributions in binary form must reproduce the above copyright
17+
# notice, this list of conditions and the following disclaimer in the
18+
# documentation and/or other materials provided with the distribution.
19+
#
20+
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
21+
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23+
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
24+
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25+
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26+
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27+
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28+
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29+
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30+
# SUCH DAMAGE.
31+
#
32+
33+
from .crosscompileproject import BuildType, CrossCompileCMakeProject, GitRepository
34+
from ...config.compilation_targets import CompilationTargets
35+
from ...config.target_info import DefaultInstallDir
36+
37+
38+
class BuildGrpc(CrossCompileCMakeProject):
39+
target = "grpc"
40+
repository = GitRepository("https://github.com/CTSRD-CHERI/grpc.git", default_branch="grpc-1.54.2-cheri")
41+
dependencies = ("abseil", "c-ares", "protobuf", "re2", "googlebenchmark")
42+
is_large_source_repository = True
43+
default_build_type = BuildType.RELWITHDEBINFO
44+
native_install_dir = DefaultInstallDir.CHERI_SDK
45+
supported_architectures = (*CompilationTargets.ALL_SUPPORTED_CHERIBSD_TARGETS, *CompilationTargets.ALL_NATIVE)
46+
47+
@property
48+
def cmake_prefix_paths(self):
49+
# Force CMAKE_PREFIX_PATH to be empty
50+
# This should be fine, because we are still setting the
51+
# CMAKE_SYSROOT correctly and setting
52+
# CMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER
53+
# So the find_package() calls should pick up sysroot packages
54+
# while find_program() will find thigs in $PATH or CMAKE_PROGRAM_PATH.
55+
if self.compiling_for_host():
56+
return super().cmake_prefix_paths
57+
else:
58+
return []
59+
60+
def setup(self):
61+
super().setup()
62+
self.add_cmake_options(
63+
CMAKE_CXX_STANDARD=17,
64+
gRPC_ABSL_PROVIDER="package",
65+
gRPC_BENCHMARK_PROVIDER="package",
66+
gRPC_CARES_PROVIDER="package",
67+
gRPC_PROTOBUF_PROVIDER="package",
68+
gRPC_RE2_PROVIDER="package",
69+
gRPC_SSL_PROVIDER="package",
70+
gRPC_ZLIB_PROVIDER="package",
71+
gRPC_BACKWARDS_COMPATIBILITY_MODE="OFF",
72+
gRPC_BUILD_CODEGEN="ON",
73+
gRPC_BUILD_GRPC_CPP_PLUGIN="ON",
74+
BUILD_SHARED_LIBS="ON",
75+
CMAKE_PROGRAM_PATH=self.config.cheri_sdk_bindir,
76+
)
77+
78+
if not self.compiling_for_host():
79+
self.add_cmake_options(gRPC_BUILD_TESTS="ON")
80+
self.cross_warning_flags.append("-Wno-error=cheri-capability-misuse")
81+
self.cross_warning_flags.append("-Wno-error=format")
82+
83+
def install(self, **kwargs):
84+
super().install(**kwargs)
85+
86+
if self.target_info.is_native():
87+
return
88+
89+
scenario_dir = self.install_dir / "qps_scenarios"
90+
self.makedirs(scenario_dir)
91+
self.run_cmd(
92+
"python",
93+
f"{self.source_dir}/tools/run_tests/performance/scenario_config_exporter.py",
94+
"--export_scenarios",
95+
"-l",
96+
"c++",
97+
"--category=all",
98+
cwd=scenario_dir,
99+
)
100+
101+
# Install the QPS benchmark components
102+
self.install_file(self.build_dir / "qps_worker", self.install_dir / "grpc_qps_worker")
103+
self.install_file(self.build_dir / "qps_json_driver", self.install_dir / "grpc_qps_json_driver")
104+
105+
qps_utils_dir = self.install_dir / "qps_utils"
106+
self.makedirs(qps_utils_dir)
107+
self.makedirs(qps_utils_dir / "python_utils")
108+
self.install_file(
109+
self.source_dir / "tools" / "run_tests" / "start_port_server.py", qps_utils_dir / "start_port_server.py"
110+
)
111+
self.install_file(
112+
self.source_dir / "tools" / "run_tests" / "python_utils" / "port_server.py",
113+
qps_utils_dir / "python_utils" / "port_server.py",
114+
)
115+
self.install_file(
116+
self.source_dir / "tools" / "run_tests" / "python_utils" / "start_port_server.py",
117+
qps_utils_dir / "python_utils" / "start_port_server.py",
118+
)
119+
self.install_file(
120+
self.source_dir / "tools" / "run_tests" / "python_utils" / "jobset.py",
121+
qps_utils_dir / "python_utils" / "jobset.py",
122+
)
123+
124+
for sofile in self.build_dir.glob("libgrpc++_test_config.so*"):
125+
self.install_file(self.build_dir / sofile, self.install_dir / "lib" / sofile.name)
126+
for sofile in self.build_dir.glob("libgrpc++_test_util.so*"):
127+
self.install_file(self.build_dir / sofile, self.install_dir / "lib" / sofile.name)
128+
for sofile in self.build_dir.glob("libgrpc_test_util.so*"):
129+
self.install_file(self.build_dir / sofile, self.install_dir / "lib" / sofile.name)
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#
2+
# SPDX-License-Identifier: BSD-2-Clause
3+
#
4+
# Copyright (c) 2025 Alfredo Mazzinghi
5+
#
6+
# This software was developed by SRI International, the University of
7+
# Cambridge Computer Laboratory (Department of Computer Science and
8+
# Technology), and Capabilities Limited under Defense Advanced Research
9+
# Projects Agency (DARPA) Contract No. FA8750-24-C-B047 ("DEC").
10+
#
11+
# Redistribution and use in source and binary forms, with or without
12+
# modification, are permitted provided that the following conditions
13+
# are met:
14+
# 1. Redistributions of source code must retain the above copyright
15+
# notice, this list of conditions and the following disclaimer.
16+
# 2. Redistributions in binary form must reproduce the above copyright
17+
# notice, this list of conditions and the following disclaimer in the
18+
# documentation and/or other materials provided with the distribution.
19+
#
20+
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
21+
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23+
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
24+
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25+
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26+
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27+
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28+
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29+
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30+
# SUCH DAMAGE.
31+
#
32+
from .crosscompileproject import BuildType, CrossCompileCMakeProject, GitRepository
33+
from ...config.compilation_targets import CompilationTargets
34+
from ...config.target_info import DefaultInstallDir
35+
36+
37+
class BuildProtobuf(CrossCompileCMakeProject):
38+
target = "protobuf"
39+
repository = GitRepository("https://github.com/CTSRD-CHERI/protobuf.git", default_branch="v3.21.12-cheri")
40+
is_large_source_repository = True
41+
default_build_type = BuildType.RELWITHDEBINFO
42+
native_install_dir = DefaultInstallDir.CHERI_SDK
43+
supported_architectures = (*CompilationTargets.ALL_SUPPORTED_CHERIBSD_TARGETS, *CompilationTargets.ALL_NATIVE)
44+
45+
def setup(self):
46+
super().setup()
47+
self.add_cmake_options(
48+
CMAKE_CXX_STANDARD=11,
49+
protobuf_BUILD_TESTS="OFF",
50+
BUILD_SHARED_LIBS="ON",
51+
)

pycheribuild/projects/cross/re2.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#
2+
# SPDX-License-Identifier: BSD-2-Clause
3+
#
4+
# Copyright (c) 2025 Alfredo Mazzinghi
5+
#
6+
# This software was developed by SRI International, the University of
7+
# Cambridge Computer Laboratory (Department of Computer Science and
8+
# Technology), and Capabilities Limited under Defense Advanced Research
9+
# Projects Agency (DARPA) Contract No. FA8750-24-C-B047 ("DEC").
10+
#
11+
# Redistribution and use in source and binary forms, with or without
12+
# modification, are permitted provided that the following conditions
13+
# are met:
14+
# 1. Redistributions of source code must retain the above copyright
15+
# notice, this list of conditions and the following disclaimer.
16+
# 2. Redistributions in binary form must reproduce the above copyright
17+
# notice, this list of conditions and the following disclaimer in the
18+
# documentation and/or other materials provided with the distribution.
19+
#
20+
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
21+
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23+
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
24+
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25+
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26+
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27+
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28+
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29+
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30+
# SUCH DAMAGE.
31+
#
32+
from .crosscompileproject import BuildType, CrossCompileCMakeProject, GitRepository
33+
from ...config.compilation_targets import CompilationTargets
34+
from ...config.target_info import DefaultInstallDir
35+
36+
37+
class BuildRe2(CrossCompileCMakeProject):
38+
target = "re2"
39+
repository = GitRepository("https://github.com/google/re2", default_branch="2023-03-01")
40+
is_large_source_repository = True
41+
default_build_type = BuildType.DEBUG
42+
native_install_dir = DefaultInstallDir.CHERI_SDK
43+
supported_architectures = (*CompilationTargets.ALL_SUPPORTED_CHERIBSD_TARGETS, *CompilationTargets.ALL_NATIVE)
44+
45+
def setup(self):
46+
super().setup()
47+
self.add_cmake_options(BUILD_SHARED_LIBS="ON")

0 commit comments

Comments
 (0)