Expanding on @mgruhler's answer, Bloom processes ROS packages and generates content specific to each target operating system (Examples: Debian Buster, Fedora 32, and Ubuntu Focal). For packages released into the official ROS distributions, that data is then used to build packages for each supported target / architecture (Examples: amd64, i386, armhf, arm64).
Bloom itself does not have or perform any architecture-specific functions.
Also how is it possible that given ros package runs on any plateform without cross compilation?
Packages are built in a native environment for each target platform. On the ROS 1 build farm, those native environments are provided by custom Docker images which include qemu-user-static binaries for emulating the native platform. Which is one reason why those builds tend to require more time. On the ROS 2 build farm we are using native ARM machines to provide the armhf and arm64 builds.