Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 20 additions & 6 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
all: help

prefix=/usr
EXTERNALS=externals
LIB_PATH=$(prefix)/share/pixie/
BIN_PATH=$(prefix)/bin/pixie
DESTDIR=

PYTHON ?= python2
PYTHONPATH=$$PYTHONPATH:$(EXTERNALS)/pypy
Expand All @@ -18,17 +22,17 @@ help:
@echo "make build_no_jit - build without jit"
@echo "make fetch_externals - download and unpack external deps"

build_with_jit: fetch_externals
build_with_jit: fetch_externals standard_path.py
@if [ ! -d /usr/local/include/boost -a ! -d /usr/include/boost ] ; then echo "Boost C++ Library not found" && false; fi && \
$(PYTHON) $(EXTERNALS)/pypy/rpython/bin/rpython $(COMMON_BUILD_OPTS) --opt=jit target.py && \
make compile_basics

build_no_jit: fetch_externals
build_no_jit: fetch_externals standard_path.py
@if [ ! -d /usr/local/include/boost -a ! -d /usr/include/boost ] ; then echo "Boost C++ Library not found" && false; fi && \
$(PYTHON) $(EXTERNALS)/pypy/rpython/bin/rpython $(COMMON_BUILD_OPTS) target.py && \
make compile_basics

build_no_jit_shared: fetch_externals
build_no_jit_shared: fetch_externals standard_path.py
@if [ ! -d /usr/local/include/boost -a ! -d /usr/include/boost ] ; then echo "Boost C++ Library not found" && false; fi && \
$(PYTHON) $(EXTERNALS)/pypy/rpython/bin/rpython $(COMMON_BUILD_OPTS) --shared target.py && \
make compile_basics
Expand All @@ -38,13 +42,13 @@ compile_basics:
@echo -e "\n\n\n\nWARNING: Compiling core libs. If you want to modify one of these files delete the .pxic files first\n\n\n\n"
./pixie-vm -c pixie/uv.pxi -c pixie/io.pxi -c pixie/stacklets.pxi -c pixie/stdlib.pxi -c pixie/repl.pxi

build_preload_with_jit: fetch_externals
build_preload_with_jit: fetch_externals standard_path.py
$(PYTHON) $(EXTERNALS)/pypy/rpython/bin/rpython $(COMMON_BUILD_OPTS) --opt=jit target_preload.py 2>&1 >/dev/null | grep -v 'WARNING'

build_preload_no_jit: fetch_externals
build_preload_no_jit: fetch_externals standard_path.py
$(PYTHON) $(EXTERNALS)/pypy/rpython/bin/rpython $(COMMON_BUILD_OPTS) target_preload.py

build: fetch_externals
build: fetch_externals standard_path.py
$(PYTHON) $(EXTERNALS)/pypy/rpython/bin/rpython $(COMMON_BUILD_OPTS) $(JIT_OPTS) $(TARGET_OPTS)

fetch_externals: $(EXTERNALS)/pypy ./lib
Expand Down Expand Up @@ -80,6 +84,14 @@ run_built_tests: pixie-vm
run_interpreted_tests: target.py
PYTHONPATH=$(PYTHONPATH) $(PYTHON) target.py run-tests.pxi

standard_path.py:
echo "standard_path = \"$(LIB_PATH)\"" > $@

install: pixie-vm
install -D pixie-vm $(DESTDIR)$(BIN_PATH)
install -d $(DESTDIR)$(LIB_PATH)
cp -R pixie $(DESTDIR)$(LIB_PATH)

compile_tests:
find "tests" -name "*.pxi" | xargs -L1 ./pixie-vm -l "tests" -c

Expand All @@ -95,3 +107,5 @@ clean: clean_pxic
rm -rf ./externals
rm -f ./pixie-vm
rm -f ./*.pyc

.PHONY: standard_path.py compile_tests compile_src clean_pxic clean install
11 changes: 11 additions & 0 deletions target.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from pixie.vm.atom import Atom
from pixie.vm.persistent_vector import EMPTY as EMPTY_VECTOR
from pixie.vm.util import unicode_from_utf8, unicode_to_utf8
from standard_path import standard_path
import sys
import os
import os.path as path
Expand Down Expand Up @@ -236,6 +237,14 @@ def add_to_load_paths(path):
rt.reset_BANG_(LOAD_PATHS.deref(), rt.conj(rt.deref(LOAD_PATHS.deref()), rt.wrap(path)))


def add_env_to_load_path():
pp = os.environ.get("PIXIE_PATH")
if pp is not None:
LP = rt.deref(LOAD_PATHS.deref())
for path in pp.split(":"):
LP = rt.conj(LP, rt.wrap(path))
LOAD_PATHS.set_root(Atom(LP))

def init_load_path(self_path):
if not path.isfile(self_path):
self_path = find_in_path(self_path)
Expand All @@ -248,6 +257,8 @@ def init_load_path(self_path):
LOAD_PATHS.set_root(Atom(EMPTY_VECTOR.conj(rt.wrap(self_path))))
# just for run_load_stdlib (global variables can't be assigned to)
load_path.set_root(rt.wrap(self_path))
add_env_to_load_path()
LOAD_PATHS.set_root(Atom(rt.conj(rt.deref(LOAD_PATHS.deref()), rt.wrap(standard_path))))

def dirname(path):
return rpath.sep.join(path.split(rpath.sep)[0:-1])
Expand Down