#############################################################################
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT-0
#############################################################################

# These are the object files corresponding to sources for translation

OBJ = curve25519/bignum_add_p25519.o \
      curve25519/bignum_cmul_p25519.o \
      curve25519/bignum_cmul_p25519_alt.o \
      curve25519/bignum_double_p25519.o \
      curve25519/bignum_inv_p25519.o \
      curve25519/bignum_invsqrt_p25519.o \
      curve25519/bignum_invsqrt_p25519_alt.o \
      curve25519/bignum_madd_n25519.o \
      curve25519/bignum_madd_n25519_alt.o \
      curve25519/bignum_mod_m25519_4.o \
      curve25519/bignum_mod_n25519.o \
      curve25519/bignum_mod_n25519_4.o \
      curve25519/bignum_mod_p25519_4.o \
      curve25519/bignum_mul_p25519.o \
      curve25519/bignum_mul_p25519_alt.o \
      curve25519/bignum_neg_p25519.o \
      curve25519/bignum_optneg_p25519.o \
      curve25519/bignum_sqr_p25519.o \
      curve25519/bignum_sqr_p25519_alt.o \
      curve25519/bignum_sqrt_p25519.o \
      curve25519/bignum_sqrt_p25519_alt.o \
      curve25519/bignum_sub_p25519.o \
      curve25519/curve25519_ladderstep.o \
      curve25519/curve25519_ladderstep_alt.o \
      curve25519/curve25519_pxscalarmul.o \
      curve25519/curve25519_pxscalarmul_alt.o \
      curve25519/curve25519_x25519.o \
      curve25519/curve25519_x25519_alt.o \
      curve25519/curve25519_x25519base.o \
      curve25519/curve25519_x25519base_alt.o \
      curve25519/edwards25519_decode.o \
      curve25519/edwards25519_decode_alt.o \
      curve25519/edwards25519_encode.o \
      curve25519/edwards25519_epadd.o \
      curve25519/edwards25519_epadd_alt.o \
      curve25519/edwards25519_epdouble.o \
      curve25519/edwards25519_epdouble_alt.o \
      curve25519/edwards25519_pdouble.o \
      curve25519/edwards25519_pdouble_alt.o \
      curve25519/edwards25519_pepadd.o \
      curve25519/edwards25519_pepadd_alt.o \
      curve25519/edwards25519_scalarmulbase.o \
      curve25519/edwards25519_scalarmulbase_alt.o \
      curve25519/edwards25519_scalarmuldouble.o \
      curve25519/edwards25519_scalarmuldouble_alt.o \
      fastmul/bignum_emontredc_8n.o \
      fastmul/bignum_kmul_16_32.o \
      fastmul/bignum_kmul_32_64.o \
      fastmul/bignum_ksqr_16_32.o \
      fastmul/bignum_ksqr_32_64.o \
      fastmul/bignum_mul_4_8.o \
      fastmul/bignum_mul_4_8_alt.o \
      fastmul/bignum_mul_6_12.o \
      fastmul/bignum_mul_6_12_alt.o \
      fastmul/bignum_mul_8_16.o \
      fastmul/bignum_mul_8_16_alt.o \
      fastmul/bignum_sqr_4_8.o \
      fastmul/bignum_sqr_4_8_alt.o \
      fastmul/bignum_sqr_6_12.o \
      fastmul/bignum_sqr_6_12_alt.o \
      fastmul/bignum_sqr_8_16.o \
      fastmul/bignum_sqr_8_16_alt.o \
      generic/bignum_add.o \
      generic/bignum_amontifier.o \
      generic/bignum_amontmul.o \
      generic/bignum_amontredc.o \
      generic/bignum_amontsqr.o \
      generic/bignum_bitfield.o \
      generic/bignum_bitsize.o \
      generic/bignum_cdiv.o \
      generic/bignum_cdiv_exact.o \
      generic/bignum_cld.o \
      generic/bignum_clz.o \
      generic/bignum_cmadd.o \
      generic/bignum_cmnegadd.o \
      generic/bignum_cmod.o \
      generic/bignum_cmul.o \
      generic/bignum_coprime.o \
      generic/bignum_copy.o \
      generic/bignum_ctd.o \
      generic/bignum_ctz.o \
      generic/bignum_demont.o \
      generic/bignum_digit.o \
      generic/bignum_digitsize.o \
      generic/bignum_divmod10.o \
      generic/bignum_emontredc.o \
      generic/bignum_eq.o \
      generic/bignum_even.o \
      generic/bignum_ge.o \
      generic/bignum_gt.o \
      generic/bignum_iszero.o \
      generic/bignum_le.o \
      generic/bignum_lt.o \
      generic/bignum_madd.o \
      generic/bignum_modadd.o \
      generic/bignum_moddouble.o \
      generic/bignum_modexp.o \
      generic/bignum_modifier.o \
      generic/bignum_modinv.o \
      generic/bignum_modoptneg.o \
      generic/bignum_modsub.o \
      generic/bignum_montifier.o \
      generic/bignum_montmul.o \
      generic/bignum_montredc.o \
      generic/bignum_montsqr.o \
      generic/bignum_mul.o \
      generic/bignum_muladd10.o \
      generic/bignum_mux.o \
      generic/bignum_mux16.o \
      generic/bignum_negmodinv.o \
      generic/bignum_nonzero.o \
      generic/bignum_normalize.o \
      generic/bignum_odd.o \
      generic/bignum_of_word.o \
      generic/bignum_optadd.o \
      generic/bignum_optneg.o \
      generic/bignum_optsub.o \
      generic/bignum_optsubadd.o \
      generic/bignum_pow2.o \
      generic/bignum_shl_small.o \
      generic/bignum_shr_small.o \
      generic/bignum_sqr.o \
      generic/bignum_sub.o \
      generic/word_bytereverse.o \
      generic/word_clz.o \
      generic/word_ctz.o \
      generic/word_divstep59.o \
      generic/word_max.o \
      generic/word_min.o \
      generic/word_negmodinv.o \
      generic/word_popcount.o \
      generic/word_recip.o \
      p256/bignum_add_p256.o \
      p256/bignum_bigendian_4.o \
      p256/bignum_cmul_p256.o \
      p256/bignum_cmul_p256_alt.o \
      p256/bignum_deamont_p256.o \
      p256/bignum_deamont_p256_alt.o \
      p256/bignum_demont_p256.o \
      p256/bignum_demont_p256_alt.o \
      p256/bignum_double_p256.o \
      p256/bignum_half_p256.o \
      p256/bignum_inv_p256.o \
      p256/bignum_littleendian_4.o \
      p256/bignum_mod_n256.o \
      p256/bignum_mod_n256_alt.o \
      p256/bignum_mod_n256_4.o \
      p256/bignum_mod_p256.o \
      p256/bignum_mod_p256_alt.o \
      p256/bignum_mod_p256_4.o \
      p256/bignum_montinv_p256.o \
      p256/bignum_montmul_p256.o \
      p256/bignum_montmul_p256_alt.o \
      p256/bignum_montsqr_p256.o \
      p256/bignum_montsqr_p256_alt.o \
      p256/bignum_mux_4.o \
      p256/bignum_neg_p256.o \
      p256/bignum_nonzero_4.o \
      p256/bignum_optneg_p256.o \
      p256/bignum_sub_p256.o \
      p256/bignum_tomont_p256.o \
      p256/bignum_tomont_p256_alt.o \
      p256/bignum_triple_p256.o \
      p256/bignum_triple_p256_alt.o \
      p256/p256_montjadd.o \
      p256/p256_montjadd_alt.o \
      p256/p256_montjdouble.o \
      p256/p256_montjdouble_alt.o \
      p256/p256_montjmixadd.o \
      p256/p256_montjmixadd_alt.o \
      p256/p256_montjscalarmul.o \
      p256/p256_montjscalarmul_alt.o \
      p256/p256_scalarmul.o \
      p256/p256_scalarmul_alt.o \
      p256/p256_scalarmulbase.o \
      p256/p256_scalarmulbase_alt.o \
      p384/bignum_add_p384.o \
      p384/bignum_bigendian_6.o \
      p384/bignum_cmul_p384.o \
      p384/bignum_cmul_p384_alt.o \
      p384/bignum_deamont_p384.o \
      p384/bignum_deamont_p384_alt.o \
      p384/bignum_demont_p384.o \
      p384/bignum_demont_p384_alt.o \
      p384/bignum_double_p384.o \
      p384/bignum_half_p384.o \
      p384/bignum_inv_p384.o \
      p384/bignum_littleendian_6.o \
      p384/bignum_mod_n384_alt.o \
      p384/bignum_mod_n384.o \
      p384/bignum_mod_n384_6.o \
      p384/bignum_mod_p384.o \
      p384/bignum_mod_p384_alt.o \
      p384/bignum_mod_p384_6.o \
      p384/bignum_montinv_p384.o \
      p384/bignum_montmul_p384.o \
      p384/bignum_montmul_p384_alt.o \
      p384/bignum_montsqr_p384.o \
      p384/bignum_montsqr_p384_alt.o \
      p384/bignum_mux_6.o \
      p384/bignum_neg_p384.o \
      p384/bignum_nonzero_6.o \
      p384/bignum_optneg_p384.o \
      p384/bignum_sub_p384.o \
      p384/bignum_tomont_p384.o \
      p384/bignum_tomont_p384_alt.o \
      p384/bignum_triple_p384.o \
      p384/bignum_triple_p384_alt.o \
      p384/p384_montjadd.o \
      p384/p384_montjadd_alt.o \
      p384/p384_montjdouble.o \
      p384/p384_montjdouble_alt.o \
      p384/p384_montjmixadd.o \
      p384/p384_montjmixadd_alt.o \
      p384/p384_montjscalarmul.o \
      p384/p384_montjscalarmul_alt.o \
      p521/bignum_add_p521.o \
      p521/bignum_cmul_p521.o \
      p521/bignum_cmul_p521_alt.o \
      p521/bignum_deamont_p521.o \
      p521/bignum_demont_p521.o \
      p521/bignum_double_p521.o \
      p521/bignum_fromlebytes_p521.o \
      p521/bignum_half_p521.o \
      p521/bignum_inv_p521.o \
      p521/bignum_mod_n521_9.o \
      p521/bignum_mod_n521_9_alt.o \
      p521/bignum_mod_p521_9.o \
      p521/bignum_montmul_p521.o \
      p521/bignum_montmul_p521_alt.o \
      p521/bignum_montsqr_p521.o \
      p521/bignum_montsqr_p521_alt.o \
      p521/bignum_mul_p521.o \
      p521/bignum_mul_p521_alt.o \
      p521/bignum_neg_p521.o \
      p521/bignum_optneg_p521.o \
      p521/bignum_sqr_p521.o \
      p521/bignum_sqr_p521_alt.o \
      p521/bignum_sub_p521.o \
      p521/bignum_tolebytes_p521.o \
      p521/bignum_tomont_p521.o \
      p521/bignum_triple_p521.o \
      p521/bignum_triple_p521_alt.o \
      p521/p521_jadd.o \
      p521/p521_jadd_alt.o \
      p521/p521_jdouble.o \
      p521/p521_jdouble_alt.o \
      p521/p521_jmixadd.o \
      p521/p521_jmixadd_alt.o \
      p521/p521_jscalarmul.o \
      p521/p521_jscalarmul_alt.o \
      secp256k1/bignum_add_p256k1.o \
      secp256k1/bignum_cmul_p256k1.o \
      secp256k1/bignum_cmul_p256k1_alt.o \
      secp256k1/bignum_deamont_p256k1.o \
      secp256k1/bignum_demont_p256k1.o \
      secp256k1/bignum_double_p256k1.o \
      secp256k1/bignum_half_p256k1.o \
      secp256k1/bignum_mod_n256k1_4.o \
      secp256k1/bignum_mod_p256k1_4.o \
      secp256k1/bignum_montmul_p256k1.o \
      secp256k1/bignum_montmul_p256k1_alt.o \
      secp256k1/bignum_montsqr_p256k1.o \
      secp256k1/bignum_montsqr_p256k1_alt.o \
      secp256k1/bignum_mul_p256k1.o \
      secp256k1/bignum_mul_p256k1_alt.o \
      secp256k1/bignum_neg_p256k1.o \
      secp256k1/bignum_optneg_p256k1.o \
      secp256k1/bignum_sqr_p256k1.o \
      secp256k1/bignum_sqr_p256k1_alt.o \
      secp256k1/bignum_sub_p256k1.o \
      secp256k1/bignum_tomont_p256k1.o \
      secp256k1/bignum_tomont_p256k1_alt.o \
      secp256k1/bignum_triple_p256k1.o \
      secp256k1/bignum_triple_p256k1_alt.o \
      secp256k1/secp256k1_jadd.o \
      secp256k1/secp256k1_jadd_alt.o \
      secp256k1/secp256k1_jdouble.o \
      secp256k1/secp256k1_jdouble_alt.o \
      secp256k1/secp256k1_jmixadd.o \
      secp256k1/secp256k1_jmixadd_alt.o \
      sm2/bignum_add_sm2.o \
      sm2/bignum_cmul_sm2.o \
      sm2/bignum_cmul_sm2_alt.o \
      sm2/bignum_deamont_sm2.o \
      sm2/bignum_demont_sm2.o \
      sm2/bignum_double_sm2.o \
      sm2/bignum_half_sm2.o \
      sm2/bignum_inv_sm2.o \
      sm2/bignum_mod_nsm2.o \
      sm2/bignum_mod_nsm2_alt.o \
      sm2/bignum_mod_nsm2_4.o \
      sm2/bignum_mod_sm2.o \
      sm2/bignum_mod_sm2_4.o \
      sm2/bignum_montinv_sm2.o \
      sm2/bignum_montmul_sm2.o \
      sm2/bignum_montmul_sm2_alt.o \
      sm2/bignum_montsqr_sm2.o \
      sm2/bignum_montsqr_sm2_alt.o \
      sm2/bignum_neg_sm2.o \
      sm2/bignum_optneg_sm2.o \
      sm2/bignum_sub_sm2.o \
      sm2/bignum_tomont_sm2.o \
      sm2/bignum_triple_sm2.o \
      sm2/bignum_triple_sm2_alt.o \
      sm2/sm2_montjadd.o \
      sm2/sm2_montjadd_alt.o \
      sm2/sm2_montjdouble.o \
      sm2/sm2_montjdouble_alt.o \
      sm2/sm2_montjmixadd.o \
      sm2/sm2_montjmixadd_alt.o \
      sm2/sm2_montjscalarmul.o \
      sm2/sm2_montjscalarmul_alt.o

# The AT&T syntax source files

ATTSOURCES = $(OBJ:.o=.S)

code: $(ATTSOURCES)

all: $(OBJ);

%.o : %.S ; ($(CC) -E -I../include $< | as -o $@ -); (cd ../x86; $(CC) -E -I../include $< | as -o /tmp/original_object.o); cmp -s $@ /tmp/original_object.o

curve25519/%.S :: ../x86/curve25519/%.S ; (cat $< | sed -E -f ./attrofy.sed >$@) && ($(CC) -E -I../include -DWINDOWS_ABI=0 $@ | as -o /tmp/translated_object.o) ; ($(CC) -E -I../include -DWINDOWS_ABI=1 $@ | as -o /tmp/translated_object.obj) ; ($(CC) -E -I../include -DWINDOWS_ABI=0 $< | as -o /tmp/original_object.o) ; ($(CC) -E -I../include -DWINDOWS_ABI=1 $< | as -o /tmp/original_object.obj) ; (cmp -s /tmp/translated_object.o /tmp/original_object.o && cmp -s /tmp/translated_object.obj /tmp/original_object.obj)
fastmul/%.S :: ../x86/fastmul/%.S       ; (cat $< | sed -E -f ./attrofy.sed >$@) && ($(CC) -E -I../include -DWINDOWS_ABI=0 $@ | as -o /tmp/translated_object.o) ; ($(CC) -E -I../include -DWINDOWS_ABI=1 $@ | as -o /tmp/translated_object.obj) ; ($(CC) -E -I../include -DWINDOWS_ABI=0 $< | as -o /tmp/original_object.o) ; ($(CC) -E -I../include -DWINDOWS_ABI=1 $< | as -o /tmp/original_object.obj) ; (cmp -s /tmp/translated_object.o /tmp/original_object.o && cmp -s /tmp/translated_object.obj /tmp/original_object.obj)
generic/%.S :: ../x86/generic/%.S       ; (cat $< | sed -E -f ./attrofy.sed >$@) && ($(CC) -E -I../include -DWINDOWS_ABI=0 $@ | as -o /tmp/translated_object.o) ; ($(CC) -E -I../include -DWINDOWS_ABI=1 $@ | as -o /tmp/translated_object.obj) ; ($(CC) -E -I../include -DWINDOWS_ABI=0 $< | as -o /tmp/original_object.o) ; ($(CC) -E -I../include -DWINDOWS_ABI=1 $< | as -o /tmp/original_object.obj) ; (cmp -s /tmp/translated_object.o /tmp/original_object.o && cmp -s /tmp/translated_object.obj /tmp/original_object.obj)
p256/%.S :: ../x86/p256/%.S             ; (cat $< | sed -E -f ./attrofy.sed >$@) && ($(CC) -E -I../include -DWINDOWS_ABI=0 $@ | as -o /tmp/translated_object.o) ; ($(CC) -E -I../include -DWINDOWS_ABI=1 $@ | as -o /tmp/translated_object.obj) ; ($(CC) -E -I../include -DWINDOWS_ABI=0 $< | as -o /tmp/original_object.o) ; ($(CC) -E -I../include -DWINDOWS_ABI=1 $< | as -o /tmp/original_object.obj) ; (cmp -s /tmp/translated_object.o /tmp/original_object.o && cmp -s /tmp/translated_object.obj /tmp/original_object.obj)
p384/%.S :: ../x86/p384/%.S             ; (cat $< | sed -E -f ./attrofy.sed >$@) && ($(CC) -E -I../include -DWINDOWS_ABI=0 $@ | as -o /tmp/translated_object.o) ; ($(CC) -E -I../include -DWINDOWS_ABI=1 $@ | as -o /tmp/translated_object.obj) ; ($(CC) -E -I../include -DWINDOWS_ABI=0 $< | as -o /tmp/original_object.o) ; ($(CC) -E -I../include -DWINDOWS_ABI=1 $< | as -o /tmp/original_object.obj) ; (cmp -s /tmp/translated_object.o /tmp/original_object.o && cmp -s /tmp/translated_object.obj /tmp/original_object.obj)
p521/%.S :: ../x86/p521/%.S             ; (cat $< | sed -E -f ./attrofy.sed >$@) && ($(CC) -E -I../include -DWINDOWS_ABI=0 $@ | as -o /tmp/translated_object.o) ; ($(CC) -E -I../include -DWINDOWS_ABI=1 $@ | as -o /tmp/translated_object.obj) ; ($(CC) -E -I../include -DWINDOWS_ABI=0 $< | as -o /tmp/original_object.o) ; ($(CC) -E -I../include -DWINDOWS_ABI=1 $< | as -o /tmp/original_object.obj) ; (cmp -s /tmp/translated_object.o /tmp/original_object.o && cmp -s /tmp/translated_object.obj /tmp/original_object.obj)
secp256k1/%.S :: ../x86/secp256k1/%.S   ; (cat $< | sed -E -f ./attrofy.sed >$@) && ($(CC) -E -I../include -DWINDOWS_ABI=0 $@ | as -o /tmp/translated_object.o) ; ($(CC) -E -I../include -DWINDOWS_ABI=1 $@ | as -o /tmp/translated_object.obj) ; ($(CC) -E -I../include -DWINDOWS_ABI=0 $< | as -o /tmp/original_object.o) ; ($(CC) -E -I../include -DWINDOWS_ABI=1 $< | as -o /tmp/original_object.obj) ; (cmp -s /tmp/translated_object.o /tmp/original_object.o && cmp -s /tmp/translated_object.obj /tmp/original_object.obj)
sm2/%.S :: ../x86/sm2/%.S               ; (cat $< | sed -E -f ./attrofy.sed >$@) && ($(CC) -E -I../include -DWINDOWS_ABI=0 $@ | as -o /tmp/translated_object.o) ; ($(CC) -E -I../include -DWINDOWS_ABI=1 $@ | as -o /tmp/translated_object.obj) ; ($(CC) -E -I../include -DWINDOWS_ABI=0 $< | as -o /tmp/original_object.o) ; ($(CC) -E -I../include -DWINDOWS_ABI=1 $< | as -o /tmp/original_object.obj) ; (cmp -s /tmp/translated_object.o /tmp/original_object.o && cmp -s /tmp/translated_object.obj /tmp/original_object.obj)

clean:; rm -f */*.o

clobber:; rm -f */*.o */*.S
