Skip to content

Commit 7ad0a81

Browse files
Merge pull request #8872 from adrian-prantl/swift-rules
Factor out Swift rules from Makefile.rules (NFC)
2 parents d172d35 + 1c5506b commit 7ad0a81

File tree

2 files changed

+283
-274
lines changed

2 files changed

+283
-274
lines changed

lldb/packages/Python/lldbsuite/test/make/Makefile.rules

Lines changed: 9 additions & 274 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,6 @@
2323
# FRAMEWORK_INCLUDES (Darwin only) :=
2424
# CFLAGS_EXTRAS :=
2525
# LD_EXTRAS :=
26-
# SWIFTFLAGS_EXTRAS :=
27-
# SWIFT_BRIDGING_HEADER :=
28-
# SWIFT_PRECOMPILE_BRIDGING_HEADER := NO
29-
# SWIFT_OBJC_HEADER := Foo-Swift.h
3026
# SPLIT_DEBUG_SYMBOLS := YES
3127
# CROSS_COMPILE :=
3228
# USE_PRIVATE_MODULE_CACHE := YES
@@ -154,25 +150,6 @@ ifeq "$(OS)" "Darwin"
154150
CLANG_RT_DIR := $(LLDB_LIBS_DIR)/lldb/clang/lib/darwin/
155151
endif
156152

157-
#----------------------------------------------------------------------
158-
# SWIFTC defaults to swift.
159-
# TODO:
160-
# If you change the defaults of SWIFTC, be sure to also change it in the file
161-
# test/plugins/builder_base.py, which provides a Python way to return the
162-
# value of the make variable SWIFTC -- getSwiftCompiler().
163-
#
164-
# See also these functions:
165-
# o cxx_compiler
166-
# o cxx_linker
167-
#----------------------------------------------------------------------
168-
SWIFTC ?= $(shell $(VPATH)/$(LEVEL)/find-swift.py)
169-
ifeq "$(SDKROOT)" ""
170-
SWIFTSDKROOT = $(shell $(VPATH)/$(LEVEL)/find-swift.py -s)
171-
else
172-
SWIFTSDKROOT = $(SDKROOT)
173-
endif
174-
PYTHON ?= python3
175-
176153
#----------------------------------------------------------------------
177154
# ARCHFLAG is the flag used to tell the compiler which architecture
178155
# to compile for. The default is the flag that clang accepts.
@@ -261,7 +238,6 @@ endif
261238
DEBUG_INFO_FLAG ?= -g
262239

263240
CFLAGS ?= $(DEBUG_INFO_FLAG) -O0 -fno-builtin
264-
SWIFTFLAGS ?= $(DEBUG_INFO_FLAG) -Onone -Xfrontend -serialize-debugging-options
265241

266242
ifeq "$(OS)" "Darwin"
267243
ifneq "$(SDKROOT)" ""
@@ -282,53 +258,7 @@ ifndef NO_TEST_COMMON_H
282258
CFLAGS += -include $(THIS_FILE_DIR)/test_common.h
283259
endif
284260

285-
# If C++ interop is enabled, the generated header file will try to include
286-
# SWIFT_LIBS_DIR/swiftToCxx/_SwiftCxxInteroperability.h
287-
ifneq "$(SWIFT_CXX_INTEROP)" ""
288-
CFLAGS += -I$(SWIFT_LIBS_DIR)
289-
endif
290-
291261
CFLAGS += $(NO_LIMIT_DEBUG_INFO_FLAGS) $(ARCH_CFLAGS)
292-
SWIFTFLAGS += $(SWIFTFLAGS_EXTRAS)
293-
SWIFTFLAGS += $(FRAMEWORK_INCLUDES)
294-
ifeq "$(findstring -target,$(SWIFTFLAGS))" ""
295-
SWIFTFLAGS += $(TARGET_SWIFTFLAGS)
296-
endif
297-
298-
ifneq "$(SWIFT_ENABLE_EXPLICIT_MODULES)" ""
299-
SWIFTFLAGS += -explicit-module-build
300-
endif
301-
302-
# Swift bridging headers.
303-
ifneq "$(SWIFT_BRIDGING_HEADER)" ""
304-
# These are incompatible.
305-
DISABLE_SWIFT_INTERFACE = YES
306-
ifneq "$(SWIFT_PRECOMPILE_BRIDGING_HEADER)" "NO"
307-
# With PCH.
308-
SWIFT_HFLAGS = -import-objc-header $(SRCDIR)/$(SWIFT_BRIDGING_HEADER) -enable-bridging-pch -pch-output-dir $(BUILDDIR)
309-
else
310-
# From source.
311-
SWIFT_HFLAGS = -import-objc-header $(SRCDIR)/$(SWIFT_BRIDGING_HEADER) -disable-bridging-pch
312-
endif
313-
else
314-
# No bridging header.
315-
SWIFT_HFLAGS :=
316-
endif
317-
318-
# Clang headers generated from Swift sources.
319-
ifneq "$(SWIFT_OBJC_HEADER)" ""
320-
SWIFTFLAGS += -emit-objc-header-path $(SWIFT_OBJC_HEADER)
321-
endif
322-
ifneq "$(SWIFT_CXX_HEADER)" ""
323-
SWIFTFLAGS += -emit-clang-header-path $(SWIFT_CXX_HEADER)
324-
$(SWIFT_CXX_HEADER): $(strip $(SWIFT_SOURCES:.swift=.swift.o))
325-
endif
326-
327-
ifeq "$(OS)" "Linux"
328-
SWIFT_HOSTDIR = $(shell dirname $(SWIFTC))/../lib/swift/linux
329-
else
330-
SWIFT_HOSTDIR = $(shell dirname $(SWIFTC))/../lib/swift/host
331-
endif
332262

333263
# Use this one if you want to build one part of the result without debug information:
334264
ifeq "$(OS)" "Darwin"
@@ -347,9 +277,6 @@ else
347277
THE_CLANG_MODULE_CACHE_DIR := $(CLANG_MODULE_CACHE_DIR)
348278
endif
349279

350-
SWIFT_MODULE_CACHE_FLAGS ?= -module-cache-path $(THE_CLANG_MODULE_CACHE_DIR)
351-
SWIFTFLAGS += $(SWIFT_MODULE_CACHE_FLAGS)
352-
353280
MODULE_BASE_FLAGS := -fmodules -gmodules -fmodules-cache-path=$(THE_CLANG_MODULE_CACHE_DIR)
354281
MANDATORY_MODULE_BUILD_CFLAGS := $(MODULE_BASE_FLAGS) -gmodules
355282
# Build flags for building with C++ modules.
@@ -367,11 +294,7 @@ endif
367294

368295
CFLAGS += $(CFLAGS_EXTRAS)
369296

370-
ifeq "$(SWIFT_CXX_INTEROP)" "1"
371-
CXXFLAGS += -std=c++17
372-
else
373297
CXXFLAGS += -std=c++11
374-
endif
375298
CXXFLAGS += $(CFLAGS) $(ARCH_CXXFLAGS)
376299

377300
LD = $(CC)
@@ -593,71 +516,6 @@ ifneq "$(strip $(OBJC_SOURCES))" ""
593516
LDFLAGS +=-lobjc
594517
endif
595518

596-
#----------------------------------------------------------------------
597-
# Check if we have any Swift source files
598-
#----------------------------------------------------------------------
599-
ifneq "$(strip $(SWIFT_SOURCES))" ""
600-
OBJECTS +=$(strip $(SWIFT_SOURCES:.swift=.swift.o))
601-
USESWIFTDRIVER = 1
602-
endif
603-
604-
ifneq "$(strip $(DYLIB_SWIFT_SOURCES))" ""
605-
DYLIB_OBJECTS +=$(strip $(DYLIB_SWIFT_SOURCES:.swift=.swift.o))
606-
USESWIFTDRIVER = 1
607-
endif
608-
609-
ifneq "$(strip $(SWIFT_SOURCES_FOR_CXX_HEADER))" ""
610-
SWIFT_CXX_HEADER =$(strip $(SWIFT_SOURCES:.swift=.swift.o))
611-
USESWIFTDRIVER = 1
612-
endif
613-
614-
ifeq "$(USESWIFTDRIVER)" "1"
615-
LDFLAGS +=-L"$(SWIFTLIBS)"
616-
ifeq "$(OS)" "Darwin"
617-
SWIFTFLAGS += -sdk "$(SWIFTSDKROOT)"
618-
endif
619-
SWIFTFLAGS += -tools-directory "$(shell dirname $(CC))"
620-
endif
621-
622-
#----------------------------------------------------------------------
623-
# Check if we need the Swift/ObjC interop features
624-
#----------------------------------------------------------------------
625-
ifeq "$(SWIFT_OBJC_INTEROP)" "1"
626-
ifeq "$(OS)" "Darwin"
627-
SWIFTFLAGS += -link-objc-runtime -framework Foundation -framework CoreGraphics
628-
LDFLAGS += -lswiftObjectiveC -lswiftFoundation -framework Foundation -framework CoreGraphics
629-
else
630-
# CFLAGS_EXTRAS is used via "dotest.py -E" to pass the -I and -L paths
631-
# for Foundation and libdispatch on Linux.
632-
SWIFTFLAGS += $(CFLAGS_EXTRAS)
633-
LDFLAGS += $(CFLAGS_EXTRAS)
634-
endif
635-
636-
endif
637-
638-
#----------------------------------------------------------------------
639-
# Check if we need the Swift/C++ interop features
640-
#----------------------------------------------------------------------
641-
ifeq "$(SWIFT_CXX_INTEROP)" "1"
642-
SWIFTFLAGS += -Xfrontend -enable-experimental-cxx-interop -Xfrontend -validate-tbd-against-ir=none
643-
SWIFTFLAGS += -Xcc -std=c++17
644-
endif
645-
646-
#----------------------------------------------------------------------
647-
# Check if we should compile in Swift embedded mode
648-
#----------------------------------------------------------------------
649-
ifeq "$(SWIFT_EMBEDDED_MODE)" "1"
650-
SWIFTFLAGS += -gdwarf-types -enable-experimental-feature Embedded -Xfrontend -disable-objc-interop -runtime-compatibility-version none
651-
SWIFT_WMO = 1
652-
endif
653-
654-
#----------------------------------------------------------------------
655-
# Set up variables to run the Swift frontend directly.
656-
#----------------------------------------------------------------------
657-
SWIFT=$(shell dirname $(SWIFTC))/swift
658-
SWIFT_FEFLAGS = $(shell echo $(patsubst -Xfrontend,,$(SWIFTFLAGS)) | sed -e 's/-Xlinker [^ ]*//g')
659-
SWIFT_FE=$(SWIFT) -frontend
660-
661519
#----------------------------------------------------------------------
662520
# Check if we have any ObjC++ source files
663521
#----------------------------------------------------------------------
@@ -689,89 +547,8 @@ endif
689547
#----------------------------------------------------------------------
690548
# Compile the executable from all the objects.
691549
#----------------------------------------------------------------------
692-
ifeq "$(USESWIFTDRIVER)" "1"
693-
#----------------------------------------------------------------------
694-
ifeq "$(DYLIB_NAME)" ""
695-
MODULENAME?=$(shell basename $(EXE) .out)
696-
else
697-
EXE = $(DYLIB_FILENAME)
698-
MODULENAME?=$(DYLIB_NAME)
699-
PARSE_AS_LIBRARY = -parse-as-library
700-
endif
701-
702-
VPATHSOURCES=$(patsubst %,$(VPATH)/%,$(SWIFT_SOURCES)) $(patsubst %,$(VPATH)/%,$(DYLIB_SWIFT_SOURCES))
703-
704-
ALL_SWIFT_SOURCES = $(SWIFT_SOURCES) $(DYLIB_SWIFT_SOURCES)
705-
SWIFT_OBJECTS = $(strip $(ALL_SWIFT_SOURCES:.swift=.swift.o))
706-
707-
ifeq "$(DISABLE_SWIFT_INTERFACE)" ""
708-
SWIFT_INTERFACE_FLAGS=-emit-module-interface-path $(BUILDDIR)/$(MODULENAME).swiftinterface
709-
endif
710-
711-
ifeq "$(SWIFT_WMO)" "1"
712-
SWIFTC_OUTPUT=-wmo -o $@
713-
else
714-
SWIFTC_OUTPUT=-output-file-map $(BUILDDIR)/$(MODULENAME)-output-file-map.json
715-
endif
716-
717-
# The Swift object files are named .swift.o so they don't conflict
718-
# with the wrapped Swift module $(MODULENAME).o
719-
720-
$(SWIFT_OBJECTS): $(SWIFT_SOURCES) $(DYLIB_SWIFT_SOURCES)
721-
ifneq "$(SWIFT_WMO)" "1"
722-
@echo "### Generating output file map"
723-
$(PYTHON) $(THIS_FILE_DIR)/gen-output-map.py $^ $(patsubst %,$(BUILDDIR)/%,$(SWIFT_OBJECTS)) >$(BUILDDIR)/$(MODULENAME)-output-file-map.json
724-
endif
725-
@echo "### Compiling" $^
726-
@echo "### Swift driver expanded incovation will be:"
727-
$(SWIFTC) -emit-object $^ $(SWIFTC_OUTPUT) \
728-
$(SWIFTFLAGS) $(SWIFT_HFLAGS) $(PARSE_AS_LIBRARY) \
729-
-module-name $(MODULENAME) \
730-
-emit-module-path $(BUILDDIR)/$(MODULENAME).swiftmodule \
731-
$(SWIFT_INTERFACE_FLAGS) -###
732-
@echo "### Swift driver invocation:"
733-
$(SWIFTC) -emit-object $^ $(SWIFTC_OUTPUT) \
734-
$(SWIFTFLAGS) $(SWIFT_HFLAGS) $(PARSE_AS_LIBRARY) \
735-
-module-name $(MODULENAME) \
736-
-emit-module-path $(BUILDDIR)/$(MODULENAME).swiftmodule \
737-
$(SWIFT_INTERFACE_FLAGS)
738-
ifneq "$(OS)" "Darwin"
739-
@echo "### Wrapping Swift module:"
740-
$(SWIFT) -modulewrap $(BUILDDIR)/$(MODULENAME).swiftmodule \
741-
-o $(BUILDDIR)/$(MODULENAME).o
742-
endif
743-
744-
ifeq "$(OS)" "Darwin"
745-
ifeq "$(HIDE_SWIFTMODULE)" ""
746-
SWIFTMODULE = $(MODULENAME).swiftmodule
747-
LD_SWIFTFLAGS = -Xlinker -add_ast_path -Xlinker $(SWIFTMODULE)
748-
else
749-
SWIFTMODULE =
750-
LD_SWIFTFLAGS =
751-
endif
752-
$(EXE): $(OBJECTS)
753-
@echo "### Linking" $(EXE)
754-
$(SWIFTC) $(LD_EXTRAS) $(LD_SWIFTFLAGS) $(OBJECTS) $(patsubst -g,,$(SWIFTFLAGS)) -o "$(EXE)"
755-
ifneq "$(CODESIGN)" ""
756-
$(CODESIGN) -s - "$(EXE)"
757-
endif
758-
ifneq "$(HIDE_SWIFTMODULE)" ""
759-
rm -f $(MODULENAME).swiftmodule
760-
endif
761-
else # OS = Linux
762-
ifeq "$(HIDE_SWIFTMODULE)" ""
763-
WRAPPED_SWIFTMODULE = $(MODULENAME).o
764-
endif
765-
766-
$(EXE): $(OBJECTS)
767-
@echo "### Linking" $(EXE)
768-
$(SWIFTC) $(LD_EXTRAS) $(LD_SWIFTFLAGS) $(WRAPPED_SWIFTMODULE) $^ $(patsubst -g,,$(SWIFTFLAGS)) -o "$(EXE)"
769-
ifneq "$(HIDE_SWIFTMODULE)" ""
770-
rm -f $(MODULENAME).swiftmodule
771-
endif
772-
endif
773-
774-
else # USESWIFTDRIVER = 0
550+
include Swift.rules
551+
ifneq "$(USESWIFTDRIVER)" "1"
775552
#----------------------------------------------------------------------
776553

777554
ifneq "$(DYLIB_NAME)" ""
@@ -791,6 +568,7 @@ ifneq "$(CODESIGN)" ""
791568
$(CODESIGN) -s - "$(EXE)"
792569
endif
793570
endif
571+
794572
endif
795573
#----------------------------------------------------------------------
796574
# Make the dSYM file from the executable if $(MAKE_DSYM) != "NO"
@@ -808,57 +586,10 @@ ifeq "$(SPLIT_DEBUG_SYMBOLS)" "YES"
808586
endif
809587
endif
810588

589+
ifneq "$(USESWIFTDRIVER)" "1"
811590
#----------------------------------------------------------------------
812591
# Make the dylib
813592
#----------------------------------------------------------------------
814-
#----------------------------------------------------------------------
815-
ifeq "$(USESWIFTDRIVER)" "1"
816-
#----------------------------------------------------------------------
817-
ifeq "$(OS)" "Darwin"
818-
DYLIB_SWIFT_FLAGS= \
819-
-Xlinker -dylib \
820-
-Xlinker -install_name -Xlinker "$(DYLIB_INSTALL_NAME)" \
821-
$(LD_EXTRAS)
822-
ifeq "$(DYLIB_HIDE_SWIFTMODULE)" ""
823-
DYLIB_SWIFT_FLAGS+= -Xlinker -add_ast_path -Xlinker $(MODULENAME).swiftmodule
824-
endif
825-
else
826-
DYLIB_SWIFT_FLAGS=$(LD_EXTRAS)
827-
ifeq "$(DYLIB_HIDE_SWIFTMODULE)" ""
828-
DYLIB_OBJECTS += $(BUILDDIR)/$(MODULENAME).o
829-
endif
830-
endif
831-
832-
$(DYLIB_FILENAME) : $(DYLIB_OBJECTS) $(MODULE_INTERFACE)
833-
@echo "### Linking dynamic library $(DYLIB_NAME)"
834-
ifneq "$(FRAMEWORK)" ""
835-
mkdir -p $(FRAMEWORK).framework/Versions/A/Headers
836-
mkdir -p $(FRAMEWORK).framework/Versions/A/Modules
837-
mkdir -p $(FRAMEWORK).framework/Versions/A/Resources
838-
ifneq "$(MODULENAME)" ""
839-
mkdir -p $(FRAMEWORK).framework/Versions/A/Modules/$(MODULENAME).swiftmodule
840-
cp -r $(MODULENAME).swiftmodule $(FRAMEWORK).framework/Versions/A/Modules/$(MODULENAME).swiftmodule/$(ARCH).swiftmodule
841-
endif
842-
(cd $(FRAMEWORK).framework/Versions; ln -sf A Current)
843-
(cd $(FRAMEWORK).framework/; ln -sf Versions/A/Headers Headers)
844-
(cd $(FRAMEWORK).framework/; ln -sf Versions/A/Modules Modules)
845-
(cd $(FRAMEWORK).framework/; ln -sf Versions/A/Resources Resources)
846-
(cd $(FRAMEWORK).framework/; ln -sf Versions/A/$(FRAMEWORK) $(FRAMEWORK))
847-
endif
848-
$(SWIFTC) $(patsubst -g,,$(SWIFTFLAGS)) \
849-
-emit-library $(DYLIB_SWIFT_FLAGS) -o $@ $(DYLIB_OBJECTS)
850-
ifneq "$(CODESIGN)" ""
851-
$(CODESIGN) -s - "$(DYLIB_FILENAME)"
852-
endif
853-
ifneq "$(MAKE_DSYM)" "NO"
854-
ifneq "$(DS)" ""
855-
"$(DS)" $(DSFLAGS) "$(DYLIB_FILENAME)"
856-
endif
857-
endif
858-
859-
#----------------------------------------------------------------------
860-
else # Non-Swift llvm.org part.
861-
#----------------------------------------------------------------------
862593
$(DYLIB_OBJECTS) : CFLAGS += -DCOMPILING_LLDB_TEST_DLL
863594

864595
ifneq "$(OS)" "Windows_NT"
@@ -900,7 +631,11 @@ ifeq "$(SPLIT_DEBUG_SYMBOLS)" "YES"
900631
$(OBJCOPY) --strip-debug --add-gnu-debuglink="$(DYLIB_FILENAME).debug" "$(DYLIB_FILENAME)" "$(DYLIB_FILENAME)"
901632
endif
902633
endif
903-
endif
634+
635+
#----------------------------------------------------------------------
636+
endif # !USESWIFTDRIVER
637+
#----------------------------------------------------------------------
638+
904639
#----------------------------------------------------------------------
905640
# Make the precompiled header and compile C++ sources against it
906641
#----------------------------------------------------------------------

0 commit comments

Comments
 (0)