I'd indeed start with "Engineering a Compiler" by Keith Cooper and Linda Torczon. I also like "Modern Compiler Design" by Dick Grune, Kees van Reeuwijk, Henri E. Bal, Ceriel J.H. Jacobs, and Koen G. Langendoen (https://dickgrune.com/Books/MCD_2nd_Edition/). Some chapters are better in one than the other, so you may read some of both to see if you like another explanation.

For more on the analysis & compiler optimization side, "SSA-based Compiler Design" (http://ssabook.gforge.inria.fr/latest/; GitHub Mirror: https://github.com/pfalcon/ssabook) is a good follow-up.

Further readings: Book recommendations in https://github.com/MattPD/cpplinks/blob/master/compilers.md#books as well as program analysis resources (in particular lattice theory, type systems and programming languages theory, related notation): https://gist.github.com/MattPD/00573ee14bf85ccac6bed3c0678ddbef#program-analysis-resources

The CS 6120 course (see below) blog is a great resource for writeups on techniques and papers: https://www.cs.cornell.edu/courses/cs6120/2020fa/blog/

Compilers Courses

I can recommend the following: https://github.com/MattPD/cpplinks/blob/master/compilers.md#courses

Particularly (in alphabetical order--I think these are all great, so including highlights of what I've liked about them):

A Retargetable C Compiler, Design and Implementation: https://www.amazon.com/Retargetable-Compiler-Design-Implementation/dp/0805316701

Writing Compilers and Interpreters : https://www.amazon.com/Writing-Compilers-Interpreters-Software-Engineering-ebook/dp/B004S82O40

Writing A Compiler In Go: https://www.amazon.com/Writing-Compiler-Go-Thorsten-Ball/dp/398201610X, comparable to https://craftinginterpreters.com/contents.html

Compiler Construction (free): https://people.inf.ethz.ch/wirth/CompilerConstruction/CompilerConstruction1.pdf

Here is the link: https://craftinginterpreters.com/contents.html. It's more about interpreters and virtual machines, not compilers (i.e. a lot of important compiler topics are missing)