CPPFLAGS = -I../include
CXXFLAGS = -O2 -fomit-frame-pointer -fexpensive-optimizations -Wall

%.s : %.c
	$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -S $< -o $@

%.s : %.cc
	$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -S $< -o $@

%.o : %.c
	$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $< -o $@

%.o : %.cc
	$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $< -o $@

%.i : %.c
	$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -E $< > $@

%.i.cc : %.cc
	$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -E $< > $@

SOURCES_ARIDECL  = cl_N_err_d0.cc cl_F_err_ov.cc cl_F_err_un.cc
SOURCES_ARILEV0  = cl_low_mul.cc cl_low_div.cc
SOURCES_ARILEV1  =
SOURCES_INTELEM  = cl_I_to_UL.cc cl_I_to_L.cc cl_I_to_UQ.cc cl_I_to_Q.cc \
                   cl_I_from_L.cc cl_I_from_UL.cc cl_I_from_L2.cc cl_I_from_UL2.cc cl_I_from_Q.cc cl_I_from_UQ.cc \
                   cl_I_from_NDS.cc cl_I_from_NUDS.cc cl_I_from_UDS.cc cl_I_from_DS.cc
SOURCES_INTLOG   = cl_I_log_aux.cc \
                   cl_I_logior.cc cl_I_logxor.cc cl_I_logand.cc cl_I_logeqv.cc cl_I_lognand.cc cl_I_lognor.cc \
                   cl_I_logandc2.cc cl_I_logorc2.cc cl_I_lognot.cc cl_I_boole.cc \
                   cl_I_logtest.cc cl_I_logbitp.cc cl_I_logbitp_I.cc cl_I_oddp.cc \
                   cl_I_asherr.cc cl_I_ash.cc cl_I_ash_I.cc \
                   cl_I_logcount.cc cl_I_ilength.cc cl_I_ord2.cc cl_I_power2p.cc
SOURCES_INTPLUS  = cl_I_plus1.cc cl_I_minus1.cc cl_I_plus.cc cl_I_uminus.cc cl_I_minus.cc cl_I_abs.cc
SOURCES_INTCOMP  = cl_I_compare.cc
SOURCES_INTBYTE  = cl_I_fullbyte.cc cl_I_ldbx.cc cl_I_ldb.cc cl_I_ldbxtest.cc cl_I_ldbtest.cc \
                   cl_I_mkfx.cc cl_I_mkf.cc cl_I_dpf.cc cl_I_dpb.cc
SOURCES_INTMAL   = cl_DS_mul.cc cl_I_mul.cc cl_I_exptpos.cc cl_I_exptpos_I.cc cl_I_factorial.cc
SOURCES_INTDIV   = cl_DS_div.cc cl_I_div.cc cl_I_exquoerr.cc cl_I_exquopos.cc cl_I_exquo.cc \
                   cl_I_mod.cc cl_I_rem.cc cl_I_floor2.cc cl_I_ceil2.cc cl_I_trunc2.cc cl_I_round2.cc
SOURCES_INTGCD   = cl_low_gcd.cc cl_I_gcd_aux.cc cl_I_gcd.cc cl_I_xgcd.cc cl_I_lcm.cc
SOURCES_INT2ADIC = cl_2D_exptpos.cc cl_2D_div.cc cl_2DS_div.cc
SOURCES_INTSQRT  = cl_low_isqrt.cc cl_low_isqrt2.cc cl_I_sqrt.cc cl_DS_sqrt.cc \
                   cl_I_sqrtp.cc cl_I_rootp_aux.cc cl_I_rootp.cc cl_I_rootp_I.cc
SOURCES_INTPRINT = cl_DS_digits_need.cc cl_DS_to_digits.cc
SOURCES_INTREAD  = cl_I_from_digits.cc
SOURCES_RATIONAL = cl_RA_from_I_posI1.cc cl_RA_from_I_posI.cc cl_RA_from_I_posI_div.cc cl_RA_from_I_I_div.cc \
                   cl_RA_uminus.cc cl_RA_plus.cc cl_RA_minus.cc cl_RA_plus1.cc cl_RA_minus1.cc \
                   cl_RA_compare.cc cl_RA_recip.cc cl_RA_mul.cc cl_RA_div.cc \
                   cl_RA_floor2.cc cl_RA_ceil2.cc cl_RA_trunc2.cc cl_RA_round2.cc \
                   cl_RA_exptpos.cc cl_RA_exptpos_I.cc cl_RA_expt.cc cl_RA_expt_I.cc cl_RA_sqrtp.cc \
                   cl_RA_rootp.cc cl_RA_rootp_I.cc
SOURCES_SFLOAT   = cl_SF_ftrunc.cc cl_SF_futrunc.cc cl_SF_fround.cc cl_SF_uminus.cc cl_SF_compare.cc \
                   cl_SF_plus.cc cl_SF_minus.cc cl_SF_mul.cc cl_SF_div.cc cl_SF_sqrt.cc \
                   cl_SF_to_I.cc cl_SF_from_I.cc cl_SF_from_RA.cc
SOURCES_FFLOAT   = cl_FF_ftrunc.cc cl_FF_futrunc.cc cl_FF_fround.cc cl_FF_uminus.cc cl_FF_compare.cc \
                   cl_FF_plus.cc cl_FF_minus.cc cl_FF_mul.cc cl_FF_div.cc cl_FF_sqrt.cc \
                   cl_FF_to_I.cc cl_FF_from_I.cc cl_FF_from_RA.cc
SOURCES_DFLOAT   = cl_DF_ftrunc.cc cl_DF_futrunc.cc cl_DF_fround.cc cl_DF_uminus.cc cl_DF_compare.cc \
                   cl_DF_plus.cc cl_DF_minus.cc cl_DF_mul.cc cl_DF_div.cc cl_DF_sqrt.cc \
                   cl_DF_to_I.cc cl_DF_from_I.cc cl_DF_from_RA.cc
SOURCES_LFLOAT   = cl_LF_ftrunc.cc cl_LF_futrunc.cc cl_LF_fround.cc cl_LF_uminus.cc cl_LF_compare.cc \
                   cl_LF_shorten.cc cl_LF_extend.cc cl_LF_to_LF.cc \
                   cl_LF_1plus.cc cl_LF_2plus.cc cl_LF_1minus.cc cl_LF_2minus.cc \
                   cl_LF_1mul.cc cl_LF_2mul.cc cl_LF_1div.cc cl_LF_2div.cc cl_LF_sqrt.cc \
                   cl_LF_to_I.cc cl_LF_from_I.cc cl_LF_from_RA.cc
SOURCES_FLO_KONV = cl_F_err_nan.cc \
                   cl_SF_to_FF.cc cl_SF_to_DF.cc cl_SF_to_LF.cc cl_FF_to_DF.cc cl_FF_to_LF.cc cl_DF_to_LF.cc \
                   cl_FF_to_SF.cc cl_DF_to_SF.cc cl_LF_to_SF.cc cl_DF_to_FF.cc cl_LF_to_FF.cc cl_LF_to_DF.cc \
                   cl_FF_from_float.cc cl_FF_to_float.cc cl_DF_from_double.cc cl_DF_to_double.cc
SOURCES_FLO_REST = cl_F_uminus.cc cl_F_abs.cc \
                   cl_SF_recip.cc cl_FF_recip.cc cl_DF_recip.cc cl_LF_recip.cc cl_F_recip.cc \
                   cl_F_sqrt.cc cl_F_plus.cc cl_F_minus.cc cl_F_mul.cc cl_F_div.cc cl_F_compare.cc \
                   cl_SF_ffloor.cc cl_FF_ffloor.cc cl_DF_ffloor.cc cl_LF_ffloor.cc \
                   cl_SF_fceil.cc cl_FF_fceil.cc cl_DF_fceil.cc cl_LF_fceil.cc \
                   cl_F_ffloor2.cc cl_F_fceil2.cc cl_F_ftrunc2.cc cl_F_fround2.cc \
                   cl_F_floor2.cc cl_F_ceil2.cc cl_F_trunc2.cc cl_F_round2.cc \
                   cl_F_floor22.cc cl_F_ceil22.cc cl_F_trunc22.cc cl_F_round22.cc \
                   cl_F_to_SF.cc cl_F_to_FF.cc cl_F_to_DF.cc cl_F_to_LF.cc cl_F_from_F.cc \
                   cl_LF_leninc.cc cl_F_extendsqrt.cc cl_LF_lenincx.cc cl_F_extendsqrtx.cc \
                   cl_SF_decode.cc cl_DF_decode.cc cl_FF_decode.cc cl_LF_decode.cc cl_F_decode.cc \
                   cl_SF_exponent.cc cl_FF_exponent.cc cl_DF_exponent.cc cl_LF_exponent.cc cl_F_exponent.cc \
                   cl_SF_scale_I.cc cl_SF_scale.cc cl_FF_scale_I.cc cl_FF_scale.cc cl_DF_scale_I.cc cl_DF_scale.cc cl_LF_scale_I.cc cl_LF_scale.cc cl_F_scale_I.cc cl_F_scale.cc \
                   cl_F_zerop.cc cl_F_minusp.cc \
                   cl_SF_sign.cc cl_FF_sign.cc cl_DF_sign.cc cl_LF_sign.cc cl_F_sign.cc cl_F_sign2.cc \
                   cl_SF_digits.cc cl_FF_digits.cc cl_DF_digits.cc cl_LF_digits.cc cl_F_digits.cc \
                   cl_SF_precision.cc cl_FF_precision.cc cl_DF_precision.cc cl_LF_precision.cc cl_F_precision.cc \
                   cl_SF_idecode.cc cl_FF_idecode.cc cl_DF_idecode.cc cl_LF_idecode.cc cl_F_idecode.cc
SOURCES_REALELEM = cl_R_minusp.cc cl_R_zerop.cc cl_R_plusp.cc cl_F_from_I.cc cl_F_from_RA.cc cl_F_from_R.cc \
                   cl_R_to_SF.cc cl_R_to_FF.cc cl_R_to_DF.cc cl_R_to_LF.cc cl_R_contagion.cc \
                   cl_F_from_I_def.cc cl_F_from_RA_def.cc cl_F_from_R_def.cc \
                   cl_R_floor2.cc cl_R_ceil2.cc cl_R_trunc2.cc cl_R_round2.cc \
                   cl_R_ffloor2.cc cl_R_fceil2.cc cl_R_ftrunc2.cc cl_R_fround2.cc \
                   cl_R_uminus.cc cl_R_abs.cc cl_R_plus.cc cl_R_minus.cc cl_R_mul.cc cl_R_recip.cc cl_R_div.cc \
                   cl_R_floor22.cc cl_R_ceil22.cc cl_R_trunc22.cc cl_R_round22.cc cl_R_mod.cc cl_R_rem.cc \
                   cl_R_ffloor22.cc cl_R_fceil22.cc cl_R_ftrunc22.cc cl_R_fround22.cc \
                   cl_R_plus1.cc cl_R_minus1.cc cl_F_rational.cc cl_R_rational.cc \
                   cl_R_compare.cc cl_R_max.cc cl_R_min.cc \
                   cl_I_signum.cc cl_RA_signum.cc cl_SF_signum.cc cl_FF_signum.cc cl_DF_signum.cc cl_LF_signum.cc cl_F_signum.cc cl_R_signum.cc \
                   cl_R_sqrt.cc cl_R_expt.cc cl_R_expt_I.cc cl_R_rationalize.cc 
SOURCES_REALRAND = cl_UL_random.cc cl_DS_random.cc cl_I_random.cc cl_F_random.cc
SOURCES_REALTRAN = cl_F_pi_var.cc cl_LF_pi.cc cl_F_pi.cc cl_F_pi_def.cc \
                   cl_F_atanhx.cc cl_F_atanx.cc cl_R_atan2.cc cl_R_atan.cc \
                   cl_F_sinx.cc cl_F_sinhx.cc cl_F_roundpi.cc cl_F_roundpi2.cc cl_R_sin.cc cl_R_cos.cc cl_R_cossin.cc \
                   cl_F_lnx.cc cl_F_ln2_var.cc cl_LF_ln2.cc cl_F_ln2.cc cl_R_ln.cc \
                   cl_I_logp.cc cl_RA_logp.cc cl_R_log.cc \
                   cl_F_expx.cc cl_R_exp.cc cl_R_sinh.cc cl_R_cosh.cc cl_R_coshsinh.cc
SOURCES_COMPELEM = cl_C_from_R_R_complex.cc cl_C_from_R_R_complex1.cc cl_C_conjugate.cc \
                   cl_C_uminus.cc cl_C_plus.cc cl_C_minus.cc cl_C_plus1.cc cl_C_minus1.cc cl_C_mul.cc cl_C_zerop.cc \
                   cl_C_SF_recip.cc cl_C_FF_recip.cc cl_C_DF_recip.cc cl_C_LF_recip.cc cl_C_recip.cc cl_C_div.cc \
                   cl_SF_hypot.cc cl_FF_hypot.cc cl_DF_hypot.cc cl_LF_hypot.cc cl_R_hypot.cc cl_C_abs_aux.cc \
                   cl_C_abs.cc cl_C_signum.cc cl_C_sqrt.cc cl_C_equal.cc
SOURCES_COMPTRAN = cl_C_phase.cc cl_C_exp.cc cl_C_log.cc cl_C_log2.cc \
                   cl_C_expt.cc cl_C_expt_I.cc cl_C_expt_C.cc \
                   cl_C_sin.cc cl_C_cos.cc cl_C_tan.cc cl_C_cis.cc cl_C_sinh.cc cl_C_cosh.cc cl_C_tanh.cc \
                   cl_C_atanh_aux.cc cl_C_atanh.cc cl_C_atan.cc cl_C_asinh_aux.cc cl_C_asinh.cc cl_C_asin.cc \
                   cl_C_acos.cc cl_C_acosh.cc
SOURCES_LISPARIT =
SOURCES_OTHER = cl_globals.cc cl_malloc.cc cl_malloca.cc

SOURCES = $(SOURCES_ARIDECL) $(SOURCES_ARILEV0) $(SOURCES_ARILEV1) $(SOURCES_INTELEM) $(SOURCES_INTLOG) $(SOURCES_INTPLUS) $(SOURCES_INTCOMP) $(SOURCES_INTBYTE) $(SOURCES_INTMAL) $(SOURCES_INTDIV) $(SOURCES_INTGCD) $(SOURCES_INT2ADIC) $(SOURCES_INTSQRT) $(SOURCES_INTPRINT) $(SOURCES_INTREAD) $(SOURCES_RATIONAL) $(SOURCES_SFLOAT) $(SOURCES_FFLOAT) $(SOURCES_DFLOAT) $(SOURCES_LFLOAT) $(SOURCES_FLO_KONV) $(SOURCES_FLO_REST) $(SOURCES_REALELEM) $(SOURCES_REALRAND) $(SOURCES_REALTRAN) $(SOURCES_COMPELEM) $(SOURCES_COMPTRAN) $(SOURCES_LISPARIT) $(SOURCES_OTHER)
