diff --git a/Makefile b/Makefile index 3023e0f92..b5d3f85aa 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ C = $(words $N)$(eval N := x $N) ECHO = python3 $(I)/scripts/echo_progress.py --stepno=$C --nsteps=$T endif -# determine number of parallel compiles based on OS +# Optimize parallel build configuration UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Linux) EXTRA_CPPFLAGS = -D LINUX @@ -29,7 +29,9 @@ ifeq ($(UNAME_S),Darwin) EXTRA_CPPFLAGS = -D OSX -Wno-tautological-constant-out-of-range-compare JOBS ?= $(shell sysctl -n hw.ncpu) endif -MAKEFLAGS += -j $(JOBS) -l $(JOBS) + +# Set optimal parallel build settings +MAKEFLAGS += -j$(JOBS) -l$(shell echo $$(($(JOBS) * 2))) # $(info Number of jobs: $(JOBS)) @@ -72,16 +74,21 @@ DEFAULTS = -DEMSESP_DEFAULT_LOCALE=\"en\" -DEMSESP_DEFAULT_TX_MODE=8 -DEMSESP_DE OUTPUT := $(CURDIR)/$(TARGET) SYMBOLS := $(CURDIR)/$(BUILD)/$(TARGET).out -CSOURCES := $(foreach dir,$(SOURCES),$(wildcard $(dir)/*.c)) -CXXSOURCES := $(foreach dir,$(SOURCES),$(wildcard $(dir)/*.cpp)) +# Optimize source discovery - use shell find for better performance +CSOURCES := $(shell find $(SOURCES) -name "*.c" 2>/dev/null) +CXXSOURCES := $(shell find $(SOURCES) -name "*.cpp" 2>/dev/null) -OBJS := $(patsubst %,$(BUILD)/%.o,$(basename $(CSOURCES)) $(basename $(CXXSOURCES)) ) -DEPS := $(patsubst %,$(BUILD)/%.d,$(basename $(CSOURCES)) $(basename $(CXXSOURCES)) ) +OBJS := $(patsubst %,$(BUILD)/%.o,$(basename $(CSOURCES)) $(basename $(CXXSOURCES))) +DEPS := $(patsubst %,$(BUILD)/%.d,$(basename $(CSOURCES)) $(basename $(CXXSOURCES))) -INCLUDE += $(addprefix -I,$(foreach dir,$(INCLUDES), $(wildcard $(dir)))) -INCLUDE += $(addprefix -I,$(foreach dir,$(LIBRARIES),$(wildcard $(dir)/include))) +# Optimize include path discovery +INCLUDE_DIRS := $(shell find $(INCLUDES) -type d 2>/dev/null) +LIBRARY_INCLUDES := $(shell find $(LIBRARIES) -name "include" -type d 2>/dev/null) +INCLUDE += $(addprefix -I,$(INCLUDE_DIRS) $(LIBRARY_INCLUDES)) -LDLIBS += $(addprefix -L,$(foreach dir,$(LIBRARIES),$(wildcard $(dir)/lib))) +# Optimize library path discovery +LIBRARY_DIRS := $(shell find $(LIBRARIES) -name "lib" -type d 2>/dev/null) +LDLIBS += $(addprefix -L,$(LIBRARY_DIRS)) #---------------------------------------------------------------------- # Compiler & Linker @@ -99,9 +106,11 @@ CXX := /usr/bin/g++ #---------------------------------------------------------------------- CPPFLAGS += $(DEFINES) $(DEFAULTS) $(INCLUDE) CPPFLAGS += -ggdb -g3 -MMD -CPPFLAGS += -flto=auto -fno-lto +CPPFLAGS += -flto=auto CPPFLAGS += -Wall -Wextra -Werror -Wswitch-enum CPPFLAGS += -Wno-unused-parameter -Wno-missing-braces -Wno-vla-cxx-extension +CPPFLAGS += -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-threadsafe-statics +CPPFLAGS += -Os -DNDEBUG CPPFLAGS += $(EXTRA_CPPFLAGS) @@ -122,7 +131,8 @@ else LD := $(CXX) endif -#DEPFLAGS += -MF $(BUILD)/$*.d +# Dependency file generation +DEPFLAGS += -MF $(BUILD)/$*.d -MT $@ LINK.o = $(LD) $(LDFLAGS) $(LDLIBS) $^ -o $@ COMPILE.c = $(CC) $(C_STANDARD) $(CFLAGS) $(DEPFLAGS) -c $< -o $@ @@ -139,7 +149,10 @@ COMPILE.cpp = $(CXX) $(CXX_STANDARD) $(CXXFLAGS) $(DEPFLAGS) -c $< -o $@ .SUFFIXES: .INTERMEDIATE: .PRECIOUS: $(OBJS) $(DEPS) -.PHONY: all clean help +.PHONY: all clean help cppcheck run + +# Enable second expansion for more flexible rules +.SECONDEXPANSION: #---------------------------------------------------------------------- # Targets @@ -154,7 +167,6 @@ $(OUTPUT): $(OBJS) @mkdir -p $(@D) @$(ECHO) Linking $@ $(LINK.o) - $(SYMBOLS.out) $(BUILD)/%.o: %.c @mkdir -p $(@D) @@ -182,8 +194,15 @@ clean: @$(RM) -rf $(BUILD) $(OUTPUT) help: - @echo available targets: all run clean - @echo $(OUTPUT) + @echo "Available targets:" + @echo " all - Build the project (default)" + @echo " run - Build and run the executable" + @echo " clean - Remove build artifacts" + @echo " cppcheck - Run static analysis" + @echo " help - Show this help message" + @echo "" + @echo "Output: $(OUTPUT)" + @echo "Jobs: $(JOBS)" -include $(DEPS) diff --git a/interface/src/CustomTheme.tsx b/interface/src/CustomTheme.tsx index 850a95119..223e55ba7 100644 --- a/interface/src/CustomTheme.tsx +++ b/interface/src/CustomTheme.tsx @@ -1,7 +1,12 @@ import { memo } from 'react'; import type { FC } from 'react'; -import { CssBaseline, ThemeProvider, responsiveFontSizes } from '@mui/material'; +import { + CssBaseline, + ThemeProvider, + responsiveFontSizes, + tooltipClasses +} from '@mui/material'; import { createTheme } from '@mui/material/styles'; import type { RequiredChildrenProps } from 'utils'; @@ -44,6 +49,24 @@ const theme = responsiveFontSizes( color: '#9e9e9e' // grey[500] } } + }, + MuiTooltip: { + defaultProps: { + placement: 'top', + arrow: true + }, + styleOverrides: { + tooltip: { + padding: '4px 8px', + fontSize: 10, + color: 'rgba(0, 0, 0, 0.87)', + backgroundColor: '#4caf50', // MUI success.main default color + boxShadow: '0px 2px 8px rgba(0, 0, 0, 0.15)', + [`& .${tooltipClasses.arrow}`]: { + color: '#4caf50' + } + } + } } } }) diff --git a/interface/src/app/main/CustomEntities.tsx b/interface/src/app/main/CustomEntities.tsx index 26e66041f..9c36ad394 100644 --- a/interface/src/app/main/CustomEntities.tsx +++ b/interface/src/app/main/CustomEntities.tsx @@ -327,7 +327,7 @@ const CustomEntities = () => { /> )} - + {numChanges > 0 && ( diff --git a/interface/src/app/main/Dashboard.tsx b/interface/src/app/main/Dashboard.tsx index fa318bbac..cf44a86c2 100644 --- a/interface/src/app/main/Dashboard.tsx +++ b/interface/src/app/main/Dashboard.tsx @@ -14,6 +14,7 @@ import { IconButton, ToggleButton, ToggleButtonGroup, + Tooltip, Typography } from '@mui/material'; @@ -284,37 +285,44 @@ const Dashboard = memo(() => { {data.nodes.length > 0 && ( <> - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + { const renderCoreData = () => ( <> - + { divider={} sx={{ borderRadius: 3, - border: '2px solid grey', + border: '1px solid lightblue', justifyContent: 'space-evenly', alignItems: 'center' }} @@ -99,7 +99,7 @@ const Help = () => { )} {me.admin && ( - + { /> )} - + {numChanges !== 0 && ( diff --git a/interface/src/app/main/Sensors.tsx b/interface/src/app/main/Sensors.tsx index c8a37fd91..1f8c13a04 100644 --- a/interface/src/app/main/Sensors.tsx +++ b/interface/src/app/main/Sensors.tsx @@ -105,8 +105,6 @@ const Sensors = () => { color: #90CAF9; .th { border-bottom: 1px solid #565656; - } - .th { height: 36px; } `, @@ -491,7 +489,7 @@ const Sensors = () => { /> )} {sensorData?.analog_enabled === true && me.admin && ( - + - + ); - - return {content()}; }; export default Settings; diff --git a/interface/src/app/status/Status.tsx b/interface/src/app/status/Status.tsx index 286901424..bb1f0b76c 100644 --- a/interface/src/app/status/Status.tsx +++ b/interface/src/app/status/Status.tsx @@ -253,7 +253,7 @@ const SystemStatus = () => { return ( <> - + ( - -))(({ theme }) => ({ - [`& .${tooltipClasses.arrow}`]: { - color: theme.palette.success.main - }, - [`& .${tooltipClasses.tooltip}`]: { - backgroundColor: theme.palette.success.main, - color: 'rgba(0, 0, 0, 0.87)', - boxShadow: theme.shadows[1], - fontSize: 10 - } -})); +export const ButtonTooltip = ({ children, ...props }: TooltipProps) => ( + {children} +); export default ButtonTooltip; diff --git a/interface/src/components/SectionContent.tsx b/interface/src/components/SectionContent.tsx index 3dcc56c27..97615bbc4 100644 --- a/interface/src/components/SectionContent.tsx +++ b/interface/src/components/SectionContent.tsx @@ -1,30 +1,20 @@ import type { FC } from 'react'; -import { Divider, Paper } from '@mui/material'; +import { Paper } from '@mui/material'; import type { RequiredChildrenProps } from 'utils'; interface SectionContentProps extends RequiredChildrenProps { - title?: string; id?: string; } const SectionContent: FC = (props) => { - const { children, title, id } = props; + const { children, id } = props; return ( - - {title && ( - - {title} - - )} + {children} );