Several months ago I accepted a job offer that involved relocating abroad based on the agreement that I would get a defined salary raise after the first three months of work. I asked to have this specified on the contract. However the recruiter said that they couldn't adjust the contract (it was basically a template that they used the same for everyone) and that I would get an annex closer to the 3rd month. They said (via email) that there was no need to worry as the entire negotiation of the salary was done by email. Without that agreement I wouldn't have relocated abroad, and the company is aware of that.
Now the head of the department doesn't want to give me the raise they promised because the company isn't doing well. It is true that the company has taken some cost-cutting measures recently. However they are still planning on incurring costs such as flying hundreds of employees from abroad to have a Christmas party, buying new tools for the department (that weren't planned in the budget when I joined the company), etc.
I've been explicitly told by my supervisor that everybody in my department is very happy with me (including the head of the department) and that they don't want me to leave.
Considering that the company is still incurring non strictly required costs (such as acquiring tools for the department that weren't planned in the budget when my agreement was made), what can I do for them to stay true to their agreement?