Faits :
A.
Par jugement du 14 décembre 2020, le Tribunal correctionnel de la République et canton de Genève a acquitté A._ du chef de rupture de ban (art. 291 CP). Il l'a par ailleurs reconnu coupable d'infraction grave à la loi fédérale sur les stupéfiants (art. 19 al. 1 let. b et al. 2 let. a LStup), a révoqué le sursis qui lui avait été octroyé le 16 mars 2020 par le Tribunal du district de Zurich ( Bezirksgericht Zürich) portant sur une peine privative de liberté de 16 mois et l'a condamné à une peine privative de liberté d'ensemble de 30 mois, sous déduction de 242 jours de détention avant jugement. Le tribunal a en outre ordonné l'expulsion de A._ pour une durée de 20 ans.
B.
Statuant par arrêt du 15 avril 2021, la Chambre pénale d'appel et de révision de la Cour de justice genevoise a partiellement admis l'appel de A._, de même que l'appel joint du ministère public, interjetés contre le jugement du 14 décembre 2020. Celui-ci a été réformé en ce sens que A._ était reconnu coupable tant d'infraction grave à la loi fédérale sur les stupéfiants que de rupture de ban et qu'il était condamné, après révocation du sursis octroyé le 16 mars 2020, à une peine privative de liberté d'ensemble de 32 mois, sous déduction des jours de détention avant jugement subis, à savoir 203 jours dans le cadre de la procédure zurichoise et 364 jours dans la présente cause. Le jugement a été confirmé pour le surplus.
En substance, la cour cantonale a retenu les faits suivants.
Entre le 18 mars 2020 et le 17 avril 2020, A._, ressortissant albanais né en 1998, s'est livré à un trafic international d'héroïne, de concert avec des tiers non identifiés.
En particulier, le 17 avril 2020, il a importé en Suisse, par le passage frontière de Moillesulaz, à Thônex (GE), une quantité minimale de 515.3 grammes nets d'héroïne destinée à la vente - dont 182 grammes au taux de pureté de 55.7% et 333.33 grammes à un taux oscillant entre 17.1% et 18% - ainsi que 100.1 grammes de produits de coupage. A cette même occasion, il est entré sur le territoire suisse depuis la France, en empruntant la ligne transfrontalière (ligne n° 17) du tramway de Genève, alors qu'il faisait l'objet d'une expulsion judiciaire prononcée le 16 mars 2020 par le Tribunal du district de Zurich.
C.
A._ forme un recours en matière pénale au Tribunal fédéral contre l'arrêt du 15 avril 2021. Il conclut, avec suite de frais et dépens, à sa réforme en ce sens principalement qu'il est acquitté du chef de rupture de ban, subsidiairement qu'aucune peine privative de liberté ne lui est infligée en raison de cette infraction. Il demande en tout état sa libération immédiate ainsi que l'octroi de l'assistance judiciaire.
Le ministère public conclut au rejet du recours. La cour cantonale renonce à présenter des observations.
Considérant en droit :
1.
Le recourant conteste s'être rendu coupable de rupture de ban au sens de l'art. 291 CP.
1.1. A teneur de l'art. 291 CP, celui qui aura contrevenu à une décision d'expulsion du territoire de la Confédération ou d'un canton prononcée par une autorité compétente sera puni d'une peine privative de liberté de trois ans au plus ou d'une peine pécuniaire. L'art. 291 CP n'est applicable qu'à celui qui contrevient à une expulsion, ce qui n'est notamment pas le cas si l'auteur a fait l'objet d'un refoulement, d'un renvoi, d'une interdiction d'entrée ou du non-renouvellement d'une autorisation de séjour. Ainsi, à défaut pour l'auteur de contrevenir à une expulsion, c'est l'art. 115 al. 1 de la loi fédérale sur les étrangers et l'intégration (LEI; RS 142.20) qui s'applique.
La rupture de ban suppose la réunion de trois conditions : une décision d'expulsion (notamment au sens des art. 66a et 66a bis CP), la transgression de celle-ci et l'intention. L'infraction est consommée si l'auteur reste en Suisse après l'entrée en force de la décision, alors qu'il a le devoir de partir ou s'il y entre pendant la durée de validité de l'expulsion. La rupture de ban est un délit continu qui est réalisé aussi longtemps que dure le séjour illicite (ATF 147 IV 253 consid. 2.2.1; 147 IV 232 consid. 1.1 et les références citées).
Sur le plan subjectif, l'infraction de rupture de ban est intentionnelle, le dol éventuel étant toutefois suffisant. Il faut non seulement que l'auteur entre ou reste en Suisse volontairement, mais encore qu'il sache qu'il est expulsé ou accepte cette éventualité (cf. arrêts 6B_1191/2019 du 4 décembre 2019 consid. 5.1; 6B_559/2008 du 12 septembre 2008 consid. 2.2; 6S.195/2006 du 16 juin 2006 consid. 1.1).
1.2. Critiquant l'appréciation des preuves opérée par la cour cantonale et présentant à cet égard des développements en lien avec la présomption d'innocence, le recourant conteste avoir eu l'intention, au moment des faits, soit le 17 avril 2020, de transgresser le jugement d'expulsion rendu le 16 mars 2020 par le Tribunal de district de Zurich. Il fait en particulier valoir que, par décision du 17 mars 2020, rendue ensuite du jugement précité, l'Office des migrations ( Migrationsamt) du canton de Zurich lui avait imparti un délai au 30 juin 2020 pour quitter l'espace Schengen, alors que le Secrétariat d'État aux migrations (SEM) lui avait par ailleurs signifié, le 18 mars 2020, une interdiction d'entrée en Suisse, qui n'était valable que dès le 1er juillet 2020.
1.2.1. Le Tribunal fédéral n'est pas une autorité d'appel, auprès de laquelle les faits pourraient être rediscutés librement. Il est lié par les constatations de fait de la décision entreprise (art. 105 al. 1 LTF), à moins qu'elles n'aient été établies en violation du droit ou de manière manifestement inexacte au sens des art. 97 al. 1 et 105 al. 2 LTF, à savoir, pour l'essentiel, de façon arbitraire au sens de l'art. 9 Cst. Une décision n'est pas arbitraire du seul fait qu'elle apparaît discutable ou même critiquable; il faut qu'elle soit manifestement insoutenable et cela non seulement dans sa motivation mais aussi dans son résultat (ATF 145 IV 154 consid. 1.1; 143 IV 500 consid. 1.1; sur la notion d'arbitraire cf. ATF 147 IV 73 consid. 4.1.2; 143 IV 241 consid. 2.3.1). Le Tribunal fédéral n'entre en matière sur les moyens fondés sur la violation de droits fondamentaux, dont l'interdiction de l'arbitraire, que s'ils ont été invoqués et motivés de manière précise (art. 106 al. 2 LTF; ATF 143 IV 500 consid. 1.1). Les critiques de nature appellatoire sont irrecevables (ATF 147 IV 73 consid. 4.1.2; 146 IV 114 consid. 2.1; 145 IV 154 consid. 1.1).
La présomption d'innocence, garantie par les art. 10 CPP, 32 al. 1 Cst., 14 par. 2 Pacte ONU II et 6 par. 2 CEDH, ainsi que son corollaire, le principe " in dubio pro reo ", concernent tant le fardeau de la preuve que l'appréciation des preuves au sens large (ATF 145 IV 154 consid. 1.1; 144 IV 345 consid. 2.2.3.1; 127 I 38 consid. 2a). En tant que règle sur le fardeau de la preuve, elle signifie, au stade du jugement, que ce fardeau incombe à l'accusation et que le doute doit profiter au prévenu. Comme règle d'appréciation des preuves (sur la portée et le sens précis de la règle sous cet angle, cf. ATF 144 IV 345 consid. 2.2.3.3), la présomption d'innocence signifie que le juge ne doit pas se déclarer convaincu de l'existence d'un fait défavorable à l'accusé si, d'un point de vue objectif, il existe des doutes quant à l'existence de ce fait. Il importe peu qu'il subsiste des doutes seulement abstraits et théoriques, qui sont toujours possibles, une certitude absolue ne pouvant être exigée. Il doit s'agir de doutes sérieux et irréductibles, c'est-à-dire de doutes qui s'imposent à l'esprit en fonction de la situation objective. Lorsque l'appréciation des preuves et la constatation des faits sont critiquées en référence au principe " in dubio pro reo ", celui-ci n'a pas de portée plus large que l'interdiction de l'arbitraire (ATF 145 IV 154 consid. 1.1 et les références citées).
Déterminer ce qu'une personne a su, envisagé, voulu ou accepté relève du contenu de la pensée, à savoir de faits " internes ", qui, en tant que tels, lient le Tribunal fédéral (art. 105 al. 1 LTF), à moins qu'ils aient été retenus de manière arbitraire (ATF 141 IV 369 consid. 6.3). Est en revanche une question de droit celle de savoir si l'autorité cantonale s'est fondée sur une juste conception de la notion d'intention et si elle l'a correctement appliquée sur la base des faits retenus et des éléments à prendre en considération (ATF 137 IV 1 consid. 4.2.3; 135 IV 152 consid. 2.3.2; 133 IV 9 consid. 4.1; arrêt 6B_713/2021 du 2 février 2022 consid. 2.1).
1.2.2. A teneur du texte légal, l'expulsion s'applique dès l'entrée en force du jugement (art. 66c al. 1 CP). L'exécution de la peine ou de la mesure privative de liberté précède celle de l'expulsion (art. 66c al. 2 et 3 CP).
Pour le surplus, les art. 66a ss CP ne régissent pas l'exécution effective de l'expulsion, l'art. 66d al. 2 CP se limitant à évoquer, à propos de l'autorité appelée à statuer sur la question du report de l'exécution d'une expulsion, une " autorité cantonale compétente ", sans préciser de quel type d'autorité - administrative ou pénale - il s'agit. Dès lors, en l'absence de disposition de droit fédéral en la matière, il appartient aux cantons de régler l'exécution des mesures d'expulsion, conformément aux principes tirés de l'art. 123 al. 2 et 3 Cst. (arrêts 6B_50/2021 du 8 septembre 2021 consid. 4.2; 6B_1313/2019 du 29 novembre 2019 consid. 4.2).
1.2.3. En l'espèce, il est constant que, par jugement du 16 mars 2020, le Tribunal du district de Zurich avait ordonné l'expulsion du recourant pour une durée de 5 ans, en raison de sa condamnation pour infraction grave à la loi fédérale sur les stupéfiants (cf. art. 66a al. 1 let. o CP). Il est tout aussi constant qu'à défaut pour ce jugement d'avoir fait l'objet d'un appel, l'expulsion est entrée en force, avec effet au jour du jugement (cf. art. 437 al. 2 CPP), soit le 16 mars 2020.
Il ressort en outre de l'arrêt attaqué que le lendemain, soit le 17 mars 2020, l'Office des migrations du canton de Zurich, faisant application de l'art. 64 al. 1 let. b LEI en lien avec l'art. 5 al. 1 let. d LEI, avait ordonné le renvoi ( Wegweisung) du recourant de Suisse ainsi que de l'espace Schengen (ch. 1), lui impartissant un délai au 30 juin 2020 pour quitter la Suisse et l'espace Schengen, à défaut de quoi le renvoi serait exécuté par la contrainte (ch. 2). Il était encore précisé que ce délai demeurait opérant à l'entrée en vigueur de la mesure d'expulsion prononcée le 16 mars 2020 (ch. 3). On comprend à cet égard que l'Office des migrations agissait au nom de la Direction de la sécurité ( Sicherheitsdirektion), autorité compétente dans le canton de Zurich pour exécuter l'expulsion (cf. en particulier § 16a de la Straf- und Justizvollzugsgesetz [StJVG; RS/ZH 331] en lien avec § 1 al. 1 de la Verordnung über die Zuständigkeiten im Ausländerrecht [VZA; RS/ZH 142.20]).
Par ailleurs, le 18 mars 2020, faisant suite à la décision de renvoi évoquée ci-avant et en application de l'art. 67 LEI, le SEM a signifié au recourant une interdiction d'entrée en Suisse, valable du 1er juillet 2020 au 30 juin 2021.
1.2.4. La cour cantonale a jugé que, même si un délai au 30 juin 2020 avait été imparti au recourant pour quitter la Suisse et l'espace Schengen, il avait pénétré en Suisse le 17 avril 2020 après s'être rendu en France dans l'intervalle, créant ainsi une césure dans la continuité de son séjour en Suisse et l'empêchant dès lors d'y revenir compte tenu de son expulsion prononcée le 16 mars 2020 et entrée en force (cf. arrêt attaqué, consid. 2.2 p. 6).
1.2.5. Il ressort néanmoins du dossier cantonal que, lors de ses différentes auditions par la police, puis par le ministère public, le recourant a constamment expliqué avoir pensé que son séjour en Suisse et dans l'espace Schengen était toléré jusqu'au 30 juin 2020 et s'être fié à cet égard aux décisions qui lui avaient été notifiées à Zurich à sa sortie de prison, intervenue le 18 mars 2020 (cf. procès-verbal de l'audition de la police du 18 avril 2020, p. 5; procès-verbal d'audience du ministère public du 18 avril 2020, p. 2). S'il ressort du procès-verbal des débats de première instance que le recourant avait alors expliqué, certes de manière peu crédible, avoir manqué le dernier arrêt de tramway situé en territoire français, et être ainsi entré en Suisse contre sa volonté, il avait néanmoins confirmé avoir reçu des documents attestant qu'il pouvait rester 3 mois en Suisse après sa sortie de prison (cf. procès-verbal des débats du Tribunal correctionnel du 14 décembre 2020, p. 4 s.), faisant ainsi implicitement référence aux décisions des 17 et 18 mars 2020. Le recourant n'avait par la suite pas été entendu en procédure d'appel, qui s'était tenue par écrit (cf. arrêt attaqué, ad " En fait ", let. C.a p. 3).
Dans un tel contexte, il est d'emblée compromis de pouvoir retenir, au-delà de tout doute raisonnable, qu'en entrant le 17 avril 2020 sur le territoire suisse, le recourant avait pour autant eu l'intention, même au stade du dol éventuel, de contrevenir à l'expulsion dont il faisait l'objet depuis le 16 mars 2020. En particulier, rien ne permet de le contredire lorsqu'il affirme s'être fié à la décision rendue le 17 mars 2020 par l'Office zurichois des migrations, qui elle-même faisait référence à la décision d'expulsion, et en avoir déduit de bonne foi que, jusqu'au 30 juin 2020, sa présence était tolérée tant en Suisse que dans l'ensemble de l'espace Schengen, dont le territoire de la France métropolitaine fait partie. De même, le recourant pouvait inférer de l'interdiction d'entrée notifiée le 18 mars 2020, pour prendre effet au 1er juillet 2020, que, dans l'intervalle, une entrée en Suisse depuis l'espace Schengen ne transgressait pas la décision d'expulsion. Il n'est au demeurant nullement établi qu'entre le 16 mars 2020 et le 17 avril 2020, le recourant était sorti de l'espace Schengen pour se rendre par exemple en Albanie, État dont il est ressortissant.
Il s'ensuit que, sauf à violer la présomption d'innocence, la cour cantonale ne pouvait pas s'estimer convaincue que le recourant avait intentionnellement contrevenu à la décision d'expulsion qui avait été prononcée à son égard. Sa condamnation pour rupture de ban est donc contraire au droit fédéral.
2.
Pour le surplus, le recourant ne conteste pas sa condamnation du chef d'infraction grave à la loi fédérale sur les stupéfiants (art. 19 al. 2 let. a LStup en lien avec l'art. 19 al. 1 let. b LStup), pas plus qu'il ne revient spécifiquement sur la peine privative de liberté et la mesure d'expulsion prononcées à son égard.
Cela étant, dès lors qu'aux termes de l'arrêt attaqué (cf. consid. 3.2 p. 10 s.), la condamnation du recourant pour rupture de ban justifiait, en vertu du principe de l'aggravation (cf. art. 49 al. 1 CP), une peine additionnelle de 2 mois, il convient de retrancher cette durée de la peine privative de liberté d'ensemble de 32 mois infligée par la cour cantonale après révocation du sursis accordé au recourant le 16 mars 2020, de sorte que celle-ci sera fixée à 30 mois, sous déduction de 567 jours subis en détention avant jugement.
3.
Le recours doit dès lors être admis. L'arrêt attaqué doit être partiellement réformé sur les points du dispositif relatifs à la culpabilité et à la peine, en ce sens que le recourant est acquitté du chef de rupture de ban et qu'il est condamné, pour infraction grave à la loi fédérale sur les stupéfiants et après révocation du sursis accordé le 16 mars 2020, à une peine privative de liberté d'ensemble de 30 mois, sous déduction des jours de détention avant jugement subis dans le cadre des procédures genevoise et zurichoise. La cause est renvoyée à la cour cantonale pour qu'elle rende une nouvelle décision sur les frais et dépens de la procédure cantonale. Pour le surplus, la demande de mise en liberté immédiate est sans objet, s'agissant d'une requête qui ne saurait être élevée au Tribunal fédéral en première instance, mais devant les autorités cantonales compétentes en vertu du CPP.
Le recourant obtient gain de cause et n'a pas à supporter de frais. Il peut en outre prétendre à de pleins dépens qui seront mis à la charge du canton de Genève (art. 68 al. 2 LTF), ce qui rend au surplus sans objet sa demande d'assistance judiciaire (art. 64 al. 2 LTF).
Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est admis. L'arrêt attaqué est partiellement réformé en ce sens que le recourant est acquitté du chef de rupture de ban et qu'il est condamné, pour infraction grave à la loi fédérale sur les stupéfiants et après révocation du sursis accordé le 16 mars 2020, à une peine privative de liberté d'ensemble de 30 mois, sous déduction des jours de détention avant jugement subis. La cause est renvoyée à la cour cantonale pour qu'elle rende une nouvelle décision sur les frais et dépens de la procédure cantonale.
2.
Il n'est pas perçu de frais judiciaires.
3.
Le canton de Genève versera au recourant, en mains de son conseil, la somme de 3'000 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 Cour de justice de la République et canton de Genève, Chambre pénale d'appel et de révision.
Lausanne, le 23 mars 2022
Au nom de la Cour de droit pénal
du Tribunal fédéral suisse
La Présidente : Jacquemoud-Rossari
Le Greffier : Tinguely