-
Notifications
You must be signed in to change notification settings - Fork 1.7k
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
dependencies/jni: Properly resolve jni dependency on android #14225
Open
sp1ritCS
wants to merge
1
commit into
mesonbuild:master
Choose a base branch
from
sp1ritCS:android_jni
base: master
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.
+12
−0
Open
Changes from all commits
Commits
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 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 |
---|---|---|
|
@@ -568,6 +568,18 @@ def __init__(self, environment: 'Environment', kwargs: JNISystemDependencyKW): | |
|
||
m = self.env.machines[self.for_machine] | ||
|
||
if m.is_android(): | ||
if 'version' in kwargs: | ||
mlog.error('Can\'t set version filter for jni on Android') | ||
self.is_found = False | ||
return | ||
if 'modules' in kwargs: | ||
mlog.error('Can\'t depend on jni modules on Android') | ||
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. maybe: "Android does not provide JNI modules" I'm also not sure that this is a good place for an |
||
self.is_found = False | ||
return | ||
self.is_found = self.clib_compiler.has_header('jni.h', '', environment, dependencies=[self]) | ||
return | ||
|
||
if 'java' not in environment.coredata.compilers[self.for_machine]: | ||
detect_compiler(self.name, environment, self.for_machine, 'java') | ||
self.javac = environment.coredata.compilers[self.for_machine]['java'] | ||
|
Oops, something went wrong.
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.
I think these need to be
if kwargs.get('version'):
because they may get set toNone
or[]
in some paths.I guess the version can't be found without actually compiling something here, since jni.h doesn't have any versions in it.
I think for version I'd prefer a warning rather than an exception, since this prevents someone from having code that runs on Android and !Android without doing extra work. So instead of users having to deal with that, just doing the:
Is a better solution. Also just debug for the debug log, because it's not an actionable item.
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.
I mean jni.h kinda has version constants (the one you pass to AttachThread to specify what JNI interface version you want), its just that this doesn't accurately reflect the java version the version field currently uses (By just querying
javac --version
).This obv. won't work for Android, given that you first won't know the java version of the host device and second that they don't use the JVM altogether but instead their ART which just defines the same jni interface)
You could in theory map the different java versions to the latest jni version constant it introduced and check if it is available, but I'm not sure if it is worth it.
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.
Yeah, that all makes sense (and I expected this to be an ART issue), so I think I still like just ignoring it and hoping that you've done the work ahead of time to make sure everything works out is really the best we can do. Especially since someone could really want to target both android and something else in the same code base.