From ece3e0d886ca1d8fd7565ef68a48f194ef0adc47 Mon Sep 17 00:00:00 2001 From: Lightmann Date: Sun, 14 May 2023 23:35:02 -0400 Subject: [PATCH 1/4] Switch to CC for applicable file types --- makefiles/instance/rules.mk | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/makefiles/instance/rules.mk b/makefiles/instance/rules.mk index 9c9a0b6a9..541b23bd4 100644 --- a/makefiles/instance/rules.mk +++ b/makefiles/instance/rules.mk @@ -208,11 +208,11 @@ endif $(THEOS_OBJ_DIR)/%.m.$(_THEOS_OBJ_FILE_TAG).o: %.m $(ECHO_NOTHING)mkdir -p $(dir $@)$(ECHO_END) - $(ECHO_COMPILING)$(ECHO_UNBUFFERED)$(TARGET_CXX) -x objective-c -c $(_THEOS_INTERNAL_IFLAGS_C) $(ALL_DEPFLAGS) $(ALL_CFLAGS) $(ALL_OBJCFLAGS) $< -o $@$(ECHO_END) + $(ECHO_COMPILING)$(ECHO_UNBUFFERED)$(TARGET_CC) -x objective-c -c $(_THEOS_INTERNAL_IFLAGS_C) $(ALL_DEPFLAGS) $(ALL_CFLAGS) $(ALL_OBJCFLAGS) $< -o $@$(ECHO_END) $(THEOS_OBJ_DIR)/%.mi.$(_THEOS_OBJ_FILE_TAG).o: %.mi $(ECHO_NOTHING)mkdir -p $(dir $@)$(ECHO_END) - $(ECHO_COMPILING)$(ECHO_UNBUFFERED)$(TARGET_CXX) -x objective-c-cpp-output -c $(_THEOS_INTERNAL_IFLAGS_C) $(ALL_DEPFLAGS) $(ALL_CFLAGS) $(ALL_OBJCFLAGS) $< -o $@$(ECHO_END) + $(ECHO_COMPILING)$(ECHO_UNBUFFERED)$(TARGET_CC) -x objective-c-cpp-output -c $(_THEOS_INTERNAL_IFLAGS_C) $(ALL_DEPFLAGS) $(ALL_CFLAGS) $(ALL_OBJCFLAGS) $< -o $@$(ECHO_END) $(THEOS_OBJ_DIR)/%.mm.$(_THEOS_OBJ_FILE_TAG).o: %.mm $(ECHO_NOTHING)mkdir -p $(dir $@)$(ECHO_END) @@ -224,19 +224,19 @@ $(THEOS_OBJ_DIR)/%.mii.$(_THEOS_OBJ_FILE_TAG).o: %.mii $(THEOS_OBJ_DIR)/%.c.$(_THEOS_OBJ_FILE_TAG).o: %.c $(ECHO_NOTHING)mkdir -p $(dir $@)$(ECHO_END) - $(ECHO_COMPILING)$(ECHO_UNBUFFERED)$(TARGET_CXX) -x c -c $(_THEOS_INTERNAL_IFLAGS_C) $(ALL_DEPFLAGS) $(ALL_CFLAGS) $< -o $@$(ECHO_END) + $(ECHO_COMPILING)$(ECHO_UNBUFFERED)$(TARGET_CC) -x c -c $(_THEOS_INTERNAL_IFLAGS_C) $(ALL_DEPFLAGS) $(ALL_CFLAGS) $< -o $@$(ECHO_END) $(THEOS_OBJ_DIR)/%.i.$(_THEOS_OBJ_FILE_TAG).o: %.i $(ECHO_NOTHING)mkdir -p $(dir $@)$(ECHO_END) - $(ECHO_COMPILING)$(ECHO_UNBUFFERED)$(TARGET_CXX) -x c-cpp-output -c $(_THEOS_INTERNAL_IFLAGS_C) $(ALL_DEPFLAGS) $(ALL_CFLAGS) $< -o $@$(ECHO_END) + $(ECHO_COMPILING)$(ECHO_UNBUFFERED)$(TARGET_CC) -x c-cpp-output -c $(_THEOS_INTERNAL_IFLAGS_C) $(ALL_DEPFLAGS) $(ALL_CFLAGS) $< -o $@$(ECHO_END) $(THEOS_OBJ_DIR)/%.s.$(_THEOS_OBJ_FILE_TAG).o: %.s $(ECHO_NOTHING)mkdir -p $(dir $@)$(ECHO_END) - $(ECHO_COMPILING)$(ECHO_UNBUFFERED)$(TARGET_CXX) -x assembler-with-cpp -c $(_THEOS_INTERNAL_IFLAGS_C) $(ALL_DEPFLAGS) $(ALL_CFLAGS) $< -o $@$(ECHO_END) + $(ECHO_COMPILING)$(ECHO_UNBUFFERED)$(TARGET_CC) -x assembler-with-cpp -c $(_THEOS_INTERNAL_IFLAGS_C) $(ALL_DEPFLAGS) $(ALL_CFLAGS) $< -o $@$(ECHO_END) $(THEOS_OBJ_DIR)/%.S.$(_THEOS_OBJ_FILE_TAG).o: %.S $(ECHO_NOTHING)mkdir -p $(dir $@)$(ECHO_END) - $(ECHO_COMPILING)$(ECHO_UNBUFFERED)$(TARGET_CXX) -x assembler-with-cpp -c $(_THEOS_INTERNAL_IFLAGS_C) $(ALL_DEPFLAGS) $(ALL_CFLAGS) $< -o $@$(ECHO_END) + $(ECHO_COMPILING)$(ECHO_UNBUFFERED)$(TARGET_CC) -x assembler-with-cpp -c $(_THEOS_INTERNAL_IFLAGS_C) $(ALL_DEPFLAGS) $(ALL_CFLAGS) $< -o $@$(ECHO_END) $(THEOS_OBJ_DIR)/%.cc.$(_THEOS_OBJ_FILE_TAG).o: %.cc $(ECHO_NOTHING)mkdir -p $(dir $@)$(ECHO_END) @@ -277,7 +277,7 @@ $(THEOS_OBJ_DIR)/%.x.m: %.x $(THEOS_OBJ_DIR)/%.x.$(_THEOS_OBJ_FILE_TAG).o: %.x $(THEOS_OBJ_DIR)/%.x.m $(ECHO_NOTHING)mkdir -p $(dir $@)$(ECHO_END) - $(ECHO_COMPILING)$(ECHO_UNBUFFERED)$(TARGET_CXX) -x objective-c -c -I"$(call __clean_pwd,$(dir $<))" $(_THEOS_INTERNAL_IFLAGS_C) $(ALL_DEPFLAGS) $(ALL_CFLAGS) $(ALL_OBJCFLAGS) $(THEOS_OBJ_DIR)/$<.m -o $@$(ECHO_END) + $(ECHO_COMPILING)$(ECHO_UNBUFFERED)$(TARGET_CC) -x objective-c -c -I"$(call __clean_pwd,$(dir $<))" $(_THEOS_INTERNAL_IFLAGS_C) $(ALL_DEPFLAGS) $(ALL_CFLAGS) $(ALL_OBJCFLAGS) $(THEOS_OBJ_DIR)/$<.m -o $@$(ECHO_END) $(ECHO_NOTHING)rm $(THEOS_OBJ_DIR)/$<.m$(ECHO_END) $(THEOS_OBJ_DIR)/%.xm.mm: %.xm @@ -296,7 +296,7 @@ $(THEOS_OBJ_DIR)/%.mi: %.xi $(THEOS_OBJ_DIR)/%.xi.$(_THEOS_OBJ_FILE_TAG).o: %.xi $(THEOS_OBJ_DIR)/%.mi $(ECHO_NOTHING)mkdir -p $(dir $@)$(ECHO_END) - $(ECHO_COMPILING)$(ECHO_UNBUFFERED)$(TARGET_CXX) -x objective-c -c $(ALL_CFLAGS) $(ALL_OBJCFLAGS) $(THEOS_OBJ_DIR)/$<.mi -o $@$(ECHO_END) + $(ECHO_COMPILING)$(ECHO_UNBUFFERED)$(TARGET_CC) -x objective-c -c $(ALL_CFLAGS) $(ALL_OBJCFLAGS) $(THEOS_OBJ_DIR)/$<.mi -o $@$(ECHO_END) $(ECHO_NOTHING)rm $(THEOS_OBJ_DIR)/$*.mi$(ECHO_END) $(THEOS_OBJ_DIR)/%.mii: %.xmi From bad829cec30d1a43564a1cce84fe436299cd45d7 Mon Sep 17 00:00:00 2001 From: Lightmann Date: Wed, 19 Jul 2023 20:18:16 -0400 Subject: [PATCH 2/4] Missed this --- makefiles/instance/rules.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/makefiles/instance/rules.mk b/makefiles/instance/rules.mk index 541b23bd4..a74eb1265 100644 --- a/makefiles/instance/rules.mk +++ b/makefiles/instance/rules.mk @@ -291,7 +291,7 @@ $(THEOS_OBJ_DIR)/%.xm.$(_THEOS_OBJ_FILE_TAG).o: %.xm $(THEOS_OBJ_DIR)/%.xm.mm $(THEOS_OBJ_DIR)/%.mi: %.xi $(ECHO_NOTHING)mkdir -p $(dir $@)$(ECHO_END) - $(ECHO_PREPROCESSING)$(ECHO_UNBUFFERED)$(TARGET_CXX) -x objective-c -E -I"$(call __clean_pwd,$(dir $<))" $(_THEOS_INTERNAL_IFLAGS_C) $(ALL_DEPFLAGS) $(ALL_PFLAGS) $(PREPROCESS_ARCH_FLAGS) $(ALL_OBJCFLAGS) $< > $(THEOS_OBJ_DIR)/$<.pre && $(THEOS_BIN_PATH)/logos.pl $(ALL_LOGOSFLAGS) $(THEOS_OBJ_DIR)/$<.pre > $(THEOS_OBJ_DIR)/$<.mi $(ECHO_END) + $(ECHO_PREPROCESSING)$(ECHO_UNBUFFERED)$(TARGET_CC) -x objective-c -E -I"$(call __clean_pwd,$(dir $<))" $(_THEOS_INTERNAL_IFLAGS_C) $(ALL_DEPFLAGS) $(ALL_PFLAGS) $(PREPROCESS_ARCH_FLAGS) $(ALL_OBJCFLAGS) $< > $(THEOS_OBJ_DIR)/$<.pre && $(THEOS_BIN_PATH)/logos.pl $(ALL_LOGOSFLAGS) $(THEOS_OBJ_DIR)/$<.pre > $(THEOS_OBJ_DIR)/$<.mi $(ECHO_END) $(ECHO_NOTHING)$(THEOS_BIN_PATH)/logos.pl $(ALL_LOGOSFLAGS) $< > $@$(ECHO_END) $(THEOS_OBJ_DIR)/%.xi.$(_THEOS_OBJ_FILE_TAG).o: %.xi $(THEOS_OBJ_DIR)/%.mi From e605da631898b30f6d0dd8e2b5e4e16e833f39b3 Mon Sep 17 00:00:00 2001 From: Lightmann Date: Wed, 19 Jul 2023 21:11:04 -0400 Subject: [PATCH 3/4] Only link with CXX/libc++ if file type(s) require it --- makefiles/instance/rules.mk | 6 ++++++ makefiles/targets/Linux/linux.mk | 2 +- makefiles/targets/Windows/cygwin.mk | 2 +- makefiles/targets/_common/darwin_head.mk | 2 +- makefiles/targets/_common/darwin_tail.mk | 5 ++++- 5 files changed, 13 insertions(+), 4 deletions(-) diff --git a/makefiles/instance/rules.mk b/makefiles/instance/rules.mk index a74eb1265..3b348a119 100644 --- a/makefiles/instance/rules.mk +++ b/makefiles/instance/rules.mk @@ -27,6 +27,12 @@ endif OBJ_FILES_TO_LINK = $(strip $(addprefix $(THEOS_OBJ_DIR)/,$(OBJ_FILES)) $(call __schema_var_all,$(THEOS_CURRENT_INSTANCE)_,OBJ_FILES) $(SUBPROJECT_OBJ_FILES)) _OBJ_DIR_STAMPS = $(sort $(foreach o,$(filter $(THEOS_OBJ_DIR)%,$(OBJ_FILES_TO_LINK)),$(dir $o).stamp)) +ifneq ($(OBJ_FILES_TO_LINK),) +_THEOS_CXX_FILE_TYPES = .mm .mii .cc .cp .cxx .cpp .ii .xm .xmi +ifneq ($(strip $(foreach type,$(_THEOS_CXX_FILE_TYPES),$(findstring $(type),$(OBJ_FILES_TO_LINK)))),) +TARGET_LD = $(TARGET_CXX) +endif +endif ADDITIONAL_CPPFLAGS += $(call __schema_var_all,$(THEOS_CURRENT_INSTANCE)_,CPPFLAGS) diff --git a/makefiles/targets/Linux/linux.mk b/makefiles/targets/Linux/linux.mk index c75ee00dd..308f9867b 100644 --- a/makefiles/targets/Linux/linux.mk +++ b/makefiles/targets/Linux/linux.mk @@ -8,7 +8,7 @@ endif TARGET_CC ?= $(CROSS_COMPILE)gcc TARGET_CXX ?= $(CROSS_COMPILE)g++ -TARGET_LD ?= $(CROSS_COMPILE)g++ +TARGET_LD ?= $(TARGET_CC) TARGET_STRIP ?= $(CROSS_COMPILE)strip TARGET_STRIP_FLAGS ?= TARGET_CODESIGN_ALLOCATE ?= diff --git a/makefiles/targets/Windows/cygwin.mk b/makefiles/targets/Windows/cygwin.mk index 12108df8d..3fbe7b296 100755 --- a/makefiles/targets/Windows/cygwin.mk +++ b/makefiles/targets/Windows/cygwin.mk @@ -8,7 +8,7 @@ endif TARGET_CC ?= $(CROSS_COMPILE)gcc TARGET_CXX ?= $(CROSS_COMPILE)g++ -TARGET_LD ?= $(CROSS_COMPILE)g++ +TARGET_LD ?= $(TARGET_CC) TARGET_STRIP ?= $(CROSS_COMPILE)strip TARGET_STRIP_FLAGS ?= TARGET_CODESIGN_ALLOCATE ?= diff --git a/makefiles/targets/_common/darwin_head.mk b/makefiles/targets/_common/darwin_head.mk index f09bbd20a..2a8f23dd0 100644 --- a/makefiles/targets/_common/darwin_head.mk +++ b/makefiles/targets/_common/darwin_head.mk @@ -62,7 +62,7 @@ endif TARGET_CC ?= $(call __invocation,$(_THEOS_TARGET_CC)) TARGET_CXX ?= $(call __invocation,$(_THEOS_TARGET_CXX)) -TARGET_LD ?= $(call __invocation,$(_THEOS_TARGET_CXX)) +TARGET_LD ?= $(call __invocation,$(_THEOS_TARGET_CC)) TARGET_SWIFT ?= $(call __invocation,$(_THEOS_TARGET_SWIFT)) TARGET_LIPO ?= $(call __invocation,lipo) TARGET_STRIP ?= $(call __invocation,strip) diff --git a/makefiles/targets/_common/darwin_tail.mk b/makefiles/targets/_common/darwin_tail.mk index 9e6735ab8..c508753c9 100644 --- a/makefiles/targets/_common/darwin_tail.mk +++ b/makefiles/targets/_common/darwin_tail.mk @@ -33,7 +33,10 @@ endif _THEOS_TARGET_CFLAGS := -isysroot "$(ISYSROOT)" $(VERSIONFLAGS) $(_THEOS_TARGET_CC_CFLAGS) _THEOS_TARGET_CCFLAGS := $(_TARGET_LIBCPP_CCFLAGS) -_THEOS_TARGET_LDFLAGS := -isysroot "$(SYSROOT)" $(VERSIONFLAGS) $(LEGACYFLAGS) -multiply_defined suppress $(_TARGET_LIBCPP_LDFLAGS) $(_TARGET_LIBSWIFT_LDFLAGS) +_THEOS_TARGET_LDFLAGS := -isysroot "$(SYSROOT)" $(VERSIONFLAGS) $(LEGACYFLAGS) -multiply_defined suppress $(_TARGET_LIBSWIFT_LDFLAGS) +ifneq ($(filter %++,$(TARGET_LD)),) +_THEOS_TARGET_LDFLAGS += $(_TARGET_LIBCPP_LDFLAGS) +endif # if toolchain has prefix, point clang to the ld we want to use ifneq ($(_THEOS_TARGET_SDK_BIN_PREFIX),) From 3a177a57af8d95d7adcce34ab202056d9d2ca32b Mon Sep 17 00:00:00 2001 From: Lightmann Date: Wed, 19 Jul 2023 21:14:11 -0400 Subject: [PATCH 4/4] libc++ is auto-linked when using CXX --- makefiles/targets/_common/iphone.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/makefiles/targets/_common/iphone.mk b/makefiles/targets/_common/iphone.mk index 7e03e0272..d51e26df8 100644 --- a/makefiles/targets/_common/iphone.mk +++ b/makefiles/targets/_common/iphone.mk @@ -15,7 +15,7 @@ endif ifeq ($(_TARGET_VERSION_GE_12_0),1) _TARGET_LIBCPP_CCFLAGS := -stdlib=libc++ - _TARGET_LIBCPP_LDFLAGS := -stdlib=libc++ -lc++ + _TARGET_LIBCPP_LDFLAGS := -stdlib=libc++ endif ifeq ($(_TARGET_VERSION_GE_12_0),1)