PHP MVC simple controller design
your code is not bad. You write comments that don't state the obvious, so thats good. You don't make stupid rookie mistakes like I used to make, so thats good. But... (such a lovely word)
Naming
You define an interface: InterfaceController. The name tells me that every class that implements this interface, is some kind of Controller of interfaces. It sounds fancy, I must give you that.
Maybe it's personal, but I just don't like writing implements RandomInterface. Ofcourse it's an interface, thats why I implement it. And if you have a problem where the interface and the class implementing it have the same name, one of the two should not exist.

AbstractPageController implements Controller: So we have a Controller for an AbstractPage ? What is an Abstract page? This might be nitpicking, but these kind of namings lead to confusion. Either use class AbstractController or interface PageController.

Every Controller class we create needs to have 2 methods, setup and compile. However, I'm not so sure these are good names, they even smell.
setup: Whats wrong with using __construct()? This was basically created for setup.
compile: It's PhP, why should I compile, is there some kind of .Net integration? Compiling a view, I understand, but a Controller? You lost me. maube run is better.
Especially given the fact that your comment reads:
// run the controller, let it prepare a view and return the rendered code

wouldn't it make more sense to have the following code?
return (new $controllerName())-&gt;run()-&gt;renderView();

Also note that the word 'run' does not really tell us anything about what is being returned. Making us guess. What are we calling renderView() on? Try to avoid chaining unless they really make sense (Again, mabe it's me, but I just hate 'unknown method on undefined' errors). Use the __construct instead of run()/setup() and we get the following code:
return (new $controllerName())-&gt;render()

This doesn't even need comments, saves you a few key strokes #lazyDev

I also see no way of passing arguments to a Controller. Planning on using $_GET there? IF so, here is my sad face :(

Minor remarks
Your Controller has some magic strings:
'\\App\\Controllers\\'

and
'Controller'

maybe you should replace it by some constant or similar. Simply because CONTROLLER_NAMESPACE makes more sense than '\App\Controllers\'. Also make sure that the namespace is only hardcoded in one place. I just don't like hard coded strings.