nanogui: Makefile.rules


Previous by date: 28 Nov 2000 14:55:35 -0000 Re: Improved keyboard event handler and mouse motion event handler for flnx, Morten Rolland
Next by date: 28 Nov 2000 14:55:35 -0000 Re: scr_x11.c: color cache problem, Greg Haerr
Previous in thread: 28 Nov 2000 14:55:35 -0000 Makefile.rules, Gary James
Next in thread: 28 Nov 2000 14:55:35 -0000 Re: Makefile.rules, Greg Haerr

Subject: Re: Makefile.rules
From: Jordan Crouse ####@####.####
Date: 28 Nov 2000 14:55:35 -0000
Message-Id: <3A23C803.1BEBFF47@censoft.com>

Gary - 
Thanks for your work on this matter.  However, when building
applications based on Microwindows, Greg has built the system in such a
way, that you simply need to link to the libraries available in the
/src/lib directory and the headers found in /src/include.  In fact, you
would be best served if you ignored all of the complicated targets that
Microwindows has, and just narrow yourself down to something similar to
the following:

------------

MWBASEDIR = /foo/bar/microwin/src
MWLIBDIR = $(MWBASEDIR)/lib
MWINCDIR = $(MWBASEDIR)/include

foo.target: foo.o bar.o
	$(CC) -o foo.target -I$(MWINCDIR) -L$(MWLIBDIR) foo.o bar.o -lnano-X

.PREFIX: .o .c

.o.c:
	$(CC) -c -I$(MWINCDIR) $< -o $@   
-------------

In fact, we build the FNLX and ViewML binaries in exactly this manner. 
This has the advantage of being easier for other people to understand,
especially if you are writing code that will be open source.

In the near future, we hope to have a standardized installation process
for microwindows, which will place the libraries and headers in a
standard location (kind of like what X11 does), which will make this
process even easier, especially for novices.  Stay tuned.

Happy hacking,
Jordan


Gary James wrote:
> 
> Hi Greg,
> 
> I'm trying to get comfortable with how I might structure the build
> environment for a project using Microwindows. What's been bothering me
> up to now is how to seperate the Microwindows library parts from my
> applications parts in the build scripts. It seems like the three files
> "config", "Arch.rules" and "Makefile.rules" have a lot of critical
> definitions that I want my makefile to pick up on. But the one file
> "Makefile.rules" also has some pieces that I don't want in my makefile.
> These are mostly the phony targets used to build and install
> Microwindows. I'd like my makefile to have a "clean" and an "install"
> target that don't conflict with your targets.
> 
> I think we could split "Makefile.rules" into two files say
> "Makefile.rules" and "Makefile.defs". Keep all the Microwindows build
> specific stuff in the ".rules" file and keep the definitions needed by
> all Microwindows based applications in the ".defs" file.
> 
> The Microwindows makefile includes "Makefile.rules" which inturn
> includes "Makefile.defs" which includes "Arch.rules". Other third party
> application makefiles can define their own phony target rules and just
> include "Makefile.defs" which includes "Arch.rules".
> 
> By splitting the files up in the way I've proposed, there should be no
> impact to any projects that are using the current "Makefile.rules".
> 
> I've attached two files that seem to do the trick. I've created these
> two files from the "Makefile.rules" originally found in version 0.89pre6.
> 
> Gary James
> Sr Software Engineer
> Critical Link LLC
> www.criticallink.com
> 
>   ------------------------------------------------------------------------
> ##############################################################################
> # Microwindows rules Makefile
> # Copyright (c) 2000 Martin Jolicoeur, Greg Haerr
> #
> # This makefile should be placed at the top of a project hierarchy
> #
> # NOTE: The TOP environment variable should be set to that top directory
> ##############################################################################
> 
> include  $(TOP)/Makefile.defs
> 
> INSTALL_DIR   = install -c -m 755 -o root -g root -d
> INSTALL_HDR   = install -c -m 644 -o root -g bin
> INSTALL_LIB   = install -c -m 444 -o root -g bin
> 
> # If you dont want to see every executed command ...
> ifeq ($(VERBOSE), N)
> .SILENT:
> endif
> 
> .PHONY: default subdirs clean cleandepend xconfig
> 
> #
> # This is the default target
> # It looks for sub-directories with makefiles in it and tries to execute them
> #
> ifeq ($(SHAREDLIBS), Y)
> default: subdirs $(OBJS) $(CXXOBJS) $(TOP)/lib/$(LIBNAME) $(TOP)/lib/$(LIBNAMESO)
> else
> default: subdirs $(OBJS) $(CXXOBJS) $(ASMOBJS) $(TOP)/lib/$(LIBNAME)
> endif
> 
> dirs =  $(shell for file in `\ls`; \
>         do if [ -d $$file -a $$file != "demos" ]; then \
>         if [ -f $$file/Makefile ]; then echo $$file; fi; fi; done)
> 
> demos = $(shell for file in `\ls`; \
>         do if [ -d $$file -a $$file = "demos" ]; then \
>         if [ -f $$file/Makefile ]; then echo $$file; fi; fi; done)
> 
> #
> # Subdirectories target
> #
> subdirs:
> ifeq ($(ARCH), DJGPP)
> 
>         $(shell set CURDIR=$(pwd);)
> 
>         $(shell \
>         if [ ! -d $(TOP)/bin ]; \
>         then mkdir $(TOP)/bin; fi;)
> 
>         $(shell \
>         if [ ! -d $(TOP)/lib ]; \
>         then mkdir $(TOP)/lib; fi;)
> 
> endif
>         $(foreach dir, $(dirs), $(MAKE) -C $(dir);)
> 
> #
> # If a library name is specified,
> # a library of that name will be created with objects in that directory
> #
> ifneq ($(LIBNAME), )
> $(TOP)/lib/$(LIBNAME): $(OBJS) $(CXXOBJS)
>         @echo "Creating library $@ ..."
>         $(AR) $(ARFLAGS) $(TOP)/lib/$(LIBNAME) $(OBJS) $(CXXOBJS) $(ASMOBJS)
> endif
> 
> #
> # If a shared object library name is specified, link this object
> #
> ifeq ($(SHAREDLIBS), Y)
> $(TOP)/lib/$(LIBNAMESO): $(TOP)/lib/$(LIBNAME)
>         @echo "Creating shared library $@ ..."
>         $(LD) -shared -o $@ --whole-archive $^
> endif
> 
> xconfig:
>         ./xconfigure
> 
> # don't clean lib dir
> cleanapps: cleandepend
>         @echo "Cleaning directory $(CURDIR) ..."
>         $(RM) core *~ *.bak *.o TAGS
>         $(RM) bin/*
>         $(foreach dir, $(dirs), $(MAKE) -C $(dir) cleanapps;)
>         $(foreach dir, $(demos), $(MAKE) -C $(dir) cleanapps;)
> 
> clean: cleandepend
>         @echo "Cleaning directory $(CURDIR) ..."
>         $(RM) core *~ *.bak *.o TAGS
>         $(RM) $(TOP)/lib/*.a $(TOP)/lib/*.so
>         $(shell cd $(TOP)/bin; \
>                 for file in `\ls`; do if [ ! -d $$file ]; \
>                 then $(RM) $$file; fi; done; cd $(TOP))
>         $(foreach dir, $(dirs), $(MAKE) -C $(dir) clean;)
>         $(foreach dir, $(demos), $(MAKE) -C $(dir) clean;)
> 
> cleandepend:
>         @echo "Cleaning dependencies in directory $(CURDIR) ..."
>         $(RM) .depend
>         $(foreach dir, $(dirs), $(MAKE) -C $(dir) cleandepend;)
>         $(foreach dir, $(demos), $(MAKE) -C $(dir) cleandepend;)
> 
> install: default
>         $(INSTALL_DIR) $(HDRINSTALLDIR)
>         echo "Copying hdrs to $(HDRINSTALLDIR)"
>         $(INSTALL_HDR) include/*.h $(HDRINSTALLDIR)
>         echo "Copying libs to $(LIBINSTALLDIR)"
>         $(INSTALL_DIR) $(LIBINSTALLDIR)
>         $(INSTALL_LIB) lib/*.a $(LIBINSTALLDIR)
> ifeq ($(SHAREDLIBS), Y)
>         $(INSTALL_LIB) lib/*.so $(LIBINSTALLDIR)
> endif
>         echo "Installation completed successfully."
> 
> tags:
>         -rm -f TAGS
>         etags --language=c++ --append \
>                 `find . \( -name '*.h' -o -name '*.cc' \) -print`
>         etags --language=c --append `find . -name \*.[hc] -print`
>         etags --language=asm --append `find . -name \*.[Ss] -print`
> 
> #
> # Included dependency files
> #
> ifneq ($(MAKECMDGOALS), clean)
> ifneq ($(MAKECMDGOALS), cleandepend)
> ifneq ($(MAKECMDGOALS), realclean)
> ifneq ($(MAKECMDGOALS), xconfig)
> ifneq ($(OBJS),)
> -include .depend
> endif
> endif
> endif
> endif
> endif
> 
>   ------------------------------------------------------------------------
> ##############################################################################
> # Microwindows rules Makefile
> # Copyright (c) 2000 Martin Jolicoeur, Greg Haerr
> #
> # This makefile should be placed at the top of a project hierarchy
> #
> # NOTE: The TOP environment variable should be set to that top directory
> ##############################################################################
> 
> ifeq ($(ARCH), DJGPP)
> SHELL = bash
> else
> SHELL = /bin/sh
> endif
> 
> # install directories for headers and libraries
> INSTALL_PREFIX = /usr
> HDRINSTALLDIR = $(INSTALL_PREFIX)/include/microwin
> LIBINSTALLDIR = $(INSTALL_PREFIX)/lib
> 
> INCLUDEDIRS += -I. -I$(TOP)/include
> 
> #
> # General configuration setup (see config file)
> #
> DEFINES += -DMWPIXEL_FORMAT=$(SCREEN_PIXTYPE)
> 
> ifeq ($(VTSWITCH), Y)
> DEFINES += -DVTSWITCH=1
> endif
> 
> ifeq ($(X11), Y)
> CFLAGS += -DX11=1
> LDFLAGS += -L/usr/X11R6/lib -lX11
> endif
> 
> ifeq ($(VGALIB), Y)
> LDFLAGS += -lvga
> endif
> 
> ifeq ($(ARCH),FREEBSD-X86)
> LDFLAGS += -lvgl
> endif
> 
> ifeq ($(HAVE_FILEIO), Y)
> 
> DEFINES += -DHAVE_FILEIO
> 
> ifeq ($(HAVE_JPEG_SUPPORT), Y)
> DEFINES += -DHAVE_JPEG_SUPPORT=1
> INCLUDEDIRS += -I$(INCJPEG)
> endif
> 
> ifeq ($(HAVE_T1LIB_SUPPORT), Y)
> DEFINES += -DHAVE_T1LIB_SUPPORT=1
> INCLUDEDIRS += -I$(INCT1LIB)
> endif
> 
> ifeq ($(HAVE_FREETYPE_SUPPORT), Y)
> DEFINES += -DHAVE_FREETYPE_SUPPORT=1
> INCLUDEDIRS += -I$(INCFTLIB)
> endif
> 
> ifeq ($(HAVE_HZK_SUPPORT), Y)
> DEFINES += -DHAVE_HZK_SUPPORT=1
> DEFINES += -DHZK_FONT_DIR="\"$(HZK_FONT_DIR)"\"
> endif
> 
> ifeq ($(HAVE_BIG5_SUPPORT), Y)
> DEFINES += -DHAVE_BIG5_SUPPORT=1
> endif
> 
> ifeq ($(HAVE_GB2312_SUPPORT), Y)
> DEFINES += -DHAVE_GB2312_SUPPORT=1
> endif
> 
> ifeq ($(HAVE_BMP_SUPPORT), Y)
> DEFINES += -DHAVE_BMP_SUPPORT=1
> endif
> 
> ifeq ($(HAVE_GIF_SUPPORT), Y)
> DEFINES += -DHAVE_GIF_SUPPORT=1
> endif
> 
> ifeq ($(HAVE_XPM_SUPPORT), Y)
> DEFINES += -DHAVE_XPM_SUPPORT=1
> endif
> 
> endif
> 
> ifeq ($(NOFONTSORCLIPPING), Y)
> CFLAGS += -DNOFONTSORCLIPPING=1
> endif
> 
> ifeq ($(HAVE_SHAREDMEM_SUPPORT), Y)
> DEFINES += -DHAVE_SHAREDMEM_SUPPORT=1
> endif
> 
> ifeq ($(SHAREDLIBS), Y)
> CFLAGS += -fpic
> endif
> 
> ifeq ($(OPTIMIZE), Y)
> OPTFLAGS += -O3
> endif
> 
> ifeq ($(DEBUG), Y)
> OPTFLAGS += -ggdb
> endif
> 
> CFLAGS += $(INCLUDEDIRS)
> HOSTCFLAGS := $(CFLAGS)
> CPPFLAGS += $(DEFINES)
> LDFLAGS += -L$(TOP)/lib
> ARFLAGS = rs
> 
> # Tools (may be overridden by Arch.rules)
> HOSTCC = gcc
> 
> # Include the rules for arch's
> # if the user has a specific arch local to their home load it
> ifeq ($(HOME)/microwin/Arch.rules,$(wildcard $(HOME)/microwin/Arch.rules))
> include $(HOME)/microwin/Arch.rules
> else
> include $(TOP)/Arch.rules
> endif
> 
> # Tools ...
> CC = $(TOOLSPREFIX)$(COMPILER)
> CXX = $(TOOLSPREFIX)$(CXX_COMPILER)
> AR = $(TOOLSPREFIX)ar
> LD = $(TOOLSPREFIX)ld
> NM = $(TOOLSPREFIX)nm
> STRIP = $(TOOLSPREFIX)strip
> OBJCOPY = $(TOOLSPREFIX)objcopy
> CP = cp
> MV = mv
> 
> ################## Libraries Section ##################
> 
> MWINLIBS = $(TOP)/lib/libmwin.a $(TOP)/lib/libmwinlib.a\
>         $(TOP)/lib/libmwengine.a $(TOP)/lib/libmwdrivers.a\
>         $(TOP)/lib/libmwfonts.a $(TOP)/lib/libmwimages.a
> CCMWINLIBS = -lmwin -lmwinlib -lmwin -lmwengine -lmwdrivers -lmwfonts -lmwimages -lm
> 
> ifeq ($(NWIDGET), Y)
> NANOXCLIENTLIBS += $(TOP)/lib/libnwidget.a
> #ifeq ($(LINK_APP_INTO_SERVER), Y)
> #NANOXSERVERLIBS += $(TOP)/lib/libnwidget.a
> #endif
> endif
> 
> ifeq ($(LINK_APP_INTO_SERVER), Y)
> NANOXCLIENTLIBS += $(TOP)/lib/libnano-X.a $(TOP)/lib/libmwengine.a\
>         $(TOP)/lib/libmwdrivers.a $(TOP)/lib/libmwfonts.a
> CCNANOXCLIENTLIBS += -lnano-X -lmwengine -lmwdrivers -lmwfonts
> else
> NANOXCLIENTLIBS += $(TOP)/lib/libnano-X.a
> CCNANOXCLIENTLIBS += -lnano-X
> endif
> 
> NANOXSERVERLIBS += $(TOP)/lib/libmwengine.a $(TOP)/lib/libmwdrivers.a\
>         $(TOP)/lib/libmwfonts.a
> CCNANOXSERVERLIBS += -lmwengine -lmwdrivers -lmwfonts
> 
> ifeq ($(HAVE_FILEIO), Y)
> ifeq ($(HAVE_JPEG_SUPPORT), Y)
> MWINLIBS += $(LIBJPEG)
> CCMWINLIBS += $(LIBJPEG)
> NANOXLIBS += $(LIBJPEG)
> NANOXSERVERLIBS += $(LIBJPEG)
> ifeq ($(SHAREDLIBS), Y)
>         CCNANOXSERVERLIBS += $(LIBJPEG)
> endif
> ifeq ($(LINK_APP_INTO_SERVER), Y)
>         NANOXCLIENTLIBS += $(LIBJPEG)
> endif
> endif
> endif
> 
> ifeq ($(HAVE_T1LIB_SUPPORT), Y)
> MWINLIBS += $(LIBT1LIB)
> CCMWINLIBS += $(LIBT1LIB)
> NANOXLIBS += $(LIBT1LIB)
> NANOXSERVERLIBS += $(LIBT1LIB)
> ifeq ($(SHAREDLIBS), Y)
>         CCNANOXSERVERLIBS += $(LIBT1LIB)
> endif
> ifeq ($(LINK_APP_INTO_SERVER), Y)
>         NANOXCLIENTLIBS += $(LIBT1LIB)
> endif
> LDFLAGS += -lm
> endif
> 
> ifeq ($(HAVE_FREETYPE_SUPPORT), Y)
> MWINLIBS += $(LIBFTLIB)
> CCMWINLIBS += $(LIBFTLIB)
> NANOXLIBS += $(LIBFTLIB)
> NANOXSERVERLIBS += $(LIBFTLIB)
> ifeq ($(SHAREDLIBS), Y)
>         CCNANOXSERVERLIBS += $(LIBFTLIB)
> endif
> ifeq ($(LINK_APP_INTO_SERVER), Y)
>         NANOXCLIENTLIBS += $(LIBFTLIB)
> endif
> LDFLAGS += -lm
> endif
> 
> ifeq ($(ARCH), ELKS)
> CCMWINLIBS = $(MWINLIBS)
> CCNANOXLIBS = $(NANOXLIBS)
> endif
> 
> ifeq ($(ARCH), DJGPP)
> CCMWINLIBS = $(MWINLIBS) -lgrx20
> CCNANOXLIBS = $(NANOXLIBS)
> NANOXCLIENTLIBS += -lgrx20
> endif
> 
> ################## End of Libraries Section ##################
> 
> # Add any exportable variable here
> export TOP ARCH CONFIG
> 
> #
> # Dependencies target for C files
> #
> .depend: $(OBJS:.o=.c) $(CXXOBJS:.o=.cc)
>         @echo "Updating dependencies in $(CURDIR) ..."
>         $(SHELL) -ec '$(HOSTCC) -MM $(CPPFLAGS) $(CFLAGS) $(OBJS:.o=.c) \
>         | sed '\''s/\($*\)\.o[ :]*/\1.o \$@ : $$(TOP)\/config /g'\'' > $@; \
>         [ -s $@ ] || rm -f $@'
> 
> #
> # Compilation target for C files
> #
> %.o:%.c
>         @echo "Compiling $< ..."
>         $(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $<
> 
> #
> # Compilation target for C++ files
> #
> %.o:%.cc
>         @echo "C++ compiling $< ..."
>         $(CXX) -c $(CFLAGS) $(CXXFLAGS) -o $@ $<
> 
> #
> # Compilation target for bmp file conversion
> #
> %.c:%.bmp $(TOP)/mwin/bmp/convbmp.c
>         echo "Generating $@ from bitmap file ..."
>         $(TOP)/bin/convbmp $< > $@
> 
>   ------------------------------------------------------------------------
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ####@####.####
> For additional commands, e-mail: ####@####.####

Previous by date: 28 Nov 2000 14:55:35 -0000 Re: Improved keyboard event handler and mouse motion event handler for flnx, Morten Rolland
Next by date: 28 Nov 2000 14:55:35 -0000 Re: scr_x11.c: color cache problem, Greg Haerr
Previous in thread: 28 Nov 2000 14:55:35 -0000 Makefile.rules, Gary James
Next in thread: 28 Nov 2000 14:55:35 -0000 Re: Makefile.rules, Greg Haerr


Powered by ezmlm-browse 0.20.