Faits :
A.
Le 18 janvier 2014, le Ministère public genevois a rendu une ordonnance pénale déclarant X._ coupable de conduite sous retrait, refus ou interdiction d'utilisation du permis de conduire (<ref-law>) et l'a condamné à une peine privative de liberté de 6 mois, sous déduction de 2 jours de détention avant jugement. Il lui est reproché d'avoir conduit un véhicule en janvier 2014 alors qu'il était depuis 2007 sous le coup d'un retrait de permis. Il a reconnu les faits et admis qu'il continuait de conduire dans le cadre de son activité professionnelle et pour amener sa fille à l'école. Il ressort de son casier judiciaire qu'il a déjà été condamné à six reprises, la dernière remonte à janvier 2012; il a alors écopé d'une peine privative de liberté de 60 jours pour infraction aux art. 90 et 95 LCR.
B.
Par courrier du 23 janvier 2014, X._ a fait opposition à cette ordonnance pénale. Le 6 février 2014, il a été convoqué par le procureur à une audience appointée le 26 février suivant pour être entendu personnellement sur son opposition.
A la date en question, seul son avocat était présent; il a informé le procureur que son client l'avait averti qu'il n'était pas en mesure d'assister à l'audience. Le procureur a imparti à l'intéressé un délai jusqu'au 3 mars 2014 pour justifier son absence, précisant qu'à défaut il retiendrait qu'il se désintéressait de la procédure et que son opposition serait réputée retirée.
Par courrier du 3 mars 2014, l'avocat de X._ a confirmé au ministère public que son mandant avait souffert, le 26 février 2014, d'une migraine insupportable, dont la survenance ne pouvait que très difficilement être attestée par un certificat médical.
C.
Le 13 mars 2014, le ministère public a rendu une ordonnance, dans laquelle il a considéré que l'opposition formée par X._ était réputée retirée.
D.
Par arrêt du 8 mai 2014, la Chambre pénale de recours de la Cour de justice genevoise a rejeté le recours formé par X._ contre cette ordonnance.
E.
X._ forme un recours en matière pénale contre l'arrêt de la Chambre pénale de recours. Il conclut, avec suite de frais et dépens, à l'annulation de l'arrêt attaqué et principalement à ce que le Tribunal fédéral dise qu'il doit être procédé à l'instruction de son opposition à l'encontre de l'ordonnance pénale du 18 janvier 2014; subsidiairement il conclut au renvoi de la cause à la Chambre pénale de recours afin qu'elle statue dans le sens des considérants. Il sollicite en outre l'assistance judiciaire.
F.
Invité à se déterminer sur le recours, le ministère public a renoncé à formuler des observations et a conclu à la confirmation de l'arrêt cantonal. Pour sa part, la cour cantonale, se référant aux considérants de son arrêt, a déclaré n'avoir pas d'observations à formuler.

Considérant en droit :
1.
Le recourant se plaint d'une violation de l'<ref-law>; il évoque également l'<ref-law>.
L'<ref-law> prévoit que " si l'opposant, sans excuse, fait défaut à une audition malgré une citation, son opposition est réputée retirée ".
Selon la jurisprudence, si elle peut faire parvenir une citation à comparaître à un prévenu qui séjourne à l'étranger, l'autorité suisse n'est en revanche pas habilitée à l'assortir de menaces de sanctions, la citation représentant une invitation dans la procédure en cause. Le prévenu ne peut subir aucun préjudice de fait et de droit au motif qu'il n'y donne pas suite. La fiction de retrait de l'<ref-law> n'entre donc pas en considération dans un tel cas (<ref-ruling> consid. 2).
Le recourant étant domicilié en France, le ministère public pouvait certes lui faire parvenir une citation à comparaître à l'audience du 26 février 2014. Il ne pouvait en revanche pas l'assortir de la menace de la sanction prévue par l'<ref-law>. L'arrêt attaqué, qui met en oeuvre la fiction consacrée par cette disposition, viole le droit fédéral.
2.
Le recours est admis. Le recourant, qui obtient gain de cause, ne supportera pas de frais (art. 66 al. 1 et 4 LTF). Il a droit à des dépens à la charge du canton; cela rend sans objet sa demande d'assistance judiciaire.

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est admis, l'arrêt attaqué est annulé et la cause est renvoyée à l'autorité cantonale pour nouvelle décision.
2.
Il n'est pas perçu de frais judiciaires.
3.
La République et canton de Genève versera au conseil du recourant une indemnité de 3000 fr. à titre de dépens pour la procédure devant le Tribunal fédéral.
4.
Le présent arrêt est communiqué aux parties et à la Chambre pénale de recours de la Cour de justice de la République et canton de Genève.
Lausanne, le 24 juin 2015
Au nom de la Cour de droit pénal
du Tribunal fédéral suisse
Le Président : Denys
La Greffière : Paquier-Boinay