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