on master help sign in
Build RTS as shared library
f8fcd92David Christiansen
.gitignore+4
@@ -3,6 +3,9 @@ cabal-dev/
3*.ibc
3*.ibc
4*.o
4*.o
5*.a
5*.a
6+*.so
7+*.dll
8+*.dylib
6*.swp
9*.swp
7*~
10*~
8custom.mk
11custom.mk
@@ -11,3 +14,4 @@ test/test???/output
11test/reg???/output
14test/reg???/output
12test/test???/*.exe
15test/test???/*.exe
13test/reg???/*.exe
16test/reg???/*.exe
17+
config.mk+3
@@ -1,5 +1,8 @@
1GMP_INCLUDE_DIR :=
1GMP_INCLUDE_DIR :=
2CC :=gcc
2CC :=gcc
3+SHLIB_SUFFIX :=.so
4+# Mac OS X: SHLIB_SUFFIX :=.dylib
5+# Windows: SHLIB_SUFFIX :=.DLL
3CABAL :=cabal
6CABAL :=cabal
4CABALFLAGS :=
7CABALFLAGS :=
5## Enable Java RTS:
8## Enable Java RTS:
rts/Makefile+8−4
@@ -2,26 +2,30 @@ include ../config.mk
2
2
3OBJS = idris_rts.o idris_heap.o idris_gc.o idris_gmp.o idris_stdfgn.o idris_bitstring.o idris_opts.o idris_stats.o
3OBJS = idris_rts.o idris_heap.o idris_gc.o idris_gmp.o idris_stdfgn.o idris_bitstring.o idris_opts.o idris_stats.o
4HDRS = idris_rts.h idris_heap.h idris_gc.h idris_gmp.h idris_stdfgn.h idris_bitstring.h idris_opts.h idris_stats.h
4HDRS = idris_rts.h idris_heap.h idris_gc.h idris_gmp.h idris_stdfgn.h idris_bitstring.h idris_opts.h idris_stats.h
5−CFLAGS = -O2 -Wall
5+CFLAGS = -O2 -Wall -fPIC
6
6
7ifneq ($(GMP_INCLUDE_DIR),)
7ifneq ($(GMP_INCLUDE_DIR),)
8 CFLAGS += -isystem $(GMP_INCLUDE_DIR)
8 CFLAGS += -isystem $(GMP_INCLUDE_DIR)
9endif
9endif
10
10
11LIBTARGET = libidris_rts.a
11LIBTARGET = libidris_rts.a
12+DYLIBTARGET = libidris_rts$(SHLIB_SUFFIX)
12
13
13−check : $(LIBTARGET)
14+check : $(LIBTARGET) $(DYLIBTARGET)
14
15
15$(LIBTARGET) : $(OBJS)
16$(LIBTARGET) : $(OBJS)
16 ar r $(LIBTARGET) $(OBJS)
17 ar r $(LIBTARGET) $(OBJS)
17 ranlib $(LIBTARGET)
18 ranlib $(LIBTARGET)
18
19
20+$(DYLIBTARGET) : $(OBJS)
21+ $(CC) $(CFLAGS) -shared -o $(DYLIBTARGET) $(OBJS)
22+
19install : .PHONY
23install : .PHONY
20 mkdir -p $(TARGET)
24 mkdir -p $(TARGET)
21− install $(LIBTARGET) $(HDRS) $(TARGET)
25+ install $(LIBTARGET) $(DYLIBTARGET) $(HDRS) $(TARGET)
22
26
23clean : .PHONY
27clean : .PHONY
24− rm -f $(OBJS) $(LIBTARGET)
28+ rm -f $(OBJS) $(LIBTARGET) $(DYLIBTARGET)
25
29
26idris_rts.o: idris_rts.h
30idris_rts.o: idris_rts.h
27
31
src/Idris/REPL.hs+10
@@ -552,6 +552,16 @@ idrisMain opts =
552 [] -> setIBCSubDir ""
552 [] -> setIBCSubDir ""
553 (d:_) -> setIBCSubDir d
553 (d:_) -> setIBCSubDir d
554 setImportDirs importdirs
554 setImportDirs importdirs
555+ -- attempt to load the RTS as a shared lib in the interpreter
556+ idrisCatch (do rtslib <- lift (getDataFileName $ "rts" </> "libidris_rts")
557+ handle <- lift (tryLoadLib rtslib)
558+ case handle of
559+ Nothing -> return ()
560+ Just x -> do i <- getIState
561+ let libs = idris_dynamic_libs i
562+ putIState $ i { idris_dynamic_libs = x:libs })
563+ (\e -> iputStrLn (show e))
564+
555 addPkgDir "base"
565 addPkgDir "base"
556 mapM_ addPkgDir pkgdirs
566 mapM_ addPkgDir pkgdirs
557 elabPrims
567 elabPrims