Hi Sam,
please excuse my late response. Thank you for all your answers! This helped 
me so much.

>From all those information you gave me, I tried to make a diagram to 
summarize the process of Emscripten while creating C->Wasm. See the picture 
below. Did I got it right now?
[image: Emscripten C-to-Wasm Sketch.png]

I am wondering if these information are documented somewhere. Since I need 
those information for my uni paper, I have to list the sources and refer to 
"official" documents.
s...@google.com schrieb am Montag, 5. Juni 2023 um 04:46:48 UTC+2:

> On Fri, Jun 2, 2023 at 11:40 PM René N. <withe...@gmail.com> wrote:
>
>> Thank you for answering Sam! Very glad to get a feedback this quick.
>>
>> So if I understand it correctly, emcc is doing the whole C -> Wasm Binary 
>> since it's the driver of the whole toolchain, right?
>> I think I am irritated because emcc is called "Emscripten Compiler 
>> *Frontend*". So I thought that emcc is just a part of the compilation 
>> process since a "Frontend" to me is the component of a compiler which takes 
>> a source code and generates the IR while the Backend is takes the IR and 
>> generates the target language.
>>
>
> You are right, it is not quite correct to call emcc a frontend, since it 
> doesn't actually parse any code.  clang is both a compiler driver, and a C 
> frontend.  
>
>>
>> Also I would like to ask: Where does the "(upstream) LLVM WebAssembly 
>> Backend" comes into play? It should be in step 3 (LLVM IR -> wasm object 
>> file), right?
>>
>
> Yes.
>  
>
>>
>> Referring to step 4 & 5: While wasm-opt is a Binaryen-Tool, wasm-ld is a 
>> LLVM tool, right? I'm asking this because Emscripten's website 
>> <https://emscripten.org/docs/compiling/WebAssembly.html> says, that 
>> "Emscripten's WebAssembly support depends on Binaryen". This statement 
>> seems wrong, since (non-optimized) Wasm Binary is generated without 
>> Binaryen.
>>
>
> Historically it has been true that binaryen was always required, but 
> fairly recently we have made it possible to perform complete debug builds 
> without binaryen (by moving a lot of things that binaryen used to do into 
> python code in emscripten).  The documentation is a little inaccurate 
> there.   However, to build anything for production (i.e.. any release 
> build) binaryen is required, so I think we can still think of it as a 
> required dependency of emscirpten.   Binaryen is also requires even for 
> debug builds in some cases (for example if you use asyncify there is no way 
> to avoid it).
>
>
>> Referring step 6: emcc.py creates JS wrapper code if needed, does it also 
>> creates the html code (optionally)?
>>
>
> Yes it can optionally create both JS and HTML.
>  
>
>>
>>
>> Thanks again for helping me understand Emscripten and toolchains in 
>> general!
>>
>> s...@google.com schrieb am Freitag, 2. Juni 2023 um 19:00:21 UTC+2:
>>
>>> Hi René,
>>>
>>> Great questions.  It sounds like you have a pretty good understanding of 
>>> the various phases.  I will reiterate your list, filling in a few details 
>>> for you.   At the high level emcc is the compiler driver, rather than the 
>>> compiler itself.  gcc and clang both take this roll too, and under the hood 
>>> both clang and gcc fork separate processes for the actual compiling and 
>>> linking.  
>>>
>>> emcc ->
>>>    1. clang.exe: C-Code -> LLVM IR 
>>>    2. clang.exe: LLVM IR -> LLVM IR (optimized) (clang/llvm) ( this 
>>> really happens as part of (1) when you build with optimizations enabled)
>>>    3. clang.exe: LLVM IR -> wasm object file
>>>    4. wasm-ld.exe: combine files -> Wasm Binary
>>>    5. wasm-opt.exe: Wasm Binary -> Optimized Wasm Binary (optional)
>>>    6. emcc.py: Generate JS wrapper code (optional)
>>>
>>>
>>> On Fri, Jun 2, 2023 at 9:25 AM René N. <withe...@gmail.com> wrote:
>>>
>>>> Hello guys,
>>>>
>>>> for a uni paper I need to explain how Emscripten works (on 
>>>> higher-level) to emit WebAssembly-Binary in the end.
>>>> I'm new into compilers and toolchains and I'm not sure if I understand 
>>>> it correctly, how Emscripten is converting compatible code (like C) to 
>>>> WebAssembly Binary.
>>>>
>>>> If I got it right, for creating .wasm, these tools are used by 
>>>> Emscripten:
>>>>
>>>>    - emsdk as configurator for the whole toolchain
>>>>    - emcc (which includes Clang+LLVM)
>>>>    - the (upstream) LLVM WebAssembly Backend
>>>>    - Binaryen
>>>>
>>>> So if i got it right, to create .wasm, the compilation works like this:
>>>>
>>>>    1. C-Code -> LLVM IR
>>>>    2. LLVM IR -> LLVM IR (optimized)
>>>>    3. LLVM IR (optimized) -> Wasm Binary
>>>>    4. Wasm Binary -> Wasm Binary (optimized)
>>>>    5. (Wasm Binary (optimized) -> JS) [optional]
>>>>
>>>> Did I forget something?
>>>>
>>>> What I am especially unsure of, is, which tool is doing what:
>>>> So emcc uses Clang+LLVM. Now I'm not sure if emcc emits LLVM IR only 
>>>> (since Clang is creating LLVM IR), or does it also convert it to emit Wasm 
>>>> Binary (which means that the upstream LLVM Wasm Backend lies in the emcc)?
>>>> What I'm quite sure of, is that step 1 is done by Clang and steps 4 & 5 
>>>> are done by Binaryen.
>>>>
>>>> Also, to me it seems like 'emcc' has 2 different meanings: 1. as 
>>>> part(!!) of the compilation process and 2. as command representation for 
>>>> the whole toolchain
>>>>
>>>> Also, which component/tool of Emscripten is creating the JS and HTML 
>>>> Gluecode?
>>>>
>>>> I'm happy if someone can help me out!
>>>>
>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "emscripten-discuss" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to emscripten-disc...@googlegroups.com.
>>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msgid/emscripten-discuss/3efb5151-1d5c-4ae1-89a5-b37ed3085793n%40googlegroups.com
>>>>  
>>>> <https://groups.google.com/d/msgid/emscripten-discuss/3efb5151-1d5c-4ae1-89a5-b37ed3085793n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "emscripten-discuss" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to emscripten-disc...@googlegroups.com.
>>
> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/emscripten-discuss/495eeb80-5d31-4d6a-a15d-92c9b215151fn%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/emscripten-discuss/495eeb80-5d31-4d6a-a15d-92c9b215151fn%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to emscripten-discuss+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/emscripten-discuss/8b07e3ae-db8a-45f7-ab48-ef293964405en%40googlegroups.com.

Reply via email to