Code::Blocks Forums

Developer forums (C::B DEVELOPMENT STRICTLY!) => Development => Topic started by: gh_origin on December 02, 2020, 05:15:10 pm

Title: LLVM Clang 10 no longer supports -Wl,--dll
Post by: gh_origin on December 02, 2020, 05:15:10 pm
I tried to compile a DLL. The compiler produced many object files but failed to link them because it said it doesn't understand the option --dll. I edit the options_clang.xml and remove -Wl,--dll from the value of LinkDynamic so it's basically like this:

<Command name="LinkDynamic"
                 value="$linker -shared -Wl,--output-def=$def_output -Wl,--out-implib=$static_output $libdirs $link_objects $link_resobjects -o $exe_output $link_options libs"/>

After that it could link the object files and produce a DLL.
Title: Re: LLVM Clang 10 no longer supports -Wl,--dll
Post by: oBFusCATed on December 02, 2020, 08:56:01 pm
There is a way to check the version of the compiler and make this conditional. After that post a patch and we might include it. :)
Title: Re: LLVM Clang 10 no longer supports -Wl,--dll
Post by: gh_origin on December 03, 2020, 08:37:08 am
There is a way to check the version of the compiler and make this conditional. After that post a patch and we might include it. :)

How to write conditional in XML? The fastest hack I could think of is creating another XMLs for newer Clang, e.g: compiler_clang_old.xml, options_clang_old.xml (still have -Wl,--dll), compiler_clang_new.xml, options_clang_new.xml (no longer have -Wl,--dll). The checking for compiler version part just let the users do it by manually select their compiler (clang_old or clang_new).
Title: Re: LLVM Clang 10 no longer supports -Wl,--dll
Post by: Miguel Gimenez on December 03, 2020, 09:13:11 am
You can use my patch for GCC in ticket 1006 (https://sourceforge.net/p/codeblocks/tickets/1006/ (https://sourceforge.net/p/codeblocks/tickets/1006/)) as a reference.
Title: Re: LLVM Clang 10 no longer supports -Wl,--dll
Post by: gh_origin on December 03, 2020, 03:02:33 pm
You can use my patch for GCC in ticket 1006 (https://sourceforge.net/p/codeblocks/tickets/1006/ (https://sourceforge.net/p/codeblocks/tickets/1006/)) as a reference.

I will try if I could do it after I cleared my confusion between the Dynamic Link Library project type and Shared Library project type. You could see my thread asked about that.
Title: Re: LLVM Clang 10 no longer supports -Wl,--dll
Post by: gh_origin on December 04, 2020, 10:25:52 am
You can use my patch for GCC in ticket 1006 (https://sourceforge.net/p/codeblocks/tickets/1006/ (https://sourceforge.net/p/codeblocks/tickets/1006/)) as a reference.

Sorry, I still have no idea even when have read your code many times. I don't know how to adapt your code for this situation.

The situation between yours and mine seemed to completely different. "-std=" kind of options are to plug into compiler (not really needed). But the -Wl,--dll kind of options are part of the linker command itself. In no possible way I found it's able for me to do the same as with the former kind of options.

It seemed can't help with this problem.
Title: Re: LLVM Clang 10 no longer supports -Wl,--dll
Post by: gh_origin on December 04, 2020, 10:30:37 am
The fastest hack I could think of is creating another XMLs for newer Clang, e.g: compiler_clang_old.xml, options_clang_old.xml (still have -Wl,--dll), compiler_clang_new.xml, options_clang_new.xml (no longer have -Wl,--dll). The checking for compiler version part just let the users do it by manually select their compiler (clang_old or clang_new).

I still think this is the optimal solution.
Title: Re: LLVM Clang 10 no longer supports -Wl,--dll
Post by: Miguel Gimenez on December 04, 2020, 11:31:30 am
It does not look too difficult, here you have a possible patch (untested, I don't have Clang).

I have attached also the complete file (renamed from xml to txt) so you can paste it directly in the compilers directory.
Title: Re: LLVM Clang 10 no longer supports -Wl,--dll
Post by: gh_origin on December 05, 2020, 03:16:29 pm
It does not look too difficult, here you have a possible patch (untested, I don't have Clang).

I have attached also the complete file (renamed from xml to txt) so you can paste it directly in the compilers directory.

Perhaps it's because I'm stupid. You know, if I'm more intelligent, I'm now would not be a secondary school teacher. Maybe I'm teaching in college  ;)

You are right when provided a ready working file, as I really don't know how to apply the patch. BTW, your XML has one minor problem. It has two "<?xml version="1.0"?>:" line so CodeBlocks doesn't consider it as valid so it said there is no options_clang.xml and just quit. Deleting the duplicated line and everything work as expected. Thank you for being patient with me.
Title: Re: LLVM Clang 10 no longer supports -Wl,--dll
Post by: oBFusCATed on December 05, 2020, 04:06:50 pm
Patches are applied with the patch utility or something similar.
Title: Re: LLVM Clang 10 no longer supports -Wl,--dll
Post by: Miguel Gimenez on December 05, 2020, 06:11:01 pm
I don't know why the line got duplicated, possibly it is BOM-related. I edited it with Notepad++, and only changed the options part.
Title: Re: LLVM Clang 10 no longer supports -Wl,--dll
Post by: Miguel Gimenez on December 06, 2020, 10:31:25 am
I repeated the same steps, duplication does not happen  ???. This is the corrected patch.
Title: Re: LLVM Clang 10 no longer supports -Wl,--dll
Post by: oBFusCATed on December 06, 2020, 12:44:55 pm
@Miguel Gimenez This patch is not good. It doesn't handle future versions and requires constant changes with every new version of clang. You need to somehow make a test that does '<10' or something similar. But unfortunately Compiler::EvalXMLCondition doesn't seem to support such conditions. :(
Title: Re: LLVM Clang 10 no longer supports -Wl,--dll
Post by: Miguel Gimenez on December 06, 2020, 01:24:37 pm
It is just a proof of concept, if it were a finished patch I would have published it in a ticket.
Title: Re: LLVM Clang 10 no longer supports -Wl,--dll
Post by: Miguel Gimenez on December 06, 2020, 01:56:45 pm
Probably changing the regex from
Code
^(10|11|12)
to
Code
^([0-9][0-9]+)
or
Code
^([0-9]{2,})
is enough. I don't have Clang.
Title: Re: LLVM Clang 10 no longer supports -Wl,--dll
Post by: oBFusCATed on December 06, 2020, 04:06:41 pm
Regexes aren't good for this kind of checks.
We need something like https://cmake.org/cmake/help/latest/command/if.html?highlight=version_less
But I suppose it is fine if we drop older versions of clang. :)
Title: Re: LLVM Clang 10 no longer supports -Wl,--dll
Post by: Miguel Gimenez on December 06, 2020, 06:20:07 pm
EvalXMLCondition() can be easily expanded to evaluate this kind of conditions, adding p.e. "minimum" or "lessthan" verbs.
Title: Re: LLVM Clang 10 no longer supports -Wl,--dll
Post by: oBFusCATed on December 06, 2020, 08:01:12 pm
I know, I don't have the time to do it. If you're interested post patch, if not post a patch which drops the old version, I guess.
Title: Re: LLVM Clang 10 no longer supports -Wl,--dll
Post by: killerbot on December 06, 2020, 08:17:39 pm
I would drop support for old clang, by the way, most recent is clang11.
Title: Re: LLVM Clang 10 no longer supports -Wl,--dll
Post by: oBFusCATed on December 06, 2020, 08:21:12 pm
Yeah, this is easy, but I'm sure this feature would be useful for other places.
Title: Re: LLVM Clang 10 no longer supports -Wl,--dll
Post by: Miguel Gimenez on December 07, 2020, 01:05:42 pm
Ticket expanding EvalXMLCondition() published, https://sourceforge.net/p/codeblocks/tickets/1041/ (https://sourceforge.net/p/codeblocks/tickets/1041/)
Title: Re: LLVM Clang 10 no longer supports -Wl,--dll
Post by: gh_origin on December 12, 2020, 03:34:20 pm
I don't have Clang.

If you're on Linux, it's easy. If if you're on Windows, you can use my Clang:

https://app.box.com/s/8i0tovgsr354brkcwumus0nzfw1heigg

And sorry everyone, it's my mistake. The Clang version I shared through out the forum is not Clang 10, it's Clang 11 indeed. So I'm not sure whether it's Clang 11 or Clang 10 that dropped supports for -Wl,--dll.

You could get Clang 10 here:

https://app.box.com/s/9gs0idab4ui031043go90s1819uonkop
Title: Re: LLVM Clang 10 no longer supports -Wl,--dll
Post by: gh_origin on December 12, 2020, 03:42:11 pm
But I suppose it is fine if we drop older versions of clang. :)

No. The oldest version of Clang I have seen still being used is Clang 7 (on Linux). I also saw Clang 3.5 still floated around on some organizations. It's not unbelievable, though. Since in my place they only tried to conform to C++11. Newer language standards are not considered. So if old compilers have complete support for C++11, it's no reason to upgrade to new compilers, which most of time caused more problems than it worth.
Title: Re: LLVM Clang 10 no longer supports -Wl,--dll
Post by: gh_origin on December 12, 2020, 03:46:18 pm
I would drop support for old clang, by the way, most recent is clang11.

Most Linux distributions don't ship with latest Clang. The oldest Clang I saw still in use is Clang 7 (I don't remember which distributions, but it seemed to be some kind of LTS of Debian or Ubuntu).

BTW, why no one consider my solution: two sets of XMLs, one for old Clang, one for new Clang? I have posted about that many times on this thread but no one cares.
Title: Re: LLVM Clang 10 no longer supports -Wl,--dll
Post by: stahta01 on December 12, 2020, 10:37:12 pm
Two files is twice the effort to maintain as one file.

Tim S.
Title: Re: LLVM Clang 10 no longer supports -Wl,--dll
Post by: oBFusCATed on December 13, 2020, 01:06:54 pm
BTW, why no one consider my solution: two sets of XMLs, one for old Clang, one for new Clang? I have posted about that many times on this thread but no one cares.
Because they easily get out of sync, they are harder to maintain and after all we need this version checking feature anyway. I'll if I can review the Miguel's patch.
Title: Re: LLVM Clang 10 no longer supports -Wl,--dll
Post by: gh_origin on December 13, 2020, 02:32:50 pm
BTW, why no one consider my solution: two sets of XMLs, one for old Clang, one for new Clang? I have posted about that many times on this thread but no one cares.
Because they easily get out of sync, they are harder to maintain and after all we need this version checking feature anyway. I'll if I can review the Miguel's patch.

I understand. Thanks.