Author Topic: LLVM Clang 10 no longer supports -Wl,--dll  (Read 1908 times)

Offline gh_origin

  • Multiple posting newcomer
  • *
  • Posts: 48
LLVM Clang 10 no longer supports -Wl,--dll
« 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.

Offline oBFusCATed

  • Developer
  • Lives here!
  • *****
  • Posts: 13003
    • Travis build status
Re: LLVM Clang 10 no longer supports -Wl,--dll
« Reply #1 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. :)
(most of the time I ignore long posts)
[strangers don't send me private messages, I'll ignore them; post a topic in the forum, but first read the rules!]

Offline gh_origin

  • Multiple posting newcomer
  • *
  • Posts: 48
Re: LLVM Clang 10 no longer supports -Wl,--dll
« Reply #2 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).

Offline Miguel Gimenez

  • Lives here!
  • ****
  • Posts: 595
Re: LLVM Clang 10 no longer supports -Wl,--dll
« Reply #3 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/) as a reference.

Offline gh_origin

  • Multiple posting newcomer
  • *
  • Posts: 48
Re: LLVM Clang 10 no longer supports -Wl,--dll
« Reply #4 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/) 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.

Offline gh_origin

  • Multiple posting newcomer
  • *
  • Posts: 48
Re: LLVM Clang 10 no longer supports -Wl,--dll
« Reply #5 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/) 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.
« Last Edit: December 04, 2020, 10:29:33 am by gh_origin »

Offline gh_origin

  • Multiple posting newcomer
  • *
  • Posts: 48
Re: LLVM Clang 10 no longer supports -Wl,--dll
« Reply #6 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.

Offline Miguel Gimenez

  • Lives here!
  • ****
  • Posts: 595
Re: LLVM Clang 10 no longer supports -Wl,--dll
« Reply #7 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.
« Last Edit: December 04, 2020, 11:46:00 am by Miguel Gimenez »

Offline gh_origin

  • Multiple posting newcomer
  • *
  • Posts: 48
Re: LLVM Clang 10 no longer supports -Wl,--dll
« Reply #8 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.

Offline oBFusCATed

  • Developer
  • Lives here!
  • *****
  • Posts: 13003
    • Travis build status
Re: LLVM Clang 10 no longer supports -Wl,--dll
« Reply #9 on: December 05, 2020, 04:06:50 pm »
Patches are applied with the patch utility or something similar.
(most of the time I ignore long posts)
[strangers don't send me private messages, I'll ignore them; post a topic in the forum, but first read the rules!]

Offline Miguel Gimenez

  • Lives here!
  • ****
  • Posts: 595
Re: LLVM Clang 10 no longer supports -Wl,--dll
« Reply #10 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.

Offline Miguel Gimenez

  • Lives here!
  • ****
  • Posts: 595
Re: LLVM Clang 10 no longer supports -Wl,--dll
« Reply #11 on: December 06, 2020, 10:31:25 am »
I repeated the same steps, duplication does not happen  ???. This is the corrected patch.

Offline oBFusCATed

  • Developer
  • Lives here!
  • *****
  • Posts: 13003
    • Travis build status
Re: LLVM Clang 10 no longer supports -Wl,--dll
« Reply #12 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. :(
(most of the time I ignore long posts)
[strangers don't send me private messages, I'll ignore them; post a topic in the forum, but first read the rules!]

Offline Miguel Gimenez

  • Lives here!
  • ****
  • Posts: 595
Re: LLVM Clang 10 no longer supports -Wl,--dll
« Reply #13 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.

Offline Miguel Gimenez

  • Lives here!
  • ****
  • Posts: 595
Re: LLVM Clang 10 no longer supports -Wl,--dll
« Reply #14 on: December 06, 2020, 01:56:45 pm »
Probably changing the regex from
Code: [Select]
^(10|11|12) to
Code: [Select]
^([0-9][0-9]+) or
Code: [Select]
^([0-9]{2,}) is enough. I don't have Clang.