diff --git a/ch32v003fun/ch32v003fun.mk b/ch32v003fun/ch32v003fun.mk index 0f74ac4ea9e4da5b2e127c888196f21fdd7a493f..11ac26b518d9dfec73946a0c842a8e0898a13789 100644 --- a/ch32v003fun/ch32v003fun.mk +++ b/ch32v003fun/ch32v003fun.mk @@ -14,7 +14,7 @@ CFLAGS+= \ -nostdlib \ -I. -Wall -LDFLAGS+=-T $(CH32V003FUN)/ch32v003fun.ld -Wl,--gc-sections -L../../misc -lgcc +LDFLAGS+=-T $(CH32V003FUN)/ch32v003fun.ld -Wl,--gc-sections -L$(CH32V003FUN)/../misc -lgcc SYSTEM_C:=$(CH32V003FUN)/ch32v003fun.c diff --git a/minichlink/Makefile b/minichlink/Makefile index e90cca96cf0b361db14d32b2c54619de2e217ac6..5f83f33eca92fea8fee101dc1b456bda18659721 100644 --- a/minichlink/Makefile +++ b/minichlink/Makefile @@ -38,7 +38,7 @@ minichlink.so : $(C_S) gcc -o $@ $^ $(LDFLAGS) $(CFLAGS) $(INCS) -shared -fPIC minichlink.dll : $(C_S) - x86_64-w64-mingw32-gcc -o $@ $^ $(LDFLAGS) $(CFLAGS) $(INCS) -shared + x86_64-w64-mingw32-gcc -o $@ $^ $(LDFLAGS) $(CFLAGS) $(INCS) -shared -DMINICHLINK_AS_LIBRARY install_udev_rules : cp 99-WCH-LinkE.rules /etc/udev/rules.d/ diff --git a/minichlink/minichlink.c b/minichlink/minichlink.c index d64b844c9295bb38c07cff46acc6bdd8368caea9..c4d2dd8f08fbc28ca0b80c86f436163b9675aa9d 100644 --- a/minichlink/minichlink.c +++ b/minichlink/minichlink.c @@ -11,14 +11,14 @@ #include "minichlink.h" #include "../ch32v003fun/ch32v003fun.h" -static int64_t StringToMemoryAddress( const char * number ); -static void StaticUpdatePROGBUFRegs( void * dev ); -static int InternalUnlockBootloader( void * dev ); +static int64_t StringToMemoryAddress( const char * number ) __attribute__((used)); +static void StaticUpdatePROGBUFRegs( void * dev ) __attribute__((used)); +static int InternalUnlockBootloader( void * dev ) __attribute__((used)); void TestFunction(void * v ); struct MiniChlinkFunctions MCF; -int main( int argc, char ** argv ) +void * MiniCHLinkInitAsDLL( struct MiniChlinkFunctions ** MCFO ) { void * dev = 0; if( (dev = TryInit_WCHLinkE()) ) @@ -34,6 +34,24 @@ int main( int argc, char ** argv ) fprintf( stderr, "Found NHC-Link042 Programmer\n" ); } else + { + fprintf( stderr, "Error: Could not initialize any supported programmers\n" ); + return 0; + } + + SetupAutomaticHighLevelFunctions( dev ); + if( MCFO ) + { + *MCFO = &MCF; + } + return dev; +} + +#if !defined( MINICHLINK_AS_LIBRARY ) && !defined( MINICHLINK_IMPORT ) +int main( int argc, char ** argv ) +{ + void * dev = MiniCHLinkInitAsDLL( 0 ); + if( !dev ) { fprintf( stderr, "Error: Could not initialize any supported programmers\n" ); return -32; @@ -516,7 +534,7 @@ unimplemented: fprintf( stderr, "Error: Command '%s' unimplemented on this programmer.\n", lastcommand ); return -1; } - +#endif #if defined(WINDOWS) || defined(WIN32) || defined(_WIN32) #define strtoll _strtoi64 diff --git a/minichlink/minichlink.exe b/minichlink/minichlink.exe index eda0a5a992c0971a374653f4e5e505ddabd6859f..e9436b78095303f977b4ba748ec43a27adeefb5c 100644 Binary files a/minichlink/minichlink.exe and b/minichlink/minichlink.exe differ diff --git a/minichlink/minichlink.h b/minichlink/minichlink.h index 4bbd18aa65b91d659d4e633e72a3fd296acdc293..0462984284cef827728f2e2631ce0745fef5280e 100644 --- a/minichlink/minichlink.h +++ b/minichlink/minichlink.h @@ -130,8 +130,22 @@ struct InternalState #define DMCFGR 0x7D #define DMSHDWCFGR 0x7E +#if defined( WIN32 ) || defined( _WIN32 ) +#if defined( MINICHLINK_AS_LIBRARY ) + #define DLLDECORATE __declspec(dllexport) +#elif defined( MINICHLINK_IMPORT ) + #define DLLDECORATE __declspec(dllimport) +#else + #define DLLDECORATE +#endif +#else + #define DLLDECORATE +#endif + +void * MiniCHLinkInitAsDLL(struct MiniChlinkFunctions ** MCFO) DLLDECORATE; extern struct MiniChlinkFunctions MCF; + // Returns 'dev' on success, else 0. void * TryInit_WCHLinkE(); void * TryInit_ESP32S2CHFUN();