1- .PHONY : clean all desktop osx linux pi windows current install run preosx prelinux prepi prewindows
1+ .PHONY : clean all desktop posix osx linux pi windows win32 win64 local install install-only run docker xclean
22
33# needs to be defined before include
4- default :current
4+ default :local
55
66include config.mk
77
8- DEST: =~/Works/System/arch
8+ DEST: =~/Works/System/bin/ arch
99
10- ALLNIMOPTS =-d:release -d:VERSION=$(VERSION ) --opt:size $(NIMOPTS )
10+ ifeq ($(DEBUG ) ,true)
11+ BASENIMOPTS=-d:VERSION =$(VERSION ) --opt:size $(NIMOPTS )
12+ else
13+ ifeq ($(DEBUG ) ,full)
14+ BASENIMOPTS=-d:VERSION =$(VERSION ) --debuginfo --linedir:on $(NIMOPTS )
15+ else
16+ BASENIMOPTS =-d:release -d:VERSION=$(VERSION ) --opt:size $(NIMOPTS )
17+ endif
18+ endif
1119
1220ifeq ($(EXECNAME ) ,)
1321EXECNAME: =$(NAME )
@@ -25,8 +33,15 @@ ifeq ($(WINAPP),)
2533WINAPP: =console
2634endif
2735
36+ ifeq ($(ALLTARGETS ) ,)
37+ ALLTARGETS: =desktop pi
38+ endif
39+
2840ifneq ($(NIMBLE ) ,)
29- NIMBLE: =nimble -y install $(NIMBLE ) ;
41+ NIMBLE: =nimble refresh ; nimble -y install $(NIMBLE ) ;
42+ DOCKERNAME: =teras/nimcross:${NAME}
43+ else
44+ DOCKERNAME: =teras/nimcross
3045endif
3146
3247ifneq ($(NIMVER ) ,)
@@ -35,68 +50,97 @@ endif
3550
3651DOCOMPRESS: =$(shell echo $(COMPRESS ) | tr A-Z a-z | cut -c1-1)
3752
38- BUILDDEP: =$(wildcard * .nim * .c Makefile config.mk)
53+ BUILDDEP: =$(wildcard * .nim * .c * .m Makefile config.mk)
3954
40- current :target/${EXECNAME}
4155
42- all :desktop pi
56+ initlocal :
57+ ${NIMVER} ${NIMBLE}
58+
59+ local :target/${EXECNAME}
60+
61+ all :$(ALLTARGETS )
4362
4463desktop :osx linux windows
4564
46- pi :target/${EXECNAME}.arm64.linux
65+ posix :osx linux pi
66+
67+ pi :target/${EXECNAME}.aarch64.linux
4768
4869osx :target/${EXECNAME}.osx
4970
5071linux :target/${EXECNAME}.linux
5172
52- windows :target/${EXECNAME}.64.exe
73+ windows :win32 win64
5374
54- clean :
55- rm -rf target nimcache ${NAME} ${NAME} .exe
75+ win32 :target/${EXECNAME}.32.exe
76+
77+ win64 :target/${EXECNAME}.64.exe
78+
79+ clean :xclean
80+ rm -rf target docker.tmp nimcache ${NAME} ${NAME} .exe
81+
82+ docker :
83+ @if [ " ${NIMBLE} " != " " ] ; then \
84+ rm -rf docker.tmp && \
85+ mkdir docker.tmp && \
86+ echo > docker.tmp/Dockerfile " FROM teras/nimcross" && \
87+ echo >> docker.tmp/Dockerfile " RUN ${NIMBLE} " && \
88+ cd docker.tmp ; docker build -t ${DOCKERNAME} . && \
89+ rm -rf docker.tmp ; \
90+ fi
5691
5792target/${EXECNAME} :${BUILDDEP}
58- ${NIMVER} nim ${COMPILER } ${ALLNIMOPTS } ${NAME}
93+ nim ${COMPILER} ${BASENIMOPTS } ${OSXNIMOPTS } ${NAME}
5994 mkdir -p target
6095 mv ${NAME} target/${EXECNAME}
61- if [ " $( DOCOMPRESS) " = " y" ] ; then upx --best target/${EXECNAME} ; fi
96+ if [ " $( DOCOMPRESS) " = " t" ] ; then upx --best target/${EXECNAME} ; fi
97+ cp target/${EXECNAME} target/${EXECNAME} .osx
6298
63- target/${EXECNAME}.osx :${BUILDDEP} preosx
99+ target/${EXECNAME}.osx :${BUILDDEP}
64100 mkdir -p target
65- docker run --rm -v ` pwd` :/usr/src/app -w /usr/src/app teras/nimcross bash -c " ${NIMVER} ${NIMBLE} nim ${COMPILER } ${ALLNIMOPTS } --os:macosx --passC:'-mmacosx-version-min=10.7 -gfull' --passL:'-mmacosx-version-min=10.7 -dead_strip' ${NAME} && x86_64-apple-darwin19-strip ${NAME} "
101+ docker run --rm -v ` pwd` :/usr/src/app -w /usr/src/app ${DOCKERNAME} bash -c " ${NIMVER} nim ${COMPILER} ${BASENIMOPTS } ${OSXNIMOPTS } --os:macosx --passC:'-mmacosx-version-min=10.7 -gfull' --passL:'-mmacosx-version-min=10.7 -dead_strip' ${NAME} && x86_64-apple-darwin19-strip ${NAME} "
66102 mv ${NAME} target/${EXECNAME} .osx
67- if [ " $( DOCOMPRESS) " = " y " ] ; then upx --best target/${EXECNAME} .osx ; fi
103+ if [ " $( DOCOMPRESS) " = " t " ] ; then upx --best target/${EXECNAME} .osx ; fi
68104
69- target/${EXECNAME}.linux :${BUILDDEP} prelinux
105+ target/${EXECNAME}.linux :${BUILDDEP}
70106 mkdir -p target
71- docker run --rm -v ` pwd` :/usr/src/app -w /usr/src/app teras/nimcross bash -c " ${NIMVER} ${NIMBLE} nim ${COMPILER } ${ALLNIMOPTS } ${NAME} && strip ${NAME} "
107+ docker run --rm -v ` pwd` :/usr/src/app -w /usr/src/app ${DOCKERNAME} bash -c " ${NIMVER} nim ${COMPILER} ${BASENIMOPTS } ${LINUXNIMOPTS } ${NAME} && strip ${NAME} "
72108 mv ${NAME} target/${EXECNAME} .linux
73- if [ " $( DOCOMPRESS) " = " y " ] ; then upx --best target/${EXECNAME} .linux ; fi
109+ if [ " $( DOCOMPRESS) " = " t " ] ; then upx --best target/${EXECNAME} .linux ; fi
74110
75- target/${EXECNAME}.arm64 .linux :${BUILDDEP} prepi
111+ target/${EXECNAME}.aarch64 .linux :${BUILDDEP}
76112 mkdir -p target
77- docker run --rm -v ` pwd` :/usr/src/app -w /usr/src/app teras/nimcross bash -c " ${NIMVER} ${NIMBLE} nim ${COMPILER } ${ALLNIMOPTS } --cpu:arm --os:linux ${NAME} && arm-linux-gnueabi-strip ${NAME} "
113+ docker run --rm -v ` pwd` :/usr/src/app -w /usr/src/app ${DOCKERNAME} bash -c " ${NIMVER} nim ${COMPILER} ${BASENIMOPTS } ${PINIMOPTS } --cpu:arm --os:linux ${NAME} && arm-linux-gnueabi-strip ${NAME} "
78114 mv ${NAME} target/${EXECNAME} .arm.linux
79- if [ " $( DOCOMPRESS) " = " y " ] ; then upx --best target/${EXECNAME} .arm.linux ; fi
80- docker run --rm -v ` pwd` :/usr/src/app -w /usr/src/app teras/nimcross bash -c " ${NIMVER} ${NIMBLE} nim ${COMPILER } ${ALLNIMOPTS } --cpu:arm64 --os:linux ${NAME} && aarch64-linux-gnu-strip ${NAME} "
81- mv ${NAME} target/${EXECNAME} .arm64 .linux
82- if [ " $( DOCOMPRESS) " = " y " ] ; then upx --best target/${EXECNAME} .arm64 .linux ; fi
115+ # if [ "$(DOCOMPRESS)" = "t " ] ; then upx --best target/${EXECNAME}.arm.linux ; fi
116+ docker run --rm -v ` pwd` :/usr/src/app -w /usr/src/app ${DOCKERNAME} bash -c " ${NIMVER} nim ${COMPILER} ${BASENIMOPTS } ${PINIMOPTS } --cpu:arm64 --os:linux ${NAME} && aarch64-linux-gnu-strip ${NAME} "
117+ mv ${NAME} target/${EXECNAME} .aarch64 .linux
118+ if [ " $( DOCOMPRESS) " = " t " ] ; then upx --best target/${EXECNAME} .aarch64 .linux ; fi
83119
84- target/${EXECNAME}.64 .exe :${BUILDDEP} prewindows
120+ target/${EXECNAME}.32 .exe :${BUILDDEP}
85121 mkdir -p target
86- docker run --rm -v ` pwd` :/usr/src/app -w /usr/src/app teras/nimcross bash -c " ${NIMVER} ${NIMBLE} nim ${COMPILER } ${ALLNIMOPTS } -d:mingw --cpu:i386 --app:${WINAPP} ${NAME} && i686-w64-mingw32-strip ${NAME} .exe"
122+ docker run --rm -v ` pwd` :/usr/src/app -w /usr/src/app ${DOCKERNAME} bash -c " ${NIMVER} nim ${COMPILER} ${BASENIMOPTS } ${WINDOWSNIMOPTS } -d:mingw --cpu:i386 --app:${WINAPP} ${NAME} && i686-w64-mingw32-strip ${NAME} .exe"
87123 mv ${NAME} .exe target/${EXECNAME} .32.exe
88- if [ " $( DOCOMPRESS) " = " y" ] ; then upx --best target/${EXECNAME} .32.exe ; fi
89- docker run --rm -v ` pwd` :/usr/src/app -w /usr/src/app teras/nimcross bash -c " ${NIMVER} ${NIMBLE} nim ${COMPILER} ${ALLNIMOPTS} -d:mingw --cpu:amd64 --app:${WINAPP} ${NAME} && x86_64-w64-mingw32-strip ${NAME} .exe"
124+ if [ " $( DOCOMPRESS) " = " t" ] ; then upx --best target/${EXECNAME} .32.exe ; fi
125+
126+ target/${EXECNAME}.64.exe :${BUILDDEP}
127+ mkdir -p target
128+ docker run --rm -v ` pwd` :/usr/src/app -w /usr/src/app ${DOCKERNAME} bash -c " ${NIMVER} nim ${COMPILER} ${BASENIMOPTS} ${WINDOWSNIMOPTS} -d:mingw --cpu:amd64 --app:${WINAPP} ${NAME} && x86_64-w64-mingw32-strip ${NAME} .exe"
90129 mv ${NAME} .exe target/${EXECNAME} .64.exe
91- if [ " $( DOCOMPRESS) " = " y" ] ; then upx --best target/${EXECNAME} .64.exe ; fi
130+ if [ " $( DOCOMPRESS) " = " t" ] ; then upx --best target/${EXECNAME} .64.exe ; fi
131+
132+
133+ install : | all install-only
92134
93- install :all
94- mkdir -p ${DEST} /darwin-x86_64/ && cp target/${EXECNAME} .osx ${DEST} /darwin-x86_64/${EXECNAME}
95- mkdir -p ${DEST} /linux-x86_64/ && cp target/${EXECNAME} .linux ${DEST} /linux-x86_64/${EXECNAME}
96- mkdir -p ${DEST} /linux-arm && cp target/${EXECNAME} .arm.linux ${DEST} /linux-arm/${EXECNAME}
97- mkdir -p ${DEST} /linux-arm64 && cp target/${EXECNAME} .arm64.linux ${DEST} /linux-arm64/${EXECNAME}
98- mkdir -p ${DEST} /windows-x86_64 && cp target/${EXECNAME} .64.exe ${DEST} /windows-x86_64/${EXECNAME} .exe
99- mkdir -p ${DEST} /windows-i686 && cp target/${EXECNAME} .32.exe ${DEST} /windows-i686/${EXECNAME} .exe
135+ install-only :
136+ set -e ; mkdir -p ${DEST} /all
137+ set -e ; rm -rf ${DEST} /all/${EXECNAME} .* ; rm -f ${DEST} /darwin-x86_64/${EXECNAME} ${DEST} /linux-x86_64/${EXECNAME} ${DEST} /linux-arm/${EXECNAME} ${DEST} /linux-aarch64/${EXECNAME} ${DEST} /windows-x86_64/${EXECNAME} .exe ${DEST} /windows-i686/${EXECNAME} .exe
138+ set -e ; if [ -f target/${EXECNAME} .osx ] ; then mkdir -p ${DEST} /darwin-x86_64 && cp target/${EXECNAME} .osx ${DEST} /all/ && ln -s ../all/${EXECNAME} .osx ${DEST} /darwin-x86_64/${EXECNAME} ; fi
139+ set -e ; if [ -f target/${EXECNAME} .linux ] ; then mkdir -p ${DEST} /linux-x86_64 && cp target/${EXECNAME} .linux ${DEST} /all/ && ln -s ../all/${EXECNAME} .linux ${DEST} /linux-x86_64/${EXECNAME} ; fi
140+ set -e ; if [ -f target/${EXECNAME} .arm.linux ] ; then mkdir -p ${DEST} /linux-arm && cp target/${EXECNAME} .arm.linux ${DEST} /all/ && ln -s ../all/${EXECNAME} .arm.linux ${DEST} /linux-arm/${EXECNAME} ; fi
141+ set -e ; if [ -f target/${EXECNAME} .aarch64.linux ] ; then mkdir -p ${DEST} /linux-aarch64 && cp target/${EXECNAME} .aarch64.linux ${DEST} /all/ && ln -s ../all/${EXECNAME} .aarch64.linux ${DEST} /linux-aarch64/${EXECNAME} ; fi
142+ set -e ; if [ -f target/${EXECNAME} .64.exe ] ; then mkdir -p ${DEST} /windows-x86_64 && cp target/${EXECNAME} .64.exe ${DEST} /all/ && ln -s ../all/${EXECNAME} .64.exe ${DEST} /windows-x86_64/${EXECNAME} .exe ; fi
143+ set -e ; if [ -f target/${EXECNAME} .32.exe ] ; then mkdir -p ${DEST} /windows-i686 && cp target/${EXECNAME} .32.exe ${DEST} /all/ && ln -s ../all/${EXECNAME} .32.exe ${DEST} /windows-i686/${EXECNAME} .exe ; fi
100144
101- run :current
145+ run :local
102146 ./target/${EXECNAME} ${RUNARGS}
0 commit comments