[cfe-dev] linking with libclang for ios
Alp Toker
alp at nuanti.com
Tue Jul 8 01:02:00 PDT 2014
On 08/07/2014 09:40, Anton Smirnov wrote:
> I was said that `stat` is not supported on iOS:
> https://devforums.apple.com/message/1000186#1000186
>
> Any suggestion for replacement/walk-around?
OK, that was my initial assumption. clang-interpreter is still the best
sample to get working..
I've run a dtrace and unfortunately there are lots of stats, with most
looking redundant or even silly ("<stdin>"). Each needs to be
investigated individually (making stat() a no-op doesn't help) so this
is some work -- best you can do is file a PR.
If you really want to get it working locally I think the best you can do
is set a breakpoint and try to hack away the callers. But for upstream
we're going to need to fix this properly and it's not really on the
roadmap right now.
Alp.
>
>
> 2014-07-07 15:28 GMT+06:00 Anton Smirnov <dev at antonsmirnov.name
> <mailto:dev at antonsmirnov.name>>:
>
> Hey.
>
> 2014-07-07 14:39 GMT+06:00 Alp Toker <alp at nuanti.com
> <mailto:alp at nuanti.com>>:
>
>
> On 07/07/2014 11:14, Anton Smirnov wrote:
>
> Hi, Alp.
>
> 2014-07-07 12:52 GMT+06:00 Alp Toker <alp at nuanti.com
> <mailto:alp at nuanti.com> <mailto:alp at nuanti.com
> <mailto:alp at nuanti.com>>>:
>
>
>
> On 07/07/2014 09:24, Anton Smirnov wrote:
>
> I've started to edit Mutex.cpp and RWMutex.cpp and
> found it's
> not used at all if "LLVM_ENABLE_THREADS" was off
> during config.
> So it seems that my issues was solved with it.
>
>
> Great
>
>
> Thanks for pointing me right direction ;)
>
>
> Anyway i'm having another issue:
>
> *2014-07-07 12:19:54.090
> LibClangUsage7Demo[64275:60b] started*
>
>
> *Detected an attempt to call a symbol in system
> libraries that
> is not present on the iPhone:*
>
> *stat$INODE64 called from function
>
> _ZN4llvm3sys2fs6statusERKNS_5TwineERNS1_11file_statusE in
> image LibClangUsage7Demo.*
>
>
> Is stat missing in ios simulator? It seems that i
> will have to
> fix such issues one-by-one..
>
> Is there any ios-friendly version of llvm/clang?
> Is it ios
> simulator limitations (systems calls to absent
> systems methods)?
>
>
> The LLVM/clang codebase is meant to be portable..
>
> So, the OS filesystem symbols are available but not
> implemented on
> your platform:
>
>
> What does it mean "available but not implemented"? I'm not
> sure i understand it as i have no compile/link errors,
> runtime errors only.
> Does it mean it has required functions declarations in
> headers while compiling, symbols while linking but absent
> for some reason in runtime?
> How can that be? i expect to have linker errors if
> required system calls are absent.
>
> I'm using xcode toolchain and sysroot to cross-compile for
> ios so i expect it to have valid and actual headers and
> compiled systems libs.
>
> What can i do to fix stat missing in llvm::sys::status(..)
> ? Any flags or change invocation to any existing system
> method?
>
>
> That's good news because it means there's a good
> chance you can
> get your application working without porting LLVM's
> System module.
>
>
> I'm afraid i will discover a lot of places with runtime
> errors (due to missing system libs) ;(
> Does anybody know any other expected missing/not
> implemented calls for ios?
>
>
> This is a standard iOS platform? Try configuring with
> -mios-simulator-version-min=7.1
>
>
> Yes, it's standard iOS Platform (iOS Simulator). I've tried 7.0,
> does it make sense?
> I've found few similar issue reports but they relate to 3/4 xcode
> vrsion and pretty ancient ios versions.
>
>
>
>
> As I recall, you wanted to perform an in-memory
> compilation and
> produce LLVM IR, and I suggested using the
> clang-interpreter demo
> as a starting point.
>
>
> At that point i'm just trying to have actual llvm/clang
> working via Clang-C API. This means i don't have to have
> any major modifications, just cross-compile with right
> configure params.
>
> Probably the next step will be look into Cling
> modifications for LLVM/Clang and making it working.
>
>
> Curious, what do you need the modifications for?
>
>
> Cling requires modified LLVM/Clang and it has it's own LLVM/Clang
> repos.
> I will start trying your clang-interpreter first which seems to do
> pretty the same.
>
>
> (Unless it's synced up to LLVM SVN very recently it'll be
> missing the fixes from this discussion.)
>
>
>
>
> Let's take that a little further..
>
> You'll need to modify the clang-interpreter sample so
> it loads C
> source code for the main file from memory instead of
> trying to
> read from the filesystem which apparently doesn't
> existing on your
> platform. The code you use shouldn't include any
> headers or
> that'll incur filesystem access.
>
>
> Actually i can access files in ios app sandbox so i expect
> LLVM/Clang working for files in it.
>
>
> Okay, should work fine if you need file access. Try the
> configure switch I suggested.
>
>
>
>
> Meanwhile I've added non-JIT interpreter support in
> clang r212083,
> and if that still doesn't work you can modify the
> sample to print
> IR to check if things work.
>
>
> Great! How i can i try it? Any example to interpret
> "hello-world"?
>
>
> Sure, just run:
>
> ./clang-interpreter hello.cpp
>
> It mostly accepts the same arguments as normal clang.
>
>
> Good, i will give it a try.
>
>
> Alp.
>
>
> With some luck it won't attempt to read from the
> filesystem at all
> after that, so won't hit the missing OS features.
>
> If there are more errors, we'll need to refine the
> approach a
> little and eliminate other kinds of file accesses but
> that should
> be the general angle of attack.
>
> It sounds like a fun project, keep the list posted :-)
>
>
> Well, yes it is. I'm just making proof of concept. Any
> help is appreciated.
>
>
> Alp.
>
>
>
> Regards, Anton.
>
>
>
>
> Thanks,
> Anton.
>
>
> 2014-07-06 17:16 GMT+06:00 Anton Smirnov
> <dev at antonsmirnov.name
> <mailto:dev at antonsmirnov.name>
> <mailto:dev at antonsmirnov.name <mailto:dev at antonsmirnov.name>>
> <mailto:dev at antonsmirnov.name
> <mailto:dev at antonsmirnov.name>
> <mailto:dev at antonsmirnov.name
> <mailto:dev at antonsmirnov.name>>>>:
>
>
>
> I've just tried to rebuild libclang.a
> with -miphoneos-version-min=7.0 - no luck.
> Also i've removed --enable-optimized
> --disable-assertions
> configure flags and it confirmed error line
> (Mutex.cpp):
>
> // Destroy the attributes
> errorcode = pthread_mutexattr_destroy(&attr);
>
> Should setting LLVM_ENABLE_THREADS to "off" help?
>
>
>
>
> 2014-07-06 12:03 GMT+06:00 Alp Toker
> <alp at nuanti.com <mailto:alp at nuanti.com>
> <mailto:alp at nuanti.com <mailto:alp at nuanti.com>>
> <mailto:alp at nuanti.com <mailto:alp at nuanti.com>
> <mailto:alp at nuanti.com <mailto:alp at nuanti.com>>>>:
>
>
>
> Did you try building with
> LLVM_ENABLE_THREADS off?
>
> Also consider trying ToT to get the latest
> fixes.
>
> Alp.
>
>
>
> On 06/07/2014 08:23, Anton Smirnov wrote:
>
> I've found Mutex.cpp file in llvm
> sources and it seems
> it's not the first mutex-related call
> in constructor.
> This makes me think it's really absent
> method in
> system libs:
>
> // Construct a Mutex using pthread calls
>
> MutexImpl::MutexImpl( bool recursive)
>
> : data_(0)
>
> {
>
> // Declare the pthread_mutex data
> structures
>
> pthread_mutex_t* mutex =
>
> static_cast<pthread_mutex_t*>(malloc(sizeof(pthread_mutex_t)));
>
> pthread_mutexattr_t attr;
>
>
> // Initialize the mutex attributes
>
> int errorcode =
> pthread_mutexattr_init(&attr);
>
> assert(errorcode == 0); (void)errorcode;
>
>
> // Initialize the mutex as a
> recursive mutex, if
> requested, or normal
>
> // otherwise.
>
> int kind = ( recursive ?
> PTHREAD_MUTEX_RECURSIVE :
> PTHREAD_MUTEX_NORMAL );
>
> errorcode =
> pthread_mutexattr_settype(&attr, kind);
>
> assert(errorcode == 0);
>
>
> #if !defined(__FreeBSD__) &&
> !defined(__OpenBSD__) &&
> !defined(__NetBSD__) && \
>
> !defined(__DragonFly__) && !defined(__Bitrig__)
>
> // Make it a process local mutex
>
> errorcode =
> pthread_mutexattr_setpshared(&attr,
> PTHREAD_PROCESS_PRIVATE);
>
> assert(errorcode == 0);
>
> #endif
>
>
> // Initialize the mutex
>
> errorcode =
> pthread_mutex_init(mutex, &attr);
>
> assert(errorcode == 0);
>
>
> // Destroy the attributes
>
> errorcode =
> pthread_mutexattr_destroy(&attr); //
> fails here
>
> assert(errorcode == 0);
>
> // Assign the data member
> data_ = mutex;
>
> }
>
> I've marked where it fails.
> How can that be that previous
> mutex-related methods
> success and this one fails?
> What can i do to fix it?
>
> Regards, Anton.
>
>
> 2014-07-05 19:31 GMT+06:00 Anton Smirnov
> <dev at antonsmirnov.name
> <mailto:dev at antonsmirnov.name>
> <mailto:dev at antonsmirnov.name
> <mailto:dev at antonsmirnov.name>>
> <mailto:dev at antonsmirnov.name <mailto:dev at antonsmirnov.name>
> <mailto:dev at antonsmirnov.name
> <mailto:dev at antonsmirnov.name>>>
> <mailto:dev at antonsmirnov.name
> <mailto:dev at antonsmirnov.name>
> <mailto:dev at antonsmirnov.name
> <mailto:dev at antonsmirnov.name>>
>
> <mailto:dev at antonsmirnov.name
> <mailto:dev at antonsmirnov.name>
> <mailto:dev at antonsmirnov.name
> <mailto:dev at antonsmirnov.name>>>>>:
>
>
> Hi.
>
> I was able to cross-compile
> llvm/clang for
> i386 and
> i'm trying to
> use it in my ios app.
> Also i was able to add headers and
> static libs
> (both
> libLLVM*.a
> and libclang*.a) and compile/link
> the project
> with no
> errors.
>
> But when trying to run simple app
> i'm getting
> error:
>
> *Detected an attempt to call a
> symbol in system
> libraries that is
> not present on the iPhone:*
>
> *pthread_mutexattr_destroy$UNIX2003 called
> from function
> _ZN4llvm3sys9MutexImplC2Eb in image
> LibClangUsageDemo3.*
>
>
>
> What can i do in order to fix it?
>
> Is it llvm/clang issue or i'm
> doing smth wrong?
>
> Regards, Anton.
>
>
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu <mailto:cfe-dev at cs.uiuc.edu>
> <mailto:cfe-dev at cs.uiuc.edu <mailto:cfe-dev at cs.uiuc.edu>>
> <mailto:cfe-dev at cs.uiuc.edu
> <mailto:cfe-dev at cs.uiuc.edu> <mailto:cfe-dev at cs.uiuc.edu
> <mailto:cfe-dev at cs.uiuc.edu>>>
>
>
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>
>
> -- http://www.nuanti.com
> the browser experts
>
>
>
>
> -- http://www.nuanti.com
> the browser experts
>
>
>
> --
> http://www.nuanti.com
> the browser experts
>
>
>
--
http://www.nuanti.com
the browser experts
More information about the cfe-dev
mailing list