Skip to content

Commit 8b92847

Browse files
authored
Merge pull request #244 from chrisws/12_29
12 29
2 parents 298a1d4 + 6094d3a commit 8b92847

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

81 files changed

+4148
-1302
lines changed

CMakeLists.txt

Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
1+
# SmallBASIC
2+
# Copyright(C) 2025 Chris Warren-Smith.
3+
#
4+
# This program is distributed under the terms of the GPL v2.0 or later
5+
# Download the GNU Public License (GPL) from www.gnu.org
6+
#
7+
8+
set(VERSION "12.29")
9+
cmake_minimum_required(VERSION 3.10)
10+
project(SmallBASIC VERSION ${VERSION} LANGUAGES C CXX)
11+
12+
set(CMAKE_CXX_STANDARD 14)
13+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
14+
15+
# cmake -DWITH_DEBUG=ON
16+
option(WITH_DEBUG "Enable debug build" OFF)
17+
18+
function(writeConfig)
19+
execute_process(
20+
COMMAND date +"%a, %d %b %Y"
21+
OUTPUT_VARIABLE BUILD_DATE
22+
OUTPUT_STRIP_TRAILING_WHITESPACE
23+
)
24+
set(BUILD_DATE "${BUILD_DATE}")
25+
26+
execute_process(
27+
COMMAND bash -c "awk -F '.' '{printf \"0x%02d%02d%02d\", \$1, \$2, \$3}' <<< \"${VERSION}\""
28+
OUTPUT_VARIABLE SB_DWORD_VER
29+
OUTPUT_STRIP_TRAILING_WHITESPACE
30+
)
31+
set(SB_DWORD_VER "${SB_DWORD_VER}")
32+
33+
configure_file(
34+
${CMAKE_SOURCE_DIR}/ide/config.h.in
35+
${CMAKE_BINARY_DIR}/config.h
36+
)
37+
endfunction()
38+
39+
function(checkDebugMode)
40+
if(WITH_DEBUG)
41+
set(SANITIZER_FLAGS "-fstack-protector-all -fno-omit-frame-pointer -fsanitize=address,undefined")
42+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SANITIZER_FLAGS}")
43+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZER_FLAGS}")
44+
message(STATUS "Debug mode enabled via --with-debug")
45+
endif()
46+
endfunction()
47+
48+
function(buildSDL)
49+
# Initialize variables
50+
set(TARGET "Building SDL version.")
51+
set(PACKAGE_CFLAGS "")
52+
set(PACKAGE_LIBS "")
53+
54+
# check dependencies using pkg-config
55+
find_package(SDL3 REQUIRED)
56+
find_package(PkgConfig REQUIRED)
57+
58+
pkg_check_modules(SDL3 REQUIRED sdl3)
59+
include_directories(${SDL3_INCLUDE_DIRS})
60+
add_compile_options(${SDL3_CFLAGS_OTHER})
61+
62+
pkg_check_modules(FREETYPE2 REQUIRED freetype2)
63+
include_directories(${FREETYPE2_INCLUDE_DIRS})
64+
add_compile_options(${FREETYPE2_CFLAGS_OTHER})
65+
66+
# check for xxd command
67+
find_program(XXD_EXECUTABLE xxd)
68+
if(NOT XXD_EXECUTABLE)
69+
message(FATAL_ERROR "xxd command not installed: configure failed.")
70+
endif()
71+
72+
# platform-specific configurations
73+
if(WIN32)
74+
set(PACKAGE_CFLAGS "${PACKAGE_CFLAGS} -D__USE_MINGW_ANSI_STDIO")
75+
add_compile_definitions(_USE_MATH_DEFINES)
76+
add_compile_definitions(_Win32)
77+
set(PACKAGE_LIBS "${PACKAGE_LIBS} -lwsock32 -lws2_32 -static-libgcc -static-libstdc++")
78+
elseif(APPLE)
79+
pkg_check_modules(FONTCONFIG REQUIRED fontconfig>=2.2)
80+
set(PACKAGE_CFLAGS "${PACKAGE_CFLAGS} ${FONTCONFIG_CFLAGS}")
81+
set(PACKAGE_LIBS "${PACKAGE_LIBS} -ldl ${FONTCONFIG_LIBS}")
82+
else()
83+
pkg_check_modules(FONTCONFIG REQUIRED fontconfig>=2.2)
84+
include_directories(${FONTCONFIG_INCLUDE_DIRS})
85+
add_compile_options(${FONTCONFIG_CFLAGS_OTHER})
86+
execute_process(
87+
COMMAND ${XXD_EXECUTABLE} -i images/sb-desktop-128x128.png
88+
OUTPUT_FILE ${CMAKE_BINARY_DIR}/src/platform/sdl/icon.h
89+
)
90+
endif()
91+
92+
# Set compiler flags
93+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${PACKAGE_CFLAGS}")
94+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti -std=c++14")
95+
96+
# Define SDL version
97+
execute_process(
98+
COMMAND pkg-config --modversion sdl3
99+
OUTPUT_VARIABLE _SDL_VERSION
100+
OUTPUT_STRIP_TRAILING_WHITESPACE
101+
)
102+
103+
# message("SDL version: ${_SDL_VERSION}")
104+
set(BUILD_DATE `date +"%a, %d %b %Y"`)
105+
set(_SDL_VERSION ${_SDL_VERSION})
106+
set(_SDL ON)
107+
set(_UnixOS ON)
108+
set(IMPL_DEV_READ ON)
109+
set(IMPL_LOG_WRITE ON)
110+
111+
# Process assets
112+
execute_process(
113+
COMMAND ${XXD_EXECUTABLE} -i src/platform/android/app/src/main/assets/main.bas
114+
OUTPUT_FILE ${CMAKE_BINARY_DIR}/src/platform/sdl/main_bas.h
115+
)
116+
writeConfig()
117+
endfunction()
118+
119+
message("generating kwp.h")
120+
execute_process(
121+
COMMAND bash -c "(cd ../documentation && g++ -o build_kwp build_kwp.cpp && ./build_kwp > ../src/ui/kwp.h)"
122+
)
123+
124+
checkDebugMode()
125+
buildSDL()
126+
127+
set(COMMON_DIR ${CMAKE_SOURCE_DIR}/src/common)
128+
set(LIB_DIR ${CMAKE_SOURCE_DIR}/src/lib)
129+
set(UI_DIR ${CMAKE_SOURCE_DIR}/src/ui)
130+
set(SDL_DIR ${CMAKE_SOURCE_DIR}/src/platform/sdl)
131+
132+
set(SOURCES
133+
${LIB_DIR}/match.c
134+
${LIB_DIR}/str.c
135+
${LIB_DIR}/matrix.c
136+
${LIB_DIR}/xpm.c
137+
${LIB_DIR}/lodepng/lodepng.cpp
138+
${COMMON_DIR}/bc.c
139+
${COMMON_DIR}/blib.c
140+
${COMMON_DIR}/blib_func.c
141+
${COMMON_DIR}/blib_math.c
142+
${COMMON_DIR}/brun.c
143+
${COMMON_DIR}/ceval.c
144+
${COMMON_DIR}/random.c
145+
${COMMON_DIR}/eval.c
146+
${COMMON_DIR}/plugins.c
147+
${COMMON_DIR}/fmt.c
148+
${COMMON_DIR}/kw.c
149+
${COMMON_DIR}/proc.c
150+
${COMMON_DIR}/sberr.c
151+
${COMMON_DIR}/scan.c
152+
${COMMON_DIR}/str.c
153+
${COMMON_DIR}/tasks.c
154+
${COMMON_DIR}/hashmap.c
155+
${COMMON_DIR}/var_map.c
156+
${COMMON_DIR}/var_eval.c
157+
${COMMON_DIR}/keymap.c
158+
${COMMON_DIR}/units.c
159+
${COMMON_DIR}/var.c
160+
${COMMON_DIR}/device.c
161+
${COMMON_DIR}/blib_db.c
162+
${COMMON_DIR}/blib_graph.c
163+
${COMMON_DIR}/blib_sound.c
164+
${COMMON_DIR}/screen.c
165+
${COMMON_DIR}/system.c
166+
${COMMON_DIR}/random.c
167+
${COMMON_DIR}/eval.c
168+
${COMMON_DIR}/file.c
169+
${COMMON_DIR}/ffill.c
170+
${COMMON_DIR}/fs_serial.c
171+
${COMMON_DIR}/fs_socket_client.c
172+
${COMMON_DIR}/fs_stream.c
173+
${COMMON_DIR}/g_line.c
174+
${COMMON_DIR}/geom.c
175+
${COMMON_DIR}/inet2.c
176+
${COMMON_DIR}/pfill.c
177+
${COMMON_DIR}/plot.c
178+
${UI_DIR}/graphics.cpp
179+
${UI_DIR}/ansiwidget.cpp
180+
${UI_DIR}/window.cpp
181+
${UI_DIR}/screen.cpp
182+
${UI_DIR}/system.cpp
183+
${UI_DIR}/form.cpp
184+
${UI_DIR}/inputs.cpp
185+
${UI_DIR}/textedit.cpp
186+
${UI_DIR}/keypad.cpp
187+
${UI_DIR}/image.cpp
188+
${UI_DIR}/image_codec.cpp
189+
${UI_DIR}/strlib.cpp
190+
${UI_DIR}/audio.cpp
191+
${SDL_DIR}/main.cpp
192+
${SDL_DIR}/display.cpp
193+
${SDL_DIR}/runtime.cpp
194+
${SDL_DIR}/settings.cpp
195+
${SDL_DIR}/editor.cpp
196+
${SDL_DIR}/syswm.cpp
197+
)
198+
199+
include_directories(
200+
${SDL3_INCLUDE_DIRS}
201+
${CMAKE_SOURCE_DIR}/src
202+
${CMAKE_BINARY_DIR}
203+
)
204+
205+
add_executable(sbasicg ${SOURCES})
206+
207+
target_link_libraries(sbasicg ${SDL3_LIBRARIES} m)
208+
target_link_libraries(sbasicg ${FREETYPE2_LIBRARIES})
209+
target_link_libraries(sbasicg ${FONTCONFIG_LIBRARIES})

ChangeLog

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
2025-04-26 (12.29)
2+
ANDROID: minor fix for PEN(3)
3+
4+
2025-04-19 (12.29)
5+
ANDROID: experimental bluetooth support
6+
ANDROID: update SOUND implementation to avoid skips
7+
ANDROID: update USB api to allow setting baud rate and timeout
8+
ANDROID: allow android.speak to take additional non-string args
9+
110
2025-02-18 (12.28)
211
ANDROID: added experimental usb communication support
312

configure.ac

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
dnl
22
dnl Configure script for SmallBASIC
33
dnl
4-
dnl Copyright(C) 2001-2020 Chris Warren-Smith.
4+
dnl Copyright(C) 2001-2025 Chris Warren-Smith.
55
dnl
66
dnl This program is distributed under the terms of the GPL v2.0
77
dnl Download the GNU Public License (GPL) from www.gnu.org
88
dnl
99

10-
AC_INIT([smallbasic], [12.28])
10+
AC_INIT([smallbasic], [12.29])
1111
AC_CONFIG_SRCDIR([configure.ac])
1212

1313
AC_CANONICAL_TARGET
@@ -81,8 +81,10 @@ function checkDebugMode() {
8181
AC_MSG_RESULT([$with_debug])
8282
if test "$with_debug" = "yes" || test "$with_debug" = "full"
8383
then
84-
CFLAGS="${CFLAGS} -g -O0 -fstack-protector-all"
85-
CXXFLAGS="${CXXFLAGS} -g -O0 -fstack-protector-all"
84+
DEBUG_FLAGS="-g -O1 -fstack-protector-all -fno-omit-frame-pointer"
85+
#-fsanitize=address,undefined"
86+
CFLAGS="${DEBUG_FLAGS}"
87+
CXXFLAGS="${DEBUG_FLAGS}"
8688
AC_DEFINE(_DEBUG, 1, [debugging build enabled])
8789
fi
8890
AC_SUBST(CFLAGS)
@@ -170,10 +172,7 @@ function buildSDL() {
170172
TARGET="Building SDL version."
171173
defaultConditionals
172174

173-
AC_CHECK_PROG(have_sdl, sdl2-config, [yes], [no])
174-
if test "${have_sdl}" = "no" ; then
175-
AC_MSG_ERROR([libsdl2-dev not installed: configure failed.])
176-
fi
175+
PKG_CHECK_MODULES([SDL3], [sdl3])
177176

178177
SAVED_CPPFLAGS="$CPPFLAGS"
179178
CPPFLAGS="$CPPFLAGS `pkg-config freetype2 --cflags`"
@@ -197,7 +196,7 @@ function buildSDL() {
197196
PACKAGE_CFLAGS="${PACKAGE_CFLAGS} -mms-bitfields"
198197
PACKAGE_LIBS="${PACKAGE_LIBS} -lwsock32 -lws2_32 -static-libgcc -static-libstdc++"
199198
PACKAGE_LIBS="${PACKAGE_LIBS} -Wl,-Bstatic -Wl,-Map=output.map"
200-
PACKAGE_LIBS="${PACKAGE_LIBS} `sdl2-config --static-libs` `pkg-config freetype2 --libs --static`"
199+
PACKAGE_LIBS="${PACKAGE_LIBS} ${SDL3_LIBS} `pkg-config freetype2 --libs --static`"
201200
AC_DEFINE(_Win32, 1, [Windows build])
202201
;;
203202

@@ -212,7 +211,7 @@ function buildSDL() {
212211
dnl backlinking support for modules
213212
PACKAGE_LIBS="${PACKAGE_LIBS} -ldl"
214213
PACKAGE_LIBS="${PACKAGE_LIBS} ${FONTCONFIG_LIBS}"
215-
PACKAGE_LIBS="${PACKAGE_LIBS} `sdl2-config --libs` `pkg-config freetype2 --libs`"
214+
PACKAGE_LIBS="${PACKAGE_LIBS} ${SDL3_LIBS} `pkg-config freetype2 --libs`"
216215
;;
217216

218217
*)
@@ -225,32 +224,25 @@ function buildSDL() {
225224

226225
(cd images && xxd -i sb-desktop-128x128.png > ../src/platform/sdl/icon.h)
227226

228-
HAVE_SDL2_STATIC=yes
229-
AC_MSG_CHECKING([if installed SDL2 supports static libs])
230-
AC_PATH_PROGS_FEATURE_CHECK([SDL2_STATIC_TMP], [sdl2-config],
231-
AS_IF([`"$ac_path_SDL2_STATIC_TMP" --static-libs 2>&1 | sed '/Usage/!{q1};' > /dev/null`], [HAVE_SDL2_STATIC=no]))
232-
AC_MSG_RESULT([$HAVE_SDL2_STATIC])
233-
234-
if test "x$HAVE_SDL2_STATIC" = "xno"; then
235-
SDL_LIBS=`sdl2-config --libs`
236-
else
237-
SDL_LIBS=`sdl2-config --static-libs`
238-
fi
227+
AC_MSG_CHECKING([for SDL3 library linking])
228+
SDL3_LIBS=`pkg-config sdl3 --libs --static`
229+
AC_MSG_RESULT([$SDL3_LIBS])
239230

240231
dnl backlinking support for modules
241232
PACKAGE_LIBS="${PACKAGE_LIBS} -ldl -no-pie"
242233
PACKAGE_LIBS="${PACKAGE_LIBS} ${FONTCONFIG_LIBS}"
243-
244-
PACKAGE_LIBS="-static-libgcc ${PACKAGE_LIBS} ${SDL_LIBS} `pkg-config freetype2 --libs`"
234+
PACKAGE_LIBS="-static-libgcc ${PACKAGE_LIBS} ${SDL3_LIBS} `pkg-config freetype2 --libs`"
245235
esac
246236

247-
PACKAGE_CFLAGS="${PACKAGE_CFLAGS} `sdl2-config --cflags` `pkg-config freetype2 --cflags` -fno-exceptions"
237+
SDL3_CFLAGS=`pkg-config sdl3 --cflags`
238+
PACKAGE_CFLAGS="${PACKAGE_CFLAGS} ${SDL3_CFLAGS} `pkg-config freetype2 --cflags` -fno-exceptions"
248239
CXXFLAGS="${CXXFLAGS} -fno-rtti -std=c++14"
249240

250241
dnl preconfigured values for SDL build
251-
AC_DEFINE_UNQUOTED([_SDL_VERSION], ["`sdl2-config --version` "], [SDL library version])
242+
SDL3_VERSION=`pkg-config sdl3 --modversion`
243+
AC_DEFINE_UNQUOTED([_SDL_VERSION], ["${SDL3_VERSION} "], [SDL library version])
252244
AC_DEFINE(_SDL, 1, [Defined when building SDL version])
253-
AC_DEFINE(_UnixOS, 1, [Building under Unix like systems.])
245+
AC_DEFINE(_UnixOS, 1, [Building under Unix-like systems.])
254246
AC_DEFINE(IMPL_DEV_READ, 1, [Implement dev_read()])
255247
AC_DEFINE(IMPL_LOG_WRITE, 1, [Driver implements lwrite()])
256248

@@ -529,8 +521,8 @@ echo "PACKAGE_LIBS=${PACKAGE_LIBS}"
529521

530522
if test x$ac_build_sdl = xyes; then
531523
echo
532-
echo "sdl2: `sdl2-config --version`"
533-
echo "freetype: `pkg-config --version freetype2`"
524+
echo "sdl3: `pkg-config sdl3 --modversion`"
525+
echo "freetype: `pkg-config freetype2 --modversion`"
534526
fi
535527

536528
echo

documentation/build_kwp.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@ int main(int argc, char *argv[]) {
245245
}
246246

247247
fprintf(stdout, "/* automagicaly generated file */\n");
248+
fprintf(stdout, "#pragma once\n");
248249
fprintf(stdout, "static struct KEYWORD_HELP {\n");
249250
fprintf(stdout, " const char *package;\n");
250251
fprintf(stdout, " const char *keyword;\n");

0 commit comments

Comments
 (0)