\documentclass{article}

\PassOptionsToPackage{table}{xcolor}
\usepackage{fontspec,array,booktabs,longtable,geometry,xcolor,hyperref}

\makeatletter\ExplSyntaxOn

\seq_const_from_clist:Nn \c_@@_weight_seq
  {
    Thin, UltraLight, ExtraLight, Light, Book, Regular,
    Medium, SemiBold, Bold, ExtraBold, Heavy, Ultra
  }

\seq_map_inline:Nn \c_@@_weight_seq
  { \exp_args:Nc \newfontfamily { FiraMath #1 } { FiraMath-#1.otf } [ Path = ../release/fonts/ ] }

% Require `\c_@@_glyph_unicode_seq`
%     and `\c_@@_glyph_non_unicode_seq`
\file_input:n { firamath-glyph-list.tex }

% From `firamath-specimen.tex`
\cs_new_protected:Npn \@@_symbol:n #1
  { \tex_char:D \int_eval:n {#1} \scan_stop: }
\prg_new_protected_conditional:Npnn \@@_if_char_exist:n #1 { T, F, TF }
  {
    \etex_iffontchar:D \tex_font:D \int_eval:n {#1} \scan_stop:
      \prg_return_true:
    \else:
      \prg_return_false:
    \fi:
  }
\cs_new_protected:Npn \@@_glyph_from_name:n #1
  { \tex_XeTeXglyph:D \tex_XeTeXglyphindex:D "#1" \scan_stop: }
\cs_new_protected:Npn \@@_set_glyph_index:Nn #1#2
  { \int_set:Nn #1 { \tex_XeTeXglyphindex:D "#2" \scan_stop: } }

\NewDocumentCommand \printtable { }
  {
    \longtable { c * { \seq_count:N \c_@@_weight_seq } { @{} c} }
      \toprule
        \@@_head: \\
      \midrule
      \endhead
      \toprule
        \@@_head_first: \\
      \midrule
      \endfirsthead
        \@@_body: \\
      \bottomrule
    \endlongtable
  \seq_map_inline:Nn \c_@@_weight_seq
    { \refstepcounter { glyph @ ##1 } \label{count:glyph@##1} }
  }

\cs_new:Npn \@@_head:
  {
    \seq_map_inline:Nn \c_@@_weight_seq
      { & \makebox [1.4cm] [c] { \HeadFont ##1 } }
  }
\cs_new:Npn \@@_head_first:
  {
    \seq_map_inline:Nn \c_@@_weight_seq
      { & \parbox {1.4cm} { \centering \HeadFont ##1 \\[3pt] \scriptsize (\ref*{count:glyph@##1}) } }
  }

\cs_new:Npn \@@_body:
  {
    \seq_map_function:NN \c_@@_glyph_unicode_seq     \@@_row_unicode:n
    \seq_map_function:NN \c_@@_glyph_non_unicode_seq \@@_row_non_unicode:n
  }
\cs_new:Npn \@@_row_unicode:n #1
  {
    \HeadFont U + \str_tail:n {#1}
    \@@_row_strut:
    \seq_map_inline:Nn \c_@@_weight_seq
      {
        & \use:c { FiraMath ##1 }
        \@@_if_char_exist:nTF {#1}
          {
            \@@_glyph_box:n { \@@_symbol:n {#1} }
            \refstepcounter { glyph @ ##1 }
          }
          { \textcolor { red } { \@@_glyph_from_name:n { .notdef } } }
      }
    \\
  }
\cs_new:Npn \@@_row_non_unicode:n #1
  {
    \tiny \HeadFont #1
    \@@_row_strut:
    \seq_map_inline:Nn \c_@@_weight_seq
      {
        & \use:c { FiraMath ##1 }
        \@@_set_glyph_index:Nn \l_tmpa_int {#1}
        \int_compare:nNnTF \l_tmpa_int = \c_zero
          {
            \str_if_eq:nnTF {#1} { .notdef }
              { \refstepcounter { glyph @ ##1 } \use:n }
              { \textcolor { red } }
            { \@@_glyph_from_name:n { .notdef } }
          }
          {
            \@@_glyph_box:n { \@@_glyph_from_name:n {#1} }
            \refstepcounter { glyph @ ##1 }
          }
      }
    \\
  }
\seq_map_inline:Nn \c_@@_weight_seq
  {
    \newcounter { glyph @ #1 }
    \setcounter { glyph @ #1 } { -1 }
  }
\cs_new:Npn \@@_row_strut:
  { \rule {0cm} {0.75cm}  }
\cs_new:Npn \@@_glyph_box:n #1
  { \framebox [1.4cm] [c] {#1} }
\dim_set_eq:NN \fboxrule \c_zero_dim

\ExplSyntaxOff\makeatother

\title{\bfseries\huge Fira Math\\
  \itshape\Large Sans-serif font with Unicode math support}
\author{Xiangdong Zeng}
\date{2019/02/20\quad v0.4-beta-3}

\geometry{a4paper, hmargin=1cm, vmargin=2.5cm}
\setmainfont{FiraGO}[BoldFont=* SemiBold, Numbers=Monospaced]
\newfontface\HeadFont{FiraSansCompressed-Light.otf}%
  [Path=../assets/Fira_Sans_OTF_4301/Compressed/Roman/, Numbers=Monospaced]

\begin{document}
\maketitle
\printtable
\end{document}
