summaryrefslogtreecommitdiff
path: root/dev-lang/swift/files/swift-6.0.3-r2/respect-c-cxx-flags.patch
blob: 2a9b823d9fa52a90e0859645f859bf60280ce73b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
# CMake automatically reads `CFLAGS`, `CXXFLAGS`, `LDFLAGS`, etc. from the
# environment and uses them to populate its default flag variables -- but the
# Swift build system blows away `CMAKE_C{XX}_FLAGS` without picking up the
# environment. These need to be picked up again to not be ignored.

--- a/swift/utils/build-script-impl
+++ b/swift/utils/build-script-impl
@@ -1820,10 +1820,10 @@ for host in "${ALL_HOSTS[@]}"; do

                 cmake_options=(
                     "${cmake_options[@]}"
-                    -DCMAKE_C_FLAGS="$(swift_c_flags ${host})"
-                    -DCMAKE_CXX_FLAGS="$(swift_c_flags ${host})"
-                    -DCMAKE_C_FLAGS_RELWITHDEBINFO="-O2 -DNDEBUG"
-                    -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="-O2 -DNDEBUG"
+                    -DCMAKE_C_FLAGS="${CFLAGS} $(swift_c_flags ${host})"
+                    -DCMAKE_CXX_FLAGS="${CXXFLAGS} $(swift_c_flags ${host})"
+                    -DCMAKE_C_FLAGS_RELWITHDEBINFO="${CFLAGS} -O2 -DNDEBUG"
+                    -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="${CXXFLAGS} -O2 -DNDEBUG"
                     -DCMAKE_BUILD_TYPE:STRING="${SWIFT_BUILD_TYPE}"
                     -DLLVM_ENABLE_ASSERTIONS:BOOL=$(true_false "${SWIFT_ENABLE_ASSERTIONS}")
                     -DBOOTSTRAPPING_MODE:STRING=$(to_bootstrapping_mode "${BOOTSTRAPPING}")
@@ -2215,8 +2215,8 @@ for host in "${ALL_HOSTS[@]}"; do
                 cmake_options=(
                     "${cmake_options[@]}"
                     -C${LLDB_SOURCE_DIR}/cmake/caches/${cmake_cache}
-                    -DCMAKE_C_FLAGS="$(llvm_c_flags ${host})"
-                    -DCMAKE_CXX_FLAGS="$(llvm_c_flags ${host})"
+                    -DCMAKE_C_FLAGS="${CFLAGS} $(llvm_c_flags ${host})"
+                    -DCMAKE_CXX_FLAGS="${CXXFLAGS} $(llvm_c_flags ${host})"
                     -DCMAKE_BUILD_TYPE:STRING="${LLDB_BUILD_TYPE}"
                     -DLLDB_SWIFTC:PATH=${SWIFTC_BIN}
                     -DLLDB_SWIFT_LIBS:PATH="$(build_directory ${LOCAL_HOST} swift)/lib/swift"
--- a/swift/utils/swift_build_support/swift_build_support/products/llvm.py
+++ b/swift/utils/swift_build_support/swift_build_support/products/llvm.py
@@ -261,10 +261,10 @@ class LLVM(cmake_product.CMakeProduct):
         # llvm/tools, e.g. to build LLDB.

         llvm_c_flags = ' '.join(self.llvm_c_flags(platform, arch))
-        llvm_cmake_options.define('CMAKE_C_FLAGS', llvm_c_flags)
-        llvm_cmake_options.define('CMAKE_CXX_FLAGS', llvm_c_flags)
-        llvm_cmake_options.define('CMAKE_C_FLAGS_RELWITHDEBINFO', '-O2 -DNDEBUG')
-        llvm_cmake_options.define('CMAKE_CXX_FLAGS_RELWITHDEBINFO', '-O2 -DNDEBUG')
+        llvm_cmake_options.define('CMAKE_C_FLAGS', ' '.join([os.environ.get('CFLAGS', ''), llvm_c_flags]))
+        llvm_cmake_options.define('CMAKE_CXX_FLAGS', ' '.join([os.environ.get('CXXFLAGS', ''), llvm_c_flags]))
+        llvm_cmake_options.define('CMAKE_C_FLAGS_RELWITHDEBINFO', ' '.join([os.environ.get('CFLAGS', ''), '-O2 -DNDEBUG']))
+        llvm_cmake_options.define('CMAKE_CXX_FLAGS_RELWITHDEBINFO', ' '.join([os.environ.get('CXXFLAGS', ''), '-O2 -DNDEBUG']))
         llvm_cmake_options.define('CMAKE_BUILD_TYPE:STRING',
                                   self.args.llvm_build_variant)
         llvm_cmake_options.define('LLVM_TOOL_SWIFT_BUILD:BOOL', 'FALSE')
--- a/swift/utils/swift_build_support/swift_build_support/products/product.py
+++ b/swift/utils/swift_build_support/swift_build_support/products/product.py
@@ -440,8 +440,8 @@ class Product(object):

         (platform, arch) = host_target.split('-')
         common_c_flags = ' '.join(self.common_cross_c_flags(platform, arch))
-        self.cmake_options.define('CMAKE_C_FLAGS', common_c_flags)
-        self.cmake_options.define('CMAKE_CXX_FLAGS', common_c_flags)
+        self.cmake_options.define('CMAKE_C_FLAGS', ' '.join([os.environ.get('CFLAGS', ''), common_c_flags]))
+        self.cmake_options.define('CMAKE_CXX_FLAGS', ' '.join([os.environ.get('CXXFLAGS', ''), common_c_flags]))

         toolchain_file = None
         if self.is_darwin_host(host_target):

--- a/swift/SwiftCompilerSources/CMakeLists.txt
+++ b/swift/SwiftCompilerSources/CMakeLists.txt
@@ -147,6 +147,11 @@ function(add_swift_compiler_modules_library name)
     list(APPEND swift_compile_options "-Xfrontend" "-disable-legacy-type-info")
   endif()

+  separate_arguments(cxxflags NATIVE_COMMAND "${CMAKE_CXX_FLAGS}")
+  foreach(flag IN LISTS cxxflags)
+    list(APPEND swift_compile_options "-Xcc" "${flag}")
+  endforeach()
+
   get_bootstrapping_path(build_dir ${CMAKE_CURRENT_BINARY_DIR} "${ALS_BOOTSTRAPPING}")

   set(sdk_option ${SWIFT_COMPILER_SOURCES_SDK_FLAGS})
--- a/swift/cmake/modules/AddPureSwift.cmake
+++ b/swift/cmake/modules/AddPureSwift.cmake
@@ -81,6 +81,11 @@ function(_add_host_swift_compile_options name)
   else()
     target_compile_options(${name} PRIVATE "$<$<COMPILE_LANGUAGE:Swift>:SHELL:-Xcc -DNDEBUG>")
   endif()
+
+  separate_arguments(cxxflags NATIVE_COMMAND "${CMAKE_CXX_FLAGS}")
+  foreach(flag IN LISTS cxxflags)
+    target_compile_options(${name} PRIVATE "SHELL: -Xcc ${flag}")
+  endforeach()
 endfunction()

 function(_set_pure_swift_link_flags name relpath_to_lib_dir)
--- a/swift/stdlib/cmake/modules/SwiftSource.cmake
+++ b/swift/stdlib/cmake/modules/SwiftSource.cmake
@@ -138,6 +138,12 @@ function(handle_swift_sources
       endif()
     endif()
     list(APPEND swift_compile_flags "-color-diagnostics")
+
+    separate_arguments(cxxflags NATIVE_COMMAND "${CMAKE_CXX_FLAGS}")
+    foreach(flag IN LISTS cxxflags)
+      list(APPEND swift_compile_flags "-Xcc" "${flag}")
+    endforeach()
+
     _compile_swift_files(
         dependency_target
         module_dependency_target
--- a/swift-driver/Utilities/build-script-helper.py
+++ b/swift-driver/Utilities/build-script-helper.py
@@ -4,6 +4,7 @@ import argparse
 import os
 import json
 import platform
+import shlex
 import shutil
 import subprocess
 import sys
@@ -117,6 +118,10 @@ def get_swiftpm_options(args):
   if args.action == 'install':
     swiftpm_args += ['-Xswiftc', '-no-toolchain-stdlib-rpath']
 
+  cxxflags = shlex.split(os.getenv('CXXFLAGS', ''))
+  for flag in cxxflags:
+    swiftpm_args.extend(['-Xcc', flag])
+
   return swiftpm_args
 
 def install_binary(file, source_dir, install_dir, verbose):
@@ -460,9 +465,7 @@ def build_llbuild_using_cmake(args, target, swiftc_exec, build_dir, base_cmake_f
   mkdir_p(llbuild_api_dir)
   subprocess.check_call(['touch', os.path.join(llbuild_api_dir, 'codemodel-v2')])
   flags = [
-        '-DCMAKE_C_COMPILER:=clang',
-        '-DCMAKE_CXX_COMPILER:=clang++',
-        '-DCMAKE_CXX_FLAGS=-target %s' % target,
+        '-DCMAKE_CXX_FLAGS=%s -target %s' % (os.getenv('CXXFLAGS', ''), target),
         '-DLLBUILD_SUPPORT_BINDINGS:=Swift'
     ]
   llbuild_cmake_flags = base_cmake_flags + flags
@@ -544,6 +547,9 @@ def cmake_build(args, swiftc_exec, cmake_args, swift_flags, source_path,
     args.cmake_bin, '-G', 'Ninja',
     '-DCMAKE_MAKE_PROGRAM=%s' % args.ninja_bin,
     '-DCMAKE_BUILD_TYPE:=Release',
+    '-DCMAKE_C_COMPILER:=clang',
+    '-DCMAKE_CXX_COMPILER:=clang++',
+    '-DCMAKE_CXX_FLAGS=' + os.getenv('CXXFLAGS', ''),
     '-DCMAKE_Swift_FLAGS=' + ' '.join(swift_flags),
     '-DCMAKE_Swift_COMPILER:=%s' % (swiftc_exec),
   ] + cmake_args + [source_path]
--- a/swiftpm/Sources/Build/BuildDescription/ClangModuleBuildDescription.swift
+++ b/swiftpm/Sources/Build/BuildDescription/ClangModuleBuildDescription.swift
@@ -19,6 +19,7 @@ import struct PackageGraph.ResolvedModule
 import struct SPMBuildCore.BuildParameters
 import struct SPMBuildCore.BuildToolPluginInvocationResult
 import struct SPMBuildCore.PrebuildCommandResult
+import enum TSCBasic.ProcessEnv
 
 @available(*, deprecated, renamed: "ClangModuleBuildDescription")
 public typealias ClangTargetBuildDescription = ClangModuleBuildDescription
@@ -300,6 +301,9 @@ public final class ClangModuleBuildDescription {
             args += self.buildParameters.toolchain.extraFlags.cxxCompilerFlags
             // User arguments (from -Xcxx) should follow generated arguments to allow user overrides
             args += self.buildParameters.flags.cxxCompilerFlags
+            if let cxxflags = ProcessEnv.vars["CXXFLAGS"] {
+                args += cxxflags.split(separator: " ").map(String.init)
+            }
         }
 
         // Enable the correct lto mode if requested.
--- a/swiftpm/Utilities/bootstrap
+++ b/swiftpm/Utilities/bootstrap
@@ -20,6 +20,7 @@ import json
 import os
 import platform
 import re
+import shlex
 import shutil
 import subprocess
 from helpers import note, error, symlink_force, mkdir_p, call, call_output
@@ -514,6 +515,7 @@ def build_with_cmake(args, cmake_args, ninja_args, source_path, build_dir, cmake
 
         cmd = [
             "env"] + cmake_env + ["MACOSX_DEPLOYMENT_TARGET=%s" % (g_macos_deployment_target),
+            'CXXFLAGS="%s"' % os.getenv('CXXFLAGS', ''),
             args.cmake_path, "-G", "Ninja",
             "-DCMAKE_MAKE_PROGRAM=%s" % args.ninja_path,
             "-DCMAKE_BUILD_TYPE:=Debug",
@@ -836,6 +838,10 @@ def get_swiftpm_flags(args):
     # Enforce explicit target dependencies
     # build_flags.extend(["--explicit-target-dependency-import-check", "error"])
 
+    cxxflags = shlex.split(os.getenv('CXXFLAGS', ''))
+    for flag in cxxflags:
+        build_flags.extend(['-Xcc', flag])
+
     return build_flags
 
 if __name__ == '__main__':