Skip to content

Commit ead0ec3

Browse files
Fix macOS build configuration
1 parent 324c726 commit ead0ec3

2 files changed

Lines changed: 35 additions & 33 deletions

File tree

.github/workflows/pytest-coverage.yml

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -33,28 +33,22 @@ jobs:
3333
with:
3434
submodules: recursive
3535

36-
- name: (MacOs only) Install GNU GCC.
36+
- name: (MacOs only) Install build dependencies
3737
if: matrix.os == 'macos-latest'
3838
run: |
39-
brew install gcc libomp
40-
41-
- name: (MacOs only) Set CC/CXX environment variables to GNU GCC
42-
if: matrix.os == 'macos-latest'
43-
run: |
44-
45-
# Check GCC installation path. Brew installs GCC in /opt/homebrew/bin on Apple Silicon and /usr/local/bin on Intel.
46-
if [[ $(uname -m) = "arm64" ]]; then BREW_GCC_PATH="/opt/homebrew/bin"; else BREW_GCC_PATH="/usr/local/bin"; fi
47-
echo "GCC installed at $BREW_GCC_PATH"
48-
49-
# Set CC/CXX environment variables to GNU GCC
50-
echo "CC=$BREW_GCC_PATH/$(ls $BREW_GCC_PATH | grep ^gcc-[0-9] | sort -V -r | head -n 1)" >> $GITHUB_ENV
51-
echo "CXX=$BREW_GCC_PATH/$(ls $BREW_GCC_PATH | grep ^g++-[0-9] | sort -V -r | head -n 1)" >> $GITHUB_ENV
52-
echo "CC=${{ env.CC }}"
53-
echo "CXX=${{ env.CXX }}"
54-
55-
# Set MACOSX_DEPLOYMENT_TARGET to avoid version mismatch warnings
39+
# Install Homebrew LLVM toolchain with OpenMP support
40+
brew install llvm libomp
41+
if [[ $(uname -m) == "arm64" ]]; then BREW_PREFIX="/opt/homebrew"; else BREW_PREFIX="/usr/local"; fi
42+
echo "PATH=$BREW_PREFIX/opt/llvm/bin:$PATH" >> $GITHUB_ENV
43+
echo "CC=$BREW_PREFIX/opt/llvm/bin/clang" >> $GITHUB_ENV
44+
echo "CXX=$BREW_PREFIX/opt/llvm/bin/clang++" >> $GITHUB_ENV
45+
echo "CPPFLAGS=-I$BREW_PREFIX/opt/libomp/include" >> $GITHUB_ENV
46+
echo "CFLAGS=-arch $(uname -m)" >> $GITHUB_ENV
47+
echo "CXXFLAGS=-arch $(uname -m)" >> $GITHUB_ENV
48+
echo "LDFLAGS=-arch $(uname -m) -L$BREW_PREFIX/opt/libomp/lib" >> $GITHUB_ENV
49+
echo "ARCHFLAGS=-arch $(uname -m)" >> $GITHUB_ENV
50+
echo "CMAKE_OSX_ARCHITECTURES=$(uname -m)" >> $GITHUB_ENV
5651
echo "MACOSX_DEPLOYMENT_TARGET=$(sw_vers -productVersion)" >> $GITHUB_ENV
57-
echo "MACOSX_DEPLOYMENT_TARGET=${{ env.MACOSX_DEPLOYMENT_TARGET }}"
5852
5953
- name: Set up Python ${{ matrix.python-version }}
6054
uses: actions/setup-python@v4
@@ -71,8 +65,7 @@ jobs:
7165

7266
- name: Install package verbosely
7367
run: |
74-
75-
touch .cov # Create a .cov file to trigger Cython compilation with coverage support
68+
python -c "open('.cov','w').close()" # trigger Cython compilation with coverage support
7669
ls
7770
python -m pip install -v -v .
7871

setup.py

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -400,18 +400,27 @@ def build_shared_lib(self, lib_name, build_info):
400400
lib_file = f"{get_lib_prefix()}{lib_name}{get_lib_suffix('shared')}"
401401

402402
if platform_system == 'Darwin':
403-
build_info['extra_link_args'].append(f"-Wl,-install_name,@loader_path/{lib_file}")
404-
self.compiler.linker_so = ['-dynamiclib' if val=='-bundle' else val for val in self.compiler.linker_so]
405-
self.compiler.link_shared_object(
406-
objects,
407-
lib_file,
408-
output_dir = self.build_clib,
409-
target_lang = language,
410-
libraries = build_info['libraries'],
411-
library_dirs = build_info['library_dirs'],
412-
extra_postargs = build_info['extra_link_args'],
413-
build_temp = self.build_temp,
414-
)
403+
lib_path = str(Path(self.build_clib).absolute() / lib_file)
404+
cmd = [self.compiler.linker_so[0], '-dynamiclib'] + list(objects)
405+
cmd += ['-o', lib_path]
406+
for lib_dir in build_info['library_dirs']:
407+
cmd.append(f'-L{lib_dir}')
408+
for lib in build_info['libraries']:
409+
cmd.append(f'-l{lib}')
410+
cmd += build_info['extra_link_args']
411+
cmd.append(f'-Wl,-install_name,@loader_path/{lib_file}')
412+
self.compiler.spawn(cmd)
413+
else:
414+
self.compiler.link_shared_object(
415+
objects,
416+
lib_file,
417+
output_dir = self.build_clib,
418+
target_lang = language,
419+
libraries = build_info['libraries'],
420+
library_dirs = build_info['library_dirs'],
421+
extra_postargs = build_info['extra_link_args'],
422+
build_temp = self.build_temp,
423+
)
415424
# Post build
416425
build_info.update({
417426
'built_lib_files': [str(Path(self.build_clib).absolute() / lib_file)]

0 commit comments

Comments
 (0)