diff --git a/utils/swift_build_support/swift_build_support/products/wasmswiftsdk.py b/utils/swift_build_support/swift_build_support/products/wasmswiftsdk.py index ad57c9bc7d98c..be0f5bdc9c07a 100644 --- a/utils/swift_build_support/swift_build_support/products/wasmswiftsdk.py +++ b/utils/swift_build_support/swift_build_support/products/wasmswiftsdk.py @@ -80,6 +80,91 @@ def _append_platform_cmake_options(self, cmake_options, swift_host_triple, has_p cmake_options.define('CMAKE_RANLIB', os.path.join( native_toolchain_path, 'bin', 'llvm-ranlib')) + def _build_libxml2(self, swift_host_triple, has_pthread, wasi_sysroot): + libxml2 = CMakeProduct( + args=self.args, + toolchain=self.toolchain, + source_dir=os.path.join( + os.path.dirname(self.source_dir), 'libxml2'), + build_dir=os.path.join(self.build_dir, 'libxml2', swift_host_triple)) + self._append_platform_cmake_options( + libxml2.cmake_options, swift_host_triple, has_pthread, wasi_sysroot, []) + libxml2.cmake_options.define('LIBXML2_WITH_C14N', 'FALSE') + libxml2.cmake_options.define('LIBXML2_WITH_CATALOG', 'FALSE') + libxml2.cmake_options.define('LIBXML2_WITH_DEBUG', 'FALSE') + libxml2.cmake_options.define('LIBXML2_WITH_DOCB', 'FALSE') + libxml2.cmake_options.define('LIBXML2_WITH_FTP', 'FALSE') + libxml2.cmake_options.define('LIBXML2_WITH_HTML', 'FALSE') + libxml2.cmake_options.define('LIBXML2_WITH_HTTP', 'FALSE') + libxml2.cmake_options.define('LIBXML2_WITH_ICONV', 'FALSE') + libxml2.cmake_options.define('LIBXML2_WITH_ICU', 'FALSE') + libxml2.cmake_options.define('LIBXML2_WITH_ISO8859X', 'FALSE') + libxml2.cmake_options.define('LIBXML2_WITH_LEGACY', 'FALSE') + libxml2.cmake_options.define('LIBXML2_WITH_LZMA', 'FALSE') + libxml2.cmake_options.define('LIBXML2_WITH_MEM_DEBUG', 'FALSE') + libxml2.cmake_options.define('LIBXML2_WITH_MODULES', 'FALSE') + libxml2.cmake_options.define('LIBXML2_WITH_OUTPUT', 'TRUE') + libxml2.cmake_options.define('LIBXML2_WITH_PATTERN', 'FALSE') + libxml2.cmake_options.define('LIBXML2_WITH_PROGRAMS', 'FALSE') + libxml2.cmake_options.define('LIBXML2_WITH_PUSH', 'TRUE') + libxml2.cmake_options.define('LIBXML2_WITH_PYTHON', 'FALSE') + libxml2.cmake_options.define('LIBXML2_WITH_READER', 'FALSE') + libxml2.cmake_options.define('LIBXML2_WITH_REGEXPS', 'TRUE') + libxml2.cmake_options.define('LIBXML2_WITH_RUN_DEBUG', 'FALSE') + libxml2.cmake_options.define('LIBXML2_WITH_SAX1', 'FALSE') + libxml2.cmake_options.define('LIBXML2_WITH_SCHEMAS', 'FALSE') + libxml2.cmake_options.define('LIBXML2_WITH_SCHEMATRON', 'FALSE') + libxml2.cmake_options.define('LIBXML2_WITH_TESTS', 'FALSE') + libxml2.cmake_options.define('LIBXML2_WITH_TREE', 'TRUE') + libxml2.cmake_options.define('LIBXML2_WITH_VALID', 'TRUE') + libxml2.cmake_options.define('LIBXML2_WITH_WRITER', 'FALSE') + libxml2.cmake_options.define('LIBXML2_WITH_XINCLUDE', 'FALSE') + libxml2.cmake_options.define('LIBXML2_WITH_XPATH', 'TRUE') + libxml2.cmake_options.define('LIBXML2_WITH_XPTR', 'FALSE') + libxml2.cmake_options.define('LIBXML2_WITH_ZLIB', 'FALSE') + libxml2.cmake_options.define('BUILD_SHARED_LIBS', 'FALSE') + + cmake_thread_enabled = 'TRUE' if has_pthread else 'FALSE' + libxml2.cmake_options.define('LIBXML2_WITH_THREAD_ALLOC', cmake_thread_enabled) + libxml2.cmake_options.define('LIBXML2_WITH_THREADS', cmake_thread_enabled) + libxml2.cmake_options.define('HAVE_PTHREAD_H', cmake_thread_enabled) + + libxml2.build_with_cmake([], self.args.build_variant, [], + prefer_native_toolchain=True) + with shell.pushd(libxml2.build_dir): + shell.call([self.toolchain.cmake, '--install', '.', '--prefix', '/', '--component', 'development'], + env={'DESTDIR': wasi_sysroot}) + + def _build_foundation(self, swift_host_triple, has_pthread, wasi_sysroot): + source_root = os.path.dirname(self.source_dir) + host_toolchain = self.native_toolchain_path(self.args.host_target) + + foundation = CMakeProduct( + args=self.args, + toolchain=self.toolchain, + source_dir=os.path.join( + os.path.dirname(self.source_dir), 'swift-corelibs-foundation'), + build_dir=os.path.join(self.build_dir, 'foundation', swift_host_triple)) + self._append_platform_cmake_options( + foundation.cmake_options, swift_host_triple, has_pthread, wasi_sysroot, []) + foundation.cmake_options.define('BUILD_SHARED_LIBS', 'FALSE') + foundation.cmake_options.define('FOUNDATION_BUILD_TOOLS', 'FALSE') + foundation.cmake_options.define('_SwiftCollections_SourceDIR', os.path.join(source_root, 'swift-collections')) + foundation.cmake_options.define('_SwiftFoundation_SourceDIR', os.path.join(source_root, 'swift-foundation')) + foundation.cmake_options.define('_SwiftFoundationICU_SourceDIR', os.path.join(source_root, 'swift-foundation-icu')) + foundation.cmake_options.define('SwiftFoundation_MACRO', os.path.join(host_toolchain, 'lib', 'swift', 'host', 'plugins')) + + foundation.cmake_options.define('LIBXML2_INCLUDE_DIR', os.path.join(wasi_sysroot, 'include', 'libxml2')) + foundation.cmake_options.define('LIBXML2_LIBRARY', os.path.join(wasi_sysroot, 'lib')) + + foundation.build_with_cmake([], self.args.build_variant, [], + prefer_native_toolchain=True) + + dest_dir = self._target_package_path(swift_host_triple) + with shell.pushd(foundation.build_dir): + shell.call([self.toolchain.cmake, '--install', '.', '--prefix', '/usr'], + env={'DESTDIR': dest_dir}) + def _build_swift_testing(self, swift_host_triple, has_pthread, wasi_sysroot): swift_testing = CMakeProduct( args=self.args, @@ -125,6 +210,9 @@ def _build_target_package(self, swift_host_triple, has_pthread, shell.call([self.toolchain.cmake, '--install', '.', '--component', 'clang_rt.builtins-wasm32'], env={'DESTDIR': clang_dir}) + + self._build_libxml2(swift_host_triple, has_pthread, wasi_sysroot) + self._build_foundation(swift_host_triple, has_pthread, wasi_sysroot) # Build swift-testing self._build_swift_testing(swift_host_triple, has_pthread, wasi_sysroot)