Skip to content

Commit 279cd3e

Browse files
authored
Add a way to build swift code as part of the executorch runtime framework
1 parent 6357580 commit 279cd3e

File tree

1 file changed

+43
-8
lines changed

1 file changed

+43
-8
lines changed

extension/apple/CMakeLists.txt

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,26 +11,29 @@
1111

1212
cmake_minimum_required(VERSION 3.19)
1313

14+
enable_language(Swift)
15+
1416
# Source root directory for executorch.
1517
if(NOT EXECUTORCH_ROOT)
1618
set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../..)
1719
endif()
1820

1921
add_library(extension_apple)
2022

21-
file(GLOB EXPORTED_SOURCES
23+
file(GLOB OBJC_SOURCES
2224
ExecuTorch/Exported/*.m
2325
ExecuTorch/Exported/*.mm
24-
)
25-
26-
file(GLOB INTERNAL_SOURCES
2726
ExecuTorch/Internal/*.m
2827
ExecuTorch/Internal/*.mm
2928
)
3029

30+
file(GLOB SWIFT_SOURCES
31+
ExecuTorch/Exported/*.swift
32+
)
33+
3134
target_sources(extension_apple PRIVATE
32-
${EXPORTED_SOURCES}
33-
${INTERNAL_SOURCES}
35+
${OBJC_SOURCES}
36+
${SWIFT_SOURCES}
3437
)
3538

3639
target_include_directories(extension_apple
@@ -43,9 +46,41 @@ target_link_libraries(extension_apple
4346
PRIVATE executorch ${FOUNDATION_FRAMEWORK}
4447
)
4548

46-
target_compile_options(extension_apple PUBLIC ${_common_compile_options})
47-
target_compile_options(extension_apple PRIVATE
49+
set_source_files_properties(${OBJC_SOURCES} PROPERTIES COMPILE_FLAGS
4850
"-fobjc-arc"
4951
"-fno-exceptions"
5052
"-fno-rtti"
5153
)
54+
55+
set(MODULE_MAP_DIR ${CMAKE_CURRENT_BINARY_DIR}/module)
56+
set(MODULE_MAP_FILE ${MODULE_MAP_DIR}/module.modulemap)
57+
58+
configure_file(
59+
"${CMAKE_CURRENT_SOURCE_DIR}/ExecuTorch/Exported/ExecuTorch.h"
60+
"${MODULE_MAP_DIR}/ExecuTorch.h"
61+
COPYONLY
62+
)
63+
64+
file(MAKE_DIRECTORY ${MODULE_MAP_DIR})
65+
file(WRITE ${MODULE_MAP_FILE}
66+
"module ExecuTorch {
67+
umbrella header \"ExecuTorch.h\"
68+
export *
69+
}
70+
")
71+
72+
set(SWIFT_CLANG_INTEROP_FLAGS "-Xcc -fmodule-map-file=${MODULE_MAP_FILE} -I ${MODULE_MAP_DIR}")
73+
74+
set_target_properties(extension_apple PROPERTIES
75+
Swift_MODULE_NAME "ExecuTorch"
76+
Swift_FLAGS "${SWIFT_CLANG_INTEROP_FLAGS}"
77+
XCODE_ATTRIBUTE_SWIFT_MODULE_NAME "ExecuTorch"
78+
XCODE_ATTRIBUTE_BUILD_LIBRARY_FOR_DISTRIBUTION YES
79+
XCODE_ATTRIBUTE_SWIFT_ENABLE_TESTABILITY YES
80+
XCODE_ATTRIBUTE_OTHER_SWIFT_FLAGS "${SWIFT_CLANG_INTEROP_FLAGS}"
81+
)
82+
83+
add_custom_command(
84+
TARGET extension_apple POST_BUILD
85+
COMMAND ${CMAKE_COMMAND} -E rm -rf ${MODULE_MAP_DIR}
86+
)

0 commit comments

Comments
 (0)