Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -243,8 +243,8 @@ jobs:
- image: ubuntu:14.04
environment:
- CI_OS: linux
- LLVM_VERSION: 5.0.1
- HOST_LDC_VERSION: 1.6.0
- LLVM_VERSION: 6.0.0
- HOST_LDC_VERSION: 1.8.0
- EXTRA_CMAKE_FLAGS: "-DMULTILIB=ON -DCMAKE_EXE_LINKER_FLAGS=-static-libstdc++ -DLDC_INSTALL_LTOPLUGIN=ON -DLDC_INSTALL_LLVM_RUNTIME_LIBS=ON"
- DUB_VERSION: v1.7.2
build-osx:
Expand All @@ -255,8 +255,8 @@ jobs:
- CI_OS: osx
- MACOSX_DEPLOYMENT_TARGET: 10.8
- USE_LIBCPP: true
- LLVM_VERSION: 5.0.1
- HOST_LDC_VERSION: 1.6.0
- LLVM_VERSION: 6.0.0
- HOST_LDC_VERSION: 1.8.0
- BOOTSTRAP_CMAKE_FLAGS: "-DCMAKE_CXX_FLAGS='-stdlib=libc++' -DCMAKE_EXE_LINKER_FLAGS=-lc++"
- EXTRA_CMAKE_FLAGS: "-DMULTILIB=ON -DCMAKE_CXX_FLAGS='-stdlib=libc++' -DCMAKE_EXE_LINKER_FLAGS=-lc++"
- DUB_VERSION: v1.7.2
Expand Down
8 changes: 6 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,16 @@ matrix:
include:
- os: linux
d: ldc
env: LLVM_VERSION=6.0.0
- os: linux
d: ldc-beta
env: LLVM_VERSION=5.0.1 OPTS="-DLIB_SUFFIX=64"
- os: linux
d: ldc
env: LLVM_VERSION=4.0.1 OPTS="-DLIB_SUFFIX=64"
env: LLVM_VERSION=4.0.1 OPTS="-DBUILD_SHARED_LIBS=ON"
- os: linux
d: ldc-beta
env: LLVM_VERSION=3.9.1 OPTS="-DBUILD_SHARED_LIBS=ON"
env: LLVM_VERSION=3.9.1 OPTS="-DBUILD_SHARED_LIBS=ON -DLIB_SUFFIX=64"
- os: linux
d: ldc-0.17.5
env: LLVM_VERSION=3.8.1 OPTS="-DBUILD_SHARED_LIBS=OFF -DLIB_SUFFIX=64"
Expand All @@ -31,6 +34,7 @@ matrix:
cache:
directories:
- llvm-spirv-6.0.0
- llvm-6.0.0
- llvm-5.0.1
- llvm-4.0.1
- llvm-4.0.0
Expand Down
38 changes: 31 additions & 7 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,16 @@ endif()
#

find_package(LLVM 3.7 REQUIRED
all-targets analysis asmparser asmprinter bitreader bitwriter codegen core debuginfocodeview debuginfodwarf debuginfomsf debuginfopdb globalisel instcombine ipa ipo instrumentation irreader libdriver linker lto mc mcdisassembler mcparser objcarcopts object option profiledata scalaropts selectiondag support tablegen target transformutils vectorize ${EXTRA_LLVM_MODULES})
all-targets analysis asmparser asmprinter bitreader bitwriter codegen core
debuginfocodeview debuginfodwarf debuginfomsf debuginfopdb globalisel
instcombine ipa ipo instrumentation irreader libdriver linker lto mc
mcdisassembler mcparser objcarcopts object option profiledata scalaropts
selectiondag support tablegen target transformutils vectorize
windowsmanifest ${EXTRA_LLVM_MODULES})
math(EXPR LDC_LLVM_VER ${LLVM_VERSION_MAJOR}*100+${LLVM_VERSION_MINOR})
# Remove LLVMTableGen library from list of libraries
string(REGEX MATCH "^-.*LLVMTableGen[^;]*;|;-.*LLVMTableGen[^;]*" LLVM_TABLEGEN_LIBRARY "${LLVM_LIBRARIES}")
string(REGEX REPLACE "^-.*LLVMTableGen[^;]*;|;-.*LLVMTableGen[^;]*" "" LLVM_LIBRARIES "${LLVM_LIBRARIES}")
string(REGEX MATCH "[^;]*LLVMTableGen[^;]*" LLVM_TABLEGEN_LIBRARY "${LLVM_LIBRARIES}")
string(REGEX REPLACE "[^;]*LLVMTableGen[^;]*;?" "" LLVM_LIBRARIES "${LLVM_LIBRARIES}")

# Information about which targets LLVM was built to target
foreach(LLVM_SUPPORTED_TARGET ${LLVM_TARGETS_TO_BUILD})
Expand Down Expand Up @@ -219,6 +224,11 @@ endif()
append("${SANITIZE_CXXFLAGS}" LDC_CXXFLAGS)
# LLVM_CXXFLAGS may contain -Werror which causes compile errors with dmd source
string(REPLACE "-Werror " "" LLVM_CXXFLAGS ${LLVM_CXXFLAGS})
# LLVM_CXXFLAGS may contain -Werror=unguarded-availability-new which requires
# more recent gcc versions (not supported by 4.9)
if(CMAKE_COMPILER_IS_GNUCXX)
string(REPLACE "-Werror=unguarded-availability-new " "" LLVM_CXXFLAGS ${LLVM_CXXFLAGS})
endif()
if (UNIX AND NOT "${LLVM_LDFLAGS}" STREQUAL "")
# LLVM_LDFLAGS may contain -l-lld which is a wrong library reference (AIX)
string(REPLACE "-l-lld " "-lld " LLVM_LDFLAGS ${LLVM_LDFLAGS})
Expand Down Expand Up @@ -428,7 +438,11 @@ if(NOT DEFINED LDC_WITH_LLD)
set(CMAKE_REQUIRED_FLAGS -std=c++11)
endif()
set(CMAKE_REQUIRED_INCLUDES ${LLVM_INCLUDE_DIRS})
CHECK_INCLUDE_FILE_CXX(lld/Driver/Driver.h LDC_WITH_LLD)
if(NOT (LDC_LLVM_VER LESS 600))
CHECK_INCLUDE_FILE_CXX(lld/Common/Driver.h LDC_WITH_LLD)
else()
CHECK_INCLUDE_FILE_CXX(lld/Driver/Driver.h LDC_WITH_LLD)
endif()
unset(CMAKE_REQUIRED_FLAGS)
unset(CMAKE_REQUIRED_INCLUDES)
else()
Expand Down Expand Up @@ -544,10 +558,20 @@ add_custom_target(${LDMD_EXE} ALL DEPENDS ${LDMD_EXE_FULL})
# LLVM flags into account.
set(LDC_LINKERFLAG_LIST "${SANITIZE_LDFLAGS};${LLVM_LIBRARIES};${LLVM_LDFLAGS}")
if(LDC_WITH_LLD)
if(MSVC)
list(APPEND LDC_LINKERFLAG_LIST lldCOFF.lib lldCore.lib lldDriver.lib)
if(NOT (LDC_LLVM_VER LESS 600))
if(MSVC)
list(APPEND LDC_LINKERFLAG_LIST lldCOFF.lib lldCommon.lib lldCore.lib lldDriver.lib)
elseif(APPLE)
set(LDC_LINKERFLAG_LIST "-llldCOFF;-llldCommon;-llldCore;-llldDriver;${LDC_LINKERFLAG_LIST};-lxml2")
else()
set(LDC_LINKERFLAG_LIST "-llldCOFF;-llldCommon;-llldCore;-llldDriver;${LDC_LINKERFLAG_LIST}")
endif()
else()
set(LDC_LINKERFLAG_LIST "-llldCOFF;-llldCore;-llldDriver;${LDC_LINKERFLAG_LIST}")
if(MSVC)
list(APPEND LDC_LINKERFLAG_LIST lldCOFF.lib lldCore.lib lldDriver.lib)
else()
set(LDC_LINKERFLAG_LIST "-llldCOFF;-llldCore;-llldDriver;${LDC_LINKERFLAG_LIST}")
endif()
endif()
endif()

Expand Down
21 changes: 9 additions & 12 deletions appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@ environment:
matrix:
- APPVEYOR_JOB_ARCH: x64
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
LLVM_VERSION: 5.0.1
HOST_LDC_VERSION: 1.6.0
LLVM_VERSION: 6.0.0
HOST_LDC_VERSION: 1.8.0
DUB_VERSION: v1.7.2
- APPVEYOR_JOB_ARCH: x86
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
LLVM_VERSION: 5.0.1
HOST_LDC_VERSION: 1.6.0
HOST_LDC_VERSION: 1.8.0
DUB_VERSION: v1.7.2

# scripts that are called at very beginning, before repo cloning
Expand Down Expand Up @@ -64,15 +64,9 @@ install:
- ps: |
If (Test-Path Env:HOST_LDC_VERSION) {
$ldcVersion = $Env:HOST_LDC_VERSION
If ($Env:APPVEYOR_JOB_ARCH -eq 'x64') {
appveyor DownloadFile "http://github.com/ldc-developers/ldc/releases/download/v$ldcVersion/ldc2-$ldcVersion-win64-msvc.zip" -FileName ldc2.zip
7z x ldc2.zip > $null
Set-Item -path env:DMD -value "c:\projects\ldc2-$ldcVersion-win64-msvc\bin\ldmd2.exe"
} Else {
appveyor DownloadFile "http://github.com/ldc-developers/ldc/releases/download/v$ldcVersion/ldc2-$ldcVersion-win32-msvc.zip" -FileName ldc2.zip
7z x ldc2.zip > $null
Set-Item -path env:DMD -value "c:\projects\ldc2-$ldcVersion-win32-msvc\bin\ldmd2.exe"
}
appveyor DownloadFile "http://github.com/ldc-developers/ldc/releases/download/v$ldcVersion/ldc2-$ldcVersion-windows-$Env:APPVEYOR_JOB_ARCH.7z" -FileName ldc2.7z
7z x ldc2.7z > $null
Set-Item -path env:DMD -value "c:\projects\ldc2-$ldcVersion-windows-$Env:APPVEYOR_JOB_ARCH\bin\ldmd2.exe"
} Else {
$dmdVersion = $Env:HOST_DMD_VERSION
appveyor DownloadFile "http://downloads.dlang.org/releases/2.x/$dmdVersion/dmd.$dmdVersion.windows.7z" -FileName dmd.7z
Expand Down Expand Up @@ -137,6 +131,9 @@ test_script:
# Build and run LDC D unittests
- ctest --output-on-failure -R "ldc2-unittest"
# Run LIT testsuite
# Exclude linking/link_internally.d with LLD < 6 due to a magic symbol
# required since VS 2017 v15.5 (see https://reviews.llvm.org/D41089).
- ps: If ($($Env:LLVM_VERSION[0]) -lt '6') { del ..\ldc\tests\linking\link_internally.d }
- ctest -V -R "lit-tests"
# Run DMD testsuite
- if "%APPVEYOR_JOB_ARCH%"=="x64" ( set OS=Win_64) else ( set OS=Win_32)
Expand Down
4 changes: 4 additions & 0 deletions cmake/Modules/FindLLVM.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,10 @@ else()
# Versions below 4.0 do not support component debuginfomsf
list(REMOVE_ITEM LLVM_FIND_COMPONENTS "debuginfomsf" index)
endif()
if(${LLVM_VERSION_STRING} MATCHES "^[3-5]\\..*")
# Versions below 6.0 do not support component windowsmanifest
list(REMOVE_ITEM LLVM_FIND_COMPONENTS "windowsmanifest" index)
endif()

llvm_set(LDFLAGS ldflags)
# In LLVM 3.5+, the system library dependencies (e.g. "-lz") are accessed
Expand Down
8 changes: 8 additions & 0 deletions driver/linker-msvc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,12 @@
#include "llvm/Support/FileSystem.h"

#if LDC_WITH_LLD
#if LDC_LLVM_VER >= 600
#include "lld/Common/Driver.h"
#else
#include "lld/Driver/Driver.h"
#endif
#endif

//////////////////////////////////////////////////////////////////////////////

Expand Down Expand Up @@ -194,7 +198,11 @@ int linkObjToBinaryMSVC(llvm::StringRef outputPath, bool useInternalLinker,
const auto fullArgs =
getFullArgs("lld-link.exe", args, global.params.verbose);

#if LDC_LLVM_VER >= 600
const bool success = lld::coff::link(fullArgs, /*CanExitEarly=*/false);
#else
const bool success = lld::coff::link(fullArgs);
#endif
if (!success)
error(Loc(), "linking with LLD failed");

Expand Down
6 changes: 6 additions & 0 deletions driver/targetmachine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -458,6 +458,12 @@ createTargetMachine(const std::string targetTriple, const std::string arch,
if (targetOptions.MCOptions.ABIName.empty())
targetOptions.MCOptions.ABIName = getABI(triple);

#if LDC_LLVM_VER >= 600
// druntime isn't ready for Dwarf v4+ debuginfos (e.g., in rt.backtrace.dwarf).
if (targetOptions.MCOptions.DwarfVersion == 0)
targetOptions.MCOptions.DwarfVersion = 3;
#endif

auto ldcFloatABI = floatABI;
if (ldcFloatABI == FloatABI::Default) {
switch (triple.getArch()) {
Expand Down
9 changes: 5 additions & 4 deletions tests/debuginfo/nested_cdb.d
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// REQUIRES: atleast_llvm500
// REQUIRES: atmost_llvm501
// REQUIRES: Windows
// REQUIRES: cdb
// RUN: %ldc -g -of=%t.exe %s
Expand All @@ -13,7 +14,7 @@
void encloser(int arg0, ref int arg1)
{
int enc_n = 123;
// CDB: bp `nested_cdb.d:16`
// CDB: bp `nested_cdb.d:17`
// CDB: g
// CDB: dv /t
// CHECK: int arg0 = 0n1
Expand All @@ -27,7 +28,7 @@ void encloser(int arg0, ref int arg1)
void nested(int nes_i)
{
int blub = arg0 + arg1 + enc_n;
// CDB: bp `nested_cdb.d:30`
// CDB: bp `nested_cdb.d:31`
// CDB: g
// CDB: dv /t
// CHECK: int arg0 = 0n1
Expand All @@ -36,7 +37,7 @@ void encloser(int arg0, ref int arg1)
// CDB: ?? *arg1
// CHECK: int 0n2
arg0 = arg1 = enc_n = nes_i;
// CDB: bp `nested_cdb.d:39`
// CDB: bp `nested_cdb.d:40`
// CDB: g
// CDB: dv /t
// CHECK: int arg0 = 0n456
Expand All @@ -47,7 +48,7 @@ void encloser(int arg0, ref int arg1)
}

nested(456);
// CDB: bp `nested_cdb.d:50`
// CDB: bp `nested_cdb.d:51`
// CDB: g
// CDB: dv /t
// the following values are garbage on Win32...
Expand Down
9 changes: 9 additions & 0 deletions tests/linking/link_internally.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// REQUIRES: Windows

// RUN: %ldc -link-internally -run %s

void main()
{
import std.stdio;
writeln("Hello world");
}
6 changes: 3 additions & 3 deletions tests/sanitizers/fsanitize_coverage.d
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@
bool FuzzMe(const ubyte* data, size_t dataSize)
{
// PCGUARD: call {{.*}}_sanitizer_cov_trace_pc_guard
// PCGUARD-NOT: call {{.*}}_sanitizer_cov_trace_cmp
// PCGUARD-NOT: call {{.*}}_sanitizer_cov_trace_{{(const_)?}}cmp
// PCGUARD: call {{.*}}_sanitizer_cov_trace_pc_guard
// PCGUARD-NOT: call {{.*}}_sanitizer_cov_trace_cmp
// PCGUARD-NOT: call {{.*}}_sanitizer_cov_trace_{{(const_)?}}cmp

// PCCMP: call {{.*}}_sanitizer_cov_trace_pc_guard
// PCCMP: call {{.*}}_sanitizer_cov_trace_cmp
// PCCMP: call {{.*}}_sanitizer_cov_trace_{{(const_)?}}cmp

// PCFUNC: call {{.*}}_sanitizer_cov_trace_pc_guard
// PCFUNC-NOT: call {{.*}}_sanitizer_cov_trace_pc_guard
Expand Down