Commit Graph

151 Commits

Author SHA1 Message Date
Nirbheek Chauhan 8dd2e42de3 CompilerArgs: -Wl,-lfoo is also a valid way to pass a library
Treat it the same as -lfoo by deduping and adding to --start/end-group

Reported at https://gitlab.gnome.org/GNOME/glib/issues/1496

We don't do any advanced transformation for MSVC or de-dup because
this is a very rare syntax.
2018-08-28 19:10:30 +03:00
Jussi Pakkanen 1ffc8de5e8
Merge pull request #3981 from GoaLitiuM/d-win-fixes
Fix D support on Windows
2018-08-27 22:30:23 +03:00
Nirbheek Chauhan 79aec5f342 CompilerArgs: Allow calling to_native() multiple times
Add a keyword argument to to_native() to operate on a copy so that we
can call it multiple times instead of modifying the original compiler
args while iterating.

This is used in the unit test, and might be used in Meson at some
point too.
2018-08-23 19:16:02 -07:00
Ole André Vadla Ravnås a7e6c1aaa4 compilers: Handle dupes in the --start/end-group logic
The index calculated through `self.index()` may find the same flag
earlier in the list and end up putting `--end-group` in the wrong spot.
2018-08-23 19:16:02 -07:00
Ole André Vadla Ravnås 6cd71a8033 compilers: Reduce sizes of MSVC linked binaries
- For optimization=s add /O1: Use Maximum Optimization (Favor Size),
  and remove /Os as it's implied by /O1.
- Because we add /O1, this implies /Gy, i.e. Function-Level Linking, so
  unused code can be omitted.
- Add /Gw: Optimize Global Data, so unused data can be omitted.

With buildtype=minsize on x86 this reduces the size of a statically
linked Vala compiler binary from 5 MB down to just 1.87 MB.
2018-08-22 22:58:13 +03:00
Bruce Richardson 8c9296e8e6 find_library: Use _build_wrapper to get library dirs
This means that we will take into account all the flags set in the
cross file when fetching the list of library dirs, which means we
won't incorrectly look for 64-bit libraries when building for 32-bit.

Signed-off-by: Nirbheek Chauhan <nirbheek@centricular.com>

Closes https://github.com/mesonbuild/meson/issues/3881
2018-08-22 12:24:43 -07:00
Xavier Claessens 576f3bb1bf UserArrayOption: Allow duplicates when used as <lang>_args option
Closes: #4021.
2018-08-20 16:16:38 -04:00
GoaLitiuM fd2c3b4c77 Handle proper linking of MSVC runtime libraries
DMD expects mscrtlib arguments while compiling, whereas LDC2 expects these while linking.
2018-08-20 22:27:31 +03:00
GoaLitiuM b208cbda81 Remove optimization related arguments from buildtype args, inline release builds
Dub enables inlining by default for release builds, so meson should do it as well.
2018-08-20 22:27:31 +03:00
Jussi Pakkanen d83f77109a
Convert buildtype to optimization and debug options (#3489) 2018-08-18 20:39:47 +03:00
Jon Turney d57498a4fd Unconditionally use get_gui_app_args()
Add get_gui_app_args() to the Compiler class so it can be unconditionally
used
2018-08-15 06:17:58 -07:00
Jon Turney 94f09a8454 Explicitly set the Windows subsystem for ninja/VisualC 2018-08-15 06:17:58 -07:00
Jussi Pakkanen f91b463bf4
Merge pull request #3831 from mesonbuild/symvisibility
Add gnu_symbol_visibility keyword argument
2018-08-11 19:59:34 +03:00
Nirbheek Chauhan ae5ebd258f PkgConfigDependency: Don't try to resolve internal compiler libs
-lc -lm -ldl -lrt -lpthread are special linker arguments that should
never be resolved to on-disk libraries.

Closes https://github.com/mesonbuild/meson/issues/3879
2018-08-11 04:16:18 -07:00
Jussi Pakkanen fb2cdd0fe2 Call it gnu_symbol_visibility instead. 2018-08-09 19:46:49 +03:00
Jussi Pakkanen 6a0e674043 Add kwarg for specifying symbol visibility. 2018-08-09 19:46:49 +03:00
Alberto Sartori 8bee30367e Implement get_link_whole_for() for IntelCompiler (#3863)
closes #3862
2018-07-10 13:23:51 -07:00
Vasu Penugonda 7140afc0a8 Added ARMCLANG compiler support for C/C++ (#3717) 2018-06-21 00:55:39 +03:00
Nirbheek Chauhan 58ae2c9a8c Rename clike_langs to clink_langs for clarity
D is not a 'c-like' language, but it can link to C libraries. The same
might be true of Rust in the future and Go when we add support for it.

This contains no functionality changes.
2018-06-20 11:27:08 +00:00
Nirbheek Chauhan d737488150 dependencies: Don't assume self.compiler is a C compiler
All dependencies were using find_library, has_header, get_define, etc on
self.compiler assuming that it's a compiler that outputs and consumes
C-like libraries. This is not true for D (and in the future, for Rust)
since although they can consume C libraries, they do not use the
C ecosystem.

For such purposes, we now have self.clib_compiler. Nothing uses
self.compiler anymore as a result, and it has been removed.
2018-06-20 11:27:08 +00:00
Christoph Behle 5ef38d880f Add missing stubs to Compiler.
Added missing stubs to class Compiler for the methods:
  * compute_int
  * has_members
  * has_type
  * symbols_have_underscore_prefix
2018-06-18 07:52:15 +00:00
Christoph Behle 9e0397805e Use stub to report misuse of get_define
Instead of checking on the call site add a stub to Compiler which raises
an exception.
2018-06-18 07:52:15 +00:00
Nirbheek Chauhan 96b7fdb723 macos: Rewrite install_name for dependent built libraries on install
On macOS, we set the install_name for built libraries to
@rpath/libfoo.dylib, and when linking to the library, we set the RPATH
to its path in the build directory. This allows all built binaries to
be run as-is from the build directory (uninstalled).

However, on install, we have to strip all the RPATHs because they
point to the build directory, and we change the install_name of all
built libraries to the absolute path to the library. This causes the
install name in binaries to be out of date.

We now change that install name to point to the absolute path to each
built library after installation.

Fixes https://github.com/mesonbuild/meson/issues/3038
Fixes https://github.com/mesonbuild/meson/issues/3077

With this, the default workflow on macOS matches what everyone seems
to do, including Autotools and CMake. The next step is providing a way
for build files to override the install_name that is used after
installation for use with, f.ex., private libraries when combined with
the install_rpath: kwarg on targets.
2018-06-18 06:33:23 +00:00
Paolo Bonzini 1a5a18a3f3 vala: fix extract_all_objects() result
Because vala is not listed in clike_langs, is_source(fname) is returning False
for Vala source files.  Therefore, extract_all_objects() is completely empty
for Vala programs.

Fixes #791
2018-06-10 01:48:45 +00:00
Xavier Claessens 9b791881ed compilers: Use RUSTFLAGS from the env as default rust_args value 2018-06-06 20:02:37 +00:00
Xavier Claessens 218ed2de89 optinterpreter: Remove duplicated list of languages
It is important to keep the list of languages up to date in
optinterpreter, otherwise we could have conflicting options when adding
new languages.
2018-06-06 20:02:37 +00:00
Xavier Claessens aa879b7f0c Fix issues found by flake8 2018-06-06 20:02:37 +00:00
Xavier Claessens b7d442150d Move <lang>_args to coredata.compiler_options 2018-06-06 20:02:37 +00:00
Xavier Claessens fa72cd7173 Move get_args_from_envvars() from environment to compilers 2018-06-06 20:02:37 +00:00
Nirbheek Chauhan 3e1a610702 Add a new option for building with Apple bitcode support
Normally, people would just pass -fembed-bitcode in CFLAGS, but this
conflicts with -Wl,-dead_strip_dylibs and -bundle, so we need it as
an option so that those can be quietly disabled.
2018-06-06 07:53:10 +00:00
Nirbheek Chauhan ad0121d259 Add prog/lib dirs from the mingw cross-compiler to PATH
These directories contain DLLs that the executable may need, such as
libstdc++-6.dll, libwinpthread, etc.
2018-06-05 10:50:22 +00:00
Nirbheek Chauhan ff07314a86 New compiler method: check_header
This checks not only for existence, but also for usability of the
header, which means it does a full compilation and not just
pre-processing or __has_include.

Fixes https://github.com/mesonbuild/meson/issues/2246
2018-05-30 15:25:39 +05:30
Christoph Reiter a87496addd Don't raise StopIteration in generators, no longer allowed with Python 3.7. Fixes #3622
Raising StopIteration from a generator has been deprecated with Python 3.5 and is now
an error with Python 3.7: https://docs.python.org/3.8/library/exceptions.html#StopIteration

Just use return instead.
2018-05-29 21:58:49 +03:00
Nirbheek Chauhan ed701b5cb0 Revert "Add macOS linker versioning information"
This reverts commit fa6ca16054.

Closes https://github.com/mesonbuild/meson/issues/3550
2018-05-09 23:11:15 +02:00
Jasper Lievisse Adriaanse 3729e127ff add linker flag to handle $ORIGIN on OpenBSD 2018-05-04 23:42:04 +00:00
Jussi Pakkanen 1918c0d231 Can combine D and C++ in a single target. Closes #3125. 2018-05-02 22:50:15 +03:00
Jussi Pakkanen 8ee1e49ae6
Merge pull request #3353 from xclaesse/has-link-argument
Add has_link_argument() and friends
2018-04-17 23:26:53 +03:00
Elliott Sales de Andrade 461f3af294 Explicitly check for OpenMP headers. 2018-04-17 02:04:39 -04:00
Elliott Sales de Andrade dbb025a175 Add an OpenMP dependency.
This works similarly to the thread dependency which stores the various
inconsistent flags in each compiler.
2018-04-17 02:04:37 -04:00
Xavier Claessens bd37afeeea Add has_link_argument() and friends
Closes: #3335.
2018-04-16 19:14:02 -04:00
Xavier Claessens 521ce883ad has_argument(): reduce code duplication 2018-04-16 19:08:24 -04:00
Jussi Pakkanen c58dd64f8e Merged Arm CC support. 2018-04-16 23:02:09 +03:00
Tom Schoonjans fa6ca16054 Add macOS linker versioning information
This patch exploits the information residing in ltversion to set the
-compatibility_version and -current_version flags that are passed to the
linker on macOS.
2018-04-16 22:26:16 +03:00
Marvin Scholz 5e45f4c621 Do not use -soname when linking with GCC for mingw/cygwin
GNU LD does not use soname when linking a PE/COFF binary, so it makes no
difference, but it breaks when using the llvm linker (lld), which does
not support the soname flag when building PE/COFF binaries for Windows.

Fix #3179
2018-04-16 03:10:11 +00:00
Jussi Pakkanen 86f725c1e5
Merge pull request #3115 from makise-homura/e2k-lcc-support
Support lcc compiler for e2k (Elbrus) architecture
2018-04-15 17:18:44 +03:00
Martin Hostettler 642e17aa6b compilers: is_library: Also detect .so files with version (using soregex) 2018-04-15 07:29:21 +00:00
Nirbheek Chauhan 2e5b2813d5 compilers: Cache compiler checks where we don't want the output
This caching is only for a single run, so it doesn't help reconfigure.
However, it is useful for subproject setups where different subprojects
will run the same compiler checks.

The cache is also per compiler instance and is not used for functions
that want to read or run the outputted object file or binary.

For gst-build, this halves the number of compiler checks that are run
and reduces configuration time by 20%.
2018-04-14 22:14:11 +03:00
Daniel Schulte 57654bf367 Deduplicate dependencies resolved to absolute paths
If paths are absolute the order of search directories is not relevant as the path is already resolved.
2018-04-13 01:05:25 +00:00
Somasekhar Penugonda e62b8109eb Updates to CPP support and update review changes 2018-03-27 17:04:26 -05:00
Alexis Jeandet e89008b657 Added get_asneeded_args method to Intel compiler.
Signed-off-by: Alexis Jeandet <alexis.jeandet@member.fsf.org>
2018-03-23 21:08:37 +02:00
Aleksey Filippov 2febb99eee Fix b_ndebug=if-release option
Provide get_{type}_options_for_target() methods that unite {type} and builtin options.
2018-03-21 17:30:06 +00:00
makise-homura 3b254c6e49 Fixed failure if compiler messages is not in UTF-8
For example, Elbrus lcc does output in KOI8-R, if LC_ALL=C, and
there is no English counterpart for original Russian message.
2018-03-20 17:03:32 +03:00
makise-homura 08bd07f860 Added specific get_library_dirs function for lcc 2018-03-20 16:25:08 +03:00
David Seifert 7eb187c5f2 Add -Wl,-dead_strip_dylibs support
* `-Wl,-dead_strip_dylibs` is the analogue
  of `-Wl,--as-needed` on macOS.
2018-03-19 23:37:14 +02:00
makise-homura 6230c2a2f6 Fixed indentation and space issues found by SideCI 2018-03-19 23:39:06 +03:00
makise-homura 7cc41baa98 Added Elbrus lcc compilers support as inheritance from gcc ones 2018-03-19 23:30:00 +03:00
Bedarkar, Malhar 831d1e4c2e - Updating cpp_std options similar to other compiler classes
- Updating environment.py for selecting '--vsn' option for armcc only.
- Updating build type arguments from GitHub pull request - 3157

Change-Id: Id3151e7715ec1016afdbd65391bb0d414ec7de13
2018-03-14 22:42:06 -05:00
Somasekhar Penugonda a470835778 Meson Github pull request - 3186 requested changes
- Fixing flake8 error in compilers.py - [E124] closing bracket does not match visual indentation
- Updating ARMCCompiler constructor in c.py to raise error as per comments
2018-03-07 17:42:53 -06:00
Bedarkar, Malhar a2ee76228e First cut of ARMCC support for MESON.
Change-Id: I15d8258e84d392baaccb8f670e33eefcfe8cd49a
2018-03-05 18:26:39 -06:00
Leon Krause 2fa44cf326 Enable default linker optimisations in MSVC release and minsize builds 2018-02-11 19:08:55 +02:00
Aleksey Filippov 2cf85ae16f Use os.path: basename() and dirname() instead of split()
According to Python documentation[1] dirname and basename
are defined as follows:
    os.path.dirname() = os.path.split()[0]
    os.path.basename() = os.path.split()[1]
For the purpose of better readability split() is replaced
by appropriate function if only one part of returned tuple
is used.

[1]: https://docs.python.org/3/library/os.path.html#os.path.split
2018-01-30 07:08:22 +11:00
Dylan Baker 4620bdd8b4 tests: fix rpath_uses_ORIGIN on dragonflybsd
Which always seems to prepend /usr/lib/gcc50 (or whatever version) to
the rpath, and $ORIGIN after that.
2018-01-06 13:49:34 -08:00
Dylan Baker 10a560a411 compilers: fix unittest "16 prebuilt shared" on dragonfly bsd 2018-01-06 13:49:34 -08:00
Alexey Stukalov 4f32d11e1b add Compiler.thread_flags() stub
fixes #2834
2017-12-30 23:21:42 +02:00
Nirbheek Chauhan 6f3e2a0a07 compilers: prefer C++ over objc in clink_langs
Otherwise we will try to use the objc compiler when linking projects
with both objc and C++.

Technically we should use the objc++ linker when doing this, but on
most (all?) systems the objc++ linker is `c++`, which is the same
as the C++ linker.

Closes https://github.com/mesonbuild/meson/issues/2468
2017-12-30 17:59:34 +02:00
Benjamin Redelings f3c182f07d Add whitespace around '+'. 2017-12-23 13:29:15 -08:00
Benjamin Redelings 907744d55e Fix linking with clang++ on linux if install_rpath. 2017-12-23 13:22:23 -08:00
Jussi Pakkanen b6dd50db31
Merge pull request #2791 from behlec/compiler-version
Add more version information to compiler
2017-12-20 20:42:01 +02:00
Hemmo Nieminen d232a80e90 Allow value 'if-release' for b_ndebug project option. (#1896)
When set, NDEBUG will be automatically defined for for release builds but
not for other build types.
2017-12-17 21:06:06 +02:00
Christoph Behle c6acf75617 More version information for compilers.
See issue #2762
Adds full_version to class Compiler. If set full_version will be printed
additionally.
Added support for CCompiler and CPPCompiler
Added support for gcc/g++, clang/clang++, icc.
2017-12-16 14:52:08 +01:00
Jussi Pakkanen 554b484468
Merge pull request #2618 from mesonbuild/osxlinkerfixes
Fix many things have have been slightly broken in OSX
2017-12-03 02:25:44 +02:00
Jussi Pakkanen fa6f01d096 Use absolute paths for rpaths on OSX. 2017-11-26 17:34:01 +02:00
Josh Soref 49f8d28ef5 spelling: overridden 2017-11-26 05:55:40 +00:00
Josh Soref 9dd4f047af spelling: occurrence 2017-11-26 05:55:13 +00:00
rkfg 87bf152e6e Fix #2620 2017-11-14 22:35:06 +02:00
Jussi Pakkanen 34d928a830 Better check for when address sanitizer is enabled. Closes #2590. 2017-11-09 21:14:42 +02:00
Alexis Jeandet dfab58772f Warn when no inc dir is found from parsing GNU compiler output
Signed-off-by: Alexis Jeandet <alexis.jeandet@member.fsf.org>
2017-11-02 19:28:23 +01:00
Alexis Jeandet f15a57f31a Fix detection of include dirs with gnu compiler and non C locale
Auto detection was based on parsing gcc's output so we have to
ensure that it is always 'C'.

Signed-off-by: Alexis Jeandet <alexis.jeandet@member.fsf.org>
2017-11-01 15:08:23 +01:00
Niklas Claesson 09ccd0eeaa C/C++: Get default include dirs from compilers 2017-10-01 18:35:33 +02:00
Luke Shumaker bb25260f00 flake8: Perform suggested whitespace/formatting changes
This only touches newlines, spaces, and (occaisionally) commas.  Anything
else is left for another commit.
2017-09-21 11:59:03 -04:00
Daniel Stone e1ffae0580 Add Compiler.get_supported_arguments()
Add a helper for the common pattern of:
  args_to_use = []
  foreach arg : candidate_args
    if cc.has_argument(arg)
      args_to_use += arg
    endif
  endforeach

Replaced with:
  args_to_use = cc.get_supported_arguments(candidate_args)
2017-08-31 20:24:20 +01:00
Peter Harris ee34f454ca Fix detection of clang "optimization arguments"
In version 3.6.0, clang added -Wignored-optimization-argument. Without
setting this flag to -Werror, "ignored optimization arguments" such as
(for example) -fpeel-loops, are accepted but warned about, leading to
noisy builds if meson thinks the flag is supported.

See also #755
2017-08-18 12:11:20 +03:00
Nirbheek Chauhan de2d59cc27 find_library: Ignore libs on MSVC properly
In addition to filtering libs out while generating the command-line, we
must also filter them out in find_library() otherwise these libs will be
detected as "found" on Windows with MSVC.

Closes https://github.com/mesonbuild/meson/issues/1509
2017-07-23 02:12:00 +03:00
Nirbheek Chauhan b3d048e93a CompilerArgs: Put start/end-group around shared libs too
Closes https://github.com/mesonbuild/meson/issues/2096
2017-07-23 02:07:04 +03:00
Jussi Pakkanen bff37a90fc Merged buildrpath branch. 2017-07-21 22:19:07 +03:00
Alessandro Decina a9559e0d77 Fix linking Objective-C shared libs on OSX.
This commit amends 04a2e6de making
linker.get_std_shared_lib_link_args() always return -shared for
SharedLibrary(es) instead of -bundle. SharedModule(s) get linked with
linker.get_std_shared_module_link_args() which already correctly returns
-bundle.

Before this change -bundle and -install_name ended up being emitted
for Objective-C shared libraries, which caused a linking error.
2017-07-21 20:36:50 +03:00
Jussi Pakkanen 2269b7f60b Add build_rpath as new property allowing people to specify rpath entries that are used in the build tree but will be removed on install. 2017-07-21 19:40:54 +03:00
Jussi Pakkanen 181510bd6e Fix checks on MinGW and VS2010. 2017-07-17 19:19:24 +03:00
Jussi Pakkanen 8396c4f3e6 Added VS support to simd detector. 2017-07-17 19:15:04 +03:00
Jussi Pakkanen 16ec3f0e19 Fix a few OSX "features". 2017-07-17 19:09:04 +03:00
Jussi Pakkanen d304aac504 Created simd module. 2017-07-17 19:06:16 +03:00
Chocobo1 24c2e4d3ac Fix typo
profile guide optimization -> profile guided optimization
2017-07-16 11:54:03 +02:00
Hemmo Nieminen 09a5399d09 Fix how rpath directories are handled.
Linking a library from a directory below the executable's directory caused
an invalid path to be written in the executable's RPATH.
2017-07-15 13:44:07 +02:00
Gabríel Arthúr Pétursson 39c7b0492c Allow both address- and undefined behavior sanitizers at the same time 2017-07-15 09:59:09 +02:00
Hemmo Nieminen ea79e94964 Fix a missing path issue causing Python traceback.
A path was missing from a call to os.path.relpath when handling rpaths.
Fix this by assuming empty target directory means build root.
2017-06-29 13:16:38 +03:00
Jussi Pakkanen dfb0414d9c Merged Genie support. 2017-06-27 19:01:00 +03:00
Guillaume Poirier-Morency 5b58ff2783 compilers: Use 'get_display_language' for language-related exceptions 2017-06-26 20:03:52 -04:00
Guillaume Poirier-Morency fab5634916 Add 'Compiler.get_display_language'
Use this when we print language-related information to the console and
via the Ninja backend.
2017-06-26 14:15:44 -04:00
Alistair Thomas cca0fa8154 Recognise .gs extension as a Vala source 2017-06-26 13:57:52 +01:00
Alistair Thomas 117f4ab8b5 Split out languages from compilers.py 2017-06-23 00:42:41 +01:00