Has anybody used CMake as a build system for their Gambit projects? I'm not talking about building Gambit itself, but rather building projects that are written in Gambit. If so, could I see your CMakeList bulid files?
I would also be interested in other build systems' makefiles (make, ant, etc), if people are wiling to share, or point me to an open-source project written in Gambit that I could download.
Best, -- Matt
Afficher les réponses par date
On 2010-11-30, at 1:56 AM, Matthew Koichi Grimes wrote:
Has anybody used CMake as a build system for their Gambit projects? I'm not talking about building Gambit itself, but rather building projects that are written in Gambit. If so, could I see your CMakeList bulid files?
I would also be interested in other build systems' makefiles (make, ant, etc), if people are wiling to share, or point me to an open-source project written in Gambit that I could download.
Best, -- Matt
The attached tar ball shows how to write a makefile for a simple project built with Gambit-C which combines Scheme and C code.
The C "main" function starts the execution of the Scheme code and it also contains a call to a Scheme procedure. There are also calls to C functions within the Scheme code. The project is composed of the following source files:
main.c : program's "main" function which calls Scheme mod1.h and mod1.c : defines the mod1 C function mod2.h and mod2.c : defines the mod2 C function mod3.h and mod3.scm : defines the interface between Scheme and C mod4.scm : Scheme code which calls C
The makefile is designed to depend only on the gsc compiler. The gsc compiler will invoke the appropriate C compiler and linker, even for compiling the C source files of the project. This makes this makefile very portable as many system dependencies have been taken care of when Gambit was installed.
To try it out, make sure you have Gambit-C v4.6.0 with commit 02c1427d40eb080a4ada916d55ecbb14cc191772.
To build the project enter:
make
To build and run the project enter:
make run
To cleanup enter:
make clean
The makefile and tar ball are below.
Marc
# Simple makefile for project built with Gambit-C system.
# Copyright (c) 2010 by Marc Feeley, All Rights Reserved.
# This makefile is designed to depend only on the gsc compiler. The # gsc compiler will invoke the appropriate C compiler and linker, even # for compiling the C source files of the project. This makes this # makefile very portable as many system dependencies have been taken # care of when Gambit was installed. If gsc isn't installed in a # standard location, define GSC accordingly here:
GSC = gsc
# You should redefine C_MODULES and SCHEME_MODULES as needed for your # project. Define ALL_MODULES_O as the set of object files for the C # and Scheme modules. Define PROG_NAME as the program name.
PROG_NAME = prog C_MODULES = mod1.c mod2.c main.c SCHEME_MODULES = mod3.scm mod4.scm SCHEME_MODULES_C = mod3.c mod4.c ALL_MODULES_O = mod1.o mod2.o main.o mod3.o mod4.o
# You may want to add stuff to CC_OPTIONS and LD_OPTIONS (directories # for header files, libraries, etc). You must keep -D___LIBRARY in # CC_OPTIONS so that the compiled Scheme code does not implement its # own "main" function (in the link file generated by gsc).
CC_OPTIONS = -D___LIBRARY LD_OPTIONS =
# The rest of the makefile shouldn't need to be modified.
GSC_OPTIONS = -cc-options "$(CC_OPTIONS)" -ld-options "$(LD_OPTIONS)" #GSC_OPTIONS = -cc-options "$(CC_OPTIONS)" -ld-options "$(LD_OPTIONS)" -verbose ALL_MODULES_C = $(C_MODULES) $(SCHEME_MODULES_C) ALL_MODULES = $(C_MODULES) $(SCHEME_MODULES)
.SUFFIXES: .SUFFIXES: .scm .c .o
all: $(PROG_NAME)
$(PROG_NAME): $(ALL_MODULES_O) $(PROG_NAME)_.o $(GSC) $(GSC_OPTIONS) -exe -o $@ $^
$(PROG_NAME)_.c: $(SCHEME_MODULES_C) $(GSC) -link -o $@ $^
.c.o: $(GSC) $(GSC_OPTIONS) -obj $^
.scm.c: $(GSC) $(GSC_OPTIONS) -c $^
run: $(PROG_NAME) ./$(PROG_NAME)
clean: rm -f $(SCHEME_MODULES_C) $(ALL_MODULES_O) $(PROG_NAME)_.* $(PROG_NAME)
# Note: It is possible to compile and link a program in a single # invocation of gsc but this is not recommended for large projects # which usually benefit from separate compilation. The command is: # # $(GSC) $(GSC_OPTIONS) -exe -o $(PROG_NAME) $(ALL_MODULES) # # Moreover, this requires changing the name of the link file in main.c # from prog_.c to mod4_.c (the name is derived from the last Scheme # source file in ALL_MODULES).
I've gotten Marc's "simple-make-project" example working, and now I'm trying to adapt it to my own needs. The first of those needs is that I'd like to have the "main" function be in Scheme rather than C.
I've written a minimal example featuring 3 files: main.scm, hello_scheme.scm, and hello_c.c. The main.scm file calls two "hello world" functions: a 'hello from Scheme!" function defined in hello_scheme.scm, and a "hello from C!" function defined in hello_c.c.
I've changed "simple-make-project"'s makefile in just two ways: I've edited the source filenames, and because the main function is now in Scheme rather than C, I've changed
CC_OPTIONS = -D___LIBRARY
to
CC_OPTIONS =
When I run "make", all my source files successfully compile to .o files, but the link command that should link the .o files together into an executable silently fails to produce anything. That final command is:
gsc -cc-options "" -ld-options "" -verbose -exe -o prog main.o hello_scheme.o hello_c.o prog_.o
It neither produces the "prog" executable, nor does it even show what gcc commands it called, despite use of the -verbose flag. It just silently returns.
I've attached the project as a zip file. Any suggestions would be greatly appreciated.
-- Matt
On Tue, Nov 30, 2010 at 6:18 PM, Marc Feeley feeley@iro.umontreal.cawrote:
On 2010-11-30, at 1:56 AM, Matthew Koichi Grimes wrote:
Has anybody used CMake as a build system for their Gambit projects? I'm
not talking about building Gambit itself, but rather building projects that are written in Gambit. If so, could I see your CMakeList bulid files?
I would also be interested in other build systems' makefiles (make, ant,
etc), if people are wiling to share, or point me to an open-source project written in Gambit that I could download.
Best, -- Matt
The attached tar ball shows how to write a makefile for a simple project built with Gambit-C which combines Scheme and C code.
The C "main" function starts the execution of the Scheme code and it also contains a call to a Scheme procedure. There are also calls to C functions within the Scheme code. The project is composed of the following source files:
main.c : program's "main" function which calls Scheme mod1.h and mod1.c : defines the mod1 C function mod2.h and mod2.c : defines the mod2 C function mod3.h and mod3.scm : defines the interface between Scheme and C mod4.scm : Scheme code which calls C
The makefile is designed to depend only on the gsc compiler. The gsc compiler will invoke the appropriate C compiler and linker, even for compiling the C source files of the project. This makes this makefile very portable as many system dependencies have been taken care of when Gambit was installed.
To try it out, make sure you have Gambit-C v4.6.0 with commit 02c1427d40eb080a4ada916d55ecbb14cc191772.
To build the project enter:
make
To build and run the project enter:
make run
To cleanup enter:
make clean
The makefile and tar ball are below.
Marc
# Simple makefile for project built with Gambit-C system.
# Copyright (c) 2010 by Marc Feeley, All Rights Reserved.
# This makefile is designed to depend only on the gsc compiler. The # gsc compiler will invoke the appropriate C compiler and linker, even # for compiling the C source files of the project. This makes this # makefile very portable as many system dependencies have been taken # care of when Gambit was installed. If gsc isn't installed in a # standard location, define GSC accordingly here:
GSC = gsc
# You should redefine C_MODULES and SCHEME_MODULES as needed for your # project. Define ALL_MODULES_O as the set of object files for the C # and Scheme modules. Define PROG_NAME as the program name.
PROG_NAME = prog C_MODULES = mod1.c mod2.c main.c SCHEME_MODULES = mod3.scm mod4.scm SCHEME_MODULES_C = mod3.c mod4.c ALL_MODULES_O = mod1.o mod2.o main.o mod3.o mod4.o
# You may want to add stuff to CC_OPTIONS and LD_OPTIONS (directories # for header files, libraries, etc). You must keep -D___LIBRARY in # CC_OPTIONS so that the compiled Scheme code does not implement its # own "main" function (in the link file generated by gsc).
CC_OPTIONS = -D___LIBRARY LD_OPTIONS =
# The rest of the makefile shouldn't need to be modified.
GSC_OPTIONS = -cc-options "$(CC_OPTIONS)" -ld-options "$(LD_OPTIONS)" #GSC_OPTIONS = -cc-options "$(CC_OPTIONS)" -ld-options "$(LD_OPTIONS)" -verbose ALL_MODULES_C = $(C_MODULES) $(SCHEME_MODULES_C) ALL_MODULES = $(C_MODULES) $(SCHEME_MODULES)
.SUFFIXES: .SUFFIXES: .scm .c .o
all: $(PROG_NAME)
$(PROG_NAME): $(ALL_MODULES_O) $(PROG_NAME)_.o $(GSC) $(GSC_OPTIONS) -exe -o $@ $^
$(PROG_NAME)_.c: $(SCHEME_MODULES_C) $(GSC) -link -o $@ $^
.c.o: $(GSC) $(GSC_OPTIONS) -obj $^
.scm.c: $(GSC) $(GSC_OPTIONS) -c $^
run: $(PROG_NAME) ./$(PROG_NAME)
clean: rm -f $(SCHEME_MODULES_C) $(ALL_MODULES_O) $(PROG_NAME)_.* $(PROG_NAME)
# Note: It is possible to compile and link a program in a single # invocation of gsc but this is not recommended for large projects # which usually benefit from separate compilation. The command is: # # $(GSC) $(GSC_OPTIONS) -exe -o $(PROG_NAME) $(ALL_MODULES) # # Moreover, this requires changing the name of the link file in main.c # from prog_.c to mod4_.c (the name is derived from the last Scheme # source file in ALL_MODULES).
On 2011-04-05, at 7:07 PM, Matthew Koichi Grimes wrote:
I've gotten Marc's "simple-make-project" example working, and now I'm trying to adapt it to my own needs. The first of those needs is that I'd like to have the "main" function be in Scheme rather than C.
I've written a minimal example featuring 3 files: main.scm, hello_scheme.scm, and hello_c.c. The main.scm file calls two "hello world" functions: a 'hello from Scheme!" function defined in hello_scheme.scm, and a "hello from C!" function defined in hello_c.c.
I've changed "simple-make-project"'s makefile in just two ways: I've edited the source filenames, and because the main function is now in Scheme rather than C, I've changed
CC_OPTIONS = -D___LIBRARY
to
CC_OPTIONS =
When I run "make", all my source files successfully compile to .o files, but the link command that should link the .o files together into an executable silently fails to produce anything. That final command is:
gsc -cc-options "" -ld-options "" -verbose -exe -o prog main.o hello_scheme.o hello_c.o prog_.o
It neither produces the "prog" executable, nor does it even show what gcc commands it called, despite use of the -verbose flag. It just silently returns.
I've attached the project as a zip file. Any suggestions would be greatly appreciated.
You need to upgrade to a newer Gambit. This issue was solved last November (patch "Extend gsc so that it can link executables (i.e. -exe option) from a set of object files."). So if you get v4.6.1 the problem will go away.
Marc
That fixed it. Thanks!
-- Matt
On Wed, Apr 6, 2011 at 8:46 AM, Marc Feeley feeley@iro.umontreal.ca wrote:
On 2011-04-05, at 7:07 PM, Matthew Koichi Grimes wrote:
I've gotten Marc's "simple-make-project" example working, and now I'm
trying to adapt it to my own needs. The first of those needs is that I'd like to have the "main" function be in Scheme rather than C.
I've written a minimal example featuring 3 files: main.scm,
hello_scheme.scm, and hello_c.c. The main.scm file calls two "hello world" functions: a 'hello from Scheme!" function defined in hello_scheme.scm, and a "hello from C!" function defined in hello_c.c.
I've changed "simple-make-project"'s makefile in just two ways: I've
edited the source filenames, and because the main function is now in Scheme rather than C, I've changed
CC_OPTIONS = -D___LIBRARY
to
CC_OPTIONS =
When I run "make", all my source files successfully compile to .o files,
but the link command that should link the .o files together into an executable silently fails to produce anything. That final command is:
gsc -cc-options "" -ld-options "" -verbose -exe -o prog main.o
hello_scheme.o hello_c.o prog_.o
It neither produces the "prog" executable, nor does it even show what gcc
commands it called, despite use of the -verbose flag. It just silently returns.
I've attached the project as a zip file. Any suggestions would be greatly
appreciated.
You need to upgrade to a newer Gambit. This issue was solved last November (patch "Extend gsc so that it can link executables (i.e. -exe option) from a set of object files."). So if you get v4.6.1 the problem will go away.
Marc
Gambit-list mailing list Gambit-list@iro.umontreal.ca https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list