From e3ad0884bf500b525bd8fe76251aa0a2f350c524 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=EA=B9=80=EC=98=81=EC=A7=84?= <youngjin033@ajou.ac.kr>
Date: Fri, 7 Aug 2020 16:50:42 +0900
Subject: [PATCH] =?UTF-8?q?=ED=8C=80=ED=94=84=EB=A1=9C=EC=A0=9D=ED=8A=B8?=
 =?UTF-8?q?=20Makefile=EC=83=9D=EC=84=B1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Makefile          |  61 ++++++++++++++++++++++++++++++++++++++++++++++
 README.md         |   9 +++++++
 fx_s4716_double.h |   2 +-
 fx_s4716_double.o | Bin 2727 -> 8140 bytes
 test.o            | Bin 3593 -> 7284 bytes
 5 files changed, 71 insertions(+), 1 deletion(-)
 create mode 100644 Makefile

diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..62e8c2a
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,61 @@
+SRCS := test.c fx_s4716_double.c
+OBJS := $(SRCS:.c=.o)
+CC := gcc
+CFLAGS = -c -Wall -g
+
+mytest : $(OBJS)
+	$(CC) -o $@ $^ -lm
+
+#test1.o : tset1.c a.h c.h
+
+# dummy target
+clean : 
+	-rm $(OBJS)
+	rm mytest
+
+dep :
+	gccmakedep $(SRCS)
+# DO NOT DELETE
+test.o: test.c /usr/include/stdc-predef.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/arm-linux-gnueabihf/sys/cdefs.h \
+ /usr/include/arm-linux-gnueabihf/bits/wordsize.h \
+ /usr/include/arm-linux-gnueabihf/gnu/stubs.h \
+ /usr/include/arm-linux-gnueabihf/gnu/stubs-hard.h \
+ /usr/lib/gcc/arm-linux-gnueabihf/6/include/stddef.h \
+ /usr/include/arm-linux-gnueabihf/bits/types.h \
+ /usr/include/arm-linux-gnueabihf/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/arm-linux-gnueabihf/6/include/stdarg.h \
+ /usr/include/arm-linux-gnueabihf/bits/stdio_lim.h \
+ /usr/include/arm-linux-gnueabihf/bits/sys_errlist.h fx_s4716_double.h \
+ /usr/include/math.h /usr/include/arm-linux-gnueabihf/bits/math-vector.h \
+ /usr/include/arm-linux-gnueabihf/bits/libm-simd-decl-stubs.h \
+ /usr/include/arm-linux-gnueabihf/bits/huge_val.h \
+ /usr/include/arm-linux-gnueabihf/bits/huge_valf.h \
+ /usr/include/arm-linux-gnueabihf/bits/huge_vall.h \
+ /usr/include/arm-linux-gnueabihf/bits/inf.h \
+ /usr/include/arm-linux-gnueabihf/bits/nan.h \
+ /usr/include/arm-linux-gnueabihf/bits/mathdef.h \
+ /usr/include/arm-linux-gnueabihf/bits/mathcalls.h
+fx_s4716_double.o: fx_s4716_double.c /usr/include/stdc-predef.h \
+ /usr/include/stdio.h /usr/include/features.h \
+ /usr/include/arm-linux-gnueabihf/sys/cdefs.h \
+ /usr/include/arm-linux-gnueabihf/bits/wordsize.h \
+ /usr/include/arm-linux-gnueabihf/gnu/stubs.h \
+ /usr/include/arm-linux-gnueabihf/gnu/stubs-hard.h \
+ /usr/lib/gcc/arm-linux-gnueabihf/6/include/stddef.h \
+ /usr/include/arm-linux-gnueabihf/bits/types.h \
+ /usr/include/arm-linux-gnueabihf/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/arm-linux-gnueabihf/6/include/stdarg.h \
+ /usr/include/arm-linux-gnueabihf/bits/stdio_lim.h \
+ /usr/include/arm-linux-gnueabihf/bits/sys_errlist.h fx_s4716_double.h \
+ /usr/include/math.h /usr/include/arm-linux-gnueabihf/bits/math-vector.h \
+ /usr/include/arm-linux-gnueabihf/bits/libm-simd-decl-stubs.h \
+ /usr/include/arm-linux-gnueabihf/bits/huge_val.h \
+ /usr/include/arm-linux-gnueabihf/bits/huge_valf.h \
+ /usr/include/arm-linux-gnueabihf/bits/huge_vall.h \
+ /usr/include/arm-linux-gnueabihf/bits/inf.h \
+ /usr/include/arm-linux-gnueabihf/bits/nan.h \
+ /usr/include/arm-linux-gnueabihf/bits/mathdef.h \
+ /usr/include/arm-linux-gnueabihf/bits/mathcalls.h
diff --git a/README.md b/README.md
index 54eda61..598f9cd 100644
--- a/README.md
+++ b/README.md
@@ -23,3 +23,12 @@
 * fx_to_double(a) - 고정소수점에서 double형으로 변환
 * double_to_fx(a) - double형에서 고정소수점으로 변환
 * fx_sine(a) - sin(a)값을 고정소수점으로 변환
+
+
+
+### Make Build
+
+- test.c, fx_s4716_double.c 와  fx_s4716_double.h를 make 명령어 하나로 자동으로 빌드하게 해줌
+- gcc 컴파일러를 사용하였으며 mytest 실행파일과 각 c파일의 목적파일을 자동으로 생성
+- make clean을 통해 실행파일과 목적파일을 삭제할 수 있음
+- make dep를 통해 각 파일의 헤더파일을 미리 연결해줌
\ No newline at end of file
diff --git a/fx_s4716_double.h b/fx_s4716_double.h
index 484b705..2eafb19 100644
--- a/fx_s4716_double.h
+++ b/fx_s4716_double.h
@@ -1,10 +1,10 @@
+#define _USE_MATH_DEFINES
 #include <math.h>
 
 typedef long long fx_s4716;
 
 #define F_POWER_2_16 65536.0
 #define F_POWER_2_8 256.0
-#define M_PI 3.1415926535
 
 #define FX_TO_DOUBLE(a) (a)/(F_POWER_2_16)
 #define DOUBLE_TO_FX(a) ((a)*(F_POWER_2_16))
diff --git a/fx_s4716_double.o b/fx_s4716_double.o
index 02dde8e19d140cb387c865b89d727b91ab9157db..9bbda51826fc5f8b7a9b59876d1610e60c788af9 100644
GIT binary patch
literal 8140
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
GVCn$rY^%2b

literal 2727
zcmeZaWMcpUGY$p@IS_+^g;B30wW0*fh7dcL7#LU>85n#ZN*UA`7#I{73=;HG5=#;x
zN^p`63<d}El8TFQDu7BffYcSC8u)>Mfng6bQ~{K7U~q8IH-U1XlnMg_!x|PS2TD0G
z7&zz~nnHOHs)mt);Q|W-!wGf>pPPY!0i-Up^J()Ni*8qrPS*$Bt~{NtPwwYFxXXHi
zfq~)P&%3c7?z(=s8>7N<oCRbN!wZn+2`3L@>bmO+({&O>mly*BvaaCfH!jGQb-N05
zy58t^73p-n)9w49JN8Mp>y7TvJB$YfFL(N0=#0H`KlcKPfjV#ln~%6e$3mRqfzwRa
z2i>7hv|VpVhu-OQz0etoVV(`#JZ#=Vb{|r}+|RuM3!{4{p)6E?`%-G`Pprnqp&Ki4
zm-PYz0|PXU^07$YKuFi1OJhX5j0!l4@3KC?OaK!J>ShILz8j;$aTjh5I3b}1&0>P)
zz;q)gzb#0*CQO)+R-sUmuaJ^onv|1jrJ$;3XqJ=4#Q@=hWYQ`SqG=Thi76>4{NmCi
z1r&kY(i~KQl*}?Dfr3mVPG(+NYEf~j0*YW-g+g&*Q3;Z=v<iiS{Bl%*;>^5MBoR<{
z0^tu161pxSzZE$hn@^m~HHg3B01{<jD1g!o4(`s*Rtg%vnR)Kvdih1^3hvI%3Qnb&
zIVrkEnhKVBMtTMe3?dLs42)Gl42(4#jM6+TEFFvt3^EK53@RqfKx!QMI9i#Ucv*{%
z^02T#<UrZLih+Rvo4f)8149f01497=14AgXewSuuCZEHOAX7kgG%zqQ9A#i&@Ih9?
z<N=ZfyI}zX1A`zV14B59d@x-800RR<1|E4(n%vLGz#xyTKN_qZY(4`c1H(N$@(PR$
z41XCJ80?VsS0VH}FfuS$GchoDAj>nkfE9rJm%zxt(9DEAjKmor;m^jP1!w6qFfd4g
zd7#n&6gzAT31B`00~<psTy`T|Y#UsRkr8Gd8zamV1GtzqoaG8<MZj6Ha2@S%u}N^&
z95`z|oV5k6<1k$89GrC-F8c^B_7=|i1eX<JVqlO4`$d8Y=6Y>7%YX^y4?nnA6cZ%%
zi7+I<#fssq3b>9LObiUNV3SwEW!J%FLFtnZEDOpm5Edw$A*>b#1_lUg37mBV&Uyl8
zfoge(Iu%Bk4i`8p1<uk-%gh1A9Vn6f`_I6T&X`saUu<G-XciACe)N(-QVfz{l7WGd
zL4kpZ5z0ZM)S)>JtcD>zts*`#C50h}0jdiuQe2wEa1cc#w={==ml0V_N@f`Y$b|@V
z3NjfOcEi<xtOd0PZox%Bc7e*PpC}>)`Q;4eOvomK3aom#2y*KP<RxattxOEyHWA1M
z2u5xhF)=VOFoP6Aq~IiSs|eJ{!KwzSMFc9jm>EHBBDfK71}M%!99FPh${;2N_J)dp
z8ga~wptcaG{R0(bU|@(ZD9X$$NrMU~FfcL1g8~Q22etT^7~(;JgDO&-nFkjD#WJ{b
x)C0R)rK+lmK`%8UKCLJ*Hx(R_CHc?<!T_b?OY-B>D!_7?d1dhhnG9I<0sw>NE6@M{

diff --git a/test.o b/test.o
index 46c0d5921a88b47fc0c8d4bd0d03e6a9961945f5..62f0638c6d0fafdb2fdc407cd866f44104e289de 100644
GIT binary patch
literal 7284
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
Rm|*N8!N9N&%z_XwbpVd1dw>7{

literal 3593
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

-- 
GitLab