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
4 changes: 4 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,8 @@ jobs:
- job_name: Windows x64
os: windows-2025
arch: x64
base_cmake_flags: >-
-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded
extra_cmake_flags: >-
"-DD_COMPILER_FLAGS=-O -flto=full -defaultlib=phobos2-ldc-lto,druntime-ldc-lto"
-DEXTRA_CXXFLAGS=-flto=full
Expand All @@ -103,6 +105,8 @@ jobs:
- job_name: Windows x86
os: windows-2025
arch: x86
base_cmake_flags: >-
-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded
# `RT_CFLAGS=-m32` needed to make 64-bit clang-cl output 32-bit code for druntime integration tests
extra_cmake_flags: >-
-DRT_CFLAGS=-m32
Expand Down
8 changes: 1 addition & 7 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.4.3)
cmake_minimum_required(VERSION 3.16.0)
if(POLICY CMP0025)
cmake_policy(SET CMP0025 NEW)
endif()
Expand Down Expand Up @@ -207,17 +207,11 @@ if(MSVC)
append("-Llegacy_stdio_definitions.lib" DFLAGS_BASE)
endif()

# Link against the static MSVC runtime; CMake's C(++) flags apparently default to the dynamic one.
# Host DMD/LDMD already defaults to linking against the static MSVC runtime.
if(${LLVM_CXXFLAGS} MATCHES "(^| )/MDd?( |$)")
message(FATAL_ERROR "LLVM must be built with CMake option LLVM_USE_CRT_<CMAKE_BUILD_TYPE>=MT[d]")
endif()
set(llvm_ob_flag)
string(REGEX MATCH "/Ob[0-2]" llvm_ob_flag "${LLVM_CXXFLAGS}")
foreach(flag_var
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
# CMake defaults to /W3, LLVM uses /W4 => MS compiler warns about overridden option.
# Simply replace with /W4.
string(REGEX REPLACE "/W[0-3]" "/W4" ${flag_var} "${${flag_var}}")
Expand Down
3 changes: 2 additions & 1 deletion runtime/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.4.3)
cmake_minimum_required(VERSION 3.16.0)
project(runtime C ASM)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR})
Expand Down Expand Up @@ -593,6 +593,7 @@ function(set_common_library_properties target name output_dir c_flags ld_flags i
COMPILE_DEFINITIONS "LDC=1"
COMPILE_FLAGS "${c_flags}"
LINK_FLAGS "${full_ldflags}"
MSVC_RUNTIME_LIBRARY "" # see reasoning for `/MT /Zl` above
VERSION ${DMDFE_MINOR_VERSION}.${DMDFE_PATCH_VERSION}
SOVERSION ${DMDFE_MINOR_VERSION}
LINKER_LANGUAGE C
Expand Down