I'm glad that it worked for you. Regarding compiling to a file, you may specify c-file, h-file and data-file
as keyword arguments to compile-file, if definitions are kept then these files won't be removed.

Best regards,

Daniel Kochmański ;; aka jackdaniel | Przemyśl, Poland
TurtleWare - Daniel Kochmański      | www.turtleware.eu

"Be the change that you wish to see in the world." - Mahatma Gandhi

‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
On Saturday, 28 November 2020 19:18, Garrett Dangerfield <garrett@dangerimp.com> wrote:

First off, I very much appreciate your patience and help as I got this going.  But I HAVE got it going.

I used the MS Visual Studio nmake to get it working and it's the 32-bit not the 64-bit.  I may poke at trying 64-bit along the way but it's lower priority.

I do have to run "(ext:install-c-compiler)" each time I start the ECL REPL, just FYI.

The biggest issue I faced was that my Lisp code wouldn't compile.  First it complained about missing .h files and then it complained about missing .lib files.  Basically, it needed system level additional pathing for both the .h files and the .lib files passed to "cl".

This may or may not be the best solution, but what I did was change cmpmain.lsp to include two new variables (c::*ecl-include-directory-extra* and c::*ecl-library-directory-extra*).  They are both lists and they are "extra" directories needed during the compile and linking phases.

The values I had to set mine to were:
(setf c::*ecl-include-directory-extra*
      '("c:/Program Files (x86)/Windows Kits/10/Include/10.0.18362.0/ucrt/"
"c:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include/"
"c:/Program Files (x86)/Windows Kits/10/Include/10.0.18362.0/um/"
"c:/Program Files (x86)/Windows Kits/10/Include/10.0.18362.0/shared/"
(setf c::*ecl-library-directory-extra*
      '("c:/Program Files (x86)/Windows Kits/10/Lib/10.0.18362.0/um/x86/"
"c:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/lib/"
"c:/Program Files (x86)/Windows Kits/10/Lib/10.0.18362.0/ucrt/x86/"

I've attached my modified cmpmain.lsp. Please feel free to use/not use, etc. however you desire (legal release granted blah blah blah).

A minor issue I'm currently facing is that I'd like to look at the C code generated but when I set "(setq si::*keep-definitions* t)" it doesn't seem to have any effect.  If there's another way to keep the C code, please let me know.

Also, the exe that's generated only seems to want to work right if the ecl.dll is in the same directory, but that's fairly minor right now.

The next goal I have is to try and connect my Lisp up to C/C++ code and generate an actual working Windows GUI program (meaning actually create a window but having the drawing portion of the window and the Windows messaging be handled by Lisp code, ideally allowing real-time modification of the LIsp while the window still up and running).  I'll send updates as appropriate.  I may create a blog post somewhere with my ongoing adventures.

Thanks again for your help,
Garrett Dangerfield.

On Thu, Nov 26, 2020 at 1:13 PM Daniel Kochmański <daniel@turtleware.eu> wrote:
Garrett: please put ecl-devel as the address (that may be my fault that I've hit reply earlier).

Re your problem, please ensure, that c compiler is in the path.

-------- Oryginalna wiadomość --------
‎ 26 lis 2020, 20:45, Garrett Dangerfield napisał(a):
I got a compile to work with Visual Studio. I set:
ECL_CMP     = 1
and it's at least trying to generate a .o file instead of an .fasc file.  I'm running this:
> (ext:install-c-compiler)

;;; Loading #P"C:/Users/danger/Downloads/ecl-20.4.24/msvc/cmp.fas"
> (compile-file "t2.lsp" :system-p t)

;;; Compiling t2.lsp.
;;; OPTIMIZE levels: Safety=2, Space=0, Speed=3, Debug=0
;;; End of Pass 1.The system cannot find the file specified.

;;; Internal error:
;;;   ** Could not spawn subprocess to run "cl".
> And its' creating these files:
  -rwxr-xr-x+ 1 danger None     1930 Nov 26 11:40 t2.c
  -rwxr-xr-x+ 1 danger None      395 Nov 26 11:40 t2.data
  -rwxr-xr-x+ 1 danger None      599 Nov 26 11:40 t2.eclh

Thoughts?  Were there other settings I needed to tweak during the ECL compile?


On Thu, Nov 26, 2020 at 9:54 AM Garrett Dangerfield <garrett@dangerimp.com> wrote:
Thanks, I found the section of the manual right after I clicked send, of course.


On Thu, Nov 26, 2020 at 9:50 AM Daniel Kochmański <daniel@turtleware.eu> wrote:
You don't call configure on msvc build, check out install file and the manual

Wysłano z aplikacji ProtonMail

-------- Oryginalna wiadomość --------
‎ 26 lis 2020, 17:58, Garrett Dangerfield napisał(a):

So if I use Visual Studio, will I still use cygwin to do the ./configure?

On Thu, Nov 26, 2020 at 8:55 AM Daniel Kochmański <daniel@turtleware.eu> wrote:

‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
On Thursday, 26 November 2020 17:51, Garrett Dangerfield <garrett@dangerimp.com> wrote:

I tried your suggestions and I tried the cygwin patch as well, no luck, that's why I tried to pull cygwin out of the equation.  Neither seem to be producing an EXE that could understand an external compiler.

With the non-cygwin configuration, I'm baffled on why configure says things are kosher but the compile fails for missing file, though.


No, sorry. All I can think of is using msvc. Generally ECL expects that he C compiler used will be the same compiler
ECL was built with itself.


On Thu, Nov 26, 2020 at 3:05 AM Daniel Kochmański <daniel@turtleware.eu> wrote:
ECL may be build with cygwin/mingw, then it works with cygwin/mingw runtime. You may also use
MSVC, then you need to enter the msvc directory and issue nmake (see documentation for more
precise instructions).

That said, did you try my previous suggestion with passing appropriate flags to cygwin?


Daniel Kochmański ;; aka jackdaniel | Przemyśl, Poland
TurtleWare - Daniel Kochmański      | www.turtleware.eu

"Be the change that you wish to see in the world." - Mahatma Gandhi

‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
On Wednesday, 25 November 2020 23:11, Garrett Dangerfield <garrett@dangerimp.com> wrote:

So I zapped the gcc/g++, etc. from cygwin and did an install of mingw 64 bit outside of cygwin.  I added the big directory from that to my path.

I did the "./configure --with-cmp=yes" and it finished:
config.status: creating ecl/config.h
config.status: creating ecl/config-internal.h
Configuration complete. To build ECL, issue make in this directory.

But make is failing:
$ make
cd build; make
make[1]: Entering directory '/cygdrive/c/Users/danger/Downloads/ecl-20.4.24/build'
c doc gc atomic
make[2]: Entering directory '/cygdrive/c/Users/danger/Downloads/ecl-20.4.24/build/atomic'
Making all in src
make[3]: Entering directory '/cygdrive/c/Users/danger/Downloads/ecl-20.4.24/build/atomic/src'
make  all-am
make[4]: Entering directory '/cygdrive/c/Users/danger/Downloads/ecl-20.4.24/build/atomic/src'
/bin/sh ../libtool  --tag=CC   --mode=compile gcc          -DHAVE_CONFIG_H   -I../src -I/cygdrive/c/Users/danger/Downloads/ecl-20.4.24/src/bdwgc/libatomic_ops/src   -Wall -Wextra -Wpedantic -Wno-long-long -g -O2  -D_THREAD_SAFE  -MT atomic_ops.lo -MD -MP -MF .deps/atomic_ops.Tpo -c -o atomic_ops.lo /cygdrive/c/Users/danger/Downloads/ecl-20.4.24/src/bdwgc/libatomic_ops/src/atomic_ops.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I../src -I/cygdrive/c/Users/danger/Downloads/ecl-20.4.24/src/bdwgc/libatomic_ops/src -Wall -Wextra -Wpedantic -Wno-long-long -g -O2 -D_THREAD_SAFE -MT atomic_ops.lo -MD -MP -MF .deps/atomic_ops.Tpo -c /cygdrive/c/Users/danger/Downloads/ecl-20.4.24/src/bdwgc/libatomic_ops/src/atomic_ops.c -o atomic_ops.o
gcc.exe: error: /cygdrive/c/Users/danger/Downloads/ecl-20.4.24/src/bdwgc/libatomic_ops/src/atomic_ops.c: No such file or directory
gcc.exe: fatal error: no input files
compilation terminated.
make[4]: *** [Makefile:610: atomic_ops.lo] Error 1
make[4]: Leaving directory '/cygdrive/c/Users/danger/Downloads/ecl-20.4.24/build/atomic/src'
make[3]: *** [Makefile:473: all] Error 2
make[3]: Leaving directory '/cygdrive/c/Users/danger/Downloads/ecl-20.4.24/build/atomic/src'
make[2]: *** [Makefile:475: all-recursive] Error 1
make[2]: Leaving directory '/cygdrive/c/Users/danger/Downloads/ecl-20.4.24/build/atomic'
make[1]: *** [Makefile:129: libeclatomic.a] Error 2
make[1]: Leaving directory '/cygdrive/c/Users/danger/Downloads/ecl-20.4.24/build'
make: *** [Makefile:65: all] Error 2

Obviously, on windows I still have to use cygwin as my shell because that's what configure expects.



On Wed, Nov 25, 2020 at 10:03 AM Daniel Kochmański <daniel@turtleware.eu> wrote:
So the problem seems to be quite clear: your ecl build doesn't have the C compiler enabled.
When you configure the build, include --with-cmp=yes (or builtin).

./configure --prefix=/my/cygwin/prefix --with-cmp=yes
make && make install

Then C compiler should be available (you may still need to call (ext:install-c-compiler), you need
to check it yourself because I don't remember whether bytecodes compiler is installed by default
on cygwin, it is for msvc).

If it still doesn't work, please include a result of calling this code snippet:

(format t "~&~@{~12@A ~S~%~}"
        :version (lisp-implementation-version)
        :vcs-id (ext:lisp-implementation-vcs-id)
        :os (software-type)
        :os-version (software-version)
        :machine-type (machine-type)
        :features *features*)