add_library(yul AsmAnalysis.cpp AsmAnalysis.h AsmAnalysisInfo.h AsmData.h AsmDataForward.h AsmJsonConverter.h AsmJsonConverter.cpp AsmJsonImporter.h AsmJsonImporter.cpp AsmParser.cpp AsmParser.h AsmPrinter.cpp AsmPrinter.h AsmScope.cpp AsmScope.h AsmScopeFiller.cpp AsmScopeFiller.h AssemblyStack.h AssemblyStack.cpp CompilabilityChecker.cpp CompilabilityChecker.h Dialect.cpp Dialect.h Exceptions.h Object.cpp Object.h ObjectParser.cpp ObjectParser.h Utilities.cpp Utilities.h YulString.h backends/evm/AbstractAssembly.h backends/evm/AsmCodeGen.h backends/evm/AsmCodeGen.cpp backends/evm/ConstantOptimiser.cpp backends/evm/ConstantOptimiser.h backends/evm/EVMAssembly.cpp backends/evm/EVMAssembly.h backends/evm/EVMCodeTransform.cpp backends/evm/EVMCodeTransform.h backends/evm/EVMDialect.cpp backends/evm/EVMDialect.h backends/evm/EVMObjectCompiler.cpp backends/evm/EVMObjectCompiler.h backends/evm/EVMMetrics.cpp backends/evm/EVMMetrics.h backends/evm/NoOutputAssembly.h backends/evm/NoOutputAssembly.cpp backends/wasm/EVMToEwasmTranslator.cpp backends/wasm/EVMToEwasmTranslator.h backends/wasm/BinaryTransform.cpp backends/wasm/BinaryTransform.h backends/wasm/TextTransform.cpp backends/wasm/TextTransform.h backends/wasm/WasmCodeTransform.cpp backends/wasm/WasmCodeTransform.h backends/wasm/WasmDialect.cpp backends/wasm/WasmDialect.h backends/wasm/WasmObjectCompiler.cpp backends/wasm/WasmObjectCompiler.h backends/wasm/WordSizeTransform.cpp backends/wasm/WordSizeTransform.h backends/wasm/polyfill/Arithmetic.yul backends/wasm/polyfill/Bitwise.yul backends/wasm/polyfill/Comparison.yul backends/wasm/polyfill/Conversion.yul backends/wasm/polyfill/Interface.yul backends/wasm/polyfill/Keccak.yul backends/wasm/polyfill/Logical.yul backends/wasm/polyfill/Memory.yul optimiser/ASTCopier.cpp optimiser/ASTCopier.h optimiser/ASTWalker.cpp optimiser/ASTWalker.h optimiser/BlockFlattener.cpp optimiser/BlockFlattener.h optimiser/BlockHasher.cpp optimiser/BlockHasher.h optimiser/CallGraphGenerator.cpp optimiser/CallGraphGenerator.h optimiser/CircularReferencesPruner.cpp optimiser/CircularReferencesPruner.h optimiser/CommonSubexpressionEliminator.cpp optimiser/CommonSubexpressionEliminator.h optimiser/ConditionalSimplifier.cpp optimiser/ConditionalSimplifier.h optimiser/ConditionalUnsimplifier.cpp optimiser/ConditionalUnsimplifier.h optimiser/ControlFlowSimplifier.cpp optimiser/ControlFlowSimplifier.h optimiser/DataFlowAnalyzer.cpp optimiser/DataFlowAnalyzer.h optimiser/DeadCodeEliminator.cpp optimiser/DeadCodeEliminator.h optimiser/Disambiguator.cpp optimiser/Disambiguator.h optimiser/EquivalentFunctionDetector.cpp optimiser/EquivalentFunctionDetector.h optimiser/EquivalentFunctionCombiner.cpp optimiser/EquivalentFunctionCombiner.h optimiser/ExpressionInliner.cpp optimiser/ExpressionInliner.h optimiser/ExpressionJoiner.cpp optimiser/ExpressionJoiner.h optimiser/ExpressionSimplifier.cpp optimiser/ExpressionSimplifier.h optimiser/ExpressionSplitter.cpp optimiser/ExpressionSplitter.h optimiser/ForLoopConditionIntoBody.cpp optimiser/ForLoopConditionIntoBody.h optimiser/ForLoopConditionOutOfBody.cpp optimiser/ForLoopConditionOutOfBody.h optimiser/ForLoopInitRewriter.cpp optimiser/ForLoopInitRewriter.h optimiser/FullInliner.cpp optimiser/FullInliner.h optimiser/FunctionCallFinder.cpp optimiser/FunctionCallFinder.h optimiser/FunctionGrouper.cpp optimiser/FunctionGrouper.h optimiser/FunctionHoister.cpp optimiser/FunctionHoister.h optimiser/InlinableExpressionFunctionFinder.cpp optimiser/InlinableExpressionFunctionFinder.h optimiser/KnowledgeBase.cpp optimiser/KnowledgeBase.h optimiser/LoadResolver.cpp optimiser/LoadResolver.h optimiser/LoopInvariantCodeMotion.cpp optimiser/LoopInvariantCodeMotion.h optimiser/MainFunction.cpp optimiser/MainFunction.h optimiser/Metrics.cpp optimiser/Metrics.h optimiser/NameCollector.cpp optimiser/NameCollector.h optimiser/NameDispenser.cpp optimiser/NameDispenser.h optimiser/NameDisplacer.cpp optimiser/NameDisplacer.h optimiser/NameSimplifier.cpp optimiser/NameSimplifier.h optimiser/OptimiserStep.h optimiser/OptimizerUtilities.cpp optimiser/OptimizerUtilities.h optimiser/ReasoningBasedSimplifier.cpp optimiser/ReasoningBasedSimplifier.h optimiser/RedundantAssignEliminator.cpp optimiser/RedundantAssignEliminator.h optimiser/Rematerialiser.cpp optimiser/Rematerialiser.h optimiser/SSAReverser.cpp optimiser/SSAReverser.h optimiser/SSATransform.cpp optimiser/SSATransform.h optimiser/SSAValueTracker.cpp optimiser/SSAValueTracker.h optimiser/Semantics.cpp optimiser/Semantics.h optimiser/SimplificationRules.cpp optimiser/SimplificationRules.h optimiser/StackCompressor.cpp optimiser/StackCompressor.h optimiser/StackLimitEvader.cpp optimiser/StackLimitEvader.h optimiser/StackToMemoryMover.cpp optimiser/StackToMemoryMover.h optimiser/StructuralSimplifier.cpp optimiser/StructuralSimplifier.h optimiser/Substitution.cpp optimiser/Substitution.h optimiser/Suite.cpp optimiser/Suite.h optimiser/SyntacticalEquality.cpp optimiser/SyntacticalEquality.h optimiser/TypeInfo.cpp optimiser/TypeInfo.h optimiser/UnusedFunctionParameterPruner.cpp optimiser/UnusedFunctionParameterPruner.h optimiser/UnusedFunctionsCommon.h optimiser/UnusedPruner.cpp optimiser/UnusedPruner.h optimiser/VarDeclInitializer.cpp optimiser/VarDeclInitializer.h optimiser/VarNameCleaner.cpp optimiser/VarNameCleaner.h ) set(POLYFILLS Arithmetic Bitwise Comparison Conversion Interface Keccak Logical Memory) foreach(polyfill IN LISTS POLYFILLS) set(POLYFILL_FILE ${CMAKE_SOURCE_DIR}/libyul/backends/wasm/polyfill/${polyfill}.yul) file(READ ${POLYFILL_FILE} EWASM_POLYFILL_CONTENT HEX) string(REGEX MATCHALL ".." EWASM_POLYFILL_CONTENT "${EWASM_POLYFILL_CONTENT}") string(REGEX REPLACE ";" ",\n\t0x" EWASM_POLYFILL_CONTENT "${EWASM_POLYFILL_CONTENT}") set(EWASM_POLYFILL_CONTENT "0x${EWASM_POLYFILL_CONTENT}") set(EWASM_POLYFILL_NAME ${polyfill}) configure_file("${CMAKE_SOURCE_DIR}/cmake/templates/ewasm_polyfill.in" ${CMAKE_BINARY_DIR}/include/ewasmPolyfills/${polyfill}.h @ONLY) endforeach() target_link_libraries(yul PUBLIC evmasm solutil langutil smtutil)