-
-
Notifications
You must be signed in to change notification settings - Fork 13
Support Apple clang specific compilation/linking flags to enable OpenMP #42
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
gdurif
wants to merge
15
commits into
astropy:main
Choose a base branch
from
gdurif:support_apple_clang
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from 8 commits
Commits
Show all changes
15 commits
Select commit
Hold shift + click to select a range
200406c
function to check if current compiler is Apple Clang
gdurif b4ea694
test function checking if current compiler is Apple Clang
gdurif 45b198c
specific compilation and linking flags for Apple Clang compiler
gdurif 40a39fd
add comment about libomp + refine except statement
gdurif ac7644e
specific warning message for Apple Clang users + specific OpenMP incl…
gdurif 401d869
fix typo in dir check
gdurif ad2b191
add preargs instead of postargs to compile command (because '-Xproces…
gdurif 31de7ec
fix typo regarding link_flags
gdurif 094b820
fix typo
gdurif dcca6d7
account for potential CXXFLAGS env variable
gdurif e4c01f8
modify _get_flag_value_from_var to return list of extracted flags if …
gdurif e93d695
fix typo regarding lib path parsing
gdurif cc7aafd
check for the OS (i.e. MacOS) before testing for Apple Clang compiler
gdurif b1a10a5
improve libomp search on MacOS
gdurif f88cdbb
improve extraction of command output
gdurif File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -19,10 +19,11 @@ | |
import datetime | ||
import tempfile | ||
import subprocess | ||
import textwrap | ||
|
||
from setuptools.command.build_ext import customize_compiler, get_config_var, new_compiler | ||
|
||
from ._setup_helpers import get_compiler | ||
from ._setup_helpers import check_apple_clang, get_compiler | ||
|
||
__all__ = ['add_openmp_flags_if_available'] | ||
|
||
|
@@ -134,8 +135,41 @@ def get_openmp_flags(): | |
link_flags.append('-L' + lib_path) | ||
link_flags.append('-Wl,-rpath,' + lib_path) | ||
|
||
compile_flags.append('-fopenmp') | ||
link_flags.append('-fopenmp') | ||
if not check_apple_clang(): | ||
compile_flags.append('-fopenmp') | ||
link_flags.append('-fopenmp') | ||
else: | ||
msg = textwrap.dedent( | ||
"""\ | ||
You are using Apple Clang compiler. | ||
|
||
Your system should be prepared: | ||
1. You should have specfically installed OpenMP, | ||
for instance by running `brew install libomp`. | ||
2. OpenMP source and library should be findable by the compiler. | ||
|
||
By default, OpenMP source and library will be looked in | ||
`/usr/local/opt/libomp/include` and `/usr/local/opt/libomp/lib` | ||
respectively. | ||
|
||
To use specific OpenMP source and library paths, you can setup | ||
the following environment variables `CFLAGS` and `LDFLAGS` | ||
before any compilation/installation, e.g. | ||
``` | ||
export CFLAGS="-I/usr/local/opt/libomp/include" | ||
export LDFLAGS="-L/usr/local/opt/libomp/lib" | ||
``` | ||
""" | ||
) | ||
log.warn(msg) | ||
compile_flags.append('-Xpreprocessor -fopenmp') | ||
if not 'CFLAG' in os.environ and \ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Should this be There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes, thanks! I fixed it in 094b820 |
||
os.path.isdir('/usr/local/opt/libomp/include'): | ||
compile_flags.append('-I/usr/local/opt/libomp/include') | ||
link_flags.append('-lomp') | ||
if not 'LDFLAG' in os.environ and \ | ||
os.path.isdir('/usr/local/opt/libomp/lib'): | ||
link_flags.append('-L/usr/local/opt/libomp/lib') | ||
|
||
return {'compiler_flags': compile_flags, 'linker_flags': link_flags} | ||
|
||
|
@@ -189,12 +223,12 @@ def check_openmp_support(openmp_flags=None): | |
|
||
# Compile, test program | ||
ccompiler.compile(['test_openmp.c'], output_dir='objects', | ||
extra_postargs=compile_flags) | ||
extra_preargs=compile_flags) | ||
|
||
# Link test program | ||
objects = glob.glob(os.path.join('objects', '*' + ccompiler.obj_extension)) | ||
ccompiler.link_executable(objects, 'test_openmp', | ||
extra_postargs=link_flags) | ||
extra_preargs=link_flags) | ||
|
||
# Run test program | ||
output = subprocess.check_output('./test_openmp') | ||
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should this be
CFLAGS
(andLDFLAGS
below)?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, thanks! I fixed it in 094b820