|
root / base / usr / src / tools / Makefile.python
Makefile.python Makefile 103 lines 3.2 KB
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#

#
# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
# Copyright 2018 OmniOS Community Edition (OmniOSce) Association.
#

#
# This Makefile provides a framework for building the onbld python
# modules with multiple versions of python.
#
# It expects as input:
#
#    PYSRCS   - List of python source files, these are also delivered as
#               build product.
#
#    PYOBJS   - List of compiled python (.pyc) files, with no directory prefix
#
#    PYTOPDIR - Absolute (including $(ROOT)) path to which files will
#               be installed, up until the version specific component.
#
#    PYMODDIR - Relative path to which files will be installed, below
#               the version specific component.
#
#    For example, to install to /opt/onbld/lib/onbld/python*/bar/
#
#          PYTOPDIR = $(ROOTONBLDLIB)
#          PYMODDIR = bar
#
#
# It provides as output:
#
#    ROOTPYFILES - The list of $(ROOT)-relative paths to which python
#                  source and binary files will be installed.  Your
#                  Makefile's 'install' target should depend upon
#                  this.
#
#    PYVERSOBJS  - The list of paths to compiled python build products,
#                  including their subdirectory.
#
#    pyclobber   - A target on which 'clobber' should depend, which
#                  removes the per-version python directories and the
#                  output within them.
#

# Hammerhead: ship .py sources only; skip .pyc precompile.
# CPython compiles .pyc on-demand at first import, so the precompile is
# a startup-latency optimization, not a correctness requirement.
# Dropping it removes the build-time Python dependency entirely — Python
# is a coral package, not in base proto, so a fresh self-host install
# can't run the precompile anyway.
PYFILES = $(PYSRCS)

ROOTPYDIR = $(PYTOPDIR)/python$(PYVER)/$(PYMODDIR)
ROOTPYFILES	= $(PYFILES:%=$(ROOTPYDIR)/%)

$(ROOTPYFILES) : FILEMODE = 0444

PYVERSDIRS = python$(PYVER)

PYVERSOBJS = $(PYOBJS:%=python$(PYVER)/%)

CLOBBERFILES += $(PYVERSOBJS)
CLOBBERDIRS += $(PYVERSDIRS)

.KEEP_STATE:

$(ROOTPYDIR)/%.py: ../%.py
	$(INS.pyfile)

pyclobber:
	$(RM) $(CLOBBERFILES)
	$(RM) -rf $(CLOBBERDIRS)

# Python module compilation
python$(PYVER)/__pycache__/%.cpython$(PYPKGVERS).pyc: ../%.py
	@[ -d $(@D) ] || mkdir -p $(@D)
	$(RM) $@
	$(PYTHON3) -mpy_compile $<
	$(MV) ../__pycache__/$(*).cpython$(PYPKGVERS).pyc $@

$(ROOTPYDIR)/__pycache__/%.pyc: python$(PYVER)/__pycache__/%.pyc
	$(INS.pyfile)