On Jun 14, 2009, at 11:32 PM, Adrien Piérard wrote:
So it doesn't seem like the right solution to package all of these decisions in a single script.
What is the right abstraction?
I guess that the right abstraction is - conservative: it always works - end user-oriented: it should work out of the box for those who know nothing and don't want to know more. A few others will tweak it manually. Most people do *not* need unusual (sic) compiler options, or to select the calling convention.
For some reason I didn't get Marc's reply (I see it on the list archive, though). Anyone building applications or dynamically-loadable libraries, or calling scheme from C, or ... will have to know *something* beyond gsc file gsi file Perhaps the following flags from the makefiles could be exported somehow (have a script that a user can run (in their .bashrc or .cshrc file?) that will add them to one's environment, as GSC_FLAGS_OBJ or something), or perhaps they could just be used in the examples on this list or in the documentation as symbolic variables. On my PowerPC Mac I have: FLAGS_OBJ = -no-cpp-precomp -Wall -W -Wno-unused -O1 -fno-math- errno -fschedule-insns2 -O1 -fno-math-errno -fschedule-insns2 -fno- trapping-math -fno-strict-aliasing -fwrapv -fomit-frame-pointer -fPIC -fno-common FLAGS_DYN = -no-cpp-precomp -Wall -W -Wno-unused -O1 -fno-math- errno -fschedule-insns2 -O1 -fno-math-errno -fschedule-insns2 -fno- trapping-math -fno-strict-aliasing -fwrapv -fomit-frame-pointer -fPIC -fno-common -bundle -flat_namespace -undefined suppress FLAGS_LIB = -dynamiclib -flat_namespace -undefined suppress FLAGS_EXE = DEFS = -DHAVE_CONFIG_H LIBS = On my Linux box I have FLAGS_OBJ = -Wno-unused -O1 -fno-math-errno -fschedule-insns2 -fno- trapping-math -fno-strict-aliasing -fwrapv -fomit-frame-pointer -fno- move-loop-invariants -fPIC -fno-common -mieee-fp FLAGS_DYN = -Wno-unused -O1 -fno-math-errno -fschedule-insns2 - fno-trapping-math -fno-strict-aliasing -fwrapv -fomit-frame-pointer - fno-move-loop-invariants -fPIC -fno-common -mieee-fp -rdynamic -shared FLAGS_LIB = -rdynamic -shared FLAGS_EXE = -rdynamic DEFS = -DHAVE_CONFIG_H LIBS = -lutil -ldl -lm Quite a few of these are required either for correctness of the compiled code (-fno-math-errno -fno-trapping-math -fno-strict- aliasing -fwrapv -mieee-fp -fPIC), speed of the compiled code (-O1 - fschedule-insns2 -fomit-frame-pointer), runtime of gcc when compiling Gambit-generated code (-fno-move-loop-invariants) or for other reasons that I'm not sure about. So, perhaps this isn't a bad idea. These options vary from OS to OS, they're chosen at configure time, perhaps there should be a standard way that a Gambit user can access them. Brad