mirror of
https://github.com/davidgiven/fluxengine.git
synced 2025-10-31 11:17:01 -07:00
We can now build both the CLI and GUI binaries!
This commit is contained in:
6
build.py
6
build.py
@@ -12,4 +12,8 @@ clibrary(name="protocol", hdrs={"protocol.h": "./protocol.h"})
|
||||
proto(name="fl2_proto", srcs=["lib/fl2.proto"])
|
||||
protocc(name="fl2_proto_lib", srcs=["+fl2_proto"])
|
||||
|
||||
export(name="all", items={"fluxengine": "src+fluxengine"}, deps=["+protocol"])
|
||||
export(
|
||||
name="all",
|
||||
items={"fluxengine": "src+fluxengine", "fluxengine-gui": "src/gui"},
|
||||
deps=["+protocol"],
|
||||
)
|
||||
|
||||
13
build/utils.py
Normal file
13
build/utils.py
Normal file
@@ -0,0 +1,13 @@
|
||||
from build.ab import Rule, normalrule, Target, filenameof
|
||||
from os.path import basename
|
||||
|
||||
|
||||
@Rule
|
||||
def objectify(self, name, src: Target, symbol):
|
||||
normalrule(
|
||||
replaces=self,
|
||||
ins=[src],
|
||||
outs=[basename(filenameof(src)) + ".h"],
|
||||
commands=["xxd -i -n " + symbol + " {ins} > {outs}"],
|
||||
label="OBJECTIFY",
|
||||
)
|
||||
14
extras/build.py
Normal file
14
extras/build.py
Normal file
@@ -0,0 +1,14 @@
|
||||
from build.utils import objectify
|
||||
from build.c import clibrary
|
||||
|
||||
icons = ["fluxfile", "hardware", "icon", "imagefile"]
|
||||
|
||||
clibrary(
|
||||
name="icons",
|
||||
hdrs={
|
||||
f"icons/{n}.h": objectify(
|
||||
name=n + "_h", src=f"./{n}.png", symbol=f"icon_{n}_png"
|
||||
)
|
||||
for n in icons
|
||||
},
|
||||
)
|
||||
@@ -117,10 +117,12 @@ clibrary(
|
||||
"lib/imagereader/imagereader.h": "./imagereader/imagereader.h",
|
||||
"lib/imagewriter/imagewriter.h": "./imagewriter/imagewriter.h",
|
||||
"lib/layout.h": "./layout.h",
|
||||
"lib/logger.h": "./logger.h",
|
||||
"lib/proto.h": "./proto.h",
|
||||
"lib/readerwriter.h": "./readerwriter.h",
|
||||
"lib/sector.h": "./sector.h",
|
||||
"lib/usb/usb.h": "./usb/usb.h",
|
||||
"lib/usb/usbfinder.h": "./usb/usbfinder.h",
|
||||
"lib/utils.h": "./utils.h",
|
||||
"lib/vfs/sectorinterface.h": "./vfs/sectorinterface.h",
|
||||
"lib/vfs/vfs.h": "./vfs/vfs.h",
|
||||
|
||||
33
scripts/build.py
Normal file
33
scripts/build.py
Normal file
@@ -0,0 +1,33 @@
|
||||
from build.ab import Rule, normalrule, Targets
|
||||
from build.c import cxxprogram
|
||||
|
||||
encoders = {}
|
||||
|
||||
|
||||
@Rule
|
||||
def protoencode(self, name, srcs: Targets, proto, symbol):
|
||||
if proto not in encoders:
|
||||
r = cxxprogram(
|
||||
name="protoencode_" + proto,
|
||||
srcs=["scripts/protoencode.cc"],
|
||||
cflags=["-DPROTO=" + proto],
|
||||
deps=[
|
||||
"lib+config_proto_lib",
|
||||
"tests+test_proto_lib",
|
||||
"+protobuf_lib",
|
||||
"+fmt_lib",
|
||||
],
|
||||
)
|
||||
encoders[proto] = r
|
||||
else:
|
||||
r = encoders[proto]
|
||||
r.materialise()
|
||||
|
||||
normalrule(
|
||||
replaces=self,
|
||||
ins=srcs,
|
||||
outs=[f"{name}.cc"],
|
||||
deps=[r],
|
||||
commands=["{deps[0]} {ins} {outs} " + symbol],
|
||||
label="PROTOENCODE",
|
||||
)
|
||||
64
src/formats/build.py
Normal file
64
src/formats/build.py
Normal file
@@ -0,0 +1,64 @@
|
||||
from build.ab import normalrule
|
||||
from build.c import clibrary
|
||||
from scripts.build import protoencode
|
||||
|
||||
formats = [
|
||||
"40track_drive",
|
||||
"acornadfs",
|
||||
"acorndfs",
|
||||
"aeslanier",
|
||||
"agat",
|
||||
"amiga",
|
||||
"ampro",
|
||||
"apple2_drive",
|
||||
"apple2",
|
||||
"atarist",
|
||||
"bk",
|
||||
"brother",
|
||||
"commodore",
|
||||
"eco1",
|
||||
"epsonpf10",
|
||||
"f85",
|
||||
"fb100",
|
||||
"hplif",
|
||||
"ibm",
|
||||
"icl30",
|
||||
"mac",
|
||||
"micropolis",
|
||||
"ms2000",
|
||||
"mx",
|
||||
"n88basic",
|
||||
"northstar",
|
||||
"psos",
|
||||
"rolandd20",
|
||||
"rx50",
|
||||
"shugart_drive",
|
||||
"smaky6",
|
||||
"tids990",
|
||||
"tiki",
|
||||
"victor9k",
|
||||
"zilogmcz",
|
||||
]
|
||||
|
||||
normalrule(
|
||||
name="table_cc",
|
||||
ins=[f"./{name}.textpb" for name in formats],
|
||||
deps=["scripts/mktable.sh"],
|
||||
outs=["table.cc"],
|
||||
commands=[
|
||||
"sh scripts/mktable.sh formats " + (" ".join(formats)) + " > {outs}"
|
||||
],
|
||||
label="MKTABLE",
|
||||
)
|
||||
|
||||
encoded = [
|
||||
protoencode(
|
||||
name=f"{name}_cc",
|
||||
srcs=[f"./{name}.textpb"],
|
||||
proto="ConfigProto",
|
||||
symbol=f"formats_{name}_pb",
|
||||
)
|
||||
for name in formats
|
||||
]
|
||||
|
||||
clibrary(name="formats", srcs=[".+table_cc"] + encoded)
|
||||
57
src/gui/build.py
Normal file
57
src/gui/build.py
Normal file
@@ -0,0 +1,57 @@
|
||||
from build.ab import emit
|
||||
from build.c import cxxprogram
|
||||
|
||||
emit(
|
||||
"""
|
||||
WX_CONFIG ?= wx-config
|
||||
ifneq ($(strip $(shell command -v $(WX_CONFIG) >/dev/null 2>&1; echo $$?)),0)
|
||||
$(error Required binary 'wx-config' not found.)
|
||||
endif
|
||||
|
||||
WX_CFLAGS := $(shell $(WX_CONFIG) --cxxflags core base adv aui richtext)
|
||||
WX_LDFLAGS := $(shell $(WX_CONFIG) --libs core base adv aui richtext)
|
||||
"""
|
||||
)
|
||||
|
||||
cxxprogram(
|
||||
name="gui",
|
||||
srcs=[
|
||||
"./browserpanel.cc",
|
||||
"./customstatusbar.cc",
|
||||
"./explorerpanel.cc",
|
||||
"./filesystemmodel.cc",
|
||||
"./fileviewerwindow.cc",
|
||||
"./fluxviewercontrol.cc",
|
||||
"./fluxviewerwindow.cc",
|
||||
"./histogramviewer.cc",
|
||||
"./iconbutton.cc",
|
||||
"./idlepanel.cc",
|
||||
"./imagerpanel.cc",
|
||||
"./jobqueue.cc",
|
||||
"./main.cc",
|
||||
"./mainwindow.cc",
|
||||
"./texteditorwindow.cc",
|
||||
"./textviewerwindow.cc",
|
||||
"./visualisationcontrol.cc",
|
||||
"./layout.cpp",
|
||||
],
|
||||
cflags=["$(WX_CFLAGS)"],
|
||||
ldflags=["$(WX_LDFLAGS)"],
|
||||
deps=[
|
||||
"+fl2_proto_lib",
|
||||
"+protocol",
|
||||
"arch",
|
||||
"dep/adflib",
|
||||
"dep/fatfs",
|
||||
"dep/hfsutils",
|
||||
"dep/libusbp",
|
||||
"extras+icons",
|
||||
"lib",
|
||||
"lib+config_proto_lib",
|
||||
"src/formats",
|
||||
"src/gui/drivetypes",
|
||||
"+z_lib",
|
||||
"+fmt_lib",
|
||||
"+protobuf_lib",
|
||||
],
|
||||
)
|
||||
40
src/gui/drivetypes/build.py
Normal file
40
src/gui/drivetypes/build.py
Normal file
@@ -0,0 +1,40 @@
|
||||
from build.ab import normalrule
|
||||
from build.c import clibrary
|
||||
from scripts.build import protoencode
|
||||
|
||||
drivetypes = [
|
||||
"35_40",
|
||||
"35_80",
|
||||
"525_40M",
|
||||
"525_40",
|
||||
"525_80M",
|
||||
"525_80",
|
||||
"8_38",
|
||||
"8_77",
|
||||
"apple2",
|
||||
]
|
||||
|
||||
normalrule(
|
||||
name="drivetypes_cc",
|
||||
ins=[f"./{name}.textpb" for name in drivetypes],
|
||||
deps=["scripts/mktable.sh"],
|
||||
outs=["table.cc"],
|
||||
commands=[
|
||||
"sh scripts/mktable.sh drivetypes "
|
||||
+ (" ".join(drivetypes))
|
||||
+ " > {outs}"
|
||||
],
|
||||
label="MKTABLE",
|
||||
)
|
||||
|
||||
encoded = [
|
||||
protoencode(
|
||||
name=f"{name}_cc",
|
||||
srcs=[f"./{name}.textpb"],
|
||||
proto="ConfigProto",
|
||||
symbol=f"drivetypes_{name}_pb",
|
||||
)
|
||||
for name in drivetypes
|
||||
]
|
||||
|
||||
clibrary(name="drivetypes", srcs=[".+drivetypes_cc"] + encoded)
|
||||
@@ -4,7 +4,7 @@
|
||||
#include "lib/decoders/decoders.h"
|
||||
#include "lib/proto.h"
|
||||
#include "gui.h"
|
||||
#include "lib/layout.h"
|
||||
#include "layout.h"
|
||||
#include "jobqueue.h"
|
||||
|
||||
static Bytes fakeBits(const std::vector<bool>& bits)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef FILEVIEWERWINDOW_H
|
||||
#define FILEVIEWERWINDOW_H
|
||||
|
||||
#include "lib/layout.h"
|
||||
#include "layout.h"
|
||||
|
||||
class FileViewerWindow : public FileViewerWindowGen
|
||||
{
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef FLUXVIEWERWINDOW_H
|
||||
#define FLUXVIEWERWINDOW_H
|
||||
|
||||
#include "lib/layout.h"
|
||||
#include "layout.h"
|
||||
|
||||
class TrackFlux;
|
||||
|
||||
|
||||
@@ -16,9 +16,9 @@
|
||||
#include <wx/mstream.h>
|
||||
#include <wx/image.h>
|
||||
#include <wx/bitmap.h>
|
||||
#include ".obj/extras/hardware.h"
|
||||
#include ".obj/extras/fluxfile.h"
|
||||
#include ".obj/extras/imagefile.h"
|
||||
#include "icons/hardware.h"
|
||||
#include "icons/fluxfile.h"
|
||||
#include "icons/imagefile.h"
|
||||
|
||||
#define CONFIG_SELECTEDSOURCE "SelectedSource"
|
||||
#define CONFIG_DEVICE "Device"
|
||||
@@ -103,11 +103,11 @@ public:
|
||||
parent->AddPage(this, "idle");
|
||||
|
||||
_imageList.Add(
|
||||
createBitmap(extras_hardware_png, sizeof(extras_hardware_png)));
|
||||
createBitmap(icon_hardware_png, sizeof(icon_hardware_png)));
|
||||
_imageList.Add(
|
||||
createBitmap(extras_fluxfile_png, sizeof(extras_fluxfile_png)));
|
||||
createBitmap(icon_fluxfile_png, sizeof(icon_fluxfile_png)));
|
||||
_imageList.Add(
|
||||
createBitmap(extras_imagefile_png, sizeof(extras_imagefile_png)));
|
||||
createBitmap(icon_imagefile_png, sizeof(icon_imagefile_png)));
|
||||
|
||||
UpdateSources();
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "lib/layout.h"
|
||||
#include "layout.h"
|
||||
|
||||
#include "icon.png.h"
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef TEXTEDITORWINDOW_H
|
||||
#define TEXTEDITORWINDOW_H
|
||||
|
||||
#include "lib/layout.h"
|
||||
#include "layout.h"
|
||||
|
||||
class EditorSaveEvent : public wxEvent
|
||||
{
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef TEXTVIEWERWINDOW_H
|
||||
#define TEXTVIEWERWINDOW_H
|
||||
|
||||
#include "lib/layout.h"
|
||||
#include "layout.h"
|
||||
|
||||
class TextViewerWindow : public TextViewerWindowGen
|
||||
{
|
||||
|
||||
16
tests/build.py
Normal file
16
tests/build.py
Normal file
@@ -0,0 +1,16 @@
|
||||
from build.c import clibrary
|
||||
from build.protobuf import proto, protocc
|
||||
|
||||
|
||||
proto(
|
||||
name="test_proto",
|
||||
srcs=[
|
||||
"./testproto.proto",
|
||||
],
|
||||
)
|
||||
|
||||
protocc(
|
||||
name="test_proto_lib",
|
||||
srcs=[".+test_proto"],
|
||||
deps=["lib+config_proto", "arch+arch_proto"],
|
||||
)
|
||||
Reference in New Issue
Block a user