Skip site navigation (1)Skip section navigation (2)
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>