!IFNDEF MACHINE !IF "$(PROCESSOR_ARCHITECTURE)"=="AMD64" MACHINE=x64 !ELSE MACHINE=x86 !ENDIF !ENDIF !IFNDEF DEBUG DEBUG=no !ENDIF !IFNDEF CC CC=cl.exe !ENDIF !IFNDEF AR AR=lib.exe !ENDIF !IFNDEF LINK LINK=link.exe !ENDIF !IFNDEF PGO PGO=no !ENDIF !IFNDEF PGI PGI=no !ENDIF INC = /Iinclude !IF "$(DEBUG)"=="yes" CFLAGS = /nologo /MDd /LDd /Od /Zi /D_DEBUG /RTC1 /W3 /GS /Gm ARFLAGS = /nologo LDFLAGS = /nologo /debug /nodefaultlib:msvcrt !ELSE CFLAGS = /nologo /MD /O2 /Zi /DNDEBUG /W3 /Gm- /GS /Gy /Oi /GL /MP ARFLAGS = /nologo /LTCG LDFLAGS = /nologo /LTCG /DYNAMICBASE /incremental:no /debug /opt:ref,icf !ENDIF !IF "$(PGI)"=="yes" LDFLAGS = $(LDFLAGS) /ltcg:pgi !ENDIF !IF "$(PGO)"=="yes" LDFLAGS = $(LDFLAGS) /ltcg:pgo !ENDIF LIB_OBJS = simdbitpacking.obj simdintegratedbitpacking.obj simdcomputil.obj \ simdpackedsearch.obj simdpackedselect.obj simdfor.obj all: lib dll dynunit unit_chars example benchmark # need some good use case scenario to train the instrumented build @if "$(PGI)"=="yes" echo Running PGO training @if "$(PGI)"=="yes" benchmark.exe >nul 2>&1 @if "$(PGI)"=="yes" example.exe >nul 2>&1 $(LIB_OBJS): $(CC) $(INC) $(CFLAGS) /c src/simdbitpacking.c src/simdintegratedbitpacking.c src/simdcomputil.c \ src/simdpackedsearch.c src/simdpackedselect.c src/simdfor.c lib: $(LIB_OBJS) $(AR) $(ARFLAGS) /OUT:simdcomp_a.lib $(LIB_OBJS) dll: $(LIB_OBJS) $(LINK) /DLL $(LDFLAGS) /OUT:simdcomp.dll /IMPLIB:simdcomp.lib /DEF:simdcomp.def $(LIB_OBJS) unit: lib $(CC) $(INC) $(CFLAGS) /c src/unit.c $(LINK) $(LDFLAGS) /OUT:unit.exe unit.obj simdcomp_a.lib dynunit: dll $(CC) $(INC) $(CFLAGS) /c src/unit.c $(LINK) $(LDFLAGS) /OUT:unit.exe unit.obj simdcomp.lib unit_chars: lib $(CC) $(INC) $(CFLAGS) /c src/unit_chars.c $(LINK) $(LDFLAGS) /OUT:unit_chars.exe unit_chars.obj simdcomp.lib example: lib $(CC) $(INC) $(CFLAGS) /c example.c $(LINK) $(LDFLAGS) /OUT:example.exe example.obj simdcomp.lib benchmark: lib $(CC) $(INC) $(CFLAGS) /c src/benchmark.c $(LINK) $(LDFLAGS) /OUT:benchmark.exe benchmark.obj simdcomp.lib clean: del /Q *.obj del /Q *.lib del /Q *.exe del /Q *.dll del /Q *.pgc del /Q *.pgd del /Q *.pdb