When designing complex geometry, you have to decide if you can approximate it with pieces of primitives (cubes, spheres, cylinders, cones), or if it's just too complicated to make it looks good by combining a bunch of primitives or parts of primitives.
primitive Operations
In this case, since the geometry is complicated (i.e. I don't see an easy way to approximate it with primitives), I would recommend making the curvy roof part of the building in a 3D modeling software such as Maya, for example, and exporting it as an obj file, for example. Then, you could insert the asset in your roof rule using the i() operation.
i Operation