@@ -51,17 +51,22 @@ set(SWIFT_PRODUCT_BUILD "${COMPONENT_DIR}/.build")
5151set (SWIFT_PRODUCT_RELEASE "${SWIFT_PRODUCT_BUILD} /release" )
5252set (SWIFT_PRODUCT_ARCHIVE "${SWIFT_PRODUCT_RELEASE} /lib${SWIFT_PRODUCT_NAME} .a" )
5353
54+ # Get swift toolchain location
55+ execute_process (COMMAND which swift OUTPUT_VARIABLE _SWIFT_LOCATION OUTPUT_STRIP_TRAILING_WHITESPACE)
56+ execute_process (COMMAND realpath ${_SWIFT_LOCATION} OUTPUT_VARIABLE _SWIFT_ABS_LOCATION OUTPUT_STRIP_TRAILING_WHITESPACE)
57+ execute_process (COMMAND dirname ${_SWIFT_ABS_LOCATION} OUTPUT_VARIABLE SWIFT_TOOLCHAIN OUTPUT_STRIP_TRAILING_WHITESPACE)
58+
5459# Generate Archive
5560add_custom_target (swift-archive
5661 COMMAND
5762 # Remove the archive. Swift does not overwrite this on building but merges them.
5863 # If the file with app_main gets renamed, both objectfiles (old and new) will be in the archive, potentially causing problems
5964 rm -f ${SWIFT_PRODUCT_ARCHIVE}
6065 &&
61- swift package update
66+ ${SWIFT_TOOLCHAIN} / swift package update
6267 --package-path ${COMPONENT_DIR}
6368 &&
64- swift build
69+ ${SWIFT_TOOLCHAIN} / swift build
6570 --configuration =release
6671 --package-path ${COMPONENT_DIR}
6772
@@ -88,7 +93,8 @@ add_custom_target(swift-archive
8893# Generate all necessary include paths for LSP
8994add_custom_target (swift-compile-flags
9095 COMMAND
91- echo '' &&
96+ echo ''
97+ &&
9298 \( echo '${SWIFT_INCLUDES} ' && \( echo '$<TARGET_PROPERTY:__idf_main,INCLUDE_DIRECTORIES >' | tr '\;' '\\n' | sed -e 's/\\\(.*\\\)/-Xcc -I\\1/g' \) \)
9399 | tr ' ' '\\n' | grep '^-I' > ${SWIFT_PRODUCT_RELEASE} /compile_flags .txt
94100 BYPRODUCTS
@@ -98,12 +104,10 @@ add_custom_target(swift-compile-flags
98104# Create needed symlinks so LSP finds the module information
99105add_custom_target (swift-lsp-symlink
100106 COMMAND
101- echo '' &&
102- \( ln -sfT ${SWIFT_PRODUCT_BUILD} /${SWIFT_TARGET} ${SWIFT_PRODUCT_BUILD} /${SWIFT_LSP_TARGET} 2>/dev/null ||
103- \( rm -rf ${SWIFT_PRODUCT_BUILD} /${SWIFT_LSP_TARGET} && ln -sf ${SWIFT_PRODUCT_BUILD} /${SWIFT_TARGET} ${SWIFT_PRODUCT_BUILD} /${SWIFT_LSP_TARGET} \)
104- \) && \( ln -sfT ${SWIFT_PRODUCT_BUILD} /${SWIFT_TARGET} /release ${SWIFT_PRODUCT_BUILD} /${SWIFT_TARGET} /debug 2>/dev/null ||
105- \( rm -rf ${SWIFT_PRODUCT_BUILD} /${SWIFT_TARGET} /debug && ln -sf ${SWIFT_PRODUCT_BUILD} /${SWIFT_TARGET} /release ${SWIFT_PRODUCT_BUILD} /${SWIFT_TARGET} /debug \)
106- \)
107+ rm -rf ${SWIFT_PRODUCT_BUILD} /${SWIFT_LSP_TARGET}
108+ && ln -sf ${SWIFT_PRODUCT_BUILD} /${SWIFT_TARGET} ${SWIFT_PRODUCT_BUILD} /${SWIFT_LSP_TARGET}
109+ && rm -rf ${SWIFT_PRODUCT_BUILD} /${SWIFT_TARGET} /debug
110+ && ln -sf ${SWIFT_PRODUCT_BUILD} /${SWIFT_TARGET} /release ${SWIFT_PRODUCT_BUILD} /${SWIFT_TARGET} /debug
107111 DEPENDS
108112 swift-archive
109113)
@@ -117,7 +121,7 @@ add_custom_command(
117121 OUTPUT ${SWIFT_PRODUCT_RELEASE} /_main_swiftcode.o
118122 COMMAND
119123 # Extract first .o which defines the 'app_main' symbol
120- ar x ${SWIFT_PRODUCT_ARCHIVE} $$\( nm --defined -only -A ${SWIFT_PRODUCT_ARCHIVE} | grep -m 1 ' T app_main' | cut -d: -f2 \) --output ${SWIFT_PRODUCT_RELEASE}
124+ ${SWIFT_TOOLCHAIN} /llvm- ar x ${SWIFT_PRODUCT_ARCHIVE} $$\( nm --defined -only -A ${SWIFT_PRODUCT_ARCHIVE} | grep -m 1 ' T app_main' | cut -d: -f2 \) --output ${SWIFT_PRODUCT_RELEASE}
121125 # Rename it to a predicatble file
122126 && \( mv -f -T ${SWIFT_PRODUCT_RELEASE} /$$\( nm --defined -only -A ${SWIFT_PRODUCT_ARCHIVE} | grep -m 1 ' T app_main' | cut -d: -f2 \) ${SWIFT_PRODUCT_RELEASE} /_main_swiftcode.o 2>/dev/null || \(
123127 rm -rf ${SWIFT_PRODUCT_RELEASE} /_main_swiftcode.o && mv -f ${SWIFT_PRODUCT_RELEASE} /$$\( nm --defined -only -A ${SWIFT_PRODUCT_ARCHIVE} | grep -m 1 ' T app_main' | cut -d: -f2 \) ${SWIFT_PRODUCT_RELEASE} /_main_swiftcode.o \)
0 commit comments