Date: Mon, 07 Dec 2009 23:20:58 +0100 From: Rene Ladan <rene@freebsd.org> To: "doc@FreeBSD.org" <doc@freebsd.org> Subject: Re: [RFC] [patch] Clang section for Porters Handbook Message-ID: <4B1D7FCA.90209@freebsd.org> In-Reply-To: <4B01D5C9.4080207@freebsd.org> References: <4B01D5C9.4080207@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format. --------------070108030407030508060706 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Rene Ladan schreef: > Hi list, > > attached is a patch for the Porters Handbook listing some extra rules to > keep in mind when writing ports against the future Clang compiler (see > also http://wiki.freebsd.org/BuildingFreeBSDWithClang ). > > It has already been reviewed by some members of The Clang Team and some > doc people. > > Comments/suggestions/approvals are welcome. > Slightly newer version with some links to patches and a script is attached. Note that the line numbers might be off due to other changes in the meantime. Regards, Rene -- http://www.rene-ladan.nl/ GPG fingerprint = ADBC ECCD EB5F A6B4 549F 600D 8C9E 647A E564 2BFC (subkeys.pgp.net) --------------070108030407030508060706 Content-Type: text/x-patch; name="book.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="book.diff" ==== //depot/projects/docproj_nl/en_US.ISO8859-1/books/porters-handbook/book.sgml#49 - /home/rene/freebsd/p4/doc/en_US.ISO8859-1/books/porters-handbook/book.sgml ==== @@ -13602,6 +13624,104 @@ shorthand solution.</para> </sect1> + <sect1 id="dads-clang"> + <title>Clang: new C/C++ compiler</title> + + <para>A future version of &os; will likely have the Clang C/C++ + compiler as its base compiler. Some modifications to the Ports + Collection are necessary. In general, these involve + <quote>generalizing the port</quote> and <quote>making the source + code portable</quote>. More specifically:</para> + + <itemizedlist> + <listitem> + <para>Respect the <makevar>CC</makevar> and <makevar>CXX</makevar> + variables. Do not use any of the programs <filename>cc</filename>, + <filename>c99</filename>, <filename>gcc</filename>, + <filename>c++</filename>, or <filename>g++</filename> in a port + directly.</para> + </listitem> + + <listitem> + <para>Respect <makevar>LD</makevar>, do not use + <filename>ld</filename> in a port directly.</para> + </listitem> + + <listitem> + <para>Do not use <filename>cpp</filename> for reformatting manual + pages or shell scripts. Try to use something more suitable + instead, possibly falling back to <makevar>CPP</makevar>.</para> + <!-- (rene) what about the C++ preprocessor? --> + </listitem> + + <listitem> + <para>Clang uses the gnu99 standard by default, while GCC uses the + gnu89 standard by default. Therefore, if there are any linker + errors caused by the different semantics of + <literal>inline</literal>, compiler errors caused by the use of + reserved C99 keywords (i.e. restrict) or calls to unimplemented + ISO C99 math routines try to add <literal>USE_CSTD=gnu89</literal> + to the port <filename>Makefile</filename>.</para> + </listitem> + + <listitem> + <para>The <literal>-traditional</literal> option is not supported, + so existing occurrences have to be removed. No consensus has yet + been reached on ports abusing this option to preserve white space + in text formatting. Note that the Clang preprocessor does not + preserve white space.</para> + </listitem> + + <listitem> + <para>Explicit type indication of variables must be used in + built-in assembler code.</para> + </listitem> + + <listitem> + <para>The main function must be properly declared as:</para> + + <programlisting>int main(int argc, char **argv)</programlisting> + + <para>or, if there are no parameters, as:</para> + + <programlisting>int main(void)</programlisting> + </listitem> + + <listitem> + <para>The maximum usable optimization level is 3. Level 4 is + reserved for link-time optimization for the Clang backend.</para> + </listitem> + + <!--(rene) -I and -L belong to CONFIGURE_ENV, not to CFLAGS (?)--> + </itemizedlist> + + <para>Some temporary hacks that might be used if all else fails:</para> + + <itemizedlist> + <listitem> + <para>Adding <literal>-fheinous-gnu-extensions</literal>. Note + that this option is already deprecated.</para> + </listitem> + + <listitem> + <para>Reducing the warning level by adding + <literal>--diasable-werror</literal> or + <literal>--disable-strict</literal>, or by disabling + <literal>--warn-common</literal> or + <literal>-Werror</literal>.</para> + </listitem> + </itemizedlist> + + <para>The current patch set can be downloaded from <ulink + url="http://rene-ladan.nl/clang/patches">a server of rene@</ulink>. + A <ulink url="http://rene-ladan.nl/clang/patch-tree">customizable + script</ulink> to automatically update your Tinderbox Ports Tree + and apply the patches to it is also available. You might also want + to fetch <ulink url="http://rene-ladan.nl/clang/rm-these-files">the + list of files to remove</ulink> from there. This list is relative + to the Tinderbox Ports Tree.</para> + </sect1> + <sect1 id="dads-cc"> <title>Respect both <makevar>CC</makevar> and <makevar>CXX</makevar></title> --------------070108030407030508060706--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4B1D7FCA.90209>