build: Support Visual Studio builds using NMake
This adds a set of NMake Makefiles that can be used to build HarfBuzz, from
the standard basic build building the minimal HarfBuzz DLL (consisting
of OpenType, fallback and Uniscribe support only), to a full fledged build
consisting of GLib and FreeType support, as well as building the utilities,
the test programs in src/ and test/api, and HarfBuzz-ICU and
HarfBuzz-GObject, and up to building the introspection files. This means a
flexible build mechanism is supported here, so anything that is supported
for a Windows build (code-wise), should all be supported by this build
system.
As in an earlier commit, the source listings are shared with the autotools
builds with the various Makefile.sources in src/, src/hb-ucdn and util/, and
this set of NMake Makefiles will transform these lists into the form they
want.
In the current form, all the test programs in test/api pass, and this has
been checked successfully with 'make -j8 distcheck'.
2015-11-03 12:00:42 +01:00
|
|
|
# NMake Makefile portion for compilation rules
|
|
|
|
# Items in here should not need to be edited unless
|
|
|
|
# one is maintaining the NMake build files. The format
|
|
|
|
# of NMake Makefiles here are different from the GNU
|
|
|
|
# Makefiles. Please see the comments about these formats.
|
|
|
|
|
|
|
|
# Inference rules for compiling the .obj files.
|
|
|
|
# Used for libs and programs with more than a single source file.
|
|
|
|
# Format is as follows
|
|
|
|
# (all dirs must have a trailing '\'):
|
|
|
|
#
|
|
|
|
# {$(srcdir)}.$(srcext){$(destdir)}.obj::
|
|
|
|
# $(CC)|$(CXX) $(cflags) /Fo$(destdir) /c @<<
|
|
|
|
# $<
|
|
|
|
# <<
|
|
|
|
{..\src\}.cc{$(CFG)\$(PLAT)\harfbuzz\}.obj::
|
|
|
|
$(CXX) $(CFLAGS) $(HB_DEFINES) $(HB_LIB_CFLAGS) /Fo$(CFG)\$(PLAT)\harfbuzz\ /c @<<
|
|
|
|
$<
|
|
|
|
<<
|
|
|
|
|
|
|
|
{..\src\hb-ucdn\}.c{$(CFG)\$(PLAT)\harfbuzz\}.obj::
|
|
|
|
$(CC) $(CFLAGS) /Fo$(CFG)\$(PLAT)\harfbuzz\ /c @<<
|
|
|
|
$<
|
|
|
|
<<
|
|
|
|
|
|
|
|
{..\util\}.cc{$(CFG)\$(PLAT)\util\}.obj::
|
|
|
|
$(CXX) $(CFLAGS) $(HB_DEFINES) $(HB_CFLAGS) /Fo$(CFG)\$(PLAT)\util\ /c @<<
|
|
|
|
$<
|
|
|
|
<<
|
|
|
|
|
|
|
|
# Inference rules for building the test programs
|
|
|
|
# Used for programs with a single source file.
|
|
|
|
# Format is as follows
|
|
|
|
# (all dirs must have a trailing '\'):
|
|
|
|
#
|
|
|
|
# {$(srcdir)}.$(srcext){$(destdir)}.exe::
|
|
|
|
# $(CC)|$(CXX) $(cflags) $< /Fo$*.obj /Fe$@ [/link $(linker_flags) $(dep_libs)]
|
|
|
|
{..\src\}.cc{$(CFG)\$(PLAT)\}.exe:
|
|
|
|
$(CXX) $(CFLAGS) $(HB_DEFINES) $(HB_CFLAGS) $< /Fo$*.obj /Fe$@ /link $(LDFLAGS) $(CFG)\$(PLAT)\harfbuzz.lib $(HB_TESTS_DEP_LIBS)
|
|
|
|
|
|
|
|
{..\test\api\}.c{$(CFG)\$(PLAT)\}.exe:
|
|
|
|
$(CXX) $(CFLAGS) $(HB_DEFINES) $(HB_CFLAGS) /DSRCDIR="\"../../../test/api\"" $< /Fo$*.obj /Fe$@ /link $(LDFLAGS) $(CFG)\$(PLAT)\harfbuzz.lib $(HB_TESTS_DEP_LIBS)
|
|
|
|
|
|
|
|
# Rules for building .lib files
|
|
|
|
$(CFG)\$(PLAT)\harfbuzz.lib: $(HARFBUZZ_DLL_FILENAME).dll
|
|
|
|
$(CFG)\$(PLAT)\harfbuzz-gobject.lib: $(HARFBUZZ_GOBJECT_DLL_FILENAME).dll
|
|
|
|
|
|
|
|
# Rules for linking DLLs
|
|
|
|
# Format is as follows (the mt command is needed for MSVC 2005/2008 builds):
|
|
|
|
# $(dll_name_with_path): $(dependent_libs_files_objects_and_items)
|
|
|
|
# link /DLL [$(linker_flags)] [$(dependent_libs)] [/def:$(def_file_if_used)] [/implib:$(lib_name_if_needed)] -out:$@ @<<
|
|
|
|
# $(dependent_objects)
|
|
|
|
# <<
|
|
|
|
# @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;2
|
2017-06-21 16:19:57 +02:00
|
|
|
$(HARFBUZZ_DLL_FILENAME).dll: config.h $(HB_RAGEL_GENERATED_ACTUAL_SOURCES) $(harfbuzz_dll_OBJS) $(CFG)\$(PLAT)\harfbuzz
|
build: Support Visual Studio builds using NMake
This adds a set of NMake Makefiles that can be used to build HarfBuzz, from
the standard basic build building the minimal HarfBuzz DLL (consisting
of OpenType, fallback and Uniscribe support only), to a full fledged build
consisting of GLib and FreeType support, as well as building the utilities,
the test programs in src/ and test/api, and HarfBuzz-ICU and
HarfBuzz-GObject, and up to building the introspection files. This means a
flexible build mechanism is supported here, so anything that is supported
for a Windows build (code-wise), should all be supported by this build
system.
As in an earlier commit, the source listings are shared with the autotools
builds with the various Makefile.sources in src/, src/hb-ucdn and util/, and
this set of NMake Makefiles will transform these lists into the form they
want.
In the current form, all the test programs in test/api pass, and this has
been checked successfully with 'make -j8 distcheck'.
2015-11-03 12:00:42 +01:00
|
|
|
link /DLL $(LDFLAGS) $(HB_DEP_LIBS) /implib:$(CFG)\$(PLAT)\harfbuzz.lib -out:$@ @<<
|
|
|
|
$(harfbuzz_dll_OBJS)
|
|
|
|
<<
|
|
|
|
@-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;2
|
|
|
|
|
|
|
|
$(HARFBUZZ_GOBJECT_DLL_FILENAME).dll: $(CFG)\$(PLAT)\harfbuzz.lib $(harfbuzz_gobject_OBJS) $(CFG)\$(PLAT)\harfbuzz-gobject
|
|
|
|
link /DLL $(LDFLAGS) $(CFG)\$(PLAT)\harfbuzz.lib $(HB_GOBJECT_DEP_LIBS) /implib:$(CFG)\$(PLAT)\harfbuzz-gobject.lib -out:$@ @<<
|
|
|
|
$(harfbuzz_gobject_OBJS)
|
|
|
|
<<
|
|
|
|
@-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;2
|
|
|
|
|
|
|
|
# Rules for linking Executables
|
|
|
|
# Format is as follows (the mt command is needed for MSVC 2005/2008 builds):
|
|
|
|
# $(dll_name_with_path): $(dependent_libs_files_objects_and_items)
|
|
|
|
# link [$(linker_flags)] [$(dependent_libs)] -out:$@ @<<
|
|
|
|
# $(dependent_objects)
|
|
|
|
# <<
|
|
|
|
# @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;1
|
|
|
|
$(CFG)\$(PLAT)\hb-view.exe: $(CFG)\$(PLAT)\harfbuzz.lib $(CFG)\$(PLAT)\util $(hb_view_OBJS)
|
|
|
|
link $(LDFLAGS) $(CFG)\$(PLAT)\harfbuzz.lib $(HB_UTILS_DEP_LIBS) -out:$@ @<<
|
|
|
|
$(hb_view_OBJS)
|
|
|
|
<<
|
|
|
|
@-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;1
|
|
|
|
|
|
|
|
$(CFG)\$(PLAT)\hb-shape.exe: $(CFG)\$(PLAT)\harfbuzz.lib $(CFG)\$(PLAT)\util $(hb_shape_OBJS)
|
|
|
|
link $(LDFLAGS) $(CFG)\$(PLAT)\harfbuzz.lib $(HB_UTILS_DEP_LIBS) -out:$@ @<<
|
|
|
|
$(hb_shape_OBJS)
|
|
|
|
<<
|
|
|
|
@-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;1
|
|
|
|
|
|
|
|
$(CFG)\$(PLAT)\hb-ot-shape-closure.exe: $(CFG)\$(PLAT)\harfbuzz.lib $(CFG)\$(PLAT)\util $(hb_ot_shape_closure_OBJS)
|
|
|
|
link $(LDFLAGS) $(CFG)\$(PLAT)\harfbuzz.lib $(HB_UTILS_DEP_LIBS) -out:$@ @<<
|
|
|
|
$(hb_ot_shape_closure_OBJS)
|
|
|
|
<<
|
|
|
|
@-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;1
|
|
|
|
|
|
|
|
# Other .obj files requiring individual attention, that could not be covered by the inference rules.
|
|
|
|
# Format is as follows (all dirs must have a trailing '\'):
|
|
|
|
#
|
|
|
|
# $(obj_file):
|
|
|
|
# $(CC)|$(CXX) $(cflags) /Fo$(obj_destdir) /c @<<
|
|
|
|
# $(srcfile)
|
|
|
|
# <<
|
|
|
|
$(CFG)\$(PLAT)\harfbuzz-gobject\hb-gobject-structs.obj: $(CFG)\$(PLAT)\harfbuzz-gobject $(HB_GOBJECT_ENUM_GENERATED_SOURCES)
|
|
|
|
$(CXX) $(CFLAGS) $(HB_DEFINES) $(HB_LIB_CFLAGS) /I$(CFG)\$(PLAT)\harfbuzz-gobject /Fo$(CFG)\$(PLAT)\harfbuzz-gobject\ /c @<<
|
|
|
|
..\src\hb-gobject-structs.cc
|
|
|
|
<<
|
|
|
|
|
|
|
|
$(CFG)\$(PLAT)\harfbuzz-gobject\hb-gobject-enums.obj: $(CFG)\$(PLAT)\harfbuzz-gobject $(HB_GOBJECT_ENUM_GENERATED_SOURCES)
|
|
|
|
$(CXX) $(CFLAGS) $(HB_DEFINES) $(HB_LIB_CFLAGS) /I$(CFG)\$(PLAT)\harfbuzz-gobject /Fo$(CFG)\$(PLAT)\harfbuzz-gobject\ /c @<<
|
|
|
|
$(CFG)\$(PLAT)\harfbuzz-gobject\hb-gobject-enums.cc
|
|
|
|
<<
|
|
|
|
|
|
|
|
clean:
|
|
|
|
@-if exist $(CFG)\$(PLAT)\HarfBuzz-0.0.typelib del /f /q $(CFG)\$(PLAT)\HarfBuzz-0.0.typelib
|
|
|
|
@-if exist $(CFG)\$(PLAT)\HarfBuzz-0.0.gir del /f /q $(CFG)\$(PLAT)\HarfBuzz-0.0.gir
|
|
|
|
@-if exist $(CFG)\$(PLAT)\hb_list del /f /q $(CFG)\$(PLAT)\hb_list
|
|
|
|
@-del /f /q $(CFG)\$(PLAT)\*.pdb
|
|
|
|
@-if exist $(CFG)\$(PLAT)\.exe.manifest del /f /q $(CFG)\$(PLAT)\*.exe.manifest
|
|
|
|
@-if exist $(CFG)\$(PLAT)\.exe del /f /q $(CFG)\$(PLAT)\*.exe
|
|
|
|
@-del /f /q $(CFG)\$(PLAT)\*.dll.manifest
|
|
|
|
@-del /f /q $(CFG)\$(PLAT)\*.dll
|
|
|
|
@-del /f /q $(CFG)\$(PLAT)\*.ilk
|
|
|
|
@-del /f /q $(CFG)\$(PLAT)\*.obj
|
|
|
|
@-if exist $(CFG)\$(PLAT)\util del /f /q $(CFG)\$(PLAT)\util\*.obj
|
|
|
|
@-if exist $(CFG)\$(PLAT)\harfbuzz-gobject del /f /q $(CFG)\$(PLAT)\harfbuzz-gobject\*.obj
|
|
|
|
@-del /f /q $(CFG)\$(PLAT)\harfbuzz\*.obj
|
|
|
|
@-rmdir /s /q $(CFG)\$(PLAT)
|
|
|
|
@-if exist $(CFG)\$(PLAT)\harfbuzz-gobject\hb-gobject-enums.h del $(CFG)\$(PLAT)\harfbuzz-gobject\hb-gobject-enums.h
|
|
|
|
@-if exist $(CFG)\$(PLAT)\harfbuzz-gobject\hb-gobject-enums.cc del $(CFG)\$(PLAT)\harfbuzz-gobject\hb-gobject-enums.cc
|
|
|
|
@-del vc$(VSVER)0.pdb
|
|
|
|
@-del config.h
|
2017-06-21 16:19:57 +02:00
|
|
|
|
|
|
|
reallyclean: clean
|
|
|
|
@-del /f /q $(HB_RAGEL_GENERATED_ACTUAL_SOURCES)
|