Created
August 12, 2016 23:52
-
-
Save SonoSooS/1d912b519d31aeea3d42d6b510e181bd to your computer and use it in GitHub Desktop.
public Makefile for compiling Python27 for the 3DS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#--------------------------------------------------------------------------------- | |
# Makefile by MarcusD (https://github.com/MarcuzD) © $(date +"%Y") | |
#--------------------------------------------------------------------------------- | |
ifeq ($(strip $(DEVKITPRO)),) | |
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>devkitPro") | |
endif | |
ifeq ($(strip $(DEVKITARM)),) | |
$(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM") | |
endif | |
TOPDIR ?= $(CURDIR) | |
include $(DEVKITARM)/base_tools | |
ifeq ($(strip $(CTRULIB)),) | |
export CTRULIB := $(DEVKITPRO)/libctru | |
endif | |
ifndef PYVERS | |
PYVERS := 2.7.12 | |
endif | |
ANAME := libpython$(shell echo $(PYVERS) | sed 's/\([0-9]*\.\([0-9]*\)\).*/\1/').a | |
OUTDIR := py3DS$(PYVERS) | |
PYDIR := Python-$(PYVERS) | |
PYLINK := https://www.python.org/ftp/python/$(PYVERS)/Python-$(PYVERS).tgz | |
PYFILE := py.tgz | |
#--------------------------------------------------------------------------------- | |
ARCH := -march=armv6k -mtune=mpcore -mfloat-abi=hard | |
CFLAGS := -g -Wall -O2 -mword-relocations \ | |
-ffunction-sections -fno-strict-aliasing \ | |
-fomit-frame-pointer -ffast-math \ | |
-DARM11 -D_3DS \ | |
$(ARCH) \ | |
-I$(CTRULIB)/include | |
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11 | |
ASFLAGS := -g $(ARCH) | |
LDFLAGS := -g $(ARCH) | |
.PHONY: all clean | |
all: distfPY | |
distfPY: linkPY | |
@[ -d "$(OUTDIR)" ] || mkdir -p $(OUTDIR) | |
@[ -d "$(OUTDIR)/include" ] || mkdir -p $(OUTDIR)/include | |
@[ -d "$(OUTDIR)/include/py3DS" ] || mkdir -p $(OUTDIR)/include/py3DS | |
@[ -d "$(OUTDIR)/lib" ] || mkdir -p $(OUTDIR)/lib | |
cp $(ANAME) $(OUTDIR)/lib/ | |
cp $(PYDIR)/Include/* $(OUTDIR)/include/py3DS | |
cp $(PYDIR)/pyconfig.h $(OUTDIR)/include/py3DS/ | |
cp $(PYDIR)/Lib/socket.py $(PYDIR)/Lib/socket.pyX | |
cat $(PYDIR)/Lib/socket.pyX | sed 's/'"'"'getpeername'"'"', //g' >$(PYDIR)/Lib/socket.py | |
rm $(PYDIR)/Lib/socket.pyX | |
cd $(PYDIR)/Lib && ls *.py -1 | xargs zip ../../$(OUTDIR)/python.zip && find json/ encodings/ -type f | xargs zip ../../$(OUTDIR)/python.zip | |
touch distfPY | |
linkPY: soospatchPY | |
cd $(PYDIR) && make LIBRARY="$(ANAME)" LDLIBRARY="$(ANAME)" $(ANAME) && cd .. && cp $(PYDIR)/$(ANAME) . && touch linkPY | |
soospatchPY: compilePY | |
cp $(PYDIR)/pyconfig.h $(PYDIR)/pyconfig.h_old | |
cat $(PYDIR)/pyconfig.h_old | sed 's/^\([^#][^#]*#undef PY_FORMAT_LONG_LONG.*\)/\#define PY_FORMAT_LONG_LONG \"ll\" \1/' | sed 's/^\([^#][^#]*#undef HAVE_FSTATVFS.*\)/\#undef HAVE_FSTATVFS \1/' | sed 's/#define HAVE_\(EXECV\|FORK\|GETEGID\|GETEUID\|GETGID\|GETPPID\|GETUID\|KILL\|PIPE\|POPEN\|SYSTEM\|TTYNAME\|SYMLINK\|UTIME_H\|FDATASYNC\|TZNAME\|DECL_TZNAME\|WORKING_TZSET\).*/#undef HAVE_\1/g' | sed 's/^#define HAVE_\(STATVFS\|SYS_STATVFS_H\|FDATASYNC\|SYMLINK\|EXECV\|FORK\|GETEGID\|GETEUID\|GETGID\|GETPPID\|GETUID\|KILL\|PIPE\|POPEN\|SYSTEM\|TTYNAME\|SYMLINK\|UTIME_H\|FDATASYNC\|TZNAME\|DECL_TZNAME\|WORKING_TZSET\).*/#undef HAVE_\1/' | sed 's/^\([^#][^#]*#undef HAVE_SELECT.*\)/\#define HAVE_SELECT \1/' | sed 's/^\([^#][^#]*#undef HAVE_GETADDRINFO.*\)/struct servent {char*s_name;char**s_aliases;int s_port;char*s_proto;};\nstruct protoent{char*p_name;char**p_aliases;int p_proto;};\n#define SOCK_RAW 3\n#define SOCK_SEQPACKET 5\n#define IN_CLASSA_NSHIFT 24 \1/g' >$(PYDIR)/pyconfig.h | |
cp $(PYDIR)/Modules/posixmodule.c $(PYDIR)/Modules/posixmodule.c_old | |
cat $(PYDIR)/Modules/posixmodule.c_old | sed 's/\(^[^rt]*time_t atime, mtime;.*\)/return NULL; \1/' | sed 's/\(^[^ri]*i = (int)umask(i);.*\)/return NULL; \1/' | sed 's/^\([^#][^#]*#undef HAVE_FSTATVFS.*\)/\#undef HAVE_FSTATVFS \1/' | sed 's/#define HAVE_\(EXECV\|FORK\|GETEGID\|GETEUID\|GETGID\|GETPPID\|GETUID\|KILL\|PIPE\|POPEN\|SYSTEM\|TTYNAME\|SYMLINK\|UTIME_H\|FDATASYNC\).*/#undef HAVE_\1/g' | sed 's/^#define HAVE_\(STATVFS\|SYS_STATVFS_H\|FDATASYNC\|FTIME\|SYMLINK\|EXECV\|FORK\|GETEGID\|GETEUID\|GETGID\|GETPPID\|GETUID\|KILL\|PIPE\|POPEN\|SYSTEM\|TTYNAME\|SYMLINK\|UTIME_H\|FDATASYNC\).*/#undef HAVE_\1/' >$(PYDIR)/Modules/posixmodule.c | |
cp $(PYDIR)/Modules/socketmodule.c $(PYDIR)/Modules/socketmodule.c_old | |
cat $(PYDIR)/Modules/socketmodule.c_old | sed 's/ sizeof(addr->sa_data)/ 28/g' >$(PYDIR)/Modules/socketmodule.c | |
#cp $(PYDIR)/Objects/exceptions.c $(PYDIR)/Objects/exceptions.c_old | |
#cat $(PYDIR)/Objects/exceptions.c_old | sed 's/ESHUTDOWN/110/g' >$(PYDIR)/Objects/exceptions.c | |
#cp $(PYDIR)/Python/pytime.c $(PYDIR)/Python/pytime.c_old | |
#cat $(PYDIR)/Python/pytime.c_old | sed 's/CLOCK_MONOTONIC/(clockid_t)4/g' >$(PYDIR)/Python/pytime.c | |
touch soospatchPY | |
compilePY: extractedPY patchPY | |
cd $(PYDIR) && ./configure CC="$(CC)" CXX="$(CXX)" AS="$(AS)" AR="$(AR)" OBJCOPY="$(OBJCOPY)" STRIP="$(STRIP)" NM="$(NM)" RANLIB="$(RANLIB)" CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" ASFLAGS="$(ASFLAGS)" LDFLAGS="$(LDFLAGS)" CONFIG_SITE="config.site" --disable-shared --without-threads --without-doc-strings --host=arm-none-eabi --build=`./config.guess` && cd .. && touch compilePY | |
patchPY: | |
cp $(PYDIR)/configure $(PYDIR)/configure_old | |
cat $(PYDIR)/configure_old | sed 's/ \*\-\*\-linux\*)/ \*\-\*\-linux\*\|arm\-none\-eabi)/g' >$(PYDIR)/configure | |
echo ac_cv_file__dev_ptmx=no >$(PYDIR)/config.site | |
echo ac_cv_file__dev_ptc=no >>$(PYDIR)/config.site | |
echo ac_cv_lib_dl_dlopen=no >>$(PYDIR)/config.site | |
cp $(PYDIR)/Modules/Setup.dist $(PYDIR)/Modules/Setup.dist_old | |
cat $(PYDIR)/Modules/Setup.dist_old | sed 's/^\([^#].* pwdmodule\.c.*\)/#\1/' | sed 's/^#\(array\|cmath\|math\|_struct\|operator\|_random\|_collections\|itertools\|strop\|unicodedata\|_io\|_csv\|_md5\|_sha\|_sha256\|_sha512\|binascii\|zlib\|select\|cStringIO\|time\|_functools\|_socket\|datetime\|_bisect\)\(.*\)/\1\2/' | sed "s#\\(zlib[^\$$]*\\)\$$(prefix)\\([^\$$]*\\)\$$(exec_prefix)\\(.*\\)#\1$(DEVKITPRO)/portlibs/armv6k\2$(DEVKITPRO)/portlibs/armv6k\3#" >$(PYDIR)/Modules/Setup.dist | |
touch patchPY | |
extractedPY: $(PYFILE) | |
tar xfzv $(PYFILE) && touch extractedPY | |
$(PYFILE): | |
wget -O "$(PYFILE)" "$(PYLINK)" || curl -Lo "$(PYFILE)" "$(PYLINK)" | |
clean: | |
@rm -rf $(PYDIR) $(PYFILE) patchPY extractedPY compilePY linkPY distfPY soospatchPY libpython*.a |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment