Commit Graph
100 Commits
Author SHA1 Message Date
Martin Storsjö b37483cec5 build-libcxx: Stop manually defining _LIBCPP_BUILDING_LIBRARY
Since before the LLVM 12.x branch, these aren't necessary any
longer.

(9c30bafd59bf1078bbe1c235c7c25bf7e278e2e9 and
8a73aa8c4c3ee82e7d650c6a957937713a4a9ab4 in llvm-project)

Since 9c30bafd59bf1078bbe1c235c7c25bf7e278e2e9 in llvm-project,
libcxxabi unconditionally defines _LIBCPP_BUILDING_LIBRARY while
building.

Since 8a73aa8c4c3ee82e7d650c6a957937713a4a9ab4 in llvm-project,
libcxx defines _LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS if
LIBCXX_ENABLE_STATIC_ABI_LIBRARY is set.
2021-06-16 11:59:02 +03:00
Martin Storsjö 459e37f03f wrappers: Convert dlltool-wrapper to a native executable
This allows running it on windows from processes other than msys
based ones.
2021-06-14 11:44:06 +03:00
Martin Storsjö 657d12c8a5 Backport another libc++ patch for std::filesystem (and locale) usage
This fixes linking against a DLL of libc++ while using the common headers
(generated from the static version of the library, but which work for
both shared and static versions) when calling e.g. std::filesystem::u8path.
2021-05-25 23:55:32 +03:00
Martin Storsjö 168cc5f53d build-mingw-w64-tools: Build and install gendef too 2021-05-04 12:12:16 +03:00
Martin Storsjö 84462c92b0 test: Add options -noop and -wait to the hello-exception test program
This allows easier testing of continuing from manually set
breakpoints.

Also fix compilation for non-windows platforms where __debugbreak()
isn't defined.
2021-05-03 13:08:44 +03:00
Martin Storsjö fc1b1ba110 install-wrappers: Use llvm-windres if available
If the llvm-windres tool is available, use that instead of our own
wrapper that calls clang, llvm-rc and llvm-cvtres separately.
2021-04-26 22:22:31 +03:00
Martin Storsjö 37936ec0ea build-llvm: Install llvm-windres if available
The current llvm main branch contains the tool llvm-windres; make
sure to install and include it, if it exists.
2021-04-26 22:21:42 +03:00
Martin Storsjö 173ac732e9 readme: Rewrite the section on installing prebuilt toolchains
Explain what the different download options are, and prioritize the
downloadable toolchain packages over docker images.
2021-04-23 14:43:46 +03:00
Martin Storsjö 133c93aee4 Dockerfile.cross: Include the tag and architecture in the directory name within the zip 2021-04-23 10:58:42 +03:00
Martin Storsjö f066446b06 build-mingw-w64: Switch to another github mirror
This one seems to (currently) be a bit more up to date.
2021-04-23 10:58:42 +03:00
Martin Storsjö 3a9264f1fd build-mingw-w64: Build to the latest version from today 2021-04-23 10:58:42 +03:00
Martin Storsjö 7730c71209 release: Append the architecture to the cross compiler package 2021-04-23 10:58:42 +03:00
Martin Storsjö 869b038152 release: Add an option for only building a native toolchain 2021-04-23 10:58:42 +03:00
Martin Storsjö 2094638569 patches: Patch the llvm 12.x release to include support for std::filesystem in libcxx 2021-04-23 10:58:42 +03:00
Martin Storsjö e1f30312e9 Dockerfile: Update the installed version of CMake, install an arch specific version
This fixes building the dockerfiles on aarch64.
2021-04-23 10:54:07 +03:00
Martin Storsjö f061215ebf strip-llvm: Remove libLTO.dll
In LLVM 12, it no longer ends up called LTO.dll, but libLTO.dll.
2021-04-15 11:37:11 +03:00
Martin Storsjö 7e55d4df92 strip-llvm: Remove the new ld64.lld.darwinnew in newer llvm versions 2021-04-15 11:37:11 +03:00
Martin Storsjö bbbdab6e27 test: Add an option for triggering a breakpoint with hello-exception.cpp 2021-04-15 11:37:11 +03:00
Martin Storsjö 33fe419247 build-mingw-w64: Bump to the latest git master version 2021-04-15 11:37:05 +03:00
Martin Storsjö e45fe5b5f6 build-libcxx: Switch to have libcxxabi provide new/delete operators
This matches how it is set by default in current master versions.

This requires building a version that includes
https://reviews.llvm.org/D89863, otherwise the new/delete operators
aren't properly weak.
2021-04-15 11:36:20 +03:00
Martin Storsjö 0200472671 test: Add a testcase for cleanup of C++ destructors while doing longjmp
For x86_64 and aarch64, this requires https://reviews.llvm.org/D89231.

The C++ destructors aren't executed while doing the longjmp (contrary
to how it works MSVC's C++ exceptions), but it no longer crashes.
2021-04-15 11:36:20 +03:00
Martin Storsjö 2a323ac869 build-llvm: Bump to the LLVM 12.0.0
Notable changes in this release:
- Implicitly add the .exe suffix, even when cross compiling (matching
  a behaviour change in GCC since GCC 8)
- Enable the dynamicbase flag by default in LLD
- Implemented the -wrap option in LLD
- Optimized the generated unwind data for aarch64, reducing the size
  of the unwind data by around 60%
- Error out of LLD if trying to create a DLL with too many exports
2021-04-15 11:29:57 +03:00
Martin Storsjö 547927e1d3 dockerfile: Install the zip tool in the base image
This is needed when packaging the cross built toolchains anyway.
2021-04-14 09:37:18 +03:00
Martin Storsjö 9494c9c2a9 dockerfile: Switch vim to vim-tiny in the docker images 2021-04-14 09:37:18 +03:00
Martin Storsjö be89715b8b dockerfile: Install python3
This is required by LLVM 12.
2021-04-14 09:37:18 +03:00
Martin Storsjö 82a540877d dockerfile: Install a newer version of CMake
This is required if building the master version of LLVM, past the
11 release branch.
2021-04-14 09:37:18 +03:00
Martin Storsjö b34e1cd82b windres-wrapper: Don't leave the .preproc.rc behind if producing .res 2021-04-09 13:42:29 +03:00
Martin Storsjö 4012843f3e built-llvm: Add options for doing a stage2 build, and for building with LTO 2021-03-22 14:07:49 +02:00
Martin Storsjö 84fc501cf8 build-compiler-rt: Tolerate cases where the output libs already have normalized arch names
This is needed since 8bd2722f65cfd7883ed9769f7bad3ff50e4c6905
(and 8e11bede3a6ac11ebcc05c82fac39899feaf9534) in llvm-project
(past the 12.x release branch), which will allow us to get rid of the
whole arch renaming part (once we can assume we're building a version
newer than that).
2021-03-22 14:06:11 +02:00
Martin Storsjö c3529a6b9b windres-wrapper: Implement support for the --preprocessor option 2021-03-10 10:22:06 +02:00
Martin Storsjö 1db63b8682 build-all: Switch to requiring curl instead of wget
The dockerfiles install both tools, and the scripts that use them
(build-make.sh and build-libssp.sh) can make do with either curl
or wget, but e.g. macOS ships with curl but not wget.
2021-03-08 09:09:07 +02:00
Martin Storsjö 790bc40855 test: Add a testcase for throwing/catching C++ exceptions across DLLs 2021-02-19 16:19:47 +02:00
Martin Storsjö cc0055bc96 Fix the help printouts in scripts
Printing '<triple>' causes the shell to try to read a file named
triple. One could either quote it, or just remove the angle brackets;
removing the brackets for simplicity.
2021-02-09 13:54:16 +02:00
Martin Storsjö 5533a5ad53 run-tests: Fix running with a relative path to the toolchain
This fixes github issue #181.
2021-01-25 14:45:34 +02:00
Martin Storsjö 4b063063f2 build-llvm: Don't explicitly disable LLDB's dependencies
They are supposed to be autodetected these days, and the build
shouldn't fail if they aren't available.
2021-01-25 10:44:39 +02:00
Martin Storsjö e5612ac52e crt-test: Add a few more log2 tests for negative outputs with exact inputs 2020-11-21 21:34:50 +02:00
Martin Storsjö d5cda17953 wrappers: Return 0 when printing help in the windres wrapper 2020-11-21 21:34:50 +02:00
Martin Storsjö 22ef268489 build-libssp: Allow downloading with either wget or curl 2020-11-11 12:51:27 +02:00
Martin Storsjö 93e0b63f3c build-openmp: Stop setting CMAKE_C_COMPILER_WORKS
This wasn't ever needed for building the OpenMP runtime.
2020-11-11 12:21:11 +02:00
Martin Storsjö 87648b3ada build-libcxx: Remove superfluous cmake settings 2020-11-11 12:21:11 +02:00
Martin Storsjö 92bb096468 build-libcxx: Avoid warnings when building latest libcxxabi 2020-11-11 10:57:39 +02:00
Martin Storsjö 10ac7a59dd build-libcxx: Don't explicitly disable libc++ std::filesystem
It's currently disabled by default for windows targets; rely on this.
If it's enabled automatically upstream later, take it into use.
2020-11-11 10:57:40 +02:00
Martin Storsjö d334f83671 docker: Install curl and less in the base test images
Having less available should make debugging in the docker images a bit
more accessible.

Curl is a nice-to-have at the moment, while we also have wget available
from before.
2020-11-03 14:04:21 +02:00
Martin Storsjö 2af44c5a56 Use -n "$()" instead of "$()" != "" 2020-11-03 14:00:45 +02:00
Martin Storsjö fcafcacc58 build-compiler-rt: Signal that sanitizers should use libc++ for the cxxabi parts
This fixes building with the latest master version of compiler-rt,
that uses the itanium cxxabi bits for resolving type info.
2020-11-03 11:16:38 +02:00
Martin Storsjö f231314da7 build-libcxx: Remove some hardcoded flags for libcxxabi
These are included properly from libcxx's __config (or __config_site)
now.
2020-10-23 13:13:02 +03:00
Martin Storsjö ea3ff51d2c build-libcxx: Configure libcxx and generate headers before building libcxxabi
This fixes building with the latest versions, where the headers
strictly need __config_site to be available.
2020-10-23 12:22:13 +03:00
Martin Storsjö 2377f1a839 test: Explicitly test linking the C++ runtime statically 2020-10-23 12:17:35 +03:00
Martin Storsjö 0e3600182d build-mingw-w64: Update to the latest master version
This version includes a few minor fixes on top of the v8.0.0 release.
2020-10-20 23:01:13 +03:00
Martin Storsjö f91258a722 build-libcxx: Explicitly enable LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS
This used to be the default before, but has changed in the
latest master version of libcxx.

Previously, both libcxx and libcxxabi enabled it by default, but
we used to explicitly disable it on the libcxxabi side (and rely
on the default for libcxx). Instead explicitly set the intended
configuration state for both parts.
2020-10-20 23:01:13 +03:00
Martin Storsjö 5dd6b4a705 build-cross-tools: Update to using build-mingw-w64-tools
This was missed in 3fd3e58979.
2020-10-15 23:35:58 +03:00
Martin Storsjö 9031eb6791 Build the OpenMP runtime in docker based builds
LLVM's OpenMP implementation only supports Windows on x86, and it
requires a MASM-compatible assembler to build it. Build UASM
for this purpose, for now. (UASM isn't available packaged in
debian/ubuntu repos.) In the future, llvm-ml should be able
to handle it instead, but it's not currently mature enough.

Not including it in the regular build-all.sh for now, as UASM
isn't generally available.
2020-10-15 23:23:05 +03:00
Martin Storsjö d5d30fae23 build-llvm: If cross compiling, look for llvm-tblgen with an exe suffix
If cross compiling on MSYS, the native llvm-tblgen needs this suffix.
2020-10-15 23:20:32 +03:00
Martin Storsjö 1ca647f2c1 release: Build toolchains that target msvcrt in addition to ucrt 2020-10-13 14:27:44 +03:00
Martin Storsjö f2b389e6a7 test: Change hello-exception.cpp to print to stderr
Also flush after each printout, since not all configurations (in
particular, wine) flush stderr implicitly.

This is often useful when debugging unwinding.
2020-10-13 12:24:15 +03:00
Martin Storsjö 42297caad3 test: Add an option to hello-exception.cpp for causing crashes
This is useful for testing the debugger.
2020-10-13 12:20:25 +03:00
Martin Storsjö 8a60836d87 test: Remove unnecessary bits of hello-exception.cpp
These bits are tested by hello-cpp.cpp.
2020-10-13 12:19:46 +03:00
Martin Storsjö 06cf71558e build-llvm: Update to the 11.0.0 release of llvm
Notable changes since LLVM 10.0.0:

- Enable -mms-bitfields by default (like GCC), don't produce errors
  if the -mms-bitfields option is used together with non-trivial C++
  classes
- Support for more linker flags in LLD (--disable-auto-import,
  --disable-runtime-pseudo-reloc, --file-alignment, --section-alignment),
  and fixed the handling of the --no-seh flag
- Clearly error out on unsupported relocation types in aarch64 assembly
- Proper support for __attribute__((weak))
- Minor improvements to details in llvm-rc
- Fixed a regression in LLD about exporting symbols containing periods ('.')
  with a def file
2020-10-12 14:21:41 +03:00
Martin Storsjö 6ae2bfa3ad crt-test: Add a testcase for a case where a broken optimization in LLVM broke the compiler builtin division helpers
https://reviews.llvm.org/D88783 caused this to break.
2020-10-12 14:20:49 +03:00
Martin Storsjö 4e039a622f Remove old leftover entries from .dockerignore/.gitignore 2020-10-12 00:54:48 +03:00
Martin Storsjö bf40eb86fc strip-llvm: Simplify stripping out the executable suffix 2020-10-09 20:51:11 +03:00
Martin Storsjö 5fc9728420 strip-llvm: Fix name mangling of tools that contain $EXEEXT
This makes sure that llvm-exegesis is handled correctly (i.e.
stripped out) if build-llvm.sh was invoked with --full-llvm when
building for windows.
2020-10-09 15:55:58 +03:00
Martin Storsjö 66eb0af305 strip-llvm: Remove include/lldb if stripping a full install
If llvm is built with build-llvm.sh --full-llvm, we need to remove
this directory to end up with the same set of installed files as if
without --full-llvm, after stripping the install.
2020-10-09 12:37:37 +03:00
Martin Storsjö ccff9e4106 test: Update the conditions for skipping global-terminate.cpp on aarch64
Our pinned version of mingw-w64 is new enough already, and
latest wine has implemented __C_specific_handler for aarch64,
so this makes the test be bypassed with current pinned clang (10.0.0)
and the soon to be released clang 11.0.0, but is executed with
clang 12.0.0 (where current versions has got this implemented properly).
2020-09-28 15:11:10 +03:00
Martin Storsjö 4176511d24 build-mingw-w64: Update to the v8.0.0 release of mingw-w64 2020-09-22 11:45:25 +03:00
Martin Storsjö c82a6f2340 test: Add a testcase for the global termminate handler 2020-09-16 00:07:46 +03:00
Martin Storsjö fd763f4a43 build-mingw-w64-tools: Add widl symlinks with the mingw32uwp name 2020-09-16 00:04:13 +03:00
Martin Storsjö c9ae57f3d0 build-mingw-w64-tools: Only install an unprefixed widl if the native arch is one of the target archs 2020-09-16 00:04:18 +03:00
Martin Storsjö 00c95e73ef build-mingw-w64-tools: Add some comments 2020-09-16 00:04:13 +03:00
Martin Storsjö d067b4909b build-mingw-w64-tools: Only build one single widl binary 2020-09-16 00:03:57 +03:00
Martin Storsjö 5c83b904bd build-mingw-w64-tools: Pick the first arch as the one to target, instead of hardcoding x86_64 2020-09-16 00:03:57 +03:00
Martin Storsjö 3fd3e58979 build-mingw-w64: Split out building tools to a separate script
This simplifies build-mingw-w64.sh. When building on native
windows (where we also provide unprefixed tools, we can't have
the yet incomplete compiler toolchain in $PATH when building
the mingw-w64 tools. (Logically, build-mingw-w64-tools belong
with build-llvm and install-wrappers; using the original system
compiler to build tools that are supposed to run on the current
machine, as opposed to the cross target, like when building the
runtimes.)
2020-09-16 00:03:57 +03:00
Martin Storsjö 57b7ffd84d build-mingw-w64: Add a CHECKOUT_ONLY codepath 2020-09-16 00:03:57 +03:00
Martin Storsjö 308f7227c5 test: Add an idl testcase 2020-09-16 00:03:57 +03:00
Martin Storsjö 63add77368 run-tests: Run exception tests on wine on aarch64 as well
Current git versions of wine can handle the exception unwinding
properly.
2020-09-16 00:03:57 +03:00
Martin Storsjö e9708b38a6 install-wrappers: Install <triple>-as as a symlink to clang 2020-08-24 15:34:26 +03:00
Martin Storsjö 41f4f3fac6 wrappers: Filter backslashes into forward slashes for --print-search-dirs similarly to -v 2020-08-20 13:29:44 +03:00
Martin Storsjö ab4220fd2a wrappers: Remove a misplaced, unnecessary pair of braces 2020-08-20 12:56:39 +03:00
Martin Storsjö d7e5858a60 wrappers: Fix the output filtering for clang -v
This makes the code actually do what was intended, for cases with
multiple consecutive backslashes, each escaped to double backslashes.
2020-08-20 12:51:40 +03:00
Martin Storsjö 0fc16eb24d build-libcxx: Set LLVM_PATH when building libcxx
This is necessary since 8bc62db27244803 (Jun 26, 2020) in llvm-project.

Also setting it for libcxxabi and libunwind, in case it becomes
needed there as well.
2020-07-02 00:01:30 +03:00
Martin Storsjö 8b7d3bab1c build-libcxx: Remove a leftover variable
It became unused in 7c891a036.
2020-06-27 10:03:07 +03:00
Martin Storsjö 30f252f157 windres-wrapper: Add support for the language option
llvm-rc got support for this option on Jun 23rd [1], so the currently
pinned version of llvm-project doesn't support it - but earlier
versions just silently ignore the option, so it should be safe
to include in the wrapper now already.

[1] https://github.com/llvm/llvm-project/commit/f36f8b41beb9cc0353d5624934406d39b78753e0
2020-06-23 13:29:53 +03:00
Martin Storsjö e934c04ef4 run-tests: Execute the uwp test executables now that they don't rely on vcruntime140_app 2020-06-16 11:32:17 +03:00
Martin Storsjö 68b9eb60fa wrappers: Use -lucrtapp instead of -lvcruntime140_app
Passing -lucrt* to the clang driver inhibits the implicit default
-lmsvcrt, so this ends up only using libucrtapp.a instead of libucrt.a.

This still requires that the default crt was ucrt, as the prebuilt
libc++.a needs to have been built for the right crt.
2020-06-16 11:32:17 +03:00
Martin Storsjö da9b3b472b build-mingw-w64: Update to the latest version from git
This version includes libucrtapp.a, which doesn't require linking to
vcruntime140_app for avoiding api-ms-win-crt-private-*.dll.
2020-06-12 13:41:18 +03:00
Martin Storsjö d8aefd7b1a build-llvm: Fix a typo in the flags for disabling external libs
These aren't strictly necessary any longer, as the external libs
are used automatically if found (instead of erroring out if not
found, unless explicitly disabled as before).

Still keeping the explicit disables, to avoid potential issues if
e.g. the libs are found but exist in an incompatible version.
2020-03-27 13:29:25 +02:00
Martin Storsjö 8e461131cf Clean the build dirs before building, if the env var CLEAN is set 2020-03-25 23:24:31 +02:00
Martin Storsjö 36fc0f6432 build-compiler-rt, build-libcxx: Use ninja for building, if available 2020-03-25 00:29:07 +02:00
Martin Storsjö 92f5caa918 build-compiler-rt: Move CMake generator selection further out in the script 2020-03-25 00:29:07 +02:00
Martin Storsjö b89cdef107 build-llvm: Generalize the build command 2020-03-25 00:29:07 +02:00
Martin Storsjö 13e441d60e build-llvm: Only pass -j to ninja if CORES was set originally
If CORES was unset, let ninja pick the core count (which normally
is set higher than the number of cores).
2020-03-25 00:29:07 +02:00
Martin Storsjö ca303864ba Dockerfile.cross: Download a newer version of cmake than what the base distribution has
When building lldb for windows with the llvm 10.0.0 version,
cmake 3.13 is required. (Ubuntu 18.04 comes with cmake 3.10.2.)
2020-03-25 00:24:26 +02:00
Martin Storsjö 2c1a4645d9 Update the base distro used for dockerfiles and linux releases to Ubuntu 18.04
There's probably not much need for binaries based on 16.04 any longer.
2020-03-25 00:24:26 +02:00
Martin Storsjö 91c1339222 Only use the newer form for disabling LLDB's external dependencies
Also pass the new form properly when cross compiling LLDB.
2020-03-25 00:19:49 +02:00
Martin Storsjö efec56e495 build-mingw-w64: Update to the latest master version
- Fixed the dinput/dinput8 libraries for armv7/aarch64
- Provide libcfgmgr32.a for aarch64
- Fix cases of duplicate definitions of snprintf/vsnprintf when using
  msvcrt as crt, when building C++ code
- Fix cases where mftransform.h would undefine EXTERN_C, turning other
  variables declared as EXTERN_C into actual definitions
2020-03-24 23:15:10 +02:00
Martin Storsjö 68280abd1a build-llvm: Update to the 10.0.0 release of llvm
Notable changes since the previously pinned (early December 2019)
version:
- Implicitly add the .exe suffix if not provided in the clang
  -o argument, when running on windows (to match GCC's behaviour)
- Fixes for accesses to TLS variables in another object file
- Fixes for accessing weak functions that may be undefined, on ARM and AArch64
  (x86 was fixed earlier)
- Fixed many instances of locale handling in libcxx
2020-03-24 23:07:21 +02:00
Martin Storsjö 353af4ba24 readme: Add a note about incompatibility with object files and static libraries from other toolchains 2020-03-14 13:51:30 +02:00
Martin Storsjö 8507ee6023 windres-wrapper: Do the format name comparisons case insensitively 2020-03-14 12:58:18 +02:00
Martin Storsjö 96b149eb72 native-wrapper: Make static functions inline, to avoid warnings if unused 2020-03-14 12:58:18 +02:00
Martin Storsjö c994e9cb92 build-mingw-w64: Update to the latest version
This fixes a regression in the previously pinned version, where
the asprintf function produced undefined references when using UCRT.
2020-03-09 22:52:58 +02:00