head 1.1;
branch 1.1.1;
access;
symbols
netbsd-9-5-RELEASE:1.1.1.1
netbsd-11-0-RELEASE:1.1.1.2
netbsd-11-0-RC7:1.1.1.2
netbsd-11-0-RC6:1.1.1.2
netbsd-11-0-RC5:1.1.1.2
netbsd-11-0-RC4:1.1.1.2
netbsd-11-0-RC3:1.1.1.2
netbsd-11-0-RC2:1.1.1.2
netbsd-11-0-RC1:1.1.1.2
perseant-exfatfs-base-20250801:1.1.1.2
netbsd-11:1.1.1.2.0.10
netbsd-11-base:1.1.1.2
netbsd-10-1-RELEASE:1.1.1.2
perseant-exfatfs-base-20240630:1.1.1.2
perseant-exfatfs:1.1.1.2.0.8
perseant-exfatfs-base:1.1.1.2
netbsd-8-3-RELEASE:1.1.1.1
netbsd-9-4-RELEASE:1.1.1.1
netbsd-10-0-RELEASE:1.1.1.2
netbsd-10-0-RC6:1.1.1.2
netbsd-10-0-RC5:1.1.1.2
netbsd-10-0-RC4:1.1.1.2
netbsd-10-0-RC3:1.1.1.2
netbsd-10-0-RC2:1.1.1.2
netbsd-10-0-RC1:1.1.1.2
netbsd-10:1.1.1.2.0.6
netbsd-10-base:1.1.1.2
netbsd-9-3-RELEASE:1.1.1.1
cjep_sun2x:1.1.1.2.0.4
cjep_sun2x-base:1.1.1.2
cjep_staticlib_x-base1:1.1.1.2
netbsd-9-2-RELEASE:1.1.1.1
cjep_staticlib_x:1.1.1.2.0.2
cjep_staticlib_x-base:1.1.1.2
netbsd-9-1-RELEASE:1.1.1.1
phil-wifi-20200421:1.1.1.2
phil-wifi-20200411:1.1.1.2
phil-wifi-20200406:1.1.1.2
netbsd-8-2-RELEASE:1.1.1.1
netbsd-9-0-RELEASE:1.1.1.1
netbsd-9-0-RC2:1.1.1.1
netbsd-9-0-RC1:1.1.1.1
netbsd-9:1.1.1.1.0.32
netbsd-9-base:1.1.1.1
phil-wifi-20190609:1.1.1.1
netbsd-8-1-RELEASE:1.1.1.1
netbsd-8-1-RC1:1.1.1.1
pgoyette-compat-merge-20190127:1.1.1.1
pgoyette-compat-20190127:1.1.1.1
pgoyette-compat-20190118:1.1.1.1
pgoyette-compat-1226:1.1.1.1
pgoyette-compat-1126:1.1.1.1
pgoyette-compat-1020:1.1.1.1
pgoyette-compat-0930:1.1.1.1
pgoyette-compat-0906:1.1.1.1
netbsd-7-2-RELEASE:1.1.1.1
pgoyette-compat-0728:1.1.1.1
clang-337282:1.1.1.1
netbsd-8-0-RELEASE:1.1.1.1
phil-wifi:1.1.1.1.0.30
phil-wifi-base:1.1.1.1
pgoyette-compat-0625:1.1.1.1
netbsd-8-0-RC2:1.1.1.1
pgoyette-compat-0521:1.1.1.1
pgoyette-compat-0502:1.1.1.1
pgoyette-compat-0422:1.1.1.1
netbsd-8-0-RC1:1.1.1.1
pgoyette-compat-0415:1.1.1.1
pgoyette-compat-0407:1.1.1.1
pgoyette-compat-0330:1.1.1.1
pgoyette-compat-0322:1.1.1.1
pgoyette-compat-0315:1.1.1.1
netbsd-7-1-2-RELEASE:1.1.1.1
pgoyette-compat:1.1.1.1.0.28
pgoyette-compat-base:1.1.1.1
netbsd-7-1-1-RELEASE:1.1.1.1
clang-319952:1.1.1.1
matt-nb8-mediatek:1.1.1.1.0.26
matt-nb8-mediatek-base:1.1.1.1
clang-309604:1.1.1.1
perseant-stdc-iso10646:1.1.1.1.0.24
perseant-stdc-iso10646-base:1.1.1.1
netbsd-8:1.1.1.1.0.22
netbsd-8-base:1.1.1.1
prg-localcount2-base3:1.1.1.1
prg-localcount2-base2:1.1.1.1
prg-localcount2-base1:1.1.1.1
prg-localcount2:1.1.1.1.0.20
prg-localcount2-base:1.1.1.1
pgoyette-localcount-20170426:1.1.1.1
bouyer-socketcan-base1:1.1.1.1
pgoyette-localcount-20170320:1.1.1.1
netbsd-7-1:1.1.1.1.0.18
netbsd-7-1-RELEASE:1.1.1.1
netbsd-7-1-RC2:1.1.1.1
clang-294123:1.1.1.1
netbsd-7-nhusb-base-20170116:1.1.1.1
bouyer-socketcan:1.1.1.1.0.16
bouyer-socketcan-base:1.1.1.1
clang-291444:1.1.1.1
pgoyette-localcount-20170107:1.1.1.1
netbsd-7-1-RC1:1.1.1.1
pgoyette-localcount-20161104:1.1.1.1
netbsd-7-0-2-RELEASE:1.1.1.1
localcount-20160914:1.1.1.1
netbsd-7-nhusb:1.1.1.1.0.14
netbsd-7-nhusb-base:1.1.1.1
clang-280599:1.1.1.1
pgoyette-localcount-20160806:1.1.1.1
pgoyette-localcount-20160726:1.1.1.1
pgoyette-localcount:1.1.1.1.0.12
pgoyette-localcount-base:1.1.1.1
netbsd-7-0-1-RELEASE:1.1.1.1
clang-261930:1.1.1.1
netbsd-7-0:1.1.1.1.0.10
netbsd-7-0-RELEASE:1.1.1.1
netbsd-7-0-RC3:1.1.1.1
netbsd-7-0-RC2:1.1.1.1
netbsd-7-0-RC1:1.1.1.1
clang-237755:1.1.1.1
clang-232565:1.1.1.1
clang-227398:1.1.1.1
tls-maxphys-base:1.1.1.1
tls-maxphys:1.1.1.1.0.8
netbsd-7:1.1.1.1.0.6
netbsd-7-base:1.1.1.1
clang-215315:1.1.1.1
clang-209886:1.1.1.1
yamt-pagecache:1.1.1.1.0.4
yamt-pagecache-base9:1.1.1.1
tls-earlyentropy:1.1.1.1.0.2
tls-earlyentropy-base:1.1.1.1
riastradh-xf86-video-intel-2-7-1-pre-2-21-15:1.1.1.1
riastradh-drm2-base3:1.1.1.1
clang-202566:1.1.1.1
clang-201163:1.1.1.1
clang-199312:1.1.1.1
clang-198450:1.1.1.1
clang-196603:1.1.1.1
clang-195771:1.1.1.1
LLVM:1.1.1;
locks; strict;
comment @# @;
1.1
date 2013.11.28.14.15.01; author joerg; state Exp;
branches
1.1.1.1;
next ;
commitid ow8OybrawrB1f3fx;
1.1.1.1
date 2013.11.28.14.15.01; author joerg; state Exp;
branches
1.1.1.1.4.1
1.1.1.1.8.1
1.1.1.1.30.1;
next 1.1.1.2;
commitid ow8OybrawrB1f3fx;
1.1.1.2
date 2019.11.13.22.23.14; author joerg; state dead;
branches;
next ;
commitid QD8YATxuNG34YJKB;
1.1.1.1.4.1
date 2013.11.28.14.15.01; author yamt; state dead;
branches;
next 1.1.1.1.4.2;
commitid WSrDtL5nYAUyiyBx;
1.1.1.1.4.2
date 2014.05.22.16.19.50; author yamt; state Exp;
branches;
next ;
commitid WSrDtL5nYAUyiyBx;
1.1.1.1.8.1
date 2013.11.28.14.15.01; author tls; state dead;
branches;
next 1.1.1.1.8.2;
commitid jTnpym9Qu0o4R1Nx;
1.1.1.1.8.2
date 2014.08.19.23.49.29; author tls; state Exp;
branches;
next ;
commitid jTnpym9Qu0o4R1Nx;
1.1.1.1.30.1
date 2020.04.13.07.50.42; author martin; state dead;
branches;
next ;
commitid X01YhRUPVUDaec4C;
desc
@@
1.1
log
@Initial revision
@
text
@
The Clang Universal Driver Project
Clang is inherently a cross compiler, in that it is always capable of
building code for targets which are a different architecture or even operating
system from the one running the compiler. However, actually cross compiling in
practice involves much more than just generating the right assembly code for a
target, it also requires having an appropriate tool chain (assemblers, linkers),
access to header files and libraries for the target, and many other details (for
example, the calling convention or whether software floating point is in
use). Traditionally, compilers and development environments provide little
assistance with this process, so users do not have easy access to the powerful
underlying cross-compilation abilities of clang.
We would like to solve this problem by defining a new model for how cross
compilation is done, based on the idea of a universal driver. The key
point of this model is that the user would always access the compiler through a
single entry point (e.g., /usr/bin/cc) and provide an argument
specifying the configuration they would like to target. Under the hood
this entry point (the universal driver) would have access to all the information
that the driver, compiler, and other tools need to build applications for that
target.
This is a large and open-ended project. It's eventual success depends not
just on implementing the model, but also on getting buy-in from compiler
developers, operating system distribution vendors and the development community
at large. Our plan is to begin by defining a clear list of the problems we want
to solve and a proposed implementation (from the user perspective).
This project is in the very early (i.e., thought experiment) stages of
development. Stay tuned for more information, and of course, patches
welcome!
See also PR4127.
Existing Solutions and Related Work
- gcc's command line arguments -V, -B, -b are
generic but limited solutions to related problems. Similarly, -m32
and -m64 solve a small subset of the problem for specific
architectures.
- gcc's multilibs
solve the part of the problem that relates to finding appropriate libraries
and include files based on particular feature support (soft float,
etc.).
- Apple's "driver driver" supported by gcc and clang solve a subset of the
problem by supporting -arch. Apple also provides a tool chain which
supports universal
binaries and object files which may include data for multiple
architectures. See TN2137
for an example of how this is used.
- Many operating systems and environments solve the problem by installing
complete development environments (including the IDE, tools, header files,
and libraries) for a single tool chain. This is cumbersome for users and
does not match well with tools which are inherently capable of cross
compiling.
- The Debian ArmEabiPort
wiki page for their work to support the ARM EABI provide an interesting
glimpse into how related issues impact the operating system distribution.
- FatELF is a proposal for bringing
Mac OS X like "Universal Binary" support to ELF based platforms.
@
1.1.1.1
log
@Import Clang 3.4rc1 r195771.
@
text
@@
1.1.1.1.30.1
log
@Mostly merge changes from HEAD upto 20200411
@
text
@@
1.1.1.2
log
@Mark old LLVM instance as dead.
@
text
@@
1.1.1.1.8.1
log
@file UniversalDriver.html was added on branch tls-maxphys on 2014-08-19 23:49:29 +0000
@
text
@d1 87
@
1.1.1.1.8.2
log
@Rebase to HEAD as of a few days ago.
@
text
@a0 87
The Clang Universal Driver Project
Clang is inherently a cross compiler, in that it is always capable of
building code for targets which are a different architecture or even operating
system from the one running the compiler. However, actually cross compiling in
practice involves much more than just generating the right assembly code for a
target, it also requires having an appropriate tool chain (assemblers, linkers),
access to header files and libraries for the target, and many other details (for
example, the calling convention or whether software floating point is in
use). Traditionally, compilers and development environments provide little
assistance with this process, so users do not have easy access to the powerful
underlying cross-compilation abilities of clang.
We would like to solve this problem by defining a new model for how cross
compilation is done, based on the idea of a universal driver. The key
point of this model is that the user would always access the compiler through a
single entry point (e.g., /usr/bin/cc) and provide an argument
specifying the configuration they would like to target. Under the hood
this entry point (the universal driver) would have access to all the information
that the driver, compiler, and other tools need to build applications for that
target.
This is a large and open-ended project. It's eventual success depends not
just on implementing the model, but also on getting buy-in from compiler
developers, operating system distribution vendors and the development community
at large. Our plan is to begin by defining a clear list of the problems we want
to solve and a proposed implementation (from the user perspective).
This project is in the very early (i.e., thought experiment) stages of
development. Stay tuned for more information, and of course, patches
welcome!
See also PR4127.
Existing Solutions and Related Work
- gcc's command line arguments -V, -B, -b are
generic but limited solutions to related problems. Similarly, -m32
and -m64 solve a small subset of the problem for specific
architectures.
- gcc's multilibs
solve the part of the problem that relates to finding appropriate libraries
and include files based on particular feature support (soft float,
etc.).
- Apple's "driver driver" supported by gcc and clang solve a subset of the
problem by supporting -arch. Apple also provides a tool chain which
supports universal
binaries and object files which may include data for multiple
architectures. See TN2137
for an example of how this is used.
- Many operating systems and environments solve the problem by installing
complete development environments (including the IDE, tools, header files,
and libraries) for a single tool chain. This is cumbersome for users and
does not match well with tools which are inherently capable of cross
compiling.
- The Debian ArmEabiPort
wiki page for their work to support the ARM EABI provide an interesting
glimpse into how related issues impact the operating system distribution.
- FatELF is a proposal for bringing
Mac OS X like "Universal Binary" support to ELF based platforms.
@
1.1.1.1.4.1
log
@file UniversalDriver.html was added on branch yamt-pagecache on 2014-05-22 16:19:50 +0000
@
text
@d1 87
@
1.1.1.1.4.2
log
@sync with head.
for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
@
text
@a0 87
The Clang Universal Driver Project
Clang is inherently a cross compiler, in that it is always capable of
building code for targets which are a different architecture or even operating
system from the one running the compiler. However, actually cross compiling in
practice involves much more than just generating the right assembly code for a
target, it also requires having an appropriate tool chain (assemblers, linkers),
access to header files and libraries for the target, and many other details (for
example, the calling convention or whether software floating point is in
use). Traditionally, compilers and development environments provide little
assistance with this process, so users do not have easy access to the powerful
underlying cross-compilation abilities of clang.
We would like to solve this problem by defining a new model for how cross
compilation is done, based on the idea of a universal driver. The key
point of this model is that the user would always access the compiler through a
single entry point (e.g., /usr/bin/cc) and provide an argument
specifying the configuration they would like to target. Under the hood
this entry point (the universal driver) would have access to all the information
that the driver, compiler, and other tools need to build applications for that
target.
This is a large and open-ended project. It's eventual success depends not
just on implementing the model, but also on getting buy-in from compiler
developers, operating system distribution vendors and the development community
at large. Our plan is to begin by defining a clear list of the problems we want
to solve and a proposed implementation (from the user perspective).
This project is in the very early (i.e., thought experiment) stages of
development. Stay tuned for more information, and of course, patches
welcome!
See also PR4127.
Existing Solutions and Related Work
- gcc's command line arguments -V, -B, -b are
generic but limited solutions to related problems. Similarly, -m32
and -m64 solve a small subset of the problem for specific
architectures.
- gcc's multilibs
solve the part of the problem that relates to finding appropriate libraries
and include files based on particular feature support (soft float,
etc.).
- Apple's "driver driver" supported by gcc and clang solve a subset of the
problem by supporting -arch. Apple also provides a tool chain which
supports universal
binaries and object files which may include data for multiple
architectures. See TN2137
for an example of how this is used.
- Many operating systems and environments solve the problem by installing
complete development environments (including the IDE, tools, header files,
and libraries) for a single tool chain. This is cumbersome for users and
does not match well with tools which are inherently capable of cross
compiling.
- The Debian ArmEabiPort
wiki page for their work to support the ARM EABI provide an interesting
glimpse into how related issues impact the operating system distribution.
- FatELF is a proposal for bringing
Mac OS X like "Universal Binary" support to ELF based platforms.
@