forked from platformio/platformio-core
Resolved issue #1"Build referred libraries"
This commit is contained in:
@@ -23,6 +23,7 @@ ARDUINO_FLAGS = [
|
|||||||
"-DARDUINO=%d" % ARDUINO_VERSION,
|
"-DARDUINO=%d" % ARDUINO_VERSION,
|
||||||
"-DARDUINO_%s" % BOARD_OPTIONS['build.board']
|
"-DARDUINO_%s" % BOARD_OPTIONS['build.board']
|
||||||
]
|
]
|
||||||
|
|
||||||
# usb flags
|
# usb flags
|
||||||
if "build.usb_product" in BOARD_OPTIONS:
|
if "build.usb_product" in BOARD_OPTIONS:
|
||||||
ARDUINO_FLAGS += [
|
ARDUINO_FLAGS += [
|
||||||
@@ -32,12 +33,18 @@ if "build.usb_product" in BOARD_OPTIONS:
|
|||||||
'"', "")
|
'"', "")
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# include board variant
|
||||||
|
env.VariantDir(
|
||||||
|
join("$BUILD_DIR", "variant"),
|
||||||
|
join("$PLATFORMFW_DIR", "variants", BOARD_OPTIONS['build.variant'])
|
||||||
|
)
|
||||||
|
|
||||||
env.Append(
|
env.Append(
|
||||||
ASFLAGS=ARDUINO_FLAGS,
|
ASFLAGS=ARDUINO_FLAGS,
|
||||||
CCFLAGS=ARDUINO_FLAGS,
|
CCFLAGS=ARDUINO_FLAGS,
|
||||||
CPPPATH=[
|
CPPPATH=[
|
||||||
join("$BUILD_DIR", "core"),
|
join("$BUILD_DIR", "core"),
|
||||||
join("$PLATFORMFW_DIR", "variants", BOARD_OPTIONS['build.variant'])
|
join("$BUILD_DIR", "variant")
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -24,12 +24,18 @@ ENERGIA_FLAGS = [
|
|||||||
"-DENERGIA=%d" % ENERGIA_VERSION
|
"-DENERGIA=%d" % ENERGIA_VERSION
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# include board variant
|
||||||
|
env.VariantDir(
|
||||||
|
join("$BUILD_DIR", "variant"),
|
||||||
|
join("$PLATFORMFW_DIR", "variants", BOARD_OPTIONS['build.variant'])
|
||||||
|
)
|
||||||
|
|
||||||
env.Append(
|
env.Append(
|
||||||
ASFLAGS=ENERGIA_FLAGS,
|
ASFLAGS=ENERGIA_FLAGS,
|
||||||
CCFLAGS=ENERGIA_FLAGS,
|
CCFLAGS=ENERGIA_FLAGS,
|
||||||
CPPPATH=[
|
CPPPATH=[
|
||||||
join("$BUILD_DIR", "core"),
|
join("$BUILD_DIR", "core"),
|
||||||
join("$PLATFORMFW_DIR", "variants", BOARD_OPTIONS['build.variant'])
|
join("$BUILD_DIR", "variant")
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -1,8 +1,9 @@
|
|||||||
# Copyright (C) Ivan Kravets <me@ikravets.com>
|
# Copyright (C) Ivan Kravets <me@ikravets.com>
|
||||||
# See LICENSE for details.
|
# See LICENSE for details.
|
||||||
|
|
||||||
from os import walk
|
import re
|
||||||
from os.path import isfile, join
|
from os import listdir, walk
|
||||||
|
from os.path import isdir, isfile, join
|
||||||
from time import sleep
|
from time import sleep
|
||||||
|
|
||||||
from serial import Serial
|
from serial import Serial
|
||||||
@@ -17,10 +18,34 @@ def BuildLibrary(env, variant_dir, library_dir):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def BuildDependentLibraries(env, src_dir):
|
||||||
|
libs = []
|
||||||
|
for deplibfile in env.GetDependentLibraries(src_dir):
|
||||||
|
for lsd_dir in env['LIBSOURCE_DIRS']:
|
||||||
|
lsd_dir = env.subst(lsd_dir)
|
||||||
|
if not isdir(lsd_dir):
|
||||||
|
continue
|
||||||
|
for libname in listdir(lsd_dir):
|
||||||
|
if not isfile(join(lsd_dir, libname, deplibfile)):
|
||||||
|
continue
|
||||||
|
_libbuild_dir = join("$BUILD_DIR", libname)
|
||||||
|
env.Append(CPPPATH=[_libbuild_dir])
|
||||||
|
libs.append(
|
||||||
|
env.BuildLibrary(_libbuild_dir, join(lsd_dir, libname)))
|
||||||
|
return libs
|
||||||
|
|
||||||
|
|
||||||
def BuildFirmware(env, libslist):
|
def BuildFirmware(env, libslist):
|
||||||
src = env.Clone()
|
src = env.Clone()
|
||||||
vdirs = src.VariantDirRecursive(join("$BUILD_DIR", "src"),
|
vdirs = src.VariantDirRecursive(
|
||||||
join("$PROJECT_DIR", "src"))
|
join("$BUILD_DIR", "src"), join("$PROJECT_DIR", "src"))
|
||||||
|
|
||||||
|
# build source's dependent libs
|
||||||
|
for vdir in vdirs:
|
||||||
|
_libs = src.BuildDependentLibraries(vdir)
|
||||||
|
if _libs:
|
||||||
|
libslist += _libs
|
||||||
|
|
||||||
return src.Program(
|
return src.Program(
|
||||||
join("$BUILD_DIR", "firmware"),
|
join("$BUILD_DIR", "firmware"),
|
||||||
[src.GlobCXXFiles(vdir) for vdir in vdirs],
|
[src.GlobCXXFiles(vdir) for vdir in vdirs],
|
||||||
@@ -38,6 +63,14 @@ def GlobCXXFiles(env, path):
|
|||||||
return files
|
return files
|
||||||
|
|
||||||
|
|
||||||
|
def GetDependentLibraries(env, src_dir):
|
||||||
|
deplibs = []
|
||||||
|
regexp = re.compile(r"^#include\s+<([^>]+)>", re.M)
|
||||||
|
for node in env.GlobCXXFiles(src_dir):
|
||||||
|
deplibs += regexp.findall(node.get_text_contents())
|
||||||
|
return deplibs
|
||||||
|
|
||||||
|
|
||||||
def VariantDirRecursive(env, variant_dir, src_dir, duplicate=True):
|
def VariantDirRecursive(env, variant_dir, src_dir, duplicate=True):
|
||||||
# add root dir by default
|
# add root dir by default
|
||||||
variants = [variant_dir]
|
variants = [variant_dir]
|
||||||
@@ -101,8 +134,10 @@ def exists(_):
|
|||||||
|
|
||||||
def generate(env):
|
def generate(env):
|
||||||
env.AddMethod(BuildLibrary)
|
env.AddMethod(BuildLibrary)
|
||||||
|
env.AddMethod(BuildDependentLibraries)
|
||||||
env.AddMethod(BuildFirmware)
|
env.AddMethod(BuildFirmware)
|
||||||
env.AddMethod(GlobCXXFiles)
|
env.AddMethod(GlobCXXFiles)
|
||||||
|
env.AddMethod(GetDependentLibraries)
|
||||||
env.AddMethod(VariantDirRecursive)
|
env.AddMethod(VariantDirRecursive)
|
||||||
env.AddMethod(ParseBoardOptions)
|
env.AddMethod(ParseBoardOptions)
|
||||||
env.AddMethod(ResetDevice)
|
env.AddMethod(ResetDevice)
|
||||||
|
Reference in New Issue
Block a user