xref: /isa-l/tools/gen_nmake.mk (revision 9ab5a9e579c4fb4e2a3c92d73ccd6d97291d0e80)
1# Regenerate nmake file from makefiles or check its consistency
2
3test_nmake_file: tst.nmake
4	@diff -u Makefile.nmake tst.nmake || (echo Potential nmake consistency issue; $(RM) tst.nmake; false;)
5	@echo No nmake consistency issues
6	@$(RM) tst.nmake
7
8FORCE:
9Makefile.nmake tst.nmake: FORCE
10	@echo Regenerating $@
11	@echo '########################################################################' > $@
12	@cat LICENSE | sed -e 's/^/#/ ' >> $@
13	@echo '########################################################################' >> $@
14	@echo ''			>> $@
15	@echo '# This file can be auto-regenerated with $$make -f Makefile.unx Makefile.nmake' >> $@
16	@echo ''			>> $@
17	@printf 'objs =' >> $@
18	@$(foreach o, $(subst /,\\,$(objs:.o=.obj)), printf " %s\n\t%s" \\ $(o) >> $@; )
19	@echo ''			>> $@
20	@echo ''			>> $@
21	@echo 'INCLUDES   = $(INCLUDE)'	>> $@
22	@echo '# Modern asm feature level, consider upgrading nasm/yasm before decreasing feature_level'	>> $@
23	@echo 'FEAT_FLAGS = -DHAVE_AS_KNOWS_AVX512 -DAS_FEATURE_LEVEL=10'	>> $@
24	@echo 'CFLAGS_REL = -O2 -DNDEBUG /Z7 /Gy'		>> $@
25	@echo 'CFLAGS_DBG = -Od -DDEBUG /Z7'			>> $@
26	@echo 'LINKFLAGS  = -nologo -incremental:no -debug'	>> $@
27	@echo 'CFLAGS     = $$(CFLAGS_REL) -nologo -D_USE_MATH_DEFINES $$(FEAT_FLAGS) $$(INCLUDES) $$(D)'	>> $@
28	@echo 'AFLAGS     = -f win64 $$(FEAT_FLAGS) $$(INCLUDES) $$(D)'	>> $@
29	@echo 'CC         = cl'			>> $@
30	@echo '# or CC    = icl -Qstd=c99'	>> $@
31	@echo 'AS         = nasm'		>> $@
32	@echo ''			>> $@
33	@echo 'lib: bin static dll'	>> $@
34	@echo 'static: bin isa-l_static.lib isa-l.h'	>> $@
35	@echo 'dll: bin isa-l.dll isa-l.h'	>> $@
36	@echo ''			>> $@
37	@echo 'bin: ; -mkdir $$@'	>> $@
38	@echo ''			>> $@
39	@echo 'isa-l_static.lib: $$(objs)'	>> $@
40	@echo '	lib -out:$$@ @<<'	>> $@
41	@echo '$$?'			>> $@
42	@echo '<<'			>> $@
43	@echo ''			>> $@
44	@echo '!IF [rc] == 0'		>> $@
45	@echo 'isa-l.dll: isa-l.res'	>> $@
46	@echo '!ELSE'			>> $@
47	@echo '!MESSAGE Optionally install rc to set file version info' >> $@
48	@echo '!ENDIF'			>> $@
49	@echo ''			>> $@
50	@echo 'isa-l.dll: $$(objs)'	>> $@
51	@echo '	link -out:$$@ -dll -def:isa-l.def $$(LINKFLAGS) @<<'	>> $@
52	@echo '$$?'			>> $@
53	@echo '<<'			>> $@
54	@echo ''			>> $@
55	@echo 'isa-l.res: isa-l.h'	>> $@
56	@echo '	rc /fo $$@ isa-l.rc'	>> $@
57	@echo ''			>> $@
58	@$(foreach b, $(units), \
59		printf "{%s}.c.obj:\n\t\$$(CC) \$$(CFLAGS) /c -Fo\$$@ \$$?\n{%s}.asm.obj:\n\t\$$(AS) \$$(AFLAGS) -o \$$@ \$$?\n\n" $(b) $(b) >> $@; )
60	@echo ''			>> $@
61ifneq (,$(examples))
62	@echo "# Examples"	>> $@
63	@printf 'ex =' >> $@
64	@$(foreach ex, $(notdir $(examples)), printf " %s\n\t%s.exe" \\ $(ex) >> $@; )
65	@echo ''			>> $@
66	@echo ''			>> $@
67	@$(foreach d, $(subst /,\\, $(sort $(patsubst %/,%,$(filter examples/%,$(dir $(examples)))))), \
68		printf "{%s}.c.obj:\n\t\$$(CC) \$$(CFLAGS) /c -Fo\$$@ \$$?\n\n" $(d) >> $@; )
69	@echo 'ex: lib $$(ex)'		>> $@
70	@echo ''			>> $@
71	@echo '$$(ex): $$(@B).obj'	>> $@
72endif
73	@echo ''			>> $@
74	@echo '.obj.exe:'		>> $@
75	@echo '	link /out:$$@ $$(LINKFLAGS) isa-l.lib $$?'	>> $@
76	@echo ''			>> $@
77	@echo '# Check tests'		>> $@
78	@printf 'checks =' 		>> $@
79	@$(foreach check, $(notdir $(check_tests)), printf " %s\n\t%s.exe" \\ $(check) >> $@; )
80	@echo ''			>> $@
81	@echo ''			>> $@
82	@echo 'checks: lib $$(checks)'	>> $@
83	@echo '$$(checks): $$(@B).obj'	>> $@
84	@echo 'check: $$(checks)'	>> $@
85	@echo '	!$$?'			>> $@
86	@echo ''			>> $@
87	@echo '# Unit tests'		>> $@
88	@printf 'tests =' 		>> $@
89	@$(foreach test, $(notdir $(unit_tests)), printf " %s\n\t%s.exe" \\ $(test) >> $@; )
90	@echo ''			>> $@
91	@echo ''			>> $@
92	@echo 'tests: lib $$(tests)'	>> $@
93	@echo '$$(tests): $$(@B).obj'	>> $@
94	@echo ''			>> $@
95	@echo '# Performance tests'	>> $@
96	@printf 'perfs =' 		>> $@
97	@$(foreach perf, $(notdir $(perf_tests)), printf " %s\n\t%s.exe" \\ $(perf) >> $@; )
98	@echo ''			>> $@
99	@echo ''			>> $@
100	@echo 'perfs: lib $$(perfs)'	>> $@
101	@echo '$$(perfs): $$(@B).obj'	>> $@
102	@echo ''			>> $@
103	@printf 'progs ='		>> $@
104	@$(foreach prog, $(notdir $(bin_PROGRAMS)), printf " %s\n\t%s.exe" \\ $(prog) >> $@; )
105	@echo ''			>> $@
106	@echo ''			>> $@
107	@echo 'progs: lib $$(progs)'	>> $@
108	@$(foreach p, $(notdir $(bin_PROGRAMS)), \
109		printf "%s.exe: %s\n\tlink /out:\$$@ \$$(LINKFLAGS) isa-l.lib \$$?\n" $(p) $(subst /,\\,$(programs_$(p)_SOURCES:.c=.obj)) >> $@; )
110	@echo ''			>> $@
111	@echo 'isa-l.h:'		>> $@
112	@echo '	@echo /**>> $$@' >> $@
113	@echo '	@echo *  @file isa-l.h>> $$@' >> $@
114	@echo '	@echo *  @brief Include for ISA-L library>> $$@' >> $@
115	@echo '	@echo */>> $$@' >> $@
116	@echo '	@echo.>> $$@' >> $@
117	@echo '	@echo #ifndef _ISAL_H_>> $$@' >> $@
118	@echo '	@echo #define _ISAL_H_>> $$@' >> $@
119	@echo '	@echo.>> $$@' >> $@
120	@echo '#define.ISAL_MAJOR_VERSION.${version}' |  ${AWK} -F . '{print "\t@echo", $$1, $$2, $$3, ">> $$@"}' >> $@
121	@echo '#define.ISAL_MINOR_VERSION.${version}' |  ${AWK} -F . '{print "\t@echo", $$1, $$2, $$4, ">> $$@"}' >> $@
122	@echo '#define.ISAL_PATCH_VERSION.${version}' |  ${AWK} -F . '{print "\t@echo", $$1, $$2, $$5, ">> $$@"}' >> $@
123	@echo '	@echo #define ISAL_MAKE_VERSION(maj, min, patch)  ((maj) * 0x10000 + (min) * 0x100 + (patch))>> $$@' >> $@
124	@echo '	@echo #define ISAL_VERSION ISAL_MAKE_VERSION(ISAL_MAJOR_VERSION, ISAL_MINOR_VERSION, ISAL_PATCH_VERSION)>> $$@' >> $@
125	@echo '	@echo.>> $$@' >> $@
126	@echo '	@echo #ifndef RC_INVOKED>> $$@' >> $@
127	@for unit in $(sort $(extern_hdrs)); do echo "	@echo #include ^<isa-l/$$unit^>>> \$$@" | sed -e 's;include/;;' >> $@; done
128	@echo '	@echo #endif // RC_INVOKED>> $$@' >> $@
129	@echo '	@echo #endif //_ISAL_H_>> $$@' >> $@
130	@echo ''			>> $@
131	@echo 'clean:'					>> $@
132	@echo '	-if exist *.obj del *.obj'		>> $@
133	@echo '	-if exist bin\*.obj del bin\*.obj'	>> $@
134	@echo '	-if exist isa-l_static.lib del isa-l_static.lib'	>> $@
135	@echo '	-if exist *.exe del *.exe'		>> $@
136	@echo '	-if exist *.pdb del *.pdb'		>> $@
137	@echo '	-if exist isa-l.lib del isa-l.lib'	>> $@
138	@echo '	-if exist isa-l.dll del isa-l.dll'	>> $@
139	@echo '	-if exist isa-l.exp del isa-l.exp'	>> $@
140	@echo '	-if exist isa-l.res del isa-l.res'	>> $@
141	@echo ''		>> $@
142	$(if $(findstring igzip,$(units)),@echo 'zlib.lib:'	>> $@ )
143	@cat $(foreach unit,$(units), $(unit)/Makefile.am)  | sed  \
144		-e '/: /!d' \
145		-e 's/\([^ :]*\)[ ]*/\1.exe /g' \
146		-e :c -e 's/:\(.*\).exe/:\1/;tc' \
147		-e 's/\.o[ $$]/.obj /g' \
148		-e 's/\.o\.exe[ ]:/.obj:/g' \
149		-e '/CFLAGS_.*+=/d' \
150		-e '/:.*\%.*:/d' \
151		-e 's/ :/:/' \
152		-e 's/LDLIBS *+=//' \
153		-e 's/-lz/zlib.lib/' \
154		-e 's/ $$//' \
155			>> $@
156