cmake_minimum_required(VERSION 3.24) project(SwiftMixLib C CXX Swift) # Swift on Windows only provides a release runtime. set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDLL) add_library(SwiftMixedLib lib.c lib.cpp lib.swift) add_executable(Swifty main.swift) target_link_libraries(Swifty PUBLIC SwiftMixedLib) add_executable(c_main main.c) target_link_libraries(c_main PUBLIC SwiftMixedLib) if(WIN32) # TODO: On macOS and Linux, Swift has mechanism for determining what libraries # an object, or objects from a static archive, need to link against, # which is how the Swift driver is able to determine that `c_main` # needs to link swiftCore. Windows does not have this mechanism. # Eventually CMake should learn how to do this, explicitly forwarding # the required library to the link command when linking a static # archive containing Swift sources into something else, even if the # linker language is Swift. target_link_libraries(c_main PRIVATE swiftCore) endif()